Option to enable SSPCPP-437
[shibboleth/cpp-sp.git] / shibsp / SPConfig.cpp
index 189ea3c..6206236 100644 (file)
@@ -79,6 +79,7 @@
 using namespace shibsp;
 using namespace opensaml;
 using namespace xmltooling;
+using namespace boost;
 using namespace std;
 
 DECL_XMLTOOLING_EXCEPTION_FACTORY(AttributeException,shibsp);
@@ -101,15 +102,15 @@ namespace shibsp {
     class SHIBSP_DLLLOCAL SPInternalConfig : public SPConfig
     {
     public:
-        SPInternalConfig();
-        ~SPInternalConfig();
+        SPInternalConfig() : m_initCount(0), m_lock(Mutex::create()) {}
+        ~SPInternalConfig() {}
 
         bool init(const char* catalog_path=nullptr, const char* inst_prefix=nullptr);
         void term();
 
     private:
         int m_initCount;
-        Mutex* m_lock;
+        scoped_ptr<Mutex> m_lock;
     };
     
     SPInternalConfig g_config;
@@ -197,12 +198,6 @@ bool SPConfig::init(const char* catalog_path, const char* inst_prefix)
     Category& log=Category::getInstance(SHIBSP_LOGCAT".Config");
     log.debug("%s library initialization started", PACKAGE_STRING);
 
-    if (!catalog_path)
-        catalog_path = getenv("SHIBSP_SCHEMAS");
-    if (!catalog_path)
-        catalog_path = SHIBSP_SCHEMAS;
-    XMLToolingConfig::getConfig().catalog_path = catalog_path;
-
 #ifndef SHIBSP_LITE
     XMLToolingConfig::getConfig().user_agent = string(PACKAGE_NAME) + '/' + PACKAGE_VERSION +
         " OpenSAML/" + gOpenSAMLDotVersionStr +
@@ -232,6 +227,14 @@ bool SPConfig::init(const char* catalog_path, const char* inst_prefix)
         return false;
     }
 #endif
+    if (!catalog_path)
+        catalog_path = getenv("SHIBSP_SCHEMAS");
+    if (!catalog_path)
+        catalog_path = SHIBSP_SCHEMAS;
+    if (!XMLToolingConfig::getConfig().getValidatingParser().loadCatalogs(catalog_path)) {
+        log.warn("failed to load schema catalogs into validating parser");
+    }
+
     PathResolver* pr = XMLToolingConfig::getConfig().getPathResolver();
     pr->setDefaultPackageName(PACKAGE_NAME);
     pr->setDefaultPrefix(inst_prefix2.c_str());
@@ -441,15 +444,6 @@ bool SPConfig::instantiate(const char* config, bool rethrow)
     return false;
 }
 
-SPInternalConfig::SPInternalConfig() : m_initCount(0), m_lock(Mutex::create())
-{
-}
-
-SPInternalConfig::~SPInternalConfig()
-{
-    delete m_lock;
-}
-
 bool SPInternalConfig::init(const char* catalog_path, const char* inst_prefix)
 {
 #ifdef _DEBUG