From: scantor Date: Tue, 8 Mar 2011 03:59:12 +0000 (+0000) Subject: Bump version, add plugins ext library, draft of GSS-API attribute support. X-Git-Tag: moonshot-old~20 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fsp.git;a=commitdiff_plain;h=016a71e5517b7b4cf68ec3d46c97e37bba2f32b8 Bump version, add plugins ext library, draft of GSS-API attribute support. git-svn-id: https://svn.shibboleth.net/cpp-sp/branches/REL_2@3412 cb58f699-b61c-0410-a6fe-9272a202ed29 --- diff --git a/.cproject b/.cproject index f8838ca..c063486 100644 --- a/.cproject +++ b/.cproject @@ -10,6 +10,7 @@ + @@ -18,29 +19,11 @@ - - - - - - - - - - - - - - - - - - - + @@ -60,9 +43,10 @@ + - + @@ -93,9 +77,10 @@ - + + @@ -521,432 +506,7 @@ - - - make - - all - true - true - false - - - make - - all-local - true - true - false - - - make - - am--refresh - true - true - false - - - make - - check - true - true - false - - - make - - clean - true - true - false - - - make - - clean-libtool - true - true - false - - - make - - config.h - true - true - false - - - make - - ctags - true - true - false - - - make - - ctags-recursive - true - true - false - - - make - - dist - true - true - false - - - make - - dist-all - true - true - false - - - make - - dist-bzip2 - true - true - false - - - make - - dist-gzip - true - true - false - - - make - - dist-hook - true - true - false - - - make - - dist-shar - true - true - false - - - make - - dist-tarZ - true - true - false - - - make - - dist-zip - true - true - false - - - make - - distcheck - true - true - false - - - make - - distclean - true - true - false - - - make - - distclean-hdr - true - true - false - - - make - - distclean-libtool - true - true - false - - - make - - distclean-tags - true - true - false - - - make - - distcleancheck - true - true - false - - - make - - distdir - true - true - false - - - make - - distuninstallcheck - true - true - false - - - make - - dvi - true - true - false - - - make - - html - true - true - false - - - make - - info - true - true - false - - - make - - install - true - true - false - - - make - - install-data - true - true - false - - - make - - install-dvi - true - true - false - - - make - - install-exec - true - true - false - - - make - - install-html - true - true - false - - - make - - install-info - true - true - false - - - make - - install-man - true - true - false - - - make - - install-pdf - true - true - false - - - make - - install-ps - true - true - false - - - make - - install-strip - true - true - false - - - make - - installcheck - true - true - false - - - make - - installdirs - true - true - false - - - make - - maintainer-clean - true - true - false - - - make - - Makefile - true - true - false - - - make - - mostlyclean - true - true - false - - - make - - mostlyclean-libtool - true - true - false - - - make - - pdf - true - true - false - - - make - - pkginfo - true - true - false - - - make - - Portfile - true - true - false - - - make - - ps - true - true - false - - - make - - shibboleth.spec - true - true - false - - - make - - stamp-h1 - true - true - false - - - make - - tags - true - true - false - - - make - - tags-recursive - true - true - false - - - make - - uninstall - true - true - false - - + diff --git a/.project b/.project index 0579a7a..3ee0ad3 100644 --- a/.project +++ b/.project @@ -8,11 +8,65 @@ - org.eclipse.linuxtools.cdt.autotools.genmakebuilder + org.eclipse.linuxtools.cdt.autotools.core.genmakebuilderV2 + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?children? + ?name?=outputEntries\|?children?=?name?=entry\\\\\\\|\\\|\|| + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.buildArguments + -k + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + /Users/scantor/Documents/workspace/2.0/cpp-sp/build + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder diff --git a/Makefile.am b/Makefile.am index ef1c791..cc2eee8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -9,7 +9,21 @@ WANT_SUBDIRS = @WANT_SUBDIRS@ SUBDIRS = $(WANT_SUBDIRS) -DIST_SUBDIRS = doc schemas configs shibsp shibd adfs util apache nsapi_shib fastcgi odbc-store memcache-store selinux +DIST_SUBDIRS = \ + doc \ + schemas \ + configs \ + shibsp \ + shibd \ + adfs \ + plugins \ + util \ + apache \ + nsapi_shib \ + fastcgi \ + odbc-store \ + memcache-store \ + selinux if DX_COND_doc all-local: doxygen-doc diff --git a/adfs/adfs.rc b/adfs/adfs.rc index 18346fa..97e87d1 100644 --- a/adfs/adfs.rc +++ b/adfs/adfs.rc @@ -54,8 +54,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,4,2,0 - PRODUCTVERSION 2,4,2,0 + FILEVERSION 2,5,0,0 + PRODUCTVERSION 2,5,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -73,7 +73,7 @@ BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Internet2\0" VALUE "FileDescription", "Shibboleth ADFSv1 Plugin\0" - VALUE "FileVersion", "2, 4, 2, 0\0" + VALUE "FileVersion", "2, 5, 0, 0\0" #ifdef SHIBSP_LITE VALUE "InternalName", "adfs-lite\0" #else @@ -87,8 +87,8 @@ BEGIN VALUE "OriginalFilename", "adfs.so\0" #endif VALUE "PrivateBuild", "\0" - VALUE "ProductName", "Shibboleth 2.4.2\0" - VALUE "ProductVersion", "2, 4, 2, 0\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" VALUE "SpecialBuild", "\0" END END diff --git a/apache/mod_shib_13.rc b/apache/mod_shib_13.rc index ea88567..52140ef 100644 --- a/apache/mod_shib_13.rc +++ b/apache/mod_shib_13.rc @@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,4,2,0 - PRODUCTVERSION 2,4,2,0 + FILEVERSION 2,5,0,0 + PRODUCTVERSION 2,5,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -47,14 +47,14 @@ BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Internet2\0" VALUE "FileDescription", "Shibboleth Apache 1.3 Module\0" - VALUE "FileVersion", "2, 4, 2, 0\0" + VALUE "FileVersion", "2, 5, 0, 0\0" VALUE "InternalName", "mod_shib_13\0" VALUE "LegalCopyright", "Copyright © 2011 Internet2\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "mod_shib_13.so\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "Shibboleth 2.4.2\0" - VALUE "ProductVersion", "2, 4, 2, 0\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" VALUE "SpecialBuild", "\0" END END diff --git a/apache/mod_shib_20.rc b/apache/mod_shib_20.rc index 831823b..90449c2 100644 --- a/apache/mod_shib_20.rc +++ b/apache/mod_shib_20.rc @@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,4,2,0 - PRODUCTVERSION 2,4,2,0 + FILEVERSION 2,5,0,0 + PRODUCTVERSION 2,5,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -47,14 +47,14 @@ BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Internet2\0" VALUE "FileDescription", "Shibboleth Apache 2.0 Module\0" - VALUE "FileVersion", "2, 4, 2, 0\0" + VALUE "FileVersion", "2, 5, 0, 0\0" VALUE "InternalName", "mod_shib_20\0" VALUE "LegalCopyright", "Copyright © 2011 Internet2\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "mod_shib_20.so\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "Shibboleth 2.4.2\0" - VALUE "ProductVersion", "2, 4, 2, 0\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" VALUE "SpecialBuild", "\0" END END diff --git a/apache/mod_shib_22.rc b/apache/mod_shib_22.rc index af878e4..974b093 100644 --- a/apache/mod_shib_22.rc +++ b/apache/mod_shib_22.rc @@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,4,2,0 - PRODUCTVERSION 2,4,2,0 + FILEVERSION 2,5,0,0 + PRODUCTVERSION 2,5,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -47,14 +47,14 @@ BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Internet2\0" VALUE "FileDescription", "Shibboleth Apache 2.2 Module\0" - VALUE "FileVersion", "2, 4, 2, 0\0" + VALUE "FileVersion", "2, 5, 0, 0\0" VALUE "InternalName", "mod_shib_22\0" VALUE "LegalCopyright", "Copyright © 2011 Internet2\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "mod_shib_22.so\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "Shibboleth 2.4.2\0" - VALUE "ProductVersion", "2, 4, 2, 0\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" VALUE "SpecialBuild", "\0" END END diff --git a/config_win32.h b/config_win32.h index 71b5711..3533c9f 100644 --- a/config_win32.h +++ b/config_win32.h @@ -112,13 +112,13 @@ #define PACKAGE_NAME "shibboleth" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "shibboleth 2.4.2" +#define PACKAGE_STRING "shibboleth 2.5" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "shibboleth" /* Define to the version of this package. */ -#define PACKAGE_VERSION "2.4.2" +#define PACKAGE_VERSION "2.5" /* Define to the necessary symbol if this constant uses a non-standard name on your system. */ @@ -131,7 +131,7 @@ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ -#define VERSION "2.4.2" +#define VERSION "2.5" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ diff --git a/configure.ac b/configure.ac index 318fca0..be3a599 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.50]) -AC_INIT([shibboleth],[2.4.2],[https://bugs.internet2.edu/],[shibboleth]) +AC_INIT([shibboleth],[2.5],[https://bugs.internet2.edu/],[shibboleth]) AC_CONFIG_SRCDIR(shibsp) AC_CONFIG_AUX_DIR(build-aux) AC_CONFIG_MACRO_DIR(m4) @@ -372,10 +372,10 @@ AC_SUBST(LITE_LIBS) AC_SUBST(XMLSEC_LIBS) # output the underlying makefiles -WANT_SUBDIRS="doc schemas configs shibsp shibd util" +WANT_SUBDIRS="doc schemas configs shibsp plugins shibd util" AC_CONFIG_FILES([Makefile doc/Makefile schemas/Makefile \ - configs/Makefile shibsp/Makefile shibd/Makefile \ - util/Makefile selinux/Makefile]) + configs/Makefile shibsp/Makefile plugins/Makefile \ + shibd/Makefile util/Makefile selinux/Makefile]) ## ADFS? AC_CONFIG_FILES([adfs/Makefile]) @@ -1083,6 +1083,14 @@ if test x"$want_gss" = xyes; then LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR" LIBS="$LIBS -lgssapi" fi + + AC_MSG_CHECKING([whether GSS-API naming extensions are available]) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[gss_get_name_attribute(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);]])], + [AC_MSG_RESULT([yes])AC_DEFINE([HAVE_GSSAPI_NAMINGEXTS],[1],[Define to 1 if GSS-API naming extensions are available.])], + [AC_MSG_RESULT([no])]) + else CPPFLAGS="$save_CPPFLAGS" fi diff --git a/fastcgi/shibauthorizer.rc b/fastcgi/shibauthorizer.rc index e19ccd4..f072534 100644 --- a/fastcgi/shibauthorizer.rc +++ b/fastcgi/shibauthorizer.rc @@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,4,2,0 - PRODUCTVERSION 2,4,2,0 + FILEVERSION 2,5,0,0 + PRODUCTVERSION 2,5,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -47,14 +47,14 @@ BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Internet2\0" VALUE "FileDescription", "Shibboleth FastCGI Authorizer\0" - VALUE "FileVersion", "2, 4, 2, 0\0" + VALUE "FileVersion", "2, 5, 0, 0\0" VALUE "InternalName", "shibauthorizer\0" VALUE "LegalCopyright", "Copyright © 2011 Internet2\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "shibauthorizer.exe\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "Shibboleth 2.4.2\0" - VALUE "ProductVersion", "2, 4, 2, 0\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" VALUE "SpecialBuild", "\0" END END diff --git a/fastcgi/shibresponder.rc b/fastcgi/shibresponder.rc index cdc6c4e..8ce2569 100644 --- a/fastcgi/shibresponder.rc +++ b/fastcgi/shibresponder.rc @@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,4,2,0 - PRODUCTVERSION 2,4,2,0 + FILEVERSION 2,5,0,0 + PRODUCTVERSION 2,5,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -47,14 +47,14 @@ BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Internet2\0" VALUE "FileDescription", "Shibboleth FastCGI Responder\0" - VALUE "FileVersion", "2, 4, 2, 0\0" + VALUE "FileVersion", "2, 5, 0, 0\0" VALUE "InternalName", "shibresponder\0" VALUE "LegalCopyright", "Copyright © 2011 Internet2\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "shibresponder.exe\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "Shibboleth 2.4.2\0" - VALUE "ProductVersion", "2, 4, 2, 0\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" VALUE "SpecialBuild", "\0" END END diff --git a/isapi_shib/isapi_shib.rc b/isapi_shib/isapi_shib.rc index 786879d..bc63480 100644 --- a/isapi_shib/isapi_shib.rc +++ b/isapi_shib/isapi_shib.rc @@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,4,2,0 - PRODUCTVERSION 2,4,2,0 + FILEVERSION 2,5,0,0 + PRODUCTVERSION 2,5,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -47,14 +47,14 @@ BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Internet2\0" VALUE "FileDescription", "Shibboleth ISAPI Filter / Extension\0" - VALUE "FileVersion", "2, 4, 2, 0\0" + VALUE "FileVersion", "2, 5, 0, 0\0" VALUE "InternalName", "isapi_shib\0" VALUE "LegalCopyright", "Copyright © 2011 Internet2\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "isapi_shib.dll\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "Shibboleth 2.4.2\0" - VALUE "ProductVersion", "2, 4, 2, 0\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" VALUE "SpecialBuild", "\0" END END diff --git a/memcache-store/memcache-store.rc b/memcache-store/memcache-store.rc index 7319285..e0d9c12 100644 --- a/memcache-store/memcache-store.rc +++ b/memcache-store/memcache-store.rc @@ -53,8 +53,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,4,2,0 - PRODUCTVERSION 2,4,2,0 + FILEVERSION 2,5,0,0 + PRODUCTVERSION 2,5,0,0 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -71,12 +71,12 @@ BEGIN BEGIN VALUE "CompanyName", "Internet2\0" VALUE "FileDescription", "Shibboleth Memcache Storage Service Plugin\0" - VALUE "FileVersion", "2, 4, 2, 0\0" + VALUE "FileVersion", "2, 5, 0, 0\0" VALUE "InternalName", "memcache-store\0" VALUE "LegalCopyright", "Copyright © 2011 Internet2\0" VALUE "OriginalFilename", "memcache-store.so\0" - VALUE "ProductName", "Shibboleth 2.4.2\0" - VALUE "ProductVersion", "2, 4, 2, 0\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" END END BLOCK "VarFileInfo" diff --git a/nsapi_shib/nsapi_shib.rc b/nsapi_shib/nsapi_shib.rc index 22cc7a7..97e0cc9 100644 --- a/nsapi_shib/nsapi_shib.rc +++ b/nsapi_shib/nsapi_shib.rc @@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,4,2,0 - PRODUCTVERSION 2,4,2,0 + FILEVERSION 2,5,0,0 + PRODUCTVERSION 2,5,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -47,14 +47,14 @@ BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Internet2\0" VALUE "FileDescription", "Shibboleth NSAPI Extension\0" - VALUE "FileVersion", "2, 4, 2, 0\0" + VALUE "FileVersion", "2, 5, 0, 0\0" VALUE "InternalName", "nsapi_shib\0" VALUE "LegalCopyright", "Copyright © 2011 Internet2\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "nsapi_shib.dll\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "Shibboleth 2.4.2\0" - VALUE "ProductVersion", "2, 4, 2, 0\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" VALUE "SpecialBuild", "\0" END END diff --git a/odbc-store/odbc-store.rc b/odbc-store/odbc-store.rc index e12a849..fdda5c0 100644 --- a/odbc-store/odbc-store.rc +++ b/odbc-store/odbc-store.rc @@ -53,8 +53,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,4,2,0 - PRODUCTVERSION 2,4,2,0 + FILEVERSION 2,5,0,0 + PRODUCTVERSION 2,5,0,0 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -71,12 +71,12 @@ BEGIN BEGIN VALUE "CompanyName", "Internet2\0" VALUE "FileDescription", "Shibboleth ODBC Storage Service Plugin\0" - VALUE "FileVersion", "2, 4, 2, 0\0" + VALUE "FileVersion", "2, 5, 0, 0\0" VALUE "InternalName", "odbc-store\0" VALUE "LegalCopyright", "Copyright © 2011 Internet2\0" VALUE "OriginalFilename", "odbc-store.so\0" - VALUE "ProductName", "Shibboleth 2.4.2\0" - VALUE "ProductVersion", "2, 4, 2, 0\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" END END BLOCK "VarFileInfo" diff --git a/plugins/GSSAPIAttributeExtractor.cpp b/plugins/GSSAPIAttributeExtractor.cpp new file mode 100644 index 0000000..44aaa12 --- /dev/null +++ b/plugins/GSSAPIAttributeExtractor.cpp @@ -0,0 +1,385 @@ +/* + * Copyright 2011 JANET(UK) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * GSSAPIAttributeExtractor.cpp + * + * AttributeExtractor for a base64-encoded GSS-API context. + */ + +#include "internal.h" + +#ifdef HAVE_GSSAPI_NAMINGEXTS + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace shibsp; +using namespace opensaml::saml2md; +using namespace opensaml; +using namespace xmltooling; +using namespace std; + +namespace shibsp { + +#if defined (_MSC_VER) + #pragma warning( push ) + #pragma warning( disable : 4250 ) +#endif + + class GSSAPIExtractorImpl + { + public: + GSSAPIExtractorImpl(const DOMElement* e, Category& log); + ~GSSAPIExtractorImpl() { + if (m_document) + m_document->release(); + } + + void setDocument(DOMDocument* doc) { + m_document = doc; + } + + void extractAttributes( + gss_name_t initiatorName, gss_buffer_t namingAttribute, vector& attributes + ) const; + + void getAttributeIds(vector& attributes) const { + attributes.insert(attributes.end(), m_attributeIds.begin(), m_attributeIds.end()); + } + + private: + struct Rule { + Rule() : authenticated(true), scopeDelimiter(0) {} + vector ids; + bool authenticated; + char scopeDelimiter; + }; + + Category& m_log; + DOMDocument* m_document; + map m_attrMap; + vector m_attributeIds; + }; + + class GSSAPIExtractor : public AttributeExtractor, public ReloadableXMLFile + { + public: + GSSAPIExtractor(const DOMElement* e) + : ReloadableXMLFile(e, Category::getInstance(SHIBSP_LOGCAT".AttributeExtractor.GSSAPI")), m_impl(nullptr) { + background_load(); + } + ~GSSAPIExtractor() { + shutdown(); + delete m_impl; + } + + void extractAttributes( + const Application& application, + const RoleDescriptor* issuer, + const XMLObject& xmlObject, + vector& attributes + ) const; + + void getAttributeIds(std::vector& attributes) const { + if (m_impl) + m_impl->getAttributeIds(attributes); + } + + protected: + pair background_load(); + + private: + GSSAPIExtractorImpl* m_impl; + }; + +#if defined (_MSC_VER) + #pragma warning( pop ) +#endif + + AttributeExtractor* GSSAPIAttributeExtractorFactory(const DOMElement* const & e) + { + return new GSSAPIExtractor(e); + } + + static const XMLCh _aliases[] = UNICODE_LITERAL_7(a,l,i,a,s,e,s); + static const XMLCh Attributes[] = UNICODE_LITERAL_10(A,t,t,r,i,b,u,t,e,s); + static const XMLCh _authenticated[] = UNICODE_LITERAL_13(a,u,t,h,e,n,t,i,c,a,t,e,d); + static const XMLCh GSSAPIAttribute[] = UNICODE_LITERAL_15(G,S,S,A,P,I,A,t,t,r,i,b,u,t,e); + static const XMLCh _id[] = UNICODE_LITERAL_2(i,d); + static const XMLCh _name[] = UNICODE_LITERAL_4(n,a,m,e); + static const XMLCh _scopeDelimiter[] = UNICODE_LITERAL_14(s,c,o,p,e,D,e,l,i,m,i,t,e,r); +}; + +GSSAPIExtractorImpl::GSSAPIExtractorImpl(const DOMElement* e, Category& log) + : m_log(log), m_document(nullptr) +{ +#ifdef _DEBUG + xmltooling::NDC ndc("GSSAPIExtractorImpl"); +#endif + + if (!XMLHelper::isNodeNamed(e, shibspconstants::SHIB2ATTRIBUTEMAP_NS, Attributes)) + throw ConfigurationException("GSSAPI AttributeExtractor requires am:Attributes at root of configuration."); + + DOMElement* child = XMLHelper::getFirstChildElement(e, shibspconstants::SHIB2ATTRIBUTEMAP_NS, GSSAPIAttribute); + while (child) { + // Check for missing name or id. + const XMLCh* name = child->getAttributeNS(nullptr, _name); + if (!name || !*name) { + m_log.warn("skipping GSSAPIAttribute with no name"); + child = XMLHelper::getNextSiblingElement(child, shibspconstants::SHIB2ATTRIBUTEMAP_NS, GSSAPIAttribute); + continue; + } + + auto_ptr_char id(child->getAttributeNS(nullptr, _id)); + if (!id.get() || !*id.get()) { + m_log.warn("skipping GSSAPIAttribute with no id"); + child = XMLHelper::getNextSiblingElement(child, shibspconstants::SHIB2ATTRIBUTEMAP_NS, GSSAPIAttribute); + continue; + } + else if (!strcmp(id.get(), "REMOTE_USER")) { + m_log.warn("skipping GSSAPIAttribute, id of REMOTE_USER is a reserved name"); + child = XMLHelper::getNextSiblingElement(child, shibspconstants::SHIB2ATTRIBUTEMAP_NS, GSSAPIAttribute); + continue; + } + + // Fetch/create the map entry and see if it's a duplicate rule. + auto_ptr_char attrname(name); + Rule& decl = m_attrMap[attrname.get()]; + if (!decl.ids.empty()) { + m_log.warn("skipping duplicate GSS-API Attribute mapping (same name)"); + child = XMLHelper::getNextSiblingElement(child, shibspconstants::SHIB2ATTRIBUTEMAP_NS, GSSAPIAttribute); + continue; + } + + m_log.info("creating mapping for GSS-API Attribute %s", attrname.get()); + + decl.ids.push_back(id.get()); + m_attributeIds.push_back(id.get()); + + name = child->getAttributeNS(nullptr, _aliases); + if (name && *name) { + auto_ptr_char aliases(name); + char* pos; + char* start = const_cast(aliases.get()); + while (start && *start) { + while (*start && isspace(*start)) + start++; + if (!*start) + break; + pos = strchr(start,' '); + if (pos) + *pos=0; + if (strcmp(start, "REMOTE_USER")) { + decl.ids.push_back(start); + m_attributeIds.push_back(start); + } + else { + m_log.warn("skipping alias, REMOTE_USER is a reserved name"); + } + start = pos ? pos+1 : nullptr; + } + } + + decl.authenticated = XMLHelper::getAttrBool(child, true, _authenticated); + string delim = XMLHelper::getAttrString(child, "", _scopeDelimiter); + if (!delim.empty()) + decl.scopeDelimiter = delim[0]; + + child = XMLHelper::getNextSiblingElement(child, shibspconstants::SHIB2ATTRIBUTEMAP_NS, GSSAPIAttribute); + } +} + +void GSSAPIExtractorImpl::extractAttributes( + gss_name_t initiatorName, gss_buffer_t namingAttribute, vector& attributes + ) const +{ + // First we have to determine if this GSS attribute is something we recognize. + string attrname(reinterpret_cast(namingAttribute->value), namingAttribute->length); + map::const_iterator rule = m_attrMap.find(attrname); + if (rule == m_attrMap.end()) { + m_log.info("skipping unmapped GSS-API attribute: %s", attrname.c_str()); + return; + } + + vector values; + + OM_uint32 major,minor; + int authenticated=-1,more=-1; + do { + gss_buffer_desc buf = GSS_C_EMPTY_BUFFER; + major = gss_get_name_attribute( + &minor, initiatorName, namingAttribute, &authenticated, nullptr, &buf, nullptr, &more + ); + if (major == GSS_S_COMPLETE) { + if (rule->second.authenticated && !authenticated) { + m_log.warn("skipping unauthenticated GSS-API attribute: %s", attrname.c_str()); + gss_release_buffer(&minor, &buf); + return; + } + if (buf.length) + values.push_back(string(reinterpret_cast(buf.value), buf.length)); + gss_release_buffer(&minor, &buf); + } + else { + m_log.warn("error obtaining values for GSS-API attribute (%s): %u:%u", attrname.c_str(), major, minor); + } + } while (major == GSS_S_COMPLETE && more); + + if (values.empty()) + return; + + if (rule->second.scopeDelimiter) { + auto_ptr scoped(new ScopedAttribute(rule->second.ids, rule->second.scopeDelimiter)); + vector< pair >& dest = scoped->getValues(); + for (vector::const_iterator v = values.begin(); v != values.end(); ++v) { + const char* value = v->c_str(); + const char* scope = strchr(value, rule->second.scopeDelimiter); + if (scope) { + if (*(scope+1)) + dest.push_back(pair(v->substr(0, scope-value), scope + 1)); + else + m_log.warn("ignoring unscoped value"); + } + else { + m_log.warn("ignoring unscoped value"); + } + } + if (!scoped->getValues().empty()) + attributes.push_back(scoped.release()); + } + else { + // If unscoped, just copy over the values. + auto_ptr simple(new SimpleAttribute(rule->second.ids)); + simple->getValues() = values; + attributes.push_back(simple.release()); + } +} + +void GSSAPIExtractor::extractAttributes( + const Application& application, const RoleDescriptor* issuer, const XMLObject& xmlObject, vector& attributes + ) const +{ + if (!m_impl) + return; + + static const XMLCh _GSSAPI[] = UNICODE_LITERAL_6(G,S,S,A,P,I); + if (!XMLString::equals(xmlObject.getElementQName().getLocalPart(), _GSSAPI)) { + m_log.debug("unable to extract attributes, unknown XML object type: %s", xmlObject.getElementQName().toString().c_str()); + return; + } + + const XMLCh* encodedWide = xmlObject.getTextContent(); + if (!encodedWide || !*encodedWide) { + m_log.warn("unable to extract attributes, GSSAPI element had no text content"); + return; + } + + gss_ctx_id_t gss = GSS_C_NO_CONTEXT; + + xsecsize_t x; + OM_uint32 major,minor; + auto_ptr_char encoded(encodedWide); + XMLByte* decoded=Base64::decode(reinterpret_cast(encoded.get()), &x); + if (decoded) { + gss_buffer_desc importbuf; + importbuf.length = x; + importbuf.value = decoded; + major = gss_import_sec_context(&minor, &importbuf, &gss); + if (major != GSS_S_COMPLETE) { + m_log.warn("unable to extract attributes, GSS context import failed (%u:%u)", major, minor); + gss = GSS_C_NO_CONTEXT; + } +#ifdef SHIBSP_XERCESC_HAS_XMLBYTE_RELEASE + XMLString::release(&decoded); +#else + XMLString::release((char**)&decoded); +#endif + } + else { + m_log.warn("unable to extract attributes, base64 decode of GSSAPI context failed"); + } + + if (gss == GSS_C_NO_CONTEXT) { + return; + } + // Extract the initiator name from the context. + gss_name_t srcname; + major = gss_inquire_context(&minor, gss, &srcname, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); + if (major == GSS_S_COMPLETE) { + + gss_buffer_set_t attrnames = GSS_C_NO_BUFFER_SET; + major = gss_inquire_name(&minor, srcname, nullptr, nullptr, &attrnames); + if (major == GSS_S_COMPLETE) { + for (size_t i = 0; i < attrnames->count; ++i) { + m_impl->extractAttributes(srcname, &attrnames->elements[i], attributes); + } + gss_release_buffer_set(&minor, &attrnames); + } + else { + m_log.warn("unable to extract attributes, GSS name attribute inquiry failed (%u:%u)", major, minor); + } + gss_release_name(&minor, &srcname); + } + else { + m_log.warn("unable to extract attributes, GSS initiator name extraction failed (%u:%u)", major, minor); + } + + gss_delete_sec_context(&minor, &gss, GSS_C_NO_BUFFER); +} + +pair GSSAPIExtractor::background_load() +{ + // Load from source using base class. + pair raw = ReloadableXMLFile::load(); + + // If we own it, wrap it. + XercesJanitor docjanitor(raw.first ? raw.second->getOwnerDocument() : nullptr); + + GSSAPIExtractorImpl* impl = new GSSAPIExtractorImpl(raw.second, m_log); + + // If we held the document, transfer it to the impl. If we didn't, it's a no-op. + impl->setDocument(docjanitor.release()); + + // Perform the swap inside a lock. + if (m_lock) + m_lock->wrlock(); + SharedLock locker(m_lock, false); + delete m_impl; + m_impl = impl; + + return make_pair(false,(DOMElement*)nullptr); +} + +#endif diff --git a/plugins/Makefile.am b/plugins/Makefile.am new file mode 100644 index 0000000..ab08e71 --- /dev/null +++ b/plugins/Makefile.am @@ -0,0 +1,32 @@ +AUTOMAKE_OPTIONS = foreign + +plugindir = $(libdir)/@PACKAGE@ +plugin_LTLIBRARIES = plugins.la + +noinst_HEADERS = \ + internal.h + +common_sources = \ + plugins.cpp + +plugins_la_SOURCES = \ + ${common_sources} \ + GSSAPIAttributeExtractor.cpp + +#plugins_lite_la_SOURCES = \ +# ${common_sources} + +plugins_la_LIBADD = $(XMLSEC_LIBS) \ + $(top_builddir)/shibsp/libshibsp.la + +#plugins_lite_la_LIBADD = $(LITE_LIBS) \ +# $(top_builddir)/shibsp/libshibsp-lite.la + +plugins_la_LDFLAGS = -module -avoid-version +#plugins_lite_la_LDFLAGS = -module -avoid-version +#plugins_lite_la_CPPFLAGS = -DSHIBSP_LITE + +install-exec-hook: + for la in $(plugin_LTLIBRARIES) ; do rm -f $(DESTDIR)$(plugindir)/$$la ; done + +EXTRA_DIST = plugins.vcxproj resource.h plugins.rc diff --git a/plugins/internal.h b/plugins/internal.h new file mode 100644 index 0000000..d6bb096 --- /dev/null +++ b/plugins/internal.h @@ -0,0 +1,44 @@ +/* + * Copyright 2011 Internet2 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * internal.h - internally visible declarations + */ + +#ifndef __plugins_internal_h__ +#define __plugins_internal_h__ + +#ifdef WIN32 +# define _CRT_SECURE_NO_DEPRECATE 1 +# define _CRT_NONSTDC_NO_DEPRECATE 1 +#endif + +// eventually we might be able to support autoconf via cygwin... +#if defined (_MSC_VER) || defined(__BORLANDC__) +# include "config_win32.h" +#else +# include "config.h" +#endif + +#include + +#include +#include + +using namespace xmltooling::logging; +using namespace xercesc; + +#endif /* __plugins_internal_h__ */ diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp new file mode 100644 index 0000000..a845cfb --- /dev/null +++ b/plugins/plugins.cpp @@ -0,0 +1,53 @@ +/* + * Copyright 2011 Internet2 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * plugins.cpp + * + * Extension plugins for Shibboleth SP. + */ + +#include "internal.h" +#include + +using namespace shibsp; +using namespace xmltooling; +using namespace std; + +#ifdef WIN32 +# define PLUGINS_EXPORTS __declspec(dllexport) +#else +# define PLUGINS_EXPORTS +#endif + +namespace shibsp { +#ifdef HAVE_GSSAPI_NAMINGEXTS + PluginManager::Factory GSSAPIExtractorFactory; +#endif +}; + +extern "C" int PLUGINS_EXPORTS xmltooling_extension_init(void*) +{ +#ifdef HAVE_GSSAPI_NAMINGEXTS + SPConfig::getConfig().AttributeExtractorManager.registerFactory("GSSAPI", GSSAPIExtractorFactory); +#endif + return 0; // signal success +} + +extern "C" void PLUGINS_EXPORTS xmltooling_extension_term() +{ + // Factories normally get unregistered during library shutdown, so no work usually required here. +} diff --git a/plugins/plugins.rc b/plugins/plugins.rc new file mode 100644 index 0000000..57cded7 --- /dev/null +++ b/plugins/plugins.rc @@ -0,0 +1,117 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 2,5,0,0 + PRODUCTVERSION 2,5,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "\0" + VALUE "CompanyName", "Internet2\0" + VALUE "FileDescription", "Shibboleth SP Plugins\0" + VALUE "FileVersion", "2, 5, 0, 0\0" +#ifdef SHIBSP_LITE + VALUE "InternalName", "plugins-lite\0" +#else + VALUE "InternalName", "plugins\0" +#endif + VALUE "LegalCopyright", "Copyright © 2011 Internet2\0" + VALUE "LegalTrademarks", "\0" +#ifdef SHIBSP_LITE + VALUE "OriginalFilename", "plugins-lite.so\0" +#else + VALUE "OriginalFilename", "plugins.so\0" +#endif + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/plugins/resource.h b/plugins/resource.h new file mode 100644 index 0000000..9ceeb95 --- /dev/null +++ b/plugins/resource.h @@ -0,0 +1,15 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by plugins.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/schemas/shibboleth-2.0-attribute-map.xsd b/schemas/shibboleth-2.0-attribute-map.xsd index d119da3..b40a8dd 100644 --- a/schemas/shibboleth-2.0-attribute-map.xsd +++ b/schemas/shibboleth-2.0-attribute-map.xsd @@ -4,7 +4,7 @@ xmlns:am="urn:mace:shibboleth:2.0:attribute-map" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified" - version="2.3"> + version="2.5"> @@ -40,14 +40,17 @@ - The set of SAML 1/2 attribute mappings. + The set of SAML or GSS-API attribute mappings. - + + + + @@ -56,7 +59,7 @@ - Rule for mapping a SAML 1/2 attribute to an internal attribute. + Rule for mapping a SAML attribute to an internal attribute. @@ -92,6 +95,39 @@ + + + + Rule for mapping a GSS-API naming attribute to an internal attribute. + + + + The internal attribute ID to which this SAML attribute maps. + + + + + Optional aliases for the internal attribute to which this SAML attribute maps. + + + + + The SAML 1 AttributeName or SAML 2 Name of the attribute. + + + + + If true, only an authenticated GSS-API naming attribute will be mapped. + + + + + + The character(s) used to delimit the scoped information from the scope. + + + + diff --git a/shibd/shibd.rc b/shibd/shibd.rc index 6e51922..822415b 100644 --- a/shibd/shibd.rc +++ b/shibd/shibd.rc @@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,4,2,0 - PRODUCTVERSION 2,4,2,0 + FILEVERSION 2,5,0,0 + PRODUCTVERSION 2,5,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -47,14 +47,14 @@ BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Internet2\0" VALUE "FileDescription", "Shibboleth Daemon Service\0" - VALUE "FileVersion", "2, 4, 2, 0\0" + VALUE "FileVersion", "2, 5, 0, 0\0" VALUE "InternalName", "shibd\0" VALUE "LegalCopyright", "Copyright © 2011 Internet2\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "shibd.exe\0" VALUE "PrivateBuild", "\0" - VALUE "ProductName", "Shibboleth 2.4.2\0" - VALUE "ProductVersion", "2, 4, 2, 0\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" VALUE "SpecialBuild", "\0" END END diff --git a/shibsp/Makefile.am b/shibsp/Makefile.am index 4bd9dbe..539ea30 100644 --- a/shibsp/Makefile.am +++ b/shibsp/Makefile.am @@ -217,9 +217,9 @@ libshibsp_la_SOURCES = \ # this is different from the project version # http://sources.redhat.com/autobook/autobook/autobook_91.html -libshibsp_la_LDFLAGS = -version-info 5:2:0 +libshibsp_la_LDFLAGS = -version-info 5:3:0 libshibsp_la_LIBADD = $(XMLSEC_LIBS) -libshibsp_lite_la_LDFLAGS = -version-info 5:2:0 +libshibsp_lite_la_LDFLAGS = -version-info 5:3:0 libshibsp_lite_la_LIBADD = $(LITE_LIBS) libshibsp_lite_la_CPPFLAGS = -DSHIBSP_LITE diff --git a/shibsp/shibsp.rc b/shibsp/shibsp.rc index e2ea857..d336a70 100644 --- a/shibsp/shibsp.rc +++ b/shibsp/shibsp.rc @@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,4,2,0 - PRODUCTVERSION 2,4,2,0 + FILEVERSION 1,4,3,0 + PRODUCTVERSION 2,5,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -51,7 +51,7 @@ BEGIN #else VALUE "FileDescription", "Shibboleth SP Library\0" #endif - VALUE "FileVersion", "1, 4, 2, 0\0" + VALUE "FileVersion", "1, 4, 3, 0\0" #ifdef SHIBSP_LITE #ifdef _DEBUG VALUE "InternalName", "shibsp-lite1_4D\0" @@ -81,8 +81,8 @@ BEGIN #endif #endif VALUE "PrivateBuild", "\0" - VALUE "ProductName", "Shibboleth 2.4.2\0" - VALUE "ProductVersion", "2, 4, 2, 0\0" + VALUE "ProductName", "Shibboleth 2.5\0" + VALUE "ProductVersion", "2, 5, 0, 0\0" VALUE "SpecialBuild", "\0" END END diff --git a/shibsp/version.h b/shibsp/version.h index d56aebf..4394e9c 100644 --- a/shibsp/version.h +++ b/shibsp/version.h @@ -39,7 +39,7 @@ #define SHIBSP_VERSION_MAJOR 1 #define SHIBSP_VERSION_MINOR 4 -#define SHIBSP_VERSION_REVISION 2 +#define SHIBSP_VERSION_REVISION 3 /** DO NOT MODIFY BELOW THIS LINE */