Path resolution for error templates.
[shibboleth/sp.git] / shibd / shibd.cpp
index cf79435..7f61f15 100644 (file)
@@ -58,7 +58,9 @@ 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
 const char* pidfile = NULL;\r
 \r
@@ -114,24 +116,21 @@ int real_main(int preinit)
             SPConfig::Trust |\r
             SPConfig::Credentials |\r
             SPConfig::AttributeResolution |\r
+            SPConfig::Handlers |\r
             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
-            fprintf(stderr, "loading configuration file: %s\n", shar_config);\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
             xercesc::DOMDocument* dummydoc=XMLToolingConfig::getConfig().getParser().newDocument();\r
@@ -214,12 +213,14 @@ 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
     fprintf(stderr, "  -f\tforce removal of listener socket.\n");\r
     fprintf(stderr, "  -p\tpid file to use.\n");\r
+    fprintf(stderr, "  -v\tprint software version.\n");\r
     fprintf(stderr, "  -h\tprint this help message.\n");\r
     exit(1);\r
 }\r
@@ -228,8 +229,11 @@ static int parse_args(int argc, char* argv[])
 {\r
     int opt;\r
 \r
-    while ((opt = getopt(argc, argv, "c:x:p:fth")) > 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
@@ -242,6 +246,9 @@ static int parse_args(int argc, char* argv[])
             case 't':\r
                 shar_checkonly=true;\r
                 break;\r
+            case 'v':\r
+                shar_version=true;\r
+                break;\r
             case 'p':\r
                 pidfile=optarg;\r
                 break;\r
@@ -254,20 +261,15 @@ static int parse_args(int argc, char* argv[])
 \r
 int main(int argc, char *argv[])\r
 {\r
-    if (setup_signals() != 0)\r
-        return -1;\r
-\r
     if (parse_args(argc, argv) != 0)\r
         usage(argv[0]);\r
+    else if (shar_version) {\r
+        fprintf(stdout, PACKAGE_STRING);\r
+        return 0;\r
+    }\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 (setup_signals() != 0)\r
+        return -1;\r
 \r
     // initialize the shib-target library\r
     SPConfig& conf=SPConfig::getConfig();\r
@@ -278,16 +280,21 @@ int main(int argc, char *argv[])
         SPConfig::Trust |\r
         SPConfig::Credentials |\r
         SPConfig::AttributeResolution |\r
+        SPConfig::Handlers |\r
         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
-        fprintf(stderr, "loading configuration file: %s\n", shar_config);\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
         xercesc::DOMDocument* dummydoc=XMLToolingConfig::getConfig().getParser().newDocument();\r