Renamed shar project, some Makefile fixes.
authorScott Cantor <cantor.2@osu.edu>
Sun, 11 Feb 2007 21:58:53 +0000 (21:58 +0000)
committerScott Cantor <cantor.2@osu.edu>
Sun, 11 Feb 2007 21:58:53 +0000 (21:58 +0000)
15 files changed:
.cdtproject
Makefile.am
Shibboleth.sln
apache/Makefile.am
configure.ac
nsapi_shib/Makefile.am
shar/Makefile.am [deleted file]
shibd/.gitignore [new file with mode: 0644]
shibd/Makefile.am [new file with mode: 0644]
shibd/resource.h [moved from shar/resource.h with 94% similarity]
shibd/shibd.cpp [moved from shar/shar.cpp with 96% similarity]
shibd/shibd.rc [moved from shar/shar.rc with 95% similarity]
shibd/shibd.vcproj [moved from shar/shar.vcproj with 82% similarity]
shibd/shibd_win32.cpp [moved from shar/shar_win32.cpp with 96% similarity]
shibsp/shibsp.vcproj

index 372ea07..3fbd0f5 100644 (file)
@@ -20,6 +20,7 @@
 <pathentry kind="src" path="shibsp/remoting/impl"/>
 <pathentry kind="src" path="shibsp/security"/>
 <pathentry kind="src" path="shibsp/util"/>
+<pathentry kind="src" path="shibd"/>
 </item>
 </data>
 </cdtproject>
index 2989f94..5c1671b 100644 (file)
@@ -9,20 +9,16 @@ EXTRA_DIST = \
        shibboleth.spec.in shibboleth.spec pkginfo.in pkginfo checkinstall
 
 dist-hook:
-       rm -rf `find $(distdir)/schemas -name CVS`
        rm -rf `find $(distdir)/schemas -name Makefile`
-       rm -rf `find $(distdir)/configs -name CVS`
        rm -rf `find $(distdir)/configs -name Makefile`
-       rm -rf `find $(distdir)/doc -name CVS`
        rm -rf `find $(distdir)/doc -name Makefile`
-       rm -rf `find $(distdir)/isapi_shib -name CVS`
 
 WANT_SUBDIRS = @WANT_SUBDIRS@
 
 SUBDIRS = $(WANT_SUBDIRS)
 
-DIST_SUBDIRS = doc shib schemas configs shib-target shar test \
-       apache siterefresh odbc_ccache nsapi_shib selinux
+DIST_SUBDIRS = doc schemas configs shibsp shibd test \
+       apache siterefresh odbc-store nsapi_shib selinux
 
 all-local: shibboleth.spec pkginfo
 
index fb11df6..be21b52 100644 (file)
@@ -42,15 +42,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nsapi_shib", "nsapi_shib\ns
                {81F0F7A6-DC36-46EF-957F-F9E81D4403F6} = {81F0F7A6-DC36-46EF-957F-F9E81D4403F6}
        EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shar", "shar\shar.vcproj", "{F13141B5-6C87-40BB-8D4E-5CC56EBB4C59}"
-       ProjectSection(WebsiteProperties) = preProject
-               Debug.AspNetCompiler.Debug = "True"
-               Release.AspNetCompiler.Debug = "False"
-       EndProjectSection
-       ProjectSection(ProjectDependencies) = postProject
-               {81F0F7A6-DC36-46EF-957F-F9E81D4403F6} = {81F0F7A6-DC36-46EF-957F-F9E81D4403F6}
-       EndProjectSection
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shibtest", "shibtest\shibtest.vcproj", "{67AF22A3-C26E-40BE-B0CA-2ABEE5123763}"
        ProjectSection(WebsiteProperties) = preProject
                Debug.AspNetCompiler.Debug = "True"
@@ -105,6 +96,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shibsp", "shibsp\shibsp.vcp
                Release.AspNetCompiler.Debug = "False"
        EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shibd", "shibd\shibd.vcproj", "{F13141B5-6C87-40BB-8D4E-5CC56EBB4C59}"
+       ProjectSection(WebsiteProperties) = preProject
+               Debug.AspNetCompiler.Debug = "True"
+               Release.AspNetCompiler.Debug = "False"
+       EndProjectSection
+       ProjectSection(ProjectDependencies) = postProject
+               {81F0F7A6-DC36-46EF-957F-F9E81D4403F6} = {81F0F7A6-DC36-46EF-957F-F9E81D4403F6}
+       EndProjectSection
+EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
                Debug|Win32 = Debug|Win32
@@ -131,10 +131,6 @@ Global
                {1396D80A-8672-4224-9B02-95F3F4207CDB}.Debug|Win32.Build.0 = Debug|Win32
                {1396D80A-8672-4224-9B02-95F3F4207CDB}.Release|Win32.ActiveCfg = Release|Win32
                {1396D80A-8672-4224-9B02-95F3F4207CDB}.Release|Win32.Build.0 = Release|Win32
-               {F13141B5-6C87-40BB-8D4E-5CC56EBB4C59}.Debug|Win32.ActiveCfg = Debug|Win32
-               {F13141B5-6C87-40BB-8D4E-5CC56EBB4C59}.Debug|Win32.Build.0 = Debug|Win32
-               {F13141B5-6C87-40BB-8D4E-5CC56EBB4C59}.Release|Win32.ActiveCfg = Release|Win32
-               {F13141B5-6C87-40BB-8D4E-5CC56EBB4C59}.Release|Win32.Build.0 = Release|Win32
                {67AF22A3-C26E-40BE-B0CA-2ABEE5123763}.Debug|Win32.ActiveCfg = Debug|Win32
                {67AF22A3-C26E-40BE-B0CA-2ABEE5123763}.Debug|Win32.Build.0 = Debug|Win32
                {67AF22A3-C26E-40BE-B0CA-2ABEE5123763}.Release|Win32.ActiveCfg = Release|Win32
@@ -155,6 +151,10 @@ Global
                {81F0F7A6-DC36-46EF-957F-F9E81D4403F6}.Debug|Win32.Build.0 = Debug|Win32
                {81F0F7A6-DC36-46EF-957F-F9E81D4403F6}.Release|Win32.ActiveCfg = Release|Win32
                {81F0F7A6-DC36-46EF-957F-F9E81D4403F6}.Release|Win32.Build.0 = Release|Win32
+               {F13141B5-6C87-40BB-8D4E-5CC56EBB4C59}.Debug|Win32.ActiveCfg = Debug|Win32
+               {F13141B5-6C87-40BB-8D4E-5CC56EBB4C59}.Debug|Win32.Build.0 = Debug|Win32
+               {F13141B5-6C87-40BB-8D4E-5CC56EBB4C59}.Release|Win32.ActiveCfg = Release|Win32
+               {F13141B5-6C87-40BB-8D4E-5CC56EBB4C59}.Release|Win32.Build.0 = Release|Win32
        EndGlobalSection
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE
index 7187e54..54ada30 100644 (file)
@@ -9,8 +9,7 @@ mod_shib_13_la_SOURCES = mod_shib_13.cpp
 mod_shib_13_la_CXXFLAGS = $(APXS_CFLAGS) -I$(APXS_INCLUDE)
 mod_shib_13_la_LDFLAGS = -module -avoid-version
 mod_shib_13_la_LIBADD = \
-  $(top_builddir)/shib/libshib.la \
-  $(top_builddir)/shib-target/libshib-target.la
+  $(top_builddir)/shibsp/libshibsp.la
 
 install-exec-hook:
        for la in $(modshib13_LTLIBRARIES) ; do rm -f $(DESTDIR)$(modshib13dir)/$$la ; done
@@ -24,8 +23,7 @@ mod_shib_20_la_SOURCES = mod_shib_20.cpp
 mod_shib_20_la_CXXFLAGS = $(APXS2_CFLAGS) -I$(APXS2_INCLUDE)
 mod_shib_20_la_LDFLAGS = -module -avoid-version
 mod_shib_20_la_LIBADD = \
-  $(top_builddir)/shib/libshib.la \
-  $(top_builddir)/shib-target/libshib-target.la
+  $(top_builddir)/shibsp/libshibsp.la
 
 install-exec-hook:
        for la in $(modshib20_LTLIBRARIES) ; do rm -f $(DESTDIR)$(modshib20dir)/$$la ; done
@@ -39,8 +37,7 @@ mod_shib_22_la_SOURCES = mod_shib_22.cpp
 mod_shib_22_la_CXXFLAGS = $(APXS22_CFLAGS) -I$(APXS22_INCLUDE)
 mod_shib_22_la_LDFLAGS = -module -avoid-version
 mod_shib_22_la_LIBADD = \
-  $(top_builddir)/shib/libshib.la \
-  $(top_builddir)/shib-target/libshib-target.la
+  $(top_builddir)/shibsp/libshibsp.la
 
 install-exec-hook:
        for la in $(modshib22_LTLIBRARIES) ; do rm -f $(DESTDIR)$(modshib22dir)/$$la ; done
index f1b5c80..bb90555 100644 (file)
@@ -183,18 +183,18 @@ LIBS="-lsaml $LIBS"
 AC_TRY_LINK(
        [#include <saml/saml.h>
 #include <saml/version.h>],
-       [#if _OPENSAML_VERSION >= 10100
-saml::SAMLConfig::getConfig();
+       [#if _OPENSAML_VERSION >= 20000
+opensaml::SAMLConfig::getConfig();
 #else
-#error Need OpenSAML version 1.1 or higher
+#error Need OpenSAML version 2.0 or higher
 #endif],
         [AC_DEFINE(HAVE_SAML,1,[Define if saml library was found])],
         [AC_MSG_ERROR([unable to link with saml, or version too old])])
 
 # output the underlying makefiles
-WANT_SUBDIRS="doc shib schemas configs shib-target shar siterefresh test"
-AC_CONFIG_FILES([Makefile doc/Makefile shib/Makefile schemas/Makefile \
-                configs/Makefile shib-target/Makefile shar/Makefile siterefresh/Makefile \
+WANT_SUBDIRS="doc schemas configs shibsp shibd siterefresh test"
+AC_CONFIG_FILES([Makefile doc/Makefile schemas/Makefile \
+                configs/Makefile shibsp/Makefile shibd/Makefile siterefresh/Makefile \
                 test/Makefile selinux/Makefile])
 
 
index 0435454..bc42824 100644 (file)
@@ -7,8 +7,7 @@ nsapi_shib_la_SOURCES = nsapi_shib.cpp
 nsapi_shib_la_CXXFLAGS = $(NSAPI_INCLUDE)
 nsapi_shib_la_LDFLAGS = -module -avoid-version
 nsapi_shib_la_LIBADD = \
-  $(top_builddir)/shib/libshib.la \
-  $(top_builddir)/shib-target/libshib-target.la
+  $(top_builddir)/shibsp/libshibsp.la
 
 install-exec-hook:
        for la in $(nsapi_shib_LTLIBRARIES) ; do rm -f $(DESTDIR)$(nsapi_shibdir)/$$la ; done
diff --git a/shar/Makefile.am b/shar/Makefile.am
deleted file mode 100644 (file)
index 0888d6a..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-## $Id$
-
-AUTOMAKE_OPTIONS = foreign
-
-bin_PROGRAMS = test-client
-sbin_PROGRAMS = shibd
-
-if USE_OUR_ONCRPC
-AM_CFLAGS = -I${top_srcdir}/oncrpc
-AM_CXXFLAGS = -I${top_srcdir}/oncrpc
-ONCRPC_LIBS = ${top_builddir}/oncrpc/liboncrpc.la
-endif
-
-test_client_SOURCES = test-client.cpp
-
-shibd_SOURCES = shar.cpp
-
-test_client_LDADD = \
-  $(top_builddir)/shib-target/libshib-target.la \
-  $(top_builddir)/shib/libshib.la
-
-shibd_LDADD = \
-  $(top_builddir)/shib-target/libshib-target.la \
-  $(top_builddir)/shib/libshib.la \
-  $(ONCRPC_LIBS)
-
-EXTRA_DIST = shar.vcproj shar_win32.cpp testclient.vcproj resource.h shar.rc
diff --git a/shibd/.gitignore b/shibd/.gitignore
new file mode 100644 (file)
index 0000000..c9e612f
--- /dev/null
@@ -0,0 +1,14 @@
+/.libs
+/.deps
+/Makefile
+/Makefile.in
+/shibd
+/test-client
+/*.plg
+/testclient___Win32_Debug
+/testclient___Win32_Release
+/Debug
+/Release
+/*.dep
+/*.mak
+/*.user
diff --git a/shibd/Makefile.am b/shibd/Makefile.am
new file mode 100644 (file)
index 0000000..baa7cad
--- /dev/null
@@ -0,0 +1,12 @@
+## $Id$
+
+AUTOMAKE_OPTIONS = foreign
+
+sbin_PROGRAMS = shibd
+
+shibd_SOURCES = shibd.cpp
+
+shibd_LDADD = \
+  $(top_builddir)/shibsp/libshibsp.la
+
+EXTRA_DIST = shibd.vcproj shibd_win32.cpp resource.h shibd.rc
similarity index 94%
rename from shar/resource.h
rename to shibd/resource.h
index 4d229ce..fd2d1fe 100644 (file)
@@ -1,6 +1,6 @@
 //{{NO_DEPENDENCIES}}
 // Microsoft Developer Studio generated include file.
-// Used by shar.rc
+// Used by shibd.rc
 //
 
 // Next default values for new objects
similarity index 96%
rename from shar/shar.cpp
rename to shibd/shibd.cpp
index d11b26e..7b72b09 100644 (file)
-/*
- *  Copyright 2001-2007 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.
- */
-
-/*
- * shar.cpp -- the shibd "main" code.  All the functionality is elsewhere
- *
- * Created By: Derek Atkins <derek@ihtfp.com>
- *
- * $Id$
- */
-
-
-// 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
-
-#ifdef WIN32
-# define _CRT_NONSTDC_NO_DEPRECATE 1
-# define _CRT_SECURE_NO_DEPRECATE 1
-#endif
-
-#include <shibsp/SPConfig.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#include <sys/select.h>
-#endif
-
-#include <stdio.h>
-#include <signal.h>
-#include <log4cpp/Category.hh>
-#include <shibsp/ServiceProvider.h>
-#include <shibsp/remoting/ListenerService.h>
-#include <xercesc/util/XMLUniDefs.hpp>
-#include <xmltooling/XMLToolingConfig.h>
-#include <xmltooling/util/XMLHelper.h>
-
-using namespace shibsp;
-using namespace log4cpp;
-using namespace xmltooling;
-using namespace std;
-
-bool shibd_shutdown = false;
-const char* shar_config = NULL;
-const char* shar_schemadir = NULL;
-bool shar_checkonly = false;
-static int unlink_socket = 0;
-const char* pidfile = NULL;
-
-#ifdef WIN32
-
-//#include <CRTDBG.H>
-
-#define nNoMansLandSize 4
-typedef struct _CrtMemBlockHeader
-{
-        struct _CrtMemBlockHeader * pBlockHeaderNext;
-        struct _CrtMemBlockHeader * pBlockHeaderPrev;
-        char *                      szFileName;
-        int                         nLine;
-        size_t                      nDataSize;
-        int                         nBlockUse;
-        long                        lRequest;
-        unsigned char               gap[nNoMansLandSize];
-        /* followed by:
-         *  unsigned char           data[nDataSize];
-         *  unsigned char           anotherGap[nNoMansLandSize];
-         */
-} _CrtMemBlockHeader;
-
-/*
-int MyAllocHook(int nAllocType, void *pvData,
-      size_t nSize, int nBlockUse, long lRequest,
-      const unsigned char * szFileName, int nLine)
-{
-    if ( nBlockUse == _CRT_BLOCK )
-      return( TRUE );
-    if (nAllocType == _HOOK_FREE) {
-        _CrtMemBlockHeader* ptr = (_CrtMemBlockHeader*)(((_CrtMemBlockHeader *)pvData)-1);
-        if (ptr->nDataSize == 8192)
-            fprintf(stderr,"free  request %u size %u\n", ptr->lRequest, ptr->nDataSize);
-    }
-    else if (nAllocType == _HOOK_ALLOC && nSize == 8192)
-        fprintf(stderr,"%s request %u size %u\n", ((nAllocType == _HOOK_ALLOC) ? "alloc" : "realloc"), lRequest, nSize);
-    return (TRUE);
-}
-*/
-
-int real_main(int preinit)
-{
-    SPConfig& conf=SPConfig::getConfig();
-    if (preinit) {
-
-        // Initialize the SP library.
-        conf.setFeatures(
-            SPConfig::Listener |
-            SPConfig::Caching |
-            SPConfig::Metadata |
-            SPConfig::Trust |
-            SPConfig::Credentials |
-            SPConfig::AttributeResolver |
-            SPConfig::OutOfProcess |
-            (shar_checkonly ? (SPConfig::InProcess | SPConfig::RequestMapping) : SPConfig::Logging)
-            );
-        if (!shar_config)
-            shar_config=getenv("SHIBCONFIG");
-        if (!shar_schemadir)
-            shar_schemadir=getenv("SHIBSCHEMAS");
-        if (!shar_schemadir)
-            shar_schemadir=SHIBSP_SCHEMAS;
-        if (!shar_config)
-            shar_config=SHIBSP_CONFIG;
-        if (!conf.init(shar_schemadir)) {
-            fprintf(stderr, "configuration is invalid, see console for specific problems\n");
-            return -1;
-        }
-        
-        try {
-            fprintf(stderr, "loading configuration file: %s\n", shar_config);
-            static const XMLCh path[] = UNICODE_LITERAL_4(p,a,t,h);
-            static const XMLCh validate[] = UNICODE_LITERAL_8(v,a,l,i,d,a,t,e);
-            DOMDocument* dummydoc=XMLToolingConfig::getConfig().getParser().newDocument();
-            XercesJanitor<DOMDocument> docjanitor(dummydoc);
-            DOMElement* dummy = dummydoc->createElementNS(NULL,path);
-            auto_ptr_XMLCh src(shar_config);
-            dummy->setAttributeNS(NULL,path,src.get());
-            dummy->setAttributeNS(NULL,validate,xmlconstants::XML_ONE);
-    
-            conf.setServiceProvider(conf.ServiceProviderManager.newPlugin(XML_SERVICE_PROVIDER,dummy));
-            conf.getServiceProvider()->init();
-        }
-        catch (exception& ex) {
-            fprintf(stderr, "caught exception while loading configuration: %s\n", ex.what());
-            conf.term();
-            return -2;
-        }
-
-        // If just a test run, bail.
-        if (shar_checkonly) {
-            fprintf(stdout, "overall configuration is loadable, check console for non-fatal problems\n");
-            return 0;
-        }
-    }
-    else {
-
-        //_CrtSetAllocHook(MyAllocHook);
-
-        // Run the listener
-        if (!shar_checkonly) {
-
-            // Run the listener.
-            if (!conf.getServiceProvider()->getListenerService()->run(&shibd_shutdown)) {
-                fprintf(stderr, "listener failed to enter listen loop\n");
-                return -3;
-            }
-        }
-
-        conf.term();
-    }
-    return 0;
-}
-
-#else
-
-static void term_handler(int arg)
-{
-    shibd_shutdown = true;
-}
-
-static int setup_signals(void)
-{
-    struct sigaction sa;
-    memset(&sa, 0, sizeof (sa));
-    sa.sa_handler = SIG_IGN;
-    sa.sa_flags = SA_RESTART;
-
-    if (sigaction(SIGPIPE, &sa, NULL) < 0) {
-        return -1;
-    }
-
-    memset(&sa, 0, sizeof (sa));
-    sa.sa_handler = term_handler;
-    sa.sa_flags = SA_RESTART;
-
-    if (sigaction(SIGHUP, &sa, NULL) < 0) {
-        return -1;
-    }
-    if (sigaction(SIGINT, &sa, NULL) < 0) {
-        return -1;
-    }
-    if (sigaction(SIGQUIT, &sa, NULL) < 0) {
-        return -1;
-    }
-    if (sigaction(SIGTERM, &sa, NULL) < 0) {
-        return -1;
-    }
-    return 0;
-}
-
-static void usage(char* whoami)
-{
-    fprintf(stderr, "usage: %s [-fcdt]\n", whoami);
-    fprintf(stderr, "  -c\tconfig file to use.\n");
-    fprintf(stderr, "  -d\tschema directory to use.\n");
-    fprintf(stderr, "  -t\tcheck configuration file for problems.\n");
-    fprintf(stderr, "  -f\tforce removal of listener socket.\n");
-    fprintf(stderr, "  -p\tpid file to use.\n");
-    fprintf(stderr, "  -h\tprint this help message.\n");
-    exit(1);
-}
-
-static int parse_args(int argc, char* argv[])
-{
-    int opt;
-
-    while ((opt = getopt(argc, argv, "c:d:p:fth")) > 0) {
-        switch (opt) {
-            case 'c':
-                shar_config=optarg;
-                break;
-            case 'd':
-                shar_schemadir=optarg;
-                break;
-            case 'f':
-                unlink_socket = 1;
-                break;
-            case 't':
-                shar_checkonly=true;
-                break;
-            case 'p':
-                pidfile=optarg;
-                break;
-            default:
-                return -1;
-        }
-    }
-    return 0;
-}
-
-int main(int argc, char *argv[])
-{
-    if (setup_signals() != 0)
-        return -1;
-
-    if (parse_args(argc, argv) != 0)
-        usage(argv[0]);
-
-    if (!shar_config)
-        shar_config=getenv("SHIBCONFIG");
-    if (!shar_schemadir)
-        shar_schemadir=getenv("SHIBSCHEMAS");
-    if (!shar_schemadir)
-        shar_schemadir=SHIBSP_SCHEMAS;
-    if (!shar_config)
-        shar_config=SHIBSP_CONFIG;
-
-    // initialize the shib-target library
-    SPConfig& conf=SPConfig::getConfig();
-    conf.setFeatures(
-        SPConfig::Listener |
-        SPConfig::Caching |
-        SPConfig::Metadata |
-        SPConfig::Trust |
-        SPConfig::Credentials |
-        SPConfig::AttributeResolver |
-        SPConfig::OutOfProcess |
-        (shar_checkonly ? (SPConfig::InProcess | SPConfig::RequestMapping) : SPConfig::Logging)
-        );
-    if (!conf.init(shar_schemadir)) {
-        fprintf(stderr, "configuration is invalid, check console for specific problems\n");
-        return -1;
-    }
-
-    try {
-        fprintf(stderr, "loading configuration file: %s\n", shar_config);
-        static const XMLCh path[] = UNICODE_LITERAL_4(p,a,t,h);
-        static const XMLCh validate[] = UNICODE_LITERAL_8(v,a,l,i,d,a,t,e);
-        DOMDocument* dummydoc=XMLToolingConfig::getConfig().getParser().newDocument();
-        XercesJanitor<DOMDocument> docjanitor(dummydoc);
-        DOMElement* dummy = dummydoc->createElementNS(NULL,path);
-        auto_ptr_XMLCh src(shar_config);
-        dummy->setAttributeNS(NULL,path,src.get());
-        dummy->setAttributeNS(NULL,validate,xmlconstants::XML_ONE);
-
-        conf.setServiceProvider(conf.ServiceProviderManager.newPlugin(XML_SERVICE_PROVIDER,dummy));
-        conf.getServiceProvider()->init();
-    }
-    catch (exception& ex) {
-        fprintf(stderr, "caught exception while loading configuration: %s\n", ex.what());
-        conf.term();
-        return -2;
-    }
-
-    if (shar_checkonly)
-        fprintf(stderr, "overall configuration is loadable, check console for non-fatal problems\n");
-    else {
-
-        // Write the pid file
-        if (pidfile) {
-            FILE* pidf = fopen(pidfile, "w");
-            if (pidf) {
-                fprintf(pidf, "%d\n", getpid());
-                fclose(pidf);
-            } else {
-                perror(pidfile);  // keep running though
-            }
-        }
-    
-        // Run the listener
-        if (!conf.getServiceProvider()->getListenerService()->run(&shibd_shutdown)) {
-            fprintf(stderr, "listener failed to enter listen loop\n");
-            return -3;
-        }
-    }
-
-    conf.term();
-    if (pidfile)
-        unlink(pidfile);
-    return 0;
-}
-
-#endif
+/*\r
+ *  Copyright 2001-2007 Internet2\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *     http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+/*\r
+ * shar.cpp -- the shibd "main" code.  All the functionality is elsewhere\r
+ *\r
+ * Created By: Derek Atkins <derek@ihtfp.com>\r
+ *\r
+ * $Id: shar.cpp 2164 2007-02-11 05:26:18 +0000 (Sun, 11 Feb 2007) cantor $\r
+ */\r
+\r
+\r
+// eventually we might be able to support autoconf via cygwin...\r
+#if defined (_MSC_VER) || defined(__BORLANDC__)\r
+# include "config_win32.h"\r
+#else\r
+# include "config.h"\r
+#endif\r
+\r
+#ifdef WIN32\r
+# define _CRT_NONSTDC_NO_DEPRECATE 1\r
+# define _CRT_SECURE_NO_DEPRECATE 1\r
+#endif\r
+\r
+#include <shibsp/SPConfig.h>\r
+\r
+#ifdef HAVE_UNISTD_H\r
+#include <unistd.h>\r
+#include <sys/select.h>\r
+#endif\r
+\r
+#include <stdio.h>\r
+#include <signal.h>\r
+#include <log4cpp/Category.hh>\r
+#include <shibsp/ServiceProvider.h>\r
+#include <shibsp/remoting/ListenerService.h>\r
+#include <xercesc/util/XMLUniDefs.hpp>\r
+#include <xmltooling/XMLToolingConfig.h>\r
+#include <xmltooling/util/XMLHelper.h>\r
+\r
+using namespace shibsp;\r
+using namespace log4cpp;\r
+using namespace xmltooling;\r
+using namespace std;\r
+\r
+bool shibd_shutdown = false;\r
+const char* shar_config = NULL;\r
+const char* shar_schemadir = NULL;\r
+bool shar_checkonly = false;\r
+static int unlink_socket = 0;\r
+const char* pidfile = NULL;\r
+\r
+#ifdef WIN32\r
+\r
+//#include <CRTDBG.H>\r
+\r
+#define nNoMansLandSize 4\r
+typedef struct _CrtMemBlockHeader\r
+{\r
+        struct _CrtMemBlockHeader * pBlockHeaderNext;\r
+        struct _CrtMemBlockHeader * pBlockHeaderPrev;\r
+        char *                      szFileName;\r
+        int                         nLine;\r
+        size_t                      nDataSize;\r
+        int                         nBlockUse;\r
+        long                        lRequest;\r
+        unsigned char               gap[nNoMansLandSize];\r
+        /* followed by:\r
+         *  unsigned char           data[nDataSize];\r
+         *  unsigned char           anotherGap[nNoMansLandSize];\r
+         */\r
+} _CrtMemBlockHeader;\r
+\r
+/*\r
+int MyAllocHook(int nAllocType, void *pvData,\r
+      size_t nSize, int nBlockUse, long lRequest,\r
+      const unsigned char * szFileName, int nLine)\r
+{\r
+    if ( nBlockUse == _CRT_BLOCK )\r
+      return( TRUE );\r
+    if (nAllocType == _HOOK_FREE) {\r
+        _CrtMemBlockHeader* ptr = (_CrtMemBlockHeader*)(((_CrtMemBlockHeader *)pvData)-1);\r
+        if (ptr->nDataSize == 8192)\r
+            fprintf(stderr,"free  request %u size %u\n", ptr->lRequest, ptr->nDataSize);\r
+    }\r
+    else if (nAllocType == _HOOK_ALLOC && nSize == 8192)\r
+        fprintf(stderr,"%s request %u size %u\n", ((nAllocType == _HOOK_ALLOC) ? "alloc" : "realloc"), lRequest, nSize);\r
+    return (TRUE);\r
+}\r
+*/\r
+\r
+int real_main(int preinit)\r
+{\r
+    SPConfig& conf=SPConfig::getConfig();\r
+    if (preinit) {\r
+\r
+        // Initialize the SP library.\r
+        conf.setFeatures(\r
+            SPConfig::Listener |\r
+            SPConfig::Caching |\r
+            SPConfig::Metadata |\r
+            SPConfig::Trust |\r
+            SPConfig::Credentials |\r
+            SPConfig::AttributeResolver |\r
+            SPConfig::OutOfProcess |\r
+            (shar_checkonly ? (SPConfig::InProcess | SPConfig::RequestMapping) : SPConfig::Logging)\r
+            );\r
+        if (!shar_config)\r
+            shar_config=getenv("SHIBCONFIG");\r
+        if (!shar_schemadir)\r
+            shar_schemadir=getenv("SHIBSCHEMAS");\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
+            fprintf(stderr, "configuration is invalid, see console for specific problems\n");\r
+            return -1;\r
+        }\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
+            DOMDocument* dummydoc=XMLToolingConfig::getConfig().getParser().newDocument();\r
+            XercesJanitor<DOMDocument> docjanitor(dummydoc);\r
+            DOMElement* dummy = dummydoc->createElementNS(NULL,path);\r
+            auto_ptr_XMLCh src(shar_config);\r
+            dummy->setAttributeNS(NULL,path,src.get());\r
+            dummy->setAttributeNS(NULL,validate,xmlconstants::XML_ONE);\r
+    \r
+            conf.setServiceProvider(conf.ServiceProviderManager.newPlugin(XML_SERVICE_PROVIDER,dummy));\r
+            conf.getServiceProvider()->init();\r
+        }\r
+        catch (exception& ex) {\r
+            fprintf(stderr, "caught exception while loading configuration: %s\n", ex.what());\r
+            conf.term();\r
+            return -2;\r
+        }\r
+\r
+        // If just a test run, bail.\r
+        if (shar_checkonly) {\r
+            fprintf(stdout, "overall configuration is loadable, check console for non-fatal problems\n");\r
+            return 0;\r
+        }\r
+    }\r
+    else {\r
+\r
+        //_CrtSetAllocHook(MyAllocHook);\r
+\r
+        // Run the listener\r
+        if (!shar_checkonly) {\r
+\r
+            // Run the listener.\r
+            if (!conf.getServiceProvider()->getListenerService()->run(&shibd_shutdown)) {\r
+                fprintf(stderr, "listener failed to enter listen loop\n");\r
+                return -3;\r
+            }\r
+        }\r
+\r
+        conf.term();\r
+    }\r
+    return 0;\r
+}\r
+\r
+#else\r
+\r
+static void term_handler(int arg)\r
+{\r
+    shibd_shutdown = true;\r
+}\r
+\r
+static int setup_signals(void)\r
+{\r
+    struct sigaction sa;\r
+    memset(&sa, 0, sizeof (sa));\r
+    sa.sa_handler = SIG_IGN;\r
+    sa.sa_flags = SA_RESTART;\r
+\r
+    if (sigaction(SIGPIPE, &sa, NULL) < 0) {\r
+        return -1;\r
+    }\r
+\r
+    memset(&sa, 0, sizeof (sa));\r
+    sa.sa_handler = term_handler;\r
+    sa.sa_flags = SA_RESTART;\r
+\r
+    if (sigaction(SIGHUP, &sa, NULL) < 0) {\r
+        return -1;\r
+    }\r
+    if (sigaction(SIGINT, &sa, NULL) < 0) {\r
+        return -1;\r
+    }\r
+    if (sigaction(SIGQUIT, &sa, NULL) < 0) {\r
+        return -1;\r
+    }\r
+    if (sigaction(SIGTERM, &sa, NULL) < 0) {\r
+        return -1;\r
+    }\r
+    return 0;\r
+}\r
+\r
+static void usage(char* whoami)\r
+{\r
+    fprintf(stderr, "usage: %s [-fcdt]\n", whoami);\r
+    fprintf(stderr, "  -c\tconfig file to use.\n");\r
+    fprintf(stderr, "  -d\tschema directory 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, "  -h\tprint this help message.\n");\r
+    exit(1);\r
+}\r
+\r
+static int parse_args(int argc, char* argv[])\r
+{\r
+    int opt;\r
+\r
+    while ((opt = getopt(argc, argv, "c:d:p:fth")) > 0) {\r
+        switch (opt) {\r
+            case 'c':\r
+                shar_config=optarg;\r
+                break;\r
+            case 'd':\r
+                shar_schemadir=optarg;\r
+                break;\r
+            case 'f':\r
+                unlink_socket = 1;\r
+                break;\r
+            case 't':\r
+                shar_checkonly=true;\r
+                break;\r
+            case 'p':\r
+                pidfile=optarg;\r
+                break;\r
+            default:\r
+                return -1;\r
+        }\r
+    }\r
+    return 0;\r
+}\r
+\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
+\r
+    if (!shar_config)\r
+        shar_config=getenv("SHIBCONFIG");\r
+    if (!shar_schemadir)\r
+        shar_schemadir=getenv("SHIBSCHEMAS");\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
+        SPConfig::Listener |\r
+        SPConfig::Caching |\r
+        SPConfig::Metadata |\r
+        SPConfig::Trust |\r
+        SPConfig::Credentials |\r
+        SPConfig::AttributeResolver |\r
+        SPConfig::OutOfProcess |\r
+        (shar_checkonly ? (SPConfig::InProcess | SPConfig::RequestMapping) : SPConfig::Logging)\r
+        );\r
+    if (!conf.init(shar_schemadir)) {\r
+        fprintf(stderr, "configuration is invalid, check console for specific problems\n");\r
+        return -1;\r
+    }\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
+        DOMDocument* dummydoc=XMLToolingConfig::getConfig().getParser().newDocument();\r
+        XercesJanitor<DOMDocument> docjanitor(dummydoc);\r
+        DOMElement* dummy = dummydoc->createElementNS(NULL,path);\r
+        auto_ptr_XMLCh src(shar_config);\r
+        dummy->setAttributeNS(NULL,path,src.get());\r
+        dummy->setAttributeNS(NULL,validate,xmlconstants::XML_ONE);\r
+\r
+        conf.setServiceProvider(conf.ServiceProviderManager.newPlugin(XML_SERVICE_PROVIDER,dummy));\r
+        conf.getServiceProvider()->init();\r
+    }\r
+    catch (exception& ex) {\r
+        fprintf(stderr, "caught exception while loading configuration: %s\n", ex.what());\r
+        conf.term();\r
+        return -2;\r
+    }\r
+\r
+    if (shar_checkonly)\r
+        fprintf(stderr, "overall configuration is loadable, check console for non-fatal problems\n");\r
+    else {\r
+\r
+        // Write the pid file\r
+        if (pidfile) {\r
+            FILE* pidf = fopen(pidfile, "w");\r
+            if (pidf) {\r
+                fprintf(pidf, "%d\n", getpid());\r
+                fclose(pidf);\r
+            } else {\r
+                perror(pidfile);  // keep running though\r
+            }\r
+        }\r
+    \r
+        // Run the listener\r
+        if (!conf.getServiceProvider()->getListenerService()->run(&shibd_shutdown)) {\r
+            fprintf(stderr, "listener failed to enter listen loop\n");\r
+            return -3;\r
+        }\r
+    }\r
+\r
+    conf.term();\r
+    if (pidfile)\r
+        unlink(pidfile);\r
+    return 0;\r
+}\r
+\r
+#endif\r
similarity index 95%
rename from shar/shar.rc
rename to shibd/shibd.rc
index fb44b32..6f5f5ff 100644 (file)
-//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
-
-#ifndef _MAC
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,3,0,0
- PRODUCTVERSION 1,3,0,0
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x40004L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
-    BLOCK "StringFileInfo"
-    BEGIN
-        BLOCK "040904b0"
-        BEGIN
-            VALUE "Comments", "\0"
-            VALUE "CompanyName", "Internet2\0"
-            VALUE "FileDescription", "Shibboleth Daemon Service\0"
-            VALUE "FileVersion", "1, 3, 0, 0\0"
-            VALUE "InternalName", "shar\0"
-            VALUE "LegalCopyright", "Copyright Â© 2005 Internet2\0"
-            VALUE "LegalTrademarks", "\0"
-            VALUE "OriginalFilename", "shibd.exe\0"
-            VALUE "PrivateBuild", "\0"
-            VALUE "ProductName", "Shibboleth 1.3\0"
-            VALUE "ProductVersion", "1, 3, 0, 0\0"
-            VALUE "SpecialBuild", "\0"
-        END
-    END
-    BLOCK "VarFileInfo"
-    BEGIN
-        VALUE "Translation", 0x409, 1200
-    END
-END
-
-#endif    // !_MAC
-
-
-#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
-
-#endif    // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif    // not APSTUDIO_INVOKED
-
+//Microsoft Developer Studio generated resource script.\r
+//\r
+#include "resource.h"\r
+\r
+#define APSTUDIO_READONLY_SYMBOLS\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 2 resource.\r
+//\r
+#include "afxres.h"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#undef APSTUDIO_READONLY_SYMBOLS\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// English (U.S.) resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+#ifndef _MAC\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Version\r
+//\r
+\r
+VS_VERSION_INFO VERSIONINFO\r
+ FILEVERSION 1,3,0,0\r
+ PRODUCTVERSION 1,3,0,0\r
+ FILEFLAGSMASK 0x3fL\r
+#ifdef _DEBUG\r
+ FILEFLAGS 0x1L\r
+#else\r
+ FILEFLAGS 0x0L\r
+#endif\r
+ FILEOS 0x40004L\r
+ FILETYPE 0x1L\r
+ FILESUBTYPE 0x0L\r
+BEGIN\r
+    BLOCK "StringFileInfo"\r
+    BEGIN\r
+        BLOCK "040904b0"\r
+        BEGIN\r
+            VALUE "Comments", "\0"\r
+            VALUE "CompanyName", "Internet2\0"\r
+            VALUE "FileDescription", "Shibboleth Daemon Service\0"\r
+            VALUE "FileVersion", "1, 3, 0, 0\0"\r
+            VALUE "InternalName", "shar\0"\r
+            VALUE "LegalCopyright", "Copyright Â© 2005 Internet2\0"\r
+            VALUE "LegalTrademarks", "\0"\r
+            VALUE "OriginalFilename", "shibd.exe\0"\r
+            VALUE "PrivateBuild", "\0"\r
+            VALUE "ProductName", "Shibboleth 1.3\0"\r
+            VALUE "ProductVersion", "1, 3, 0, 0\0"\r
+            VALUE "SpecialBuild", "\0"\r
+        END\r
+    END\r
+    BLOCK "VarFileInfo"\r
+    BEGIN\r
+        VALUE "Translation", 0x409, 1200\r
+    END\r
+END\r
+\r
+#endif    // !_MAC\r
+\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// TEXTINCLUDE\r
+//\r
+\r
+1 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+    "resource.h\0"\r
+END\r
+\r
+2 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+    "#include ""afxres.h""\r\n"\r
+    "\0"\r
+END\r
+\r
+3 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+    "\r\n"\r
+    "\0"\r
+END\r
+\r
+#endif    // APSTUDIO_INVOKED\r
+\r
+#endif    // English (U.S.) resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+\r
+#ifndef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 3 resource.\r
+//\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#endif    // not APSTUDIO_INVOKED\r
+\r
similarity index 82%
rename from shar/shar.vcproj
rename to shibd/shibd.vcproj
index 2a3dd92..577c0fa 100644 (file)
@@ -2,8 +2,9 @@
 <VisualStudioProject
        ProjectType="Visual C++"
        Version="8.00"
-       Name="shar"
+       Name="shibd"
        ProjectGUID="{F13141B5-6C87-40BB-8D4E-5CC56EBB4C59}"
+       RootNamespace="shibd"
        >
        <Platforms>
                <Platform
@@ -15,8 +16,8 @@
        <Configurations>
                <Configuration
                        Name="Release|Win32"
-                       OutputDirectory=".\Release"
-                       IntermediateDirectory=".\Release"
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+                       IntermediateDirectory="$(ConfigurationName)"
                        ConfigurationType="1"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
@@ -37,7 +38,7 @@
                        />
                        <Tool
                                Name="VCMIDLTool"
-                               TypeLibraryName=".\Release/shar.tlb"
+                               TypeLibraryName=".\Release/shibd.tlb"
                                HeaderFileName=""
                        />
                        <Tool
                                EnableFunctionLevelLinking="true"
                                RuntimeTypeInfo="true"
                                UsePrecompiledHeader="0"
-                               PrecompiledHeaderFile=".\Release/shar.pch"
-                               AssemblerListingLocation=".\Release/"
-                               ObjectFile=".\Release/"
-                               ProgramDataBaseFileName=".\Release/"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
                                Detect64BitPortabilityProblems="true"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalDependencies="wsock32.lib log4cpp.lib saml_5.lib saml2.lib xmltooling1.lib"
-                               OutputFile="Release/shibd.exe"
+                               AdditionalDependencies="wsock32.lib log4cpp.lib saml2.lib xmltooling1.lib"
+                               OutputFile="$(OutDir)/shibd.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
                                AdditionalLibraryDirectories="&quot;..\..\cpp-opensaml1\saml\Release&quot;;&quot;..\..\cpp-opensaml2\Release&quot;;&quot;..\..\cpp-xmltooling\Release&quot;"
-                               ProgramDatabaseFile=".\Release/shibd.pdb"
                                SubSystem="1"
                                TargetMachine="1"
                        />
                </Configuration>
                <Configuration
                        Name="Debug|Win32"
-                       OutputDirectory=".\Debug"
-                       IntermediateDirectory=".\Debug"
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+                       IntermediateDirectory="$(ConfigurationName)"
                        ConfigurationType="1"
                        InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
                        UseOfMFC="0"
                        />
                        <Tool
                                Name="VCMIDLTool"
-                               TypeLibraryName=".\Debug/shar.tlb"
+                               TypeLibraryName=".\Debug/shibd.tlb"
                                HeaderFileName=""
                        />
                        <Tool
                                RuntimeLibrary="3"
                                RuntimeTypeInfo="true"
                                UsePrecompiledHeader="0"
-                               PrecompiledHeaderFile=".\Debug/shar.pch"
-                               AssemblerListingLocation=".\Debug/"
-                               ObjectFile=".\Debug/"
-                               ProgramDataBaseFileName=".\Debug/"
                                BrowseInformation="1"
                                WarningLevel="3"
                                SuppressStartupBanner="true"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalDependencies="wsock32.lib log4cppD.lib saml_5D.lib saml2D.lib xmltooling1D.lib"
-                               OutputFile="Debug/shibd.exe"
+                               AdditionalDependencies="wsock32.lib log4cppD.lib saml2D.lib xmltooling1D.lib"
+                               OutputFile="$(OutDir)/shibd.exe"
                                LinkIncremental="2"
                                SuppressStartupBanner="true"
                                AdditionalLibraryDirectories="&quot;..\..\cpp-opensaml1\saml\Debug&quot;;&quot;..\..\cpp-opensaml2\Debug&quot;;&quot;..\..\cpp-xmltooling\Debug&quot;"
                        >
                </File>
                <File
-                       RelativePath="shar.cpp"
+                       RelativePath=".\shibd.cpp"
                        >
                </File>
                <File
-                       RelativePath="shar.rc"
+                       RelativePath=".\shibd.rc"
                        >
                </File>
                <File
-                       RelativePath="shar_win32.cpp"
+                       RelativePath=".\shibd_win32.cpp"
                        >
                </File>
        </Files>
similarity index 96%
rename from shar/shar_win32.cpp
rename to shibd/shibd_win32.cpp
index c9043ea..fc48dbc 100644 (file)
-/*
- *  Copyright 2001-2007 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.
- */
-
-/*
- * shar_win32.cpp -- the SHAR "main" code on Win32
- *
- * Created By: Scott Cantor (cantor.2@osu.edu)
- *
- * $Id$
- */
-
-#include "config_win32.h"
-
-#define _CRT_NONSTDC_NO_DEPRECATE 1
-#define _CRT_SECURE_NO_DEPRECATE 1
-
-#include <shib-target/shib-target.h>
-
-extern bool shibd_shutdown;                    // signals shutdown to Unix side
-extern const char* shar_schemadir;
-extern const char* shar_config;
-extern bool shar_checkonly;
-
-// internal variables
-SERVICE_STATUS          ssStatus;       // current status of the service
-SERVICE_STATUS_HANDLE   sshStatusHandle;
-DWORD                   dwErr = 0;
-BOOL                    bConsole = FALSE;
-char                    szErr[256];
-LPCSTR                  lpszInstall = NULL;
-LPCSTR                  lpszRemove = NULL;
-
-// internal function prototypes
-VOID WINAPI service_ctrl(DWORD dwCtrlCode);
-VOID WINAPI service_main(DWORD dwArgc, LPSTR *lpszArgv);
-VOID CmdInstallService(LPCSTR);
-VOID CmdRemoveService(LPCSTR);
-LPTSTR GetLastErrorText( LPSTR lpszBuf, DWORD dwSize );
-
-BOOL LogEvent(
-    LPCTSTR  lpUNCServerName,
-    WORD  wType,
-    DWORD  dwEventID,
-    PSID  lpUserSid,
-    LPCTSTR  message);
-
-VOID ServiceStart(DWORD dwArgc, LPSTR *lpszArgv);
-VOID ServiceStop();
-BOOL ReportStatusToSCMgr(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint);
-void AddToMessageLog(LPSTR lpszMsg);
-
-BOOL WINAPI BreakHandler(DWORD dwCtrlType)
-{
-   switch(dwCtrlType)
-    {
-        case CTRL_BREAK_EVENT:  // use Ctrl+C or Ctrl+Break to simulate
-        case CTRL_C_EVENT:      // SERVICE_CONTROL_STOP in console mode
-            ServiceStop();
-            return TRUE;
-    }
-    return FALSE;
-}
-
-
-int real_main(int);  // The revised two-phase main() in shar.cpp
-
-int main(int argc, char *argv[])
-{
-    int i=1;
-    while ((argc > i) && ((*argv[i] == '-') || (*argv[i] == '/')))
-    {
-        if (_stricmp("install", argv[i]+1) == 0)
-        {
-            if (argc > ++i)
-                lpszInstall = argv[i++];
-        }
-        else if (_stricmp("remove", argv[i]+1) == 0)
-        {
-            if (argc > ++i)
-                lpszRemove = argv[i++];
-        }
-        else if (_stricmp( "console", argv[i]+1) == 0)
-        {
-            i++;
-            bConsole = TRUE;
-        }
-        else if (_stricmp( "check", argv[i]+1) == 0)
-        {
-            i++;
-            bConsole = TRUE;
-            shar_checkonly=true;
-        }
-        else if (_stricmp( "config", argv[i]+1) == 0)
-        {
-            if (argc > ++i)
-                shar_config = argv[i++];
-        }
-        else if (_stricmp( "schemadir", argv[i]+1) == 0)
-        {
-            if (argc > ++i)
-                shar_schemadir = argv[i++];
-        }
-        else
-        {
-            goto dispatch;
-        }
-    }
-    
-    if (bConsole)
-    {
-        // Install break handler, then run the C routine twice, once to setup, once to start running.
-        SetConsoleCtrlHandler(&BreakHandler,TRUE);
-        if ((i=real_main(1))!=0)
-        {
-            LogEvent(NULL, EVENTLOG_ERROR_TYPE, 2100, NULL, "shibd startup failed, check shibd.log for further details");
-            return i;
-        }
-        return real_main(0);
-    }
-    else if (lpszInstall)
-    {
-        CmdInstallService(lpszInstall);
-        return 0;
-    }
-    else if (lpszRemove)
-    {
-        CmdRemoveService(lpszRemove);
-        return 0;
-    }
-    
-
-    // if it doesn't match any of the above parameters
-    // the service control manager may be starting the service
-    // so we must call StartServiceCtrlDispatcher
-    dispatch:
-        // this is just to be friendly
-        printf("%s -install <name>   to install the named service\n", argv[0]);
-        printf("%s -remove <name>    to remove the named service\n", argv[0]);
-        printf("%s -console          to run as a console app for debugging\n", argv[0]);
-        printf("%s -check            to run as a console app and check configuration\n", argv[0]);
-        printf("\t-config <file> to specify the config file to use\n");
-        printf("\t-schemadir <dir> to specify where schemas are\n");
-        printf("\nService starting.\nThis may take several seconds. Please wait.\n" );
-
-    SERVICE_TABLE_ENTRY dispatchTable[] =
-    {
-        { "SHIBD", (LPSERVICE_MAIN_FUNCTION)service_main },
-        { NULL, NULL }
-    };
-
-    if (!StartServiceCtrlDispatcher(dispatchTable))
-        LogEvent(NULL, EVENTLOG_ERROR_TYPE, 2100, NULL, "StartServiceCtrlDispatcher failed.");
-    return 0;
-}
-
-//
-//  FUNCTION: ServiceStart
-//
-//  PURPOSE: Actual code of the service
-//          that does the work.
-//
-VOID ServiceStart (DWORD dwArgc, LPSTR *lpszArgv)
-{
-
-    if (real_main(1)!=0)
-    {
-        LogEvent(NULL, EVENTLOG_ERROR_TYPE, 2100, NULL, "shibd startup failed, check shibd.log for further details");
-        return;
-    }
-
-    LogEvent(NULL, EVENTLOG_INFORMATION_TYPE, 7700, NULL, "shibd started successfully.");
-
-    if (!ReportStatusToSCMgr(SERVICE_RUNNING, NO_ERROR, 0))
-        return;
-
-    real_main(0);
-}
-
-
-//
-//  FUNCTION: ServiceStop
-//
-//   PURPOSE: Stops the service
-//
-VOID ServiceStop()
-{
-    if (!bConsole)
-        LogEvent(NULL, EVENTLOG_INFORMATION_TYPE, 7701, NULL, "shibd stopping...");
-    shibd_shutdown=true;
-}
-
-
-void WINAPI service_main(DWORD dwArgc, LPSTR *lpszArgv)
-{
-
-    // register our service control handler:
-    sshStatusHandle=RegisterServiceCtrlHandler(lpszArgv[0], service_ctrl);
-    if (!sshStatusHandle)
-        goto cleanup;
-
-    // SERVICE_STATUS members that don't change in example
-    ssStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
-    ssStatus.dwServiceSpecificExitCode = 0;
-
-
-    // report the status to the service control manager.
-    if (!ReportStatusToSCMgr(
-        SERVICE_START_PENDING, // service state
-        NO_ERROR,              // exit code
-        3000))                 // wait hint
-        goto cleanup;
-
-
-    ServiceStart(dwArgc, lpszArgv);
-
-cleanup:
-
-    // try to report the stopped status to the service control manager.
-    //
-    if (sshStatusHandle)
-        (VOID)ReportStatusToSCMgr(
-                            SERVICE_STOPPED,
-                            dwErr,
-                            0);
-
-    return;
-}
-
-
-//
-//  FUNCTION: service_ctrl
-//
-//  PURPOSE: This function is called by the SCM whenever
-//           ControlService() is called on this service.
-//
-//  PARAMETERS:
-//    dwCtrlCode - type of control requested
-//
-//  RETURN VALUE:
-//    none
-//
-VOID WINAPI service_ctrl(DWORD dwCtrlCode)
-{
-    // Handle the requested control code.
-    //
-    switch(dwCtrlCode)
-    {
-        // Stop the service.
-        //
-        case SERVICE_CONTROL_STOP:
-            ssStatus.dwCurrentState = SERVICE_STOP_PENDING;
-            ServiceStop();
-            break;
-
-        // Update the service status.
-        //
-        case SERVICE_CONTROL_INTERROGATE:
-            break;
-
-        // invalid control code
-        //
-        default:
-            break;
-
-    }
-
-    ReportStatusToSCMgr(ssStatus.dwCurrentState, NO_ERROR, 0);
-}
-
-
-//
-//  FUNCTION: ReportStatusToSCMgr()
-//
-//  PURPOSE: Sets the current status of the service and
-//           reports it to the Service Control Manager
-//
-//  PARAMETERS:
-//    dwCurrentState - the state of the service
-//    dwWin32ExitCode - error code to report
-//    dwWaitHint - worst case estimate to next checkpoint
-//
-//  RETURN VALUE:
-//    TRUE  - success
-//    FALSE - failure
-//
-BOOL ReportStatusToSCMgr(DWORD dwCurrentState,
-                         DWORD dwWin32ExitCode,
-                         DWORD dwWaitHint)
-{
-    static DWORD dwCheckPoint = 1;
-    BOOL fResult = TRUE;
-
-
-    if (!bConsole) // when console we don't report to the SCM
-    {
-        if (dwCurrentState == SERVICE_START_PENDING)
-            ssStatus.dwControlsAccepted = 0;
-        else
-            ssStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
-
-        ssStatus.dwCurrentState = dwCurrentState;
-        ssStatus.dwWin32ExitCode = dwWin32ExitCode;
-        ssStatus.dwWaitHint = dwWaitHint;
-
-        if ( ( dwCurrentState == SERVICE_RUNNING ) ||
-             ( dwCurrentState == SERVICE_STOPPED ) )
-            ssStatus.dwCheckPoint = 0;
-        else
-            ssStatus.dwCheckPoint = dwCheckPoint++;
-
-
-        // Report the status of the service to the service control manager.
-        //
-        if (!(fResult = SetServiceStatus(sshStatusHandle, &ssStatus)))
-            LogEvent(NULL, EVENTLOG_ERROR_TYPE, 2100, NULL, "SetServiceStatus failed.");
-    }
-    return fResult;
-}
-
-
-///////////////////////////////////////////////////////////////////
-//
-//  The following code handles service installation and removal
-//
-//
-void CmdInstallService(LPCSTR name)
-{
-    SC_HANDLE   schService;
-    SC_HANDLE   schSCManager;
-
-    char szPath[256];
-    char dispName[512];
-    char realName[512];
-    char cmd[2048];
-
-    if ( GetModuleFileName( NULL, szPath, 256 ) == 0 )
-    {
-        printf("Unable to install %s - %s\n", name, GetLastErrorText(szErr, 256));
-        return;
-    }
-    
-    sprintf(dispName,"Shibboleth %s Daemon (%s)",PACKAGE_VERSION,name);
-    sprintf(realName,"shibd_%s",name);
-    if (shar_config && shar_schemadir)
-        sprintf(cmd,"%s -config %s -schemadir %s",szPath,shar_config,shar_schemadir);
-    else if (shar_config)
-        sprintf(cmd,"%s -config %s",szPath,shar_config);
-    else if (shar_schemadir)
-        sprintf(cmd,"%s -schemadir %s",szPath,shar_schemadir);
-    else
-        sprintf(cmd,"%s",szPath);
-
-    schSCManager = OpenSCManager(
-                        NULL,                   // machine (NULL == local)
-                        NULL,                   // database (NULL == default)
-                        SC_MANAGER_ALL_ACCESS   // access required
-                        );
-    
-    
-    if ( schSCManager )
-    {
-        schService = CreateService(
-            schSCManager,               // SCManager database
-            realName,                   // name of service
-            dispName,                   // name to display
-            SERVICE_ALL_ACCESS,         // desired access
-            SERVICE_WIN32_OWN_PROCESS,  // service type
-            SERVICE_AUTO_START,         // start type
-            SERVICE_ERROR_NORMAL,       // error control type
-            cmd,                        // service's command line
-            NULL,                       // no load ordering group
-            NULL,                       // no tag identifier
-            NULL,                       // dependencies
-            NULL,                       // LocalSystem account
-            NULL);                      // no password
-
-        if ( schService )
-        {
-            printf("%s installed.\n",realName);
-            CloseServiceHandle(schService);
-        }
-        else
-        {
-            printf("CreateService failed - %s\n", GetLastErrorText(szErr, 256));
-        }
-
-        CloseServiceHandle(schSCManager);
-    }
-    else
-        printf("OpenSCManager failed - %s\n", GetLastErrorText(szErr,256));
-}
-
-void CmdRemoveService(LPCSTR name)
-{
-    SC_HANDLE   schService;
-    SC_HANDLE   schSCManager;
-    char        realName[512];
-
-    sprintf(realName,"shibd_%s",name);
-
-    schSCManager = OpenSCManager(
-                        NULL,                   // machine (NULL == local)
-                        NULL,                   // database (NULL == default)
-                        SC_MANAGER_ALL_ACCESS   // access required
-                        );
-    if ( schSCManager )
-    {
-        schService = OpenService(schSCManager, realName, SERVICE_ALL_ACCESS);
-
-        if (schService)
-        {
-            // try to stop the service
-            if ( ControlService( schService, SERVICE_CONTROL_STOP, &ssStatus ) )
-            {
-                printf("Stopping shibd (%s).", name);
-                Sleep( 1000 );
-
-                while( QueryServiceStatus( schService, &ssStatus ) )
-                {
-                    if ( ssStatus.dwCurrentState == SERVICE_STOP_PENDING )
-                    {
-                        printf(".");
-                        Sleep( 1000 );
-                    }
-                    else
-                        break;
-                }
-
-                if ( ssStatus.dwCurrentState == SERVICE_STOPPED )
-                    printf("\n%s stopped.\n", realName);
-                else
-                    printf("\n%s failed to stop.\n", realName);
-
-            }
-
-            // now remove the service
-            if( DeleteService(schService) )
-                printf("%s removed.\n", realName);
-            else
-                printf("DeleteService failed - %s\n", GetLastErrorText(szErr,256));
-
-
-            CloseServiceHandle(schService);
-        }
-        else
-            printf("OpenService failed - %s\n", GetLastErrorText(szErr,256));
-
-        CloseServiceHandle(schSCManager);
-    }
-    else
-        printf("OpenSCManager failed - %s\n", GetLastErrorText(szErr,256));
-}
-
-
-//
-//  FUNCTION: GetLastErrorText
-//
-//  PURPOSE: copies error message text to string
-//
-//  PARAMETERS:
-//    lpszBuf - destination buffer
-//    dwSize - size of buffer
-//
-//  RETURN VALUE:
-//    destination buffer
-//
-//  COMMENTS:
-//
-LPTSTR GetLastErrorText( LPSTR lpszBuf, DWORD dwSize )
-{
-    DWORD dwRet;
-    LPSTR lpszTemp = NULL;
-
-    dwRet = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY,
-                           NULL,
-                           GetLastError(),
-                           LANG_NEUTRAL,
-                           (LPSTR)&lpszTemp,
-                           0,
-                           NULL );
-
-    // supplied buffer is not long enough
-    if ( !dwRet || ( (long)dwSize < (long)dwRet+14 ) )
-        lpszBuf[0] = '\0';
-    else
-    {
-        lpszTemp[lstrlen(lpszTemp)-2] = '\0';  //remove cr and newline character
-        sprintf( lpszBuf, "%s (0x%x)", lpszTemp, GetLastError() );
-    }
-
-    if ( lpszTemp )
-        LocalFree((HLOCAL) lpszTemp );
-
-    return lpszBuf;
-}
-
-BOOL LogEvent(
-    LPCSTR  lpUNCServerName,
-    WORD  wType,
-    DWORD  dwEventID,
-    PSID  lpUserSid,
-    LPCSTR  message)
-{
-    LPCSTR  messages[] = {message, NULL};
-    
-    HANDLE hElog = RegisterEventSource(lpUNCServerName, "Shibboleth Daemon");
-    BOOL res = ReportEvent(hElog, wType, 0, dwEventID, lpUserSid, 1, 0, messages, NULL);
-    return (DeregisterEventSource(hElog) && res);
-}
+/*\r
+ *  Copyright 2001-2007 Internet2\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *     http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+/*\r
+ * shar_win32.cpp -- the SHAR "main" code on Win32\r
+ *\r
+ * Created By: Scott Cantor (cantor.2@osu.edu)\r
+ *\r
+ * $Id: shar_win32.cpp 2150 2007-02-02 04:06:15 +0000 (Fri, 02 Feb 2007) cantor $\r
+ */\r
+\r
+#include "config_win32.h"\r
+\r
+#define _CRT_NONSTDC_NO_DEPRECATE 1\r
+#define _CRT_SECURE_NO_DEPRECATE 1\r
+\r
+#include <shib-target/shib-target.h>\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 bool shar_checkonly;\r
+\r
+// internal variables\r
+SERVICE_STATUS          ssStatus;       // current status of the service\r
+SERVICE_STATUS_HANDLE   sshStatusHandle;\r
+DWORD                   dwErr = 0;\r
+BOOL                    bConsole = FALSE;\r
+char                    szErr[256];\r
+LPCSTR                  lpszInstall = NULL;\r
+LPCSTR                  lpszRemove = NULL;\r
+\r
+// internal function prototypes\r
+VOID WINAPI service_ctrl(DWORD dwCtrlCode);\r
+VOID WINAPI service_main(DWORD dwArgc, LPSTR *lpszArgv);\r
+VOID CmdInstallService(LPCSTR);\r
+VOID CmdRemoveService(LPCSTR);\r
+LPTSTR GetLastErrorText( LPSTR lpszBuf, DWORD dwSize );\r
+\r
+BOOL LogEvent(\r
+    LPCTSTR  lpUNCServerName,\r
+    WORD  wType,\r
+    DWORD  dwEventID,\r
+    PSID  lpUserSid,\r
+    LPCTSTR  message);\r
+\r
+VOID ServiceStart(DWORD dwArgc, LPSTR *lpszArgv);\r
+VOID ServiceStop();\r
+BOOL ReportStatusToSCMgr(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint);\r
+void AddToMessageLog(LPSTR lpszMsg);\r
+\r
+BOOL WINAPI BreakHandler(DWORD dwCtrlType)\r
+{\r
+   switch(dwCtrlType)\r
+    {\r
+        case CTRL_BREAK_EVENT:  // use Ctrl+C or Ctrl+Break to simulate\r
+        case CTRL_C_EVENT:      // SERVICE_CONTROL_STOP in console mode\r
+            ServiceStop();\r
+            return TRUE;\r
+    }\r
+    return FALSE;\r
+}\r
+\r
+\r
+int real_main(int);  // The revised two-phase main() in shar.cpp\r
+\r
+int main(int argc, char *argv[])\r
+{\r
+    int i=1;\r
+    while ((argc > i) && ((*argv[i] == '-') || (*argv[i] == '/')))\r
+    {\r
+        if (_stricmp("install", argv[i]+1) == 0)\r
+        {\r
+            if (argc > ++i)\r
+                lpszInstall = argv[i++];\r
+        }\r
+        else if (_stricmp("remove", argv[i]+1) == 0)\r
+        {\r
+            if (argc > ++i)\r
+                lpszRemove = argv[i++];\r
+        }\r
+        else if (_stricmp( "console", argv[i]+1) == 0)\r
+        {\r
+            i++;\r
+            bConsole = TRUE;\r
+        }\r
+        else if (_stricmp( "check", argv[i]+1) == 0)\r
+        {\r
+            i++;\r
+            bConsole = TRUE;\r
+            shar_checkonly=true;\r
+        }\r
+        else if (_stricmp( "config", argv[i]+1) == 0)\r
+        {\r
+            if (argc > ++i)\r
+                shar_config = argv[i++];\r
+        }\r
+        else if (_stricmp( "schemadir", argv[i]+1) == 0)\r
+        {\r
+            if (argc > ++i)\r
+                shar_schemadir = argv[i++];\r
+        }\r
+        else\r
+        {\r
+            goto dispatch;\r
+        }\r
+    }\r
+    \r
+    if (bConsole)\r
+    {\r
+        // Install break handler, then run the C routine twice, once to setup, once to start running.\r
+        SetConsoleCtrlHandler(&BreakHandler,TRUE);\r
+        if ((i=real_main(1))!=0)\r
+        {\r
+            LogEvent(NULL, EVENTLOG_ERROR_TYPE, 2100, NULL, "shibd startup failed, check shibd.log for further details");\r
+            return i;\r
+        }\r
+        return real_main(0);\r
+    }\r
+    else if (lpszInstall)\r
+    {\r
+        CmdInstallService(lpszInstall);\r
+        return 0;\r
+    }\r
+    else if (lpszRemove)\r
+    {\r
+        CmdRemoveService(lpszRemove);\r
+        return 0;\r
+    }\r
+    \r
+\r
+    // if it doesn't match any of the above parameters\r
+    // the service control manager may be starting the service\r
+    // so we must call StartServiceCtrlDispatcher\r
+    dispatch:\r
+        // this is just to be friendly\r
+        printf("%s -install <name>   to install the named service\n", argv[0]);\r
+        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-config <file> to specify the config file to use\n");\r
+        printf("\t-schemadir <dir> to specify where schemas are\n");\r
+        printf("\nService starting.\nThis may take several seconds. Please wait.\n" );\r
+\r
+    SERVICE_TABLE_ENTRY dispatchTable[] =\r
+    {\r
+        { "SHIBD", (LPSERVICE_MAIN_FUNCTION)service_main },\r
+        { NULL, NULL }\r
+    };\r
+\r
+    if (!StartServiceCtrlDispatcher(dispatchTable))\r
+        LogEvent(NULL, EVENTLOG_ERROR_TYPE, 2100, NULL, "StartServiceCtrlDispatcher failed.");\r
+    return 0;\r
+}\r
+\r
+//\r
+//  FUNCTION: ServiceStart\r
+//\r
+//  PURPOSE: Actual code of the service\r
+//          that does the work.\r
+//\r
+VOID ServiceStart (DWORD dwArgc, LPSTR *lpszArgv)\r
+{\r
+\r
+    if (real_main(1)!=0)\r
+    {\r
+        LogEvent(NULL, EVENTLOG_ERROR_TYPE, 2100, NULL, "shibd startup failed, check shibd.log for further details");\r
+        return;\r
+    }\r
+\r
+    LogEvent(NULL, EVENTLOG_INFORMATION_TYPE, 7700, NULL, "shibd started successfully.");\r
+\r
+    if (!ReportStatusToSCMgr(SERVICE_RUNNING, NO_ERROR, 0))\r
+        return;\r
+\r
+    real_main(0);\r
+}\r
+\r
+\r
+//\r
+//  FUNCTION: ServiceStop\r
+//\r
+//   PURPOSE: Stops the service\r
+//\r
+VOID ServiceStop()\r
+{\r
+    if (!bConsole)\r
+        LogEvent(NULL, EVENTLOG_INFORMATION_TYPE, 7701, NULL, "shibd stopping...");\r
+    shibd_shutdown=true;\r
+}\r
+\r
+\r
+void WINAPI service_main(DWORD dwArgc, LPSTR *lpszArgv)\r
+{\r
+\r
+    // register our service control handler:\r
+    sshStatusHandle=RegisterServiceCtrlHandler(lpszArgv[0], service_ctrl);\r
+    if (!sshStatusHandle)\r
+        goto cleanup;\r
+\r
+    // SERVICE_STATUS members that don't change in example\r
+    ssStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;\r
+    ssStatus.dwServiceSpecificExitCode = 0;\r
+\r
+\r
+    // report the status to the service control manager.\r
+    if (!ReportStatusToSCMgr(\r
+        SERVICE_START_PENDING, // service state\r
+        NO_ERROR,              // exit code\r
+        3000))                 // wait hint\r
+        goto cleanup;\r
+\r
+\r
+    ServiceStart(dwArgc, lpszArgv);\r
+\r
+cleanup:\r
+\r
+    // try to report the stopped status to the service control manager.\r
+    //\r
+    if (sshStatusHandle)\r
+        (VOID)ReportStatusToSCMgr(\r
+                            SERVICE_STOPPED,\r
+                            dwErr,\r
+                            0);\r
+\r
+    return;\r
+}\r
+\r
+\r
+//\r
+//  FUNCTION: service_ctrl\r
+//\r
+//  PURPOSE: This function is called by the SCM whenever\r
+//           ControlService() is called on this service.\r
+//\r
+//  PARAMETERS:\r
+//    dwCtrlCode - type of control requested\r
+//\r
+//  RETURN VALUE:\r
+//    none\r
+//\r
+VOID WINAPI service_ctrl(DWORD dwCtrlCode)\r
+{\r
+    // Handle the requested control code.\r
+    //\r
+    switch(dwCtrlCode)\r
+    {\r
+        // Stop the service.\r
+        //\r
+        case SERVICE_CONTROL_STOP:\r
+            ssStatus.dwCurrentState = SERVICE_STOP_PENDING;\r
+            ServiceStop();\r
+            break;\r
+\r
+        // Update the service status.\r
+        //\r
+        case SERVICE_CONTROL_INTERROGATE:\r
+            break;\r
+\r
+        // invalid control code\r
+        //\r
+        default:\r
+            break;\r
+\r
+    }\r
+\r
+    ReportStatusToSCMgr(ssStatus.dwCurrentState, NO_ERROR, 0);\r
+}\r
+\r
+\r
+//\r
+//  FUNCTION: ReportStatusToSCMgr()\r
+//\r
+//  PURPOSE: Sets the current status of the service and\r
+//           reports it to the Service Control Manager\r
+//\r
+//  PARAMETERS:\r
+//    dwCurrentState - the state of the service\r
+//    dwWin32ExitCode - error code to report\r
+//    dwWaitHint - worst case estimate to next checkpoint\r
+//\r
+//  RETURN VALUE:\r
+//    TRUE  - success\r
+//    FALSE - failure\r
+//\r
+BOOL ReportStatusToSCMgr(DWORD dwCurrentState,\r
+                         DWORD dwWin32ExitCode,\r
+                         DWORD dwWaitHint)\r
+{\r
+    static DWORD dwCheckPoint = 1;\r
+    BOOL fResult = TRUE;\r
+\r
+\r
+    if (!bConsole) // when console we don't report to the SCM\r
+    {\r
+        if (dwCurrentState == SERVICE_START_PENDING)\r
+            ssStatus.dwControlsAccepted = 0;\r
+        else\r
+            ssStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;\r
+\r
+        ssStatus.dwCurrentState = dwCurrentState;\r
+        ssStatus.dwWin32ExitCode = dwWin32ExitCode;\r
+        ssStatus.dwWaitHint = dwWaitHint;\r
+\r
+        if ( ( dwCurrentState == SERVICE_RUNNING ) ||\r
+             ( dwCurrentState == SERVICE_STOPPED ) )\r
+            ssStatus.dwCheckPoint = 0;\r
+        else\r
+            ssStatus.dwCheckPoint = dwCheckPoint++;\r
+\r
+\r
+        // Report the status of the service to the service control manager.\r
+        //\r
+        if (!(fResult = SetServiceStatus(sshStatusHandle, &ssStatus)))\r
+            LogEvent(NULL, EVENTLOG_ERROR_TYPE, 2100, NULL, "SetServiceStatus failed.");\r
+    }\r
+    return fResult;\r
+}\r
+\r
+\r
+///////////////////////////////////////////////////////////////////\r
+//\r
+//  The following code handles service installation and removal\r
+//\r
+//\r
+void CmdInstallService(LPCSTR name)\r
+{\r
+    SC_HANDLE   schService;\r
+    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
+        printf("Unable to install %s - %s\n", name, GetLastErrorText(szErr, 256));\r
+        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
+\r
+    schSCManager = OpenSCManager(\r
+                        NULL,                   // machine (NULL == local)\r
+                        NULL,                   // database (NULL == default)\r
+                        SC_MANAGER_ALL_ACCESS   // access required\r
+                        );\r
+    \r
+    \r
+    if ( schSCManager )\r
+    {\r
+        schService = CreateService(\r
+            schSCManager,               // SCManager database\r
+            realName,                   // name of service\r
+            dispName,                   // 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
+            NULL,                       // no load ordering group\r
+            NULL,                       // no tag identifier\r
+            NULL,                       // dependencies\r
+            NULL,                       // LocalSystem account\r
+            NULL);                      // no password\r
+\r
+        if ( schService )\r
+        {\r
+            printf("%s installed.\n",realName);\r
+            CloseServiceHandle(schService);\r
+        }\r
+        else\r
+        {\r
+            printf("CreateService failed - %s\n", GetLastErrorText(szErr, 256));\r
+        }\r
+\r
+        CloseServiceHandle(schSCManager);\r
+    }\r
+    else\r
+        printf("OpenSCManager failed - %s\n", GetLastErrorText(szErr,256));\r
+}\r
+\r
+void CmdRemoveService(LPCSTR name)\r
+{\r
+    SC_HANDLE   schService;\r
+    SC_HANDLE   schSCManager;\r
+    char        realName[512];\r
+\r
+    sprintf(realName,"shibd_%s",name);\r
+\r
+    schSCManager = OpenSCManager(\r
+                        NULL,                   // machine (NULL == local)\r
+                        NULL,                   // database (NULL == default)\r
+                        SC_MANAGER_ALL_ACCESS   // access required\r
+                        );\r
+    if ( schSCManager )\r
+    {\r
+        schService = OpenService(schSCManager, realName, SERVICE_ALL_ACCESS);\r
+\r
+        if (schService)\r
+        {\r
+            // try to stop the service\r
+            if ( ControlService( schService, SERVICE_CONTROL_STOP, &ssStatus ) )\r
+            {\r
+                printf("Stopping shibd (%s).", name);\r
+                Sleep( 1000 );\r
+\r
+                while( QueryServiceStatus( schService, &ssStatus ) )\r
+                {\r
+                    if ( ssStatus.dwCurrentState == SERVICE_STOP_PENDING )\r
+                    {\r
+                        printf(".");\r
+                        Sleep( 1000 );\r
+                    }\r
+                    else\r
+                        break;\r
+                }\r
+\r
+                if ( ssStatus.dwCurrentState == SERVICE_STOPPED )\r
+                    printf("\n%s stopped.\n", realName);\r
+                else\r
+                    printf("\n%s failed to stop.\n", realName);\r
+\r
+            }\r
+\r
+            // now remove the service\r
+            if( DeleteService(schService) )\r
+                printf("%s removed.\n", realName);\r
+            else\r
+                printf("DeleteService failed - %s\n", GetLastErrorText(szErr,256));\r
+\r
+\r
+            CloseServiceHandle(schService);\r
+        }\r
+        else\r
+            printf("OpenService failed - %s\n", GetLastErrorText(szErr,256));\r
+\r
+        CloseServiceHandle(schSCManager);\r
+    }\r
+    else\r
+        printf("OpenSCManager failed - %s\n", GetLastErrorText(szErr,256));\r
+}\r
+\r
+\r
+//\r
+//  FUNCTION: GetLastErrorText\r
+//\r
+//  PURPOSE: copies error message text to string\r
+//\r
+//  PARAMETERS:\r
+//    lpszBuf - destination buffer\r
+//    dwSize - size of buffer\r
+//\r
+//  RETURN VALUE:\r
+//    destination buffer\r
+//\r
+//  COMMENTS:\r
+//\r
+LPTSTR GetLastErrorText( LPSTR lpszBuf, DWORD dwSize )\r
+{\r
+    DWORD dwRet;\r
+    LPSTR lpszTemp = NULL;\r
+\r
+    dwRet = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY,\r
+                           NULL,\r
+                           GetLastError(),\r
+                           LANG_NEUTRAL,\r
+                           (LPSTR)&lpszTemp,\r
+                           0,\r
+                           NULL );\r
+\r
+    // supplied buffer is not long enough\r
+    if ( !dwRet || ( (long)dwSize < (long)dwRet+14 ) )\r
+        lpszBuf[0] = '\0';\r
+    else\r
+    {\r
+        lpszTemp[lstrlen(lpszTemp)-2] = '\0';  //remove cr and newline character\r
+        sprintf( lpszBuf, "%s (0x%x)", lpszTemp, GetLastError() );\r
+    }\r
+\r
+    if ( lpszTemp )\r
+        LocalFree((HLOCAL) lpszTemp );\r
+\r
+    return lpszBuf;\r
+}\r
+\r
+BOOL LogEvent(\r
+    LPCSTR  lpUNCServerName,\r
+    WORD  wType,\r
+    DWORD  dwEventID,\r
+    PSID  lpUserSid,\r
+    LPCSTR  message)\r
+{\r
+    LPCSTR  messages[] = {message, NULL};\r
+    \r
+    HANDLE hElog = RegisterEventSource(lpUNCServerName, "Shibboleth Daemon");\r
+    BOOL res = ReportEvent(hElog, wType, 0, dwEventID, lpUserSid, 1, 0, messages, NULL);\r
+    return (DeregisterEventSource(hElog) && res);\r
+}\r
index 2642f23..ccdfea3 100644 (file)
@@ -61,7 +61,7 @@
                        />\r
                        <Tool\r
                                Name="VCLinkerTool"\r
-                               AdditionalDependencies="log4cppD.lib xerces-c_2D.lib saml_5D.lib saml2D.lib xmltooling1D.lib wsock32.lib libeay32_0_9_8D.lib ssleay32_0_9_8D.lib"\r
+                               AdditionalDependencies="log4cppD.lib xerces-c_2D.lib saml2D.lib xmltooling1D.lib wsock32.lib libeay32_0_9_8D.lib ssleay32_0_9_8D.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)1_0D.dll"\r
                                LinkIncremental="2"\r
                                AdditionalLibraryDirectories="&quot;..\..\cpp-opensaml1\saml\Debug&quot;;&quot;..\..\cpp-opensaml2\Debug&quot;;&quot;..\..\cpp-xmltooling\Debug&quot;"\r
                        />\r
                        <Tool\r
                                Name="VCLinkerTool"\r
-                               AdditionalDependencies="log4cpp.lib xerces-c_2.lib saml_5.lib saml2.lib xmltooling1.lib wsock32.lib libeay32_0_9_8.lib ssleay32_0_9_8.lib"\r
+                               AdditionalDependencies="log4cpp.lib xerces-c_2.lib saml2.lib xmltooling1.lib wsock32.lib libeay32_0_9_8.lib ssleay32_0_9_8.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)1_0.dll"\r
                                LinkIncremental="1"\r
                                AdditionalLibraryDirectories="&quot;..\..\cpp-opensaml1\saml\Release&quot;;&quot;..\..\cpp-opensaml2\Release&quot;;&quot;..\..\cpp-xmltooling\Release&quot;"\r