<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>
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
{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"
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
{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
{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
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
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
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
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])
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
+++ /dev/null
-## $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
--- /dev/null
+## $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
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
-// Used by shar.rc
+// Used by shibd.rc
//
// Next default values for new objects
-/*
- * 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
-//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
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
- Name="shar"
+ Name="shibd"
ProjectGUID="{F13141B5-6C87-40BB-8D4E-5CC56EBB4C59}"
+ RootNamespace="shibd"
>
<Platforms>
<Platform
<Configurations>
<Configuration
Name="Release|Win32"
- OutputDirectory=".\Release"
- IntermediateDirectory=".\Release"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
/>
<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=""..\..\cpp-opensaml1\saml\Release";"..\..\cpp-opensaml2\Release";"..\..\cpp-xmltooling\Release""
- 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=""..\..\cpp-opensaml1\saml\Debug";"..\..\cpp-opensaml2\Debug";"..\..\cpp-xmltooling\Debug""
>
</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>
-/*
- * 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
/>\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=""..\..\cpp-opensaml1\saml\Debug";"..\..\cpp-opensaml2\Debug";"..\..\cpp-xmltooling\Debug""\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=""..\..\cpp-opensaml1\saml\Release";"..\..\cpp-opensaml2\Release";"..\..\cpp-xmltooling\Release""\r