Path resolution for error templates.
authorcantor <cantor@cb58f699-b61c-0410-a6fe-9272a202ed29>
Wed, 30 Jan 2008 22:14:39 +0000 (22:14 +0000)
committercantor <cantor@cb58f699-b61c-0410-a6fe-9272a202ed29>
Wed, 30 Jan 2008 22:14:39 +0000 (22:14 +0000)
Add prefix parameter and config support to various modules.
Pull defaulted settings from Apache config.

git-svn-id: https://svn.middleware.georgetown.edu/cpp-sp/trunk@2714 cb58f699-b61c-0410-a6fe-9272a202ed29

19 files changed:
apache/mod_apache.cpp
configs/Makefile.am
configs/apache.config.in
configs/apache2.config.in
configs/apache22.config.in
fastcgi/shibauthorizer.cpp
fastcgi/shibresponder.cpp
isapi_shib/isapi_shib.cpp
msi/scripts/shib_edit_config_files.vbs
nsapi_shib/nsapi_shib.cpp
shibd/shibd.cpp
shibd/shibd_win32.cpp
shibsp/SPConfig.cpp
shibsp/SPConfig.h
shibsp/ServiceProvider.cpp
shibsp/base.h
shibsp/handler/impl/LogoutHandler.cpp
shibsp/internal.h
shibsp/paths.h.in

index 9ba9f9c..11a8106 100644 (file)
@@ -85,8 +85,9 @@ using xercesc::XMLException;
 extern "C" module MODULE_VAR_EXPORT mod_shib;
 
 namespace {
-    char* g_szSHIBConfig = SHIBSP_CONFIG;
-    char* g_szSchemaDir = SHIBSP_SCHEMAS;
+    char* g_szSHIBConfig = NULL;
+    char* g_szSchemaDir = NULL;
+    char* g_szPrefix = NULL;
     SPConfig* g_Config = NULL;
     string g_unsetHeaderValue;
     bool g_checkSpoofing = true;
@@ -1262,12 +1263,17 @@ extern "C" void shib_child_init(apr_pool_t* p, server_rec* s)
         SPConfig::Logging |
         SPConfig::Handlers
         );
-    if (!g_Config->init(g_szSchemaDir)) {
+    if (!g_Config->init(g_szSchemaDir, g_szPrefix)) {
         ap_log_error(APLOG_MARK,APLOG_CRIT|APLOG_NOERRNO,SH_AP_R(s),"shib_child_init() failed to initialize libraries");
         exit(1);
     }
     g_Config->AccessControlManager.registerFactory(HT_ACCESS_CONTROL,&htAccessFactory);
     g_Config->RequestMapperManager.registerFactory(NATIVE_REQUEST_MAPPER,&ApacheRequestMapFactory);
+
+    if (!g_szSHIBConfig)
+        g_szSHIBConfig=getenv("SHIBSP_CONFIG");
+    if (!g_szSHIBConfig)
+        g_szSHIBConfig=SHIBSP_CONFIG;
     
     try {
         xercesc::DOMDocument* dummydoc=XMLToolingConfig::getConfig().getParser().newDocument();
@@ -1369,6 +1375,8 @@ typedef const char* (*config_fn_t)(void);
 // SHIB Module commands
 
 static command_rec shire_cmds[] = {
+  {"ShibPrefix", (config_fn_t)ap_set_global_string_slot, &g_szPrefix,
+   RSRC_CONF, TAKE1, "Shibboleth installation directory"},
   {"ShibConfig", (config_fn_t)ap_set_global_string_slot, &g_szSHIBConfig,
    RSRC_CONF, TAKE1, "Path to shibboleth.xml config file"},
   {"ShibCatalogs", (config_fn_t)ap_set_global_string_slot, &g_szSchemaDir,
@@ -1473,6 +1481,8 @@ extern "C" void shib_register_hooks (apr_pool_t *p)
 
 extern "C" {
 static command_rec shib_cmds[] = {
+    AP_INIT_TAKE1("ShibPrefix", (config_fn_t)ap_set_global_string_slot, &g_szPrefix,
+        RSRC_CONF, "Shibboleth installation directory"),
     AP_INIT_TAKE1("ShibConfig", (config_fn_t)ap_set_global_string_slot, &g_szSHIBConfig,
         RSRC_CONF, "Path to shibboleth.xml config file"),
     AP_INIT_TAKE1("ShibCatalogs", (config_fn_t)ap_set_global_string_slot, &g_szSchemaDir,
index affbfee..afb642d 100644 (file)
@@ -55,8 +55,6 @@ do-build-file:
         -e 's:@-PKGSYSCONFDIR-@:${pkgsysconfdir}:g' \
         -e 's:@-PKGDOCDIR-@:${pkgdocdir}:g' \
         -e 's:@-PKGXMLDIR-@:${pkgxmldir}:g' \
-        -e 's:@-XMLTOOLINGXMLDIR-@:${XMLTOOLINGXMLDIR}:g' \
-        -e 's:@-OPENSAMLXMLDIR-@:${OPENSAMLXMLDIR}:g' \
         -e 's:@-PKGLOGDIR-@:${pkglogdir}:g' \
         -e 's:@-SHIRELOGDIR-@:${shirelogdir}:g' \
         -e 's:@-PKGRUNDIR-@:${pkgrundir}:g'
index ce3422e..bce4a7e 100644 (file)
 LoadModule mod_shib @-PKGLIBDIR-@/mod_shib_13.so
 
 #
-# Global Configuration
-# This is the XML file that contains all the global, non-apache-specific
-# configuration.  Look at this file for most of your configuration parameters.
-#
-ShibSchemaDir @-XMLTOOLINGXMLDIR-@/catalog.xml:@-OPENSAMLXMLDIR-@/saml20-catalog.xml:@-OPENSAMLXMLDIR-@/saml11-catalog.xml:@-PKGXMLDIR-@/catalog.xml
-ShibConfig @-PKGSYSCONFDIR-@/shibboleth2.xml
-
-#
 # An Apache handler needs to be established for the "handler" location.
 # This applies the handler to any requests for a resource with a ".sso"
 # extension.
index 0fade4b..7ea0bb7 100644 (file)
 LoadModule mod_shib @-PKGLIBDIR-@/mod_shib_20.so
 
 #
-# Global Configuration
-# This is the XML file that contains all the global, non-apache-specific
-# configuration.  Look at this file for most of your configuration parameters.
-#
-ShibSchemaDir @-XMLTOOLINGXMLDIR-@/catalog.xml:@-OPENSAMLXMLDIR-@/saml20-catalog.xml:@-OPENSAMLXMLDIR-@/saml11-catalog.xml:@-PKGXMLDIR-@/catalog.xml
-ShibConfig @-PKGSYSCONFDIR-@/shibboleth2.xml
-
-#
 # Used for example logo and style sheet in error templates.
 #
 <IfModule mod_alias.c>
index 744bc38..6823db5 100644 (file)
 LoadModule mod_shib @-PKGLIBDIR-@/mod_shib_22.so
 
 #
-# Global Configuration
-# This is the XML file that contains all the global, non-apache-specific
-# configuration.  Look at this file for most of your configuration parameters.
-#
-ShibSchemaDir @-XMLTOOLINGXMLDIR-@/catalog.xml:@-OPENSAMLXMLDIR-@/saml20-catalog.xml:@-OPENSAMLXMLDIR-@/saml11-catalog.xml:@-PKGXMLDIR-@/catalog.xml
-ShibConfig @-PKGSYSCONFDIR-@/shibboleth2.xml
-
-#
 # Used for example logo and style sheet in error templates.
 #
 <IfModule mod_alias.c>
index f0fd99e..65fc832 100644 (file)
@@ -236,16 +236,6 @@ static void print_error(const char* msg)
 \r
 int main(void)\r
 {\r
-    const char* schemadir=getenv("SHIBSP_SCHEMAS");\r
-    if (!schemadir)\r
-        schemadir=SHIBSP_SCHEMAS;\r
-    const char* config=getenv("SHIBSP_CONFIG");\r
-    if (!config)\r
-        config=SHIBSP_CONFIG;\r
-\r
-    cerr << "SHIBSP_CONFIG = " << config << endl\r
-         << "SHIBSP_SCHEMAS = " << schemadir << endl;\r
-\r
     SPConfig* g_Config=&SPConfig::getConfig();\r
     g_Config->setFeatures(\r
         SPConfig::Listener |\r
@@ -255,11 +245,15 @@ int main(void)
         SPConfig::Logging |\r
         SPConfig::Handlers\r
         );\r
-    if (!g_Config->init(schemadir)) {\r
+    if (!g_Config->init()) {\r
         cerr << "failed to initialize Shibboleth libraries" << endl;\r
         exit(1);\r
     }\r
 \r
+    const char* config=getenv("SHIBSP_CONFIG");\r
+    if (!config)\r
+        config=SHIBSP_CONFIG;\r
+\r
     try {\r
         DOMDocument* dummydoc=XMLToolingConfig::getConfig().getParser().newDocument();\r
         XercesJanitor<DOMDocument> docjanitor(dummydoc);\r
index 940ebe3..f40a2e7 100644 (file)
@@ -269,16 +269,6 @@ static void print_error(const char* msg) {
 \r
 int main(void)\r
 {\r
-    const char* schemadir=getenv("SHIBSP_SCHEMAS");\r
-    if (!schemadir)\r
-        schemadir=SHIBSP_SCHEMAS;\r
-    const char* config=getenv("SHIBSP_CONFIG");\r
-    if (!config)\r
-        config=SHIBSP_CONFIG;\r
-\r
-    cerr << "SHIBSP_CONFIG = " << config << endl\r
-         << "SHIBSP_SCHEMAS = " << schemadir << endl;\r
-\r
     SPConfig* g_Config=&SPConfig::getConfig();\r
     g_Config->setFeatures(\r
         SPConfig::Listener |\r
@@ -288,11 +278,15 @@ int main(void)
         SPConfig::Logging |\r
         SPConfig::Handlers\r
         );\r
-    if (!g_Config->init(schemadir)) {\r
+    if (!g_Config->init()) {\r
         cerr << "failed to initialize Shibboleth libraries" << endl;\r
         exit(1);\r
     }\r
 \r
+    const char* config=getenv("SHIBSP_CONFIG");\r
+    if (!config)\r
+        config=SHIBSP_CONFIG;\r
+\r
     try {\r
         DOMDocument* dummydoc=XMLToolingConfig::getConfig().getParser().newDocument();\r
         XercesJanitor<DOMDocument> docjanitor(dummydoc);\r
index d286c4b..bff7387 100644 (file)
@@ -151,12 +151,6 @@ extern "C" BOOL WINAPI GetFilterVersion(PHTTP_FILTER_VERSION pVer)
         return TRUE;
     }
 
-    LPCSTR schemadir=getenv("SHIBSP_SCHEMAS");
-    if (!schemadir)
-        schemadir=SHIBSP_SCHEMAS;
-    LPCSTR config=getenv("SHIBSP_CONFIG");
-    if (!config)
-        config=SHIBSP_CONFIG;
     g_Config=&SPConfig::getConfig();
     g_Config->setFeatures(
         SPConfig::Listener |
@@ -166,13 +160,17 @@ extern "C" BOOL WINAPI GetFilterVersion(PHTTP_FILTER_VERSION pVer)
         SPConfig::Logging |
         SPConfig::Handlers
         );
-    if (!g_Config->init(schemadir)) {
+    if (!g_Config->init()) {
         g_Config=NULL;
         LogEvent(NULL, EVENTLOG_ERROR_TYPE, 2100, NULL,
                 "Filter startup failed during library initialization, check native log for help.");
         return FALSE;
     }
 
+    LPCSTR config=getenv("SHIBSP_CONFIG");
+    if (!config)
+        config=SHIBSP_CONFIG;
+
     try {
         DOMDocument* dummydoc=XMLToolingConfig::getConfig().getParser().newDocument();
         XercesJanitor<DOMDocument> docjanitor(dummydoc);
index 175b533..8316b59 100644 (file)
@@ -81,13 +81,8 @@ if (Err = 0) then
   FileSystemObj.MoveFile ConfigFile, DistDir & "native.logger"
 
   ConfigFile = DistDir & "apache.config.in"
-  ReplaceInFile ConfigFile, "@-XMLTOOLINGXMLDIR-@", ConvertedDir & "/share/xml/xmltooling"
-  ReplaceInFile ConfigFile, "@-OPENSAMLXMLDIR-@", ConvertedDir & "/share/xml/opensaml"
-  ReplaceInFile ConfigFile, "@-PKGXMLDIR-@", ConvertedDir & "/share/xml/shibboleth"
-  ReplaceInFile ConfigFile, "catalog.xml:", "catalog.xml;"
-  ReplaceInFile ConfigFile, "@-PKGDOCDIR-@", ConvertedDir & "/share/doc/shibboleth"
-  ReplaceInFile ConfigFile, "@-PKGSYSCONFDIR-@", ConvertedDir & "/etc/shibboleth"
   ReplaceInFile ConfigFile, "@-PKGLIBDIR-@", ConvertedDir & "/lib/shibboleth"
+  ReplaceInFile ConfigFile, "@-PKGDOCDIR-@", ConvertedDir & "/share/doc/shibboleth"
   If (NOT FileSystemObj.FileExists(ConfigDir & "apache.config")) then
     FileSystemObj.CopyFile ConfigFile, ConfigDir & "apache.config", false
   End If
@@ -97,13 +92,8 @@ if (Err = 0) then
   FileSystemObj.MoveFile ConfigFile, DistDir & "apache.config"
 
   ConfigFile = DistDir & "apache2.config.in"
-  ReplaceInFile ConfigFile, "@-XMLTOOLINGXMLDIR-@", ConvertedDir & "/share/xml/xmltooling"
-  ReplaceInFile ConfigFile, "@-OPENSAMLXMLDIR-@", ConvertedDir & "/share/xml/opensaml"
-  ReplaceInFile ConfigFile, "@-PKGXMLDIR-@", ConvertedDir & "/share/xml/shibboleth"
-  ReplaceInFile ConfigFile, "catalog.xml:", "catalog.xml;"
-  ReplaceInFile ConfigFile, "@-PKGDOCDIR-@", ConvertedDir & "/share/doc/shibboleth"
-  ReplaceInFile ConfigFile, "@-PKGSYSCONFDIR-@", ConvertedDir & "/etc/shibboleth"
   ReplaceInFile ConfigFile, "@-PKGLIBDIR-@", ConvertedDir & "/lib/shibboleth"
+  ReplaceInFile ConfigFile, "@-PKGDOCDIR-@", ConvertedDir & "/share/doc/shibboleth"
   If (NOT FileSystemObj.FileExists(ConfigDir & "apache2.config")) then
     FileSystemObj.CopyFile ConfigFile, ConfigDir & "apache2.config", false
   End If
@@ -113,13 +103,8 @@ if (Err = 0) then
   FileSystemObj.MoveFile ConfigFile, DistDir & "apache2.config"
 
   ConfigFile = DistDir & "apache22.config.in"
-  ReplaceInFile ConfigFile, "@-XMLTOOLINGXMLDIR-@", ConvertedDir & "/share/xml/xmltooling"
-  ReplaceInFile ConfigFile, "@-OPENSAMLXMLDIR-@", ConvertedDir & "/share/xml/opensaml"
-  ReplaceInFile ConfigFile, "@-PKGXMLDIR-@", ConvertedDir & "/share/xml/shibboleth"
-  ReplaceInFile ConfigFile, "catalog.xml:", "catalog.xml;"
-  ReplaceInFile ConfigFile, "@-PKGDOCDIR-@", ConvertedDir & "/share/doc/shibboleth"
-  ReplaceInFile ConfigFile, "@-PKGSYSCONFDIR-@", ConvertedDir & "/etc/shibboleth"
   ReplaceInFile ConfigFile, "@-PKGLIBDIR-@", ConvertedDir & "/lib/shibboleth"
+  ReplaceInFile ConfigFile, "@-PKGDOCDIR-@", ConvertedDir & "/share/doc/shibboleth"
   If (NOT FileSystemObj.FileExists(ConfigDir & "apache22.config")) then
     FileSystemObj.CopyFile ConfigFile, ConfigDir & "apache22.config", false
   End If
index 962499f..7719018 100644 (file)
@@ -120,15 +120,8 @@ extern "C" NSAPI_PUBLIC int nsapi_shib_init(pblock* pb, ::Session* sn, Request*
     log_error(LOG_INFORM,"nsapi_shib_init",sn,rq,"nsapi_shib loaded for host (%s)",g_ServerName.c_str());
 
     const char* schemadir=pblock_findval("shib-schemas",pb);
-    if (!schemadir)
-        schemadir=getenv("SHIBSP_SCHEMAS");
-    if (!schemadir)
-        schemadir=SHIBSP_SCHEMAS;
-    const char* config=pblock_findval("shib-config",pb);
-    if (!config)
-        config=getenv("SHIBSP_CONFIG");
-    if (!config)
-        config=SHIBSP_CONFIG;
+    const char* prefix=pblock_findval("shib-prefix",pb);
+
     g_Config=&SPConfig::getConfig();
     g_Config->setFeatures(
         SPConfig::Listener |
@@ -138,7 +131,7 @@ extern "C" NSAPI_PUBLIC int nsapi_shib_init(pblock* pb, ::Session* sn, Request*
         SPConfig::Logging |
         SPConfig::Handlers
         );
-    if (!g_Config->init(schemadir)) {
+    if (!g_Config->init(schemadir,prefix)) {
         g_Config=NULL;
         pblock_nvinsert("error","unable to initialize Shibboleth libraries",pb);
         return REQ_ABORTED;
@@ -146,6 +139,12 @@ extern "C" NSAPI_PUBLIC int nsapi_shib_init(pblock* pb, ::Session* sn, Request*
 
     g_Config->RequestMapperManager.registerFactory(XML_REQUEST_MAPPER,&SunRequestMapFactory);
 
+    const char* config=pblock_findval("shib-config",pb);
+    if (!config)
+        config=getenv("SHIBSP_CONFIG");
+    if (!config)
+        config=SHIBSP_CONFIG;
+
     try {
         xercesc::DOMDocument* dummydoc=XMLToolingConfig::getConfig().getParser().newDocument();
         XercesJanitor<xercesc::DOMDocument> docjanitor(dummydoc);
index 526d624..7f61f15 100644 (file)
@@ -58,6 +58,7 @@ using namespace std;
 bool shibd_shutdown = false;\r
 const char* shar_config = NULL;\r
 const char* shar_schemadir = NULL;\r
+const char* shar_prefix = NULL;\r
 bool shar_checkonly = false;\r
 bool shar_version = false;\r
 static int unlink_socket = 0;\r
@@ -119,19 +120,16 @@ int real_main(int preinit)
             SPConfig::OutOfProcess |\r
             (shar_checkonly ? SPConfig::RequestMapping : SPConfig::Logging)\r
             );\r
-        if (!shar_config)\r
-            shar_config=getenv("SHIBSP_CONFIG");\r
-        if (!shar_schemadir)\r
-            shar_schemadir=getenv("SHIBSP_SCHEMAS");\r
-        if (!shar_schemadir)\r
-            shar_schemadir=SHIBSP_SCHEMAS;\r
-        if (!shar_config)\r
-            shar_config=SHIBSP_CONFIG;\r
-        if (!conf.init(shar_schemadir)) {\r
+        if (!conf.init(shar_schemadir, shar_prefix)) {\r
             fprintf(stderr, "configuration is invalid, see console for specific problems\n");\r
             return -1;\r
         }\r
         \r
+        if (!shar_config)\r
+            shar_config=getenv("SHIBSP_CONFIG");\r
+        if (!shar_config)\r
+            shar_config=SHIBSP_CONFIG;\r
+\r
         try {\r
             static const XMLCh path[] = UNICODE_LITERAL_4(p,a,t,h);\r
             static const XMLCh validate[] = UNICODE_LITERAL_8(v,a,l,i,d,a,t,e);\r
@@ -215,7 +213,8 @@ static int setup_signals(void)
 \r
 static void usage(char* whoami)\r
 {\r
-    fprintf(stderr, "usage: %s [-fcdt]\n", whoami);\r
+    fprintf(stderr, "usage: %s [-dcxtfpvh]\n", whoami);\r
+    fprintf(stderr, "  -d\tinstallation prefix to use.\n");\r
     fprintf(stderr, "  -c\tconfig file to use.\n");\r
     fprintf(stderr, "  -x\tXML schema catalogs to use.\n");\r
     fprintf(stderr, "  -t\tcheck configuration file for problems.\n");\r
@@ -230,8 +229,11 @@ static int parse_args(int argc, char* argv[])
 {\r
     int opt;\r
 \r
-    while ((opt = getopt(argc, argv, "c:x:p:ftvh")) > 0) {\r
+    while ((opt = getopt(argc, argv, "d:c:x:p:ftvh")) > 0) {\r
         switch (opt) {\r
+            case 'd':\r
+                shar_prefix=optarg;\r
+                break;\r
             case 'c':\r
                 shar_config=optarg;\r
                 break;\r
@@ -269,15 +271,6 @@ int main(int argc, char *argv[])
     if (setup_signals() != 0)\r
         return -1;\r
 \r
-    if (!shar_config)\r
-        shar_config=getenv("SHIBSP_CONFIG");\r
-    if (!shar_schemadir)\r
-        shar_schemadir=getenv("SHIBSP_SCHEMAS");\r
-    if (!shar_schemadir)\r
-        shar_schemadir=SHIBSP_SCHEMAS;\r
-    if (!shar_config)\r
-        shar_config=SHIBSP_CONFIG;\r
-\r
     // initialize the shib-target library\r
     SPConfig& conf=SPConfig::getConfig();\r
     conf.setFeatures(\r
@@ -291,11 +284,16 @@ int main(int argc, char *argv[])
         SPConfig::OutOfProcess |\r
         (shar_checkonly ? SPConfig::RequestMapping : SPConfig::Logging)\r
         );\r
-    if (!conf.init(shar_schemadir)) {\r
+    if (!conf.init(shar_schemadir, shar_prefix)) {\r
         fprintf(stderr, "configuration is invalid, check console for specific problems\n");\r
         return -1;\r
     }\r
 \r
+    if (!shar_config)\r
+        shar_config=getenv("SHIBSP_CONFIG");\r
+    if (!shar_config)\r
+        shar_config=SHIBSP_CONFIG;\r
+    \r
     try {\r
         static const XMLCh path[] = UNICODE_LITERAL_4(p,a,t,h);\r
         static const XMLCh validate[] = UNICODE_LITERAL_8(v,a,l,i,d,a,t,e);\r
index 20eb442..b196ea8 100644 (file)
 #define _CRT_SECURE_NO_DEPRECATE 1\r
 \r
 #include <shibsp/base.h>\r
+#include <string>\r
 #include <windows.h>\r
 \r
+using namespace std;\r
+\r
 extern bool shibd_shutdown;                    // signals shutdown to Unix side\r
 extern const char* shar_schemadir;\r
 extern const char* shar_config;\r
+extern const char* shar_prefix;\r
 extern bool shar_checkonly;\r
 \r
 // internal variables\r
@@ -109,6 +113,11 @@ int main(int argc, char *argv[])
             if (argc > ++i)\r
                 shar_config = argv[i++];\r
         }\r
+        else if (_stricmp( "prefix", argv[i]+1) == 0)\r
+        {\r
+            if (argc > ++i)\r
+                shar_prefix = argv[i++];\r
+        }\r
         else if (_stricmp( "catalogs", argv[i]+1) == 0)\r
         {\r
             if (argc > ++i)\r
@@ -152,8 +161,9 @@ int main(int argc, char *argv[])
         printf("%s -remove <name>    to remove the named service\n", argv[0]);\r
         printf("%s -console          to run as a console app for debugging\n", argv[0]);\r
         printf("%s -check            to run as a console app and check configuration\n", argv[0]);\r
+        printf("\t-prefix <dir> to specify the installation directory\n");\r
         printf("\t-config <file> to specify the config file to use\n");\r
-        printf("\t-catalogs <dir> to specify schema catalogs\n");\r
+        printf("\t-catalogs <catalog1:catalog2> to specify schema catalogs\n");\r
         printf("\nService starting.\nThis may take several seconds. Please wait.\n" );\r
 \r
     SERVICE_TABLE_ENTRY dispatchTable[] =\r
@@ -343,9 +353,6 @@ void CmdInstallService(LPCSTR name)
     SC_HANDLE   schSCManager;\r
 \r
     char szPath[256];\r
-    char dispName[512];\r
-    char realName[512];\r
-    char cmd[2048];\r
 \r
     if ( GetModuleFileName( NULL, szPath, 256 ) == 0 )\r
     {\r
@@ -353,16 +360,15 @@ void CmdInstallService(LPCSTR name)
         return;\r
     }\r
     \r
-    sprintf(dispName,"Shibboleth %s Daemon (%s)",PACKAGE_VERSION,name);\r
-    sprintf(realName,"shibd_%s",name);\r
-    if (shar_config && shar_schemadir)\r
-        sprintf(cmd,"%s -config %s -schemadir %s",szPath,shar_config,shar_schemadir);\r
-    else if (shar_config)\r
-        sprintf(cmd,"%s -config %s",szPath,shar_config);\r
-    else if (shar_schemadir)\r
-        sprintf(cmd,"%s -schemadir %s",szPath,shar_schemadir);\r
-    else\r
-        sprintf(cmd,"%s",szPath);\r
+    string dispName = string("Shibboleth ") + PACKAGE_VERSION + " Daemon (" + name + ")";\r
+    string realName = string("shibd_") + name;\r
+    string cmd(szPath);\r
+    if (shar_prefix)\r
+        cmd = cmd + " -prefix " + shar_prefix;\r
+    if (shar_config)\r
+        cmd = cmd + " -config " + shar_config;\r
+    if (shar_schemadir)\r
+        cmd = cmd + " -schemadir " + shar_schemadir;\r
 \r
     schSCManager = OpenSCManager(\r
                         NULL,                   // machine (NULL == local)\r
@@ -375,13 +381,13 @@ void CmdInstallService(LPCSTR name)
     {\r
         schService = CreateService(\r
             schSCManager,               // SCManager database\r
-            realName,                   // name of service\r
-            dispName,                   // name to display\r
+            realName.c_str(),           // name of service\r
+            dispName.c_str(),           // name to display\r
             SERVICE_ALL_ACCESS,         // desired access\r
             SERVICE_WIN32_OWN_PROCESS,  // service type\r
             SERVICE_AUTO_START,         // start type\r
             SERVICE_ERROR_NORMAL,       // error control type\r
-            cmd,                        // service's command line\r
+            cmd.c_str(),                // service's command line\r
             NULL,                       // no load ordering group\r
             NULL,                       // no tag identifier\r
             NULL,                       // dependencies\r
@@ -390,7 +396,7 @@ void CmdInstallService(LPCSTR name)
 \r
         if ( schService )\r
         {\r
-            printf("%s installed.\n",realName);\r
+            printf("%s installed.\n", realName.c_str());\r
             CloseServiceHandle(schService);\r
         }\r
         else\r
@@ -410,7 +416,7 @@ void CmdRemoveService(LPCSTR name)
     SC_HANDLE   schSCManager;\r
     char        realName[512];\r
 \r
-    sprintf(realName,"shibd_%s",name);\r
+    _snprintf(realName,sizeof(realName),"shibd_%s",name);\r
 \r
     schSCManager = OpenSCManager(\r
                         NULL,                   // machine (NULL == local)\r
index f2dfe8a..772c404 100644 (file)
@@ -85,7 +85,7 @@ DECL_XMLTOOLING_EXCEPTION_FACTORY(MetadataException,opensaml::saml2md);
 #endif
 
 namespace shibsp {
-   SPInternalConfig g_config;
+   SPConfig g_config;
 }
 
 SPConfig& SPConfig::getConfig()
@@ -93,18 +93,13 @@ SPConfig& SPConfig::getConfig()
     return g_config;
 }
 
-SPInternalConfig& SPInternalConfig::getInternalConfig()
-{
-    return g_config;
-}
-
 void SPConfig::setServiceProvider(ServiceProvider* serviceProvider)
 {
     delete m_serviceProvider;
     m_serviceProvider = serviceProvider;
 }
 
-bool SPInternalConfig::init(const char* catalog_path)
+bool SPConfig::init(const char* catalog_path, const char* inst_prefix)
 {
 #ifdef _DEBUG
     NDC ndc("init");
@@ -117,6 +112,11 @@ bool SPInternalConfig::init(const char* catalog_path)
         loglevel = SHIBSP_LOGGING;
     XMLToolingConfig::getConfig().log_config(loglevel);
 
+    if (!inst_prefix)
+        inst_prefix = getenv("SHIBSP_PREFIX");
+    if (!inst_prefix)
+        inst_prefix = SHIBSP_PREFIX;
+    
     if (!catalog_path)
         catalog_path = getenv("SHIBSP_SCHEMAS");
     if (!catalog_path)
@@ -136,7 +136,7 @@ bool SPInternalConfig::init(const char* catalog_path)
     }
 #endif    
     XMLToolingConfig::getConfig().getPathResolver()->setDefaultPackageName(PACKAGE_NAME);
-    XMLToolingConfig::getConfig().getPathResolver()->setDefaultPrefix(getenv("SHIBSP_PREFIX") ? getenv("SHIBSP_PREFIX") : SHIBSP_PREFIX);
+    XMLToolingConfig::getConfig().getPathResolver()->setDefaultPrefix(inst_prefix);
     XMLToolingConfig::getConfig().setTemplateEngine(new TemplateEngine());
     XMLToolingConfig::getConfig().getTemplateEngine()->setTagPrefix("shibmlp");
     
@@ -198,7 +198,7 @@ bool SPInternalConfig::init(const char* catalog_path)
     return true;
 }
 
-void SPInternalConfig::term()
+void SPConfig::term()
 {
 #ifdef _DEBUG
     NDC ndc("term");
index 75cac61..81499cd 100644 (file)
@@ -63,8 +63,14 @@ namespace shibsp {
      */
     class SHIBSP_API SPConfig
     {
-    MAKE_NONCOPYABLE(SPConfig);
+        MAKE_NONCOPYABLE(SPConfig);
     public:
+        SPConfig() : attribute_value_delimeter(';'), m_serviceProvider(NULL),
+#ifndef SHIBSP_LITE
+            m_artifactResolver(NULL),
+#endif
+            m_features(0) {}
+
         virtual ~SPConfig() {}
 
         /**
@@ -119,9 +125,10 @@ namespace shibsp {
          * before using any library classes.
          * 
          * @param catalog_path  delimited set of schema catalog files to load
+         * @param inst_prefix   installation prefix for software
          * @return true iff initialization was successful 
          */
-        virtual bool init(const char* catalog_path)=0;
+        virtual bool init(const char* catalog_path=NULL, const char* inst_prefix=NULL);
         
         /**
          * Shuts down library
@@ -129,7 +136,7 @@ namespace shibsp {
          * Each process using the library SHOULD call this function exactly once
          * before terminating itself.
          */
-        virtual void term()=0;
+        virtual void term();
         
         /**
          * Sets the global ServiceProvider instance.
@@ -264,12 +271,6 @@ namespace shibsp {
         xmltooling::PluginManager< Handler,std::string,std::pair<const xercesc::DOMElement*,const char*> > SingleLogoutServiceManager;
 
     protected:
-        SPConfig() : attribute_value_delimeter(';'), m_serviceProvider(NULL),
-#ifndef SHIBSP_LITE
-            m_artifactResolver(NULL),
-#endif
-            m_features(0) {}
-        
         /** Global ServiceProvider instance. */
         ServiceProvider* m_serviceProvider;
 
index 529d834..df7cf81 100644 (file)
@@ -35,6 +35,7 @@
 #include <sstream>
 #include <xmltooling/XMLToolingConfig.h>
 #include <xmltooling/util/NDC.h>
+#include <xmltooling/util/PathResolver.h>
 #include <xmltooling/util/URLEncoder.h>
 #include <xmltooling/util/XMLHelper.h>
 
@@ -94,7 +95,8 @@ namespace shibsp {
                 pathname=props->getString(page);
         }
         if (pathname.first) {
-            ifstream infile(pathname.second);
+            string fname(pathname.second);
+            ifstream infile(XMLToolingConfig::getConfig().getPathResolver()->resolve(fname, PathResolver::XMLTOOLING_CFG_FILE).c_str());
             if (infile) {
                 tp.setPropertySet(props);
                 stringstream str;
index 6dc2d89..9eb4cf3 100644 (file)
 # define SHIBSP_SCHEMAS "c:/opt/shibboleth-sp/share/xml/xmltooling/catalog.xml;c:/opt/shibboleth-sp/share/xml/opensaml/saml20-catalog.xml;c:/opt/shibboleth-sp/share/xml/opensaml/saml11-catalog.xml;c:/opt/shibboleth-sp/share/xml/shibboleth/catalog.xml"
 
 /**
- * Default path to configuration file on Windows.
+ * Default name of configuration file on Windows.
  */
-# define SHIBSP_CONFIG "c:/opt/shibboleth-sp/etc/shibboleth/shibboleth2.xml"
+# define SHIBSP_CONFIG "shibboleth2.xml"
 
 /**
  * Controls default logging level of console tools and other situations
  * where fully-configured logging isn't used.
  */
-#define SHIBSP_LOGGING "c:/opt/shibboleth-sp/etc/shibboleth/console.logger"
+#define SHIBSP_LOGGING "console.logger"
 
 /**
  * Default prefix for installation (used to resolve relative paths).
index 8bd3d56..3ef1cd2 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <fstream>
 #include <xmltooling/XMLToolingConfig.h>
+#include <xmltooling/util/PathResolver.h>
 #include <xmltooling/util/URLEncoder.h>
 
 using namespace shibsp;
@@ -46,7 +47,8 @@ pair<bool,long> LogoutHandler::sendLogoutPage(
         response.setContentType("text/html");
         response.setResponseHeader("Expires","01-Jan-1997 12:00:00 GMT");
         response.setResponseHeader("Cache-Control","private,no-store,no-cache");
-        ifstream infile(prop.second);
+        string fname(prop.second);
+        ifstream infile(XMLToolingConfig::getConfig().getPathResolver()->resolve(fname, PathResolver::XMLTOOLING_CFG_FILE).c_str());
         if (!infile)
             throw ConfigurationException("Unable to access $1 HTML template.", params(1,local ? "localLogout" : "globalLogout"));
         TemplateParameters tp;
index e10017b..1b5e9e5 100644 (file)
 using namespace xmltooling::logging;
 using namespace xercesc;
 
-namespace shibsp {
-    
-    /// @cond OFF
-    class SPInternalConfig : public SPConfig
-    {
-    public:
-        SPInternalConfig() {}
-
-        static SPInternalConfig& getInternalConfig();
-
-        bool init(const char* catalog_path);
-        void term();
-
-    private:
-    };
-    /// @endcond
-
-};
-
 #endif /* __shibsp_internal_h__ */
index 3511b89..9f5e2b1 100644 (file)
 #define SHIBSP_SCHEMAS "@-XMLTOOLINGXMLDIR-@/catalog.xml:@-OPENSAMLXMLDIR-@/saml20-catalog.xml:@-OPENSAMLXMLDIR-@/saml11-catalog.xml:@-PKGXMLDIR-@/catalog.xml"\r
 \r
 /**\r
- * Default location of SP configuration file.\r
+ * Default name of SP configuration file.\r
  */\r
-#define SHIBSP_CONFIG "@-PKGSYSCONFDIR-@/shibboleth2.xml"\r
+#define SHIBSP_CONFIG "shibboleth2.xml"\r
 \r
 /**\r
- * Default location of SP console tool logging file.\r
+ * Default name of SP console tool logging file.\r
  */\r
-#define SHIBSP_LOGGING "@-PKGSYSCONFDIR-@/console.logger"\r
+#define SHIBSP_LOGGING "console.logger"\r
 \r
 /**\r
  * Default prefix for installation (used to resolve relative paths).\r