Prechádzať zdrojové kódy

204355 - Remove winsync code from ldapserver tree

Nathan Kinder 19 rokov pred
rodič
commit
9cc92a2053
67 zmenil súbory, kde vykonal 0 pridanie a 14213 odobranie
  1. 0 8
      Makefile
  2. 0 22
      component_versions.mk
  3. 0 166
      components.mk
  4. 0 14
      ldap/servers/Makefile
  5. 0 73
      ldap/servers/ntds/Makefile
  6. 0 81
      ldap/servers/ntds/apacheds/Makefile
  7. 0 393
      ldap/servers/ntds/apacheds/apache.diff
  8. 0 120
      ldap/servers/ntds/apacheds/noleak.diff
  9. 0 1645
      ldap/servers/ntds/apacheds/org/apache/ldap/server/NetAPIPartition.java
  10. 0 88
      ldap/servers/ntds/apacheds/project.properties
  11. 0 18
      ldap/servers/ntds/apacheds/readme.txt
  12. 0 582
      ldap/servers/ntds/apacheds/usersync.schema
  13. 0 96
      ldap/servers/ntds/netman/Makefile
  14. 0 53
      ldap/servers/ntds/netman/jnetman.i
  15. 0 2604
      ldap/servers/ntds/netman/netman.cpp
  16. 0 281
      ldap/servers/ntds/netman/netman.h
  17. 0 90
      ldap/servers/ntds/wrapper/Makefile
  18. 0 45
      ldap/servers/ntds/wrapper/build.bat
  19. 0 77
      ldap/servers/ntds/wrapper/usersync.bat
  20. 0 55
      ldap/servers/ntds/wrapper/usersync.conf
  21. BIN
      ldap/servers/ntds/wrapper/wix/Binary/Remove.ico
  22. BIN
      ldap/servers/ntds/wrapper/wix/Binary/Repair.ico
  23. 0 1189
      ldap/servers/ntds/wrapper/wix/ntds.wxs
  24. 0 136
      ldap/servers/ntds/wrapper/wrapper.conf
  25. 0 55
      ldap/synctools/Makefile
  26. 0 49
      ldap/synctools/passwordsync/README.txt
  27. 0 139
      ldap/synctools/passwordsync/build.bat
  28. 0 362
      ldap/synctools/passwordsync/passhand.cpp
  29. 0 78
      ldap/synctools/passwordsync/passhand.h
  30. 0 158
      ldap/synctools/passwordsync/passhook/passhook.cpp
  31. 0 6
      ldap/synctools/passwordsync/passhook/passhook.def
  32. 0 47
      ldap/synctools/passwordsync/passhook/passhook.dep
  33. 0 118
      ldap/synctools/passwordsync/passhook/passhook.dsp
  34. 0 245
      ldap/synctools/passwordsync/passhook/passhook.mak
  35. 0 41
      ldap/synctools/passwordsync/passsync.dsw
  36. BIN
      ldap/synctools/passwordsync/passsync/MSG00001.bin
  37. 0 70
      ldap/synctools/passwordsync/passsync/dssynch.h
  38. 0 641
      ldap/synctools/passwordsync/passsync/dssynchmsg.h
  39. 0 379
      ldap/synctools/passwordsync/passsync/dssynchmsg.mc
  40. 0 2
      ldap/synctools/passwordsync/passsync/dssynchmsg.rc
  41. 0 613
      ldap/synctools/passwordsync/passsync/ntservice.cpp
  42. 0 116
      ldap/synctools/passwordsync/passsync/ntservice.h
  43. 0 32
      ldap/synctools/passwordsync/passsync/passsync.dep
  44. 0 149
      ldap/synctools/passwordsync/passsync/passsync.dsp
  45. 0 222
      ldap/synctools/passwordsync/passsync/passsync.mak
  46. 0 67
      ldap/synctools/passwordsync/passsync/passsync.rc
  47. 0 52
      ldap/synctools/passwordsync/passsync/resource.h
  48. 0 332
      ldap/synctools/passwordsync/passsync/service.cpp
  49. 0 97
      ldap/synctools/passwordsync/passsync/subuniutil.cpp
  50. 0 58
      ldap/synctools/passwordsync/passsync/subuniutil.h
  51. 0 85
      ldap/synctools/passwordsync/passsync/synchcmds.h
  52. 0 670
      ldap/synctools/passwordsync/passsync/syncserv.cpp
  53. 0 110
      ldap/synctools/passwordsync/passsync/syncserv.h
  54. BIN
      ldap/synctools/passwordsync/wix/Binary/Banner.bmp
  55. BIN
      ldap/synctools/passwordsync/wix/Binary/Complete.ico
  56. BIN
      ldap/synctools/passwordsync/wix/Binary/Custom.ico
  57. BIN
      ldap/synctools/passwordsync/wix/Binary/Dialog.bmp
  58. BIN
      ldap/synctools/passwordsync/wix/Binary/Exclam.ico
  59. BIN
      ldap/synctools/passwordsync/wix/Binary/Info.ico
  60. BIN
      ldap/synctools/passwordsync/wix/Binary/License.rtf
  61. BIN
      ldap/synctools/passwordsync/wix/Binary/New.ico
  62. BIN
      ldap/synctools/passwordsync/wix/Binary/Remove.ico
  63. BIN
      ldap/synctools/passwordsync/wix/Binary/Repair.ico
  64. BIN
      ldap/synctools/passwordsync/wix/Binary/Typical.ico
  65. BIN
      ldap/synctools/passwordsync/wix/Binary/Up.ico
  66. 0 1335
      ldap/synctools/passwordsync/wix/PassSync.wxs
  67. 0 49
      ldap/synctools/passwordsync/wix/README.txt

+ 0 - 8
Makefile

@@ -135,14 +135,6 @@ ifeq ($(INTERNAL_BUILD), 1)
 	$(AXIS_DEP) $(DSMLJAR_DEP) $(DSDOC_DEP) $(ADSYNC_DEP) $(NT4SYNC_DEP) $(PERLDAP_DEP)
 endif
 
-# Pull WiX MSI toolkit on Windows.
-ifeq ($(ARCH), WINNT)
-COMPONENT_DEPENDENCIES += $(WIX_DEP)
-## Only fetch the necessary components for ApacheDS when requested
-ifeq ($(BUILD_NTDS),1)
-COMPONENT_DEPENDENCIES += $(WRAPPER_DEP) $(SWIG_DEP) $(MAVEN_DEP) $(APACHEDS_DEP) 
-endif
-endif
 components: $(COMPONENT_DEPENDENCIES)
 	-@echo "The components are up to date"
 

+ 0 - 22
component_versions.mk

@@ -206,28 +206,6 @@ ifndef DSDOC_RELDATE
   DSDOC_RELDATE = 20050311
 endif
 
-# WIX
-ifndef WIX_VERSION
-	WIX_VERSION=2.0.2613.0
-endif
-
-### apacheds, etc ###
-ifndef WRAPPER_VERSION
-	WRAPPER_VERSION=3.1.2
-endif
-
-ifndef APACHEDS_VERSION
-	APACHEDS_VERSION=0.9
-endif
-
-ifndef SWIG_VERSION
-	SWIG_VERSION=1.3.24
-endif
-
-ifndef MAVEN_VERSION
-	MAVEN_VERSION=1.0.2
-endif
-
 ifndef ADSYNC_VERSION
 	ADSYNC_VERSION=20060330
 endif

+ 0 - 166
components.mk

@@ -671,169 +671,3 @@ ifeq ($(PACKAGE_LIB32), 1)
   LIBS_TO_PKG_SHARED_32 += $(addprefix $(LDAPSDK_LIBPATH_32)/,$(LDAP_SOLIBS))
 endif # PACKAGE_LIB32
 
-#################################################
-# User Sync Components
-#################################################
-
-# WIX MSI Tool kit #####################
-WIX = wix-$(WIX_VERSION).zip
-WIX_DEST = $(NSCP_DISTDIR_FULL_RTL)/wix
-WIX_FILE = $(WIX_DEST)/$(WIX)
-WIX_FILES = $(WIX)
-WIX_RELEASE = $(COMPONENTS_DIR)/wix
-WIX_DIR = $(WIX_RELEASE)/$(WIX_VERSION)
-WIX_DEP = $(WIX_FILE)
-WIX_REL_DIR=$(subst -bin,,$(subst .zip,,$(WIX)))
-
-ifndef WIX_PULL_METHOD
-WIX_PULL_METHOD = $(COMPONENT_PULL_METHOD)
-endif
-
-$(WIX_DEP): $(NSCP_DISTDIR_FULL_RTL) 
-ifeq ($(ARCH), WINNT)
-ifdef COMPONENT_DEPS
-	echo "Inside ftppull"
-	$(FTP_PULL) -method $(COMPONENT_PULL_METHOD) \
-		-objdir $(WIX_DEST) -componentdir $(WIX_DIR) \
-		-files $(WIX_FILES) -unzip $(WIX_DEST)
-endif
-	-@if [ ! -f $@ ] ; \
-	then echo "Error: could not get component WIX files $@" ; \
-	fi
-else
-	-@echo "WIX is not required except on Windows."
-endif #WINNT
-
-# java service wrapper for Password Sync #####################
-WRAPPER = wrapper_win32_$(WRAPPER_VERSION).zip
-WRAPPER_DEST = $(NSCP_DISTDIR_FULL_RTL)/wrapper
-WRAPPER_FILE = $(WRAPPER_DEST)/$(WRAPPER)
-WRAPPER_FILES = $(WRAPPER)
-WRAPPER_RELEASE = $(COMPONENTS_DIR)/wrapper
-WRAPPER_DIR = $(WRAPPER_RELEASE)/$(WRAPPER_VERSION)
-WRAPPER_DEP = $(WRAPPER_FILE)
-WRAPPER_REL_DIR=$(subst -bin,,$(subst .zip,,$(WRAPPER)))
-
-ifndef WRAPPER_PULL_METHOD
-WRAPPER_PULL_METHOD = $(COMPONENT_PULL_METHOD)
-endif
-
-$(WRAPPER_DEP): $(NSCP_DISTDIR_FULL_RTL) 
-ifeq ($(ARCH), WINNT)
-ifdef COMPONENT_DEPS
-	echo "Inside ftppull"
-	$(FTP_PULL) -method $(COMPONENT_PULL_METHOD) \
-		-objdir $(WRAPPER_DEST) -componentdir $(WRAPPER_DIR) \
-		-files $(WRAPPER_FILES) -unzip $(WRAPPER_DEST)
-endif
-	-@if [ ! -f $@ ] ; \
-	then echo "Error: could not get component WRAPPER files $@" ; \
-	fi
-else
-	-@echo "WRAPPER is not required except on Windows."
-endif #WINNT
-
-
-# swig for Password Sync #####################
-SWIG = swigwin-$(SWIG_VERSION).zip
-SWIG_DEST = $(NSCP_DISTDIR_FULL_RTL)/swig
-SWIG_FILE = $(SWIG_DEST)/$(SWIG)
-SWIG_FILES = $(SWIG)
-SWIG_RELEASE = $(COMPONENTS_DIR)/swig
-SWIG_DIR = $(SWIG_RELEASE)/$(SWIG_VERSION)
-SWIG_DEP = $(SWIG_FILE)
-SWIG_REL_DIR=$(subst -bin,,$(subst .zip,,$(SWIG)))
-SWIG_EXE = $(SWIG_DEST)/SWIG-$(SWIG_VERSION)/swig.exe
-
-ifndef SWIG_PULL_METHOD
-SWIG_PULL_METHOD = $(COMPONENT_PULL_METHOD)
-endif
-
-$(SWIG_DEP): $(NSCP_DISTDIR_FULL_RTL) 
-ifeq ($(ARCH), WINNT)
-ifdef COMPONENT_DEPS
-	echo "Inside ftppull"
-	$(FTP_PULL) -method $(COMPONENT_PULL_METHOD) \
-		-objdir $(SWIG_DEST) -componentdir $(SWIG_DIR) \
-		-files $(SWIG_FILES) -unzip $(SWIG_DEST)
-
-endif
-	-@if [ ! -f $@ ] ; \
-	then echo "Error: could not get component SWIG files $@" ; \
-	fi
-else
-	-@echo "SWIG is not required except on Windows."
-endif #WINNT
-
-# apache ds for Password Sync #####################
-APACHEDS = apacheds-main-$(APACHEDS_VERSION).jar
-APACHEDSSRC = apacheds-$(APACHEDS_VERSION)-src.zip
-APACHEDS_DEST = $(NSCP_DISTDIR_FULL_RTL)/apacheds
-APACHEDS_FILE = $(APACHEDS_DEST)/$(APACHEDS)
-APACHEDS_FILES = $(APACHEDS)
-APACHEDSSRC_FILES = $(APACHEDSSRC)
-APACHEDS_RELEASE = $(COMPONENTS_DIR)/apacheds
-APACHEDS_DIR = $(APACHEDS_RELEASE)/$(APACHEDS_VERSION)
-APACHEDS_DEP = $(APACHEDS_FILE)
-APACHEDS_REL_DIR=$(subst -bin,,$(subst .jar,,$(APACHEDS)))
-APACHEDSSOURCE = $(NSCP_DISTDIR_FULL_RTL)/apacheds/apacheds-$(APACHEDS_VERSION)
-
-
-ifndef APACHEDS_PULL_METHOD
-APACHEDS_PULL_METHOD = $(COMPONENT_PULL_METHOD)
-endif
-
-$(APACHEDS_DEP) : $(NSCP_DISTDIR_FULL_RTL) 
-ifeq ($(ARCH), WINNT)
-ifdef COMPONENT_DEPS
-	echo "Inside ftppull"
-	$(FTP_PULL) -method $(COMPONENT_PULL_METHOD) \
-		-objdir $(APACHEDS_DEST) -componentdir $(APACHEDS_DIR) \
-		-files $(APACHEDS_FILES)
-	$(FTP_PULL) -method $(COMPONENT_PULL_METHOD) \
-		-objdir $(APACHEDS_DEST) -componentdir $(APACHEDS_DIR) \
-		-files $(APACHEDSSRC_FILES) -unzip $(APACHEDS_DEST)
-endif
-	-@if [ ! -f $@ ] ; \
-	then echo "Error: could not get component APACHEDS files $@" ; \
-	fi
-
-
-else
-	-@echo "APACHEDS is not required except on Windows."
-endif #WINNT
-
-
-# MAVEN for Password Sync #####################
-MAVEN = maven-$(MAVEN_VERSION).zip
-MAVEN_DEST = $(NSCP_DISTDIR_FULL_RTL)/maven
-MAVEN_FILE = $(MAVEN_DEST)/$(MAVEN)
-MAVEN_FILES = $(MAVEN)
-MAVEN_RELEASE = $(COMPONENTS_DIR)/maven
-MAVEN_DIR = $(MAVEN_RELEASE)/$(MAVEN_VERSION)
-MAVEN_DEP = $(MAVEN_FILE)
-MAVEN_REL_DIR=$(subst -bin,,$(subst .zip,,$(MAVEN)))
-
-# CMD does not like the '/' in NSCP_DISTDIR_FULL_RTL, therefore the
-# slashes need swapped to '\\'
-MAVEN_EXE=cmd /c `echo $(NSCP_DISTDIR_FULL_RTL) | sed 's/\//\\\\/g'`\\maven\\$(MAVEN_REL_DIR)\\bin\\maven.bat
-MAVEN_HOME=$(NSCP_DISTDIR_FULL_RTL)/maven/$(MAVEN_REL_DIR)
-
-ifndef MAVEN_PULL_METHOD
-MAVEN_PULL_METHOD = $(COMPONENT_PULL_METHOD)
-endif
-
-$(MAVEN_DEP): $(NSCP_DISTDIR_FULL_RTL) 
-ifeq ($(ARCH), WINNT)
-ifdef COMPONENT_DEPS
-	echo "Inside ftppull"
-	$(FTP_PULL) -method $(COMPONENT_PULL_METHOD) \
-		-objdir $(MAVEN_DEST) -componentdir $(MAVEN_DIR) \
-		-files $(MAVEN_FILES) -unzip $(MAVEN_DEST)
-endif
-	-@if [ ! -f $@ ] ; \
-	then echo "Error: could not get component MAVEN files $@" ; \
-	fi
-else
-	-@echo "MAVEN is not required except on Windows."
-endif #WINNT

+ 0 - 14
ldap/servers/Makefile

@@ -54,9 +54,6 @@ include $(LDAP_SRC)/nsldap.mk
 ifeq ($(ARCH), WINNT)
 PRE_SLAPD_EXTRAS=_ntmsgdll
 POST_SLAPD_EXTRAS=_ntwdog _ntperfdll
-ifeq ($(BUILD_NTDS),1)
-PRE_SLAPD_EXTRAS+=_ntds
-endif
 endif
 
 all:	$(PRE_SLAPD_EXTRAS) _slapd $(POST_SLAPD_EXTRAS) _backends _plugins _snmp _slapdtools
@@ -89,9 +86,6 @@ _slapdtools:
 	cd slapd/tools; $(MAKE) $(MFLAGS) all
 
 ifeq ($(ARCH), WINNT)
-_ntds:
-	cd ntds; $(MAKE) $(MFLAGS) all
-
 _ntmsgdll:
 	cd slapd/ntmsgdll; $(MAKE) $(MFLAGS) all
 
@@ -114,11 +108,3 @@ endif
 	cd plugins; $(MAKE) $(MFLAGS) clean
 	cd slapd/tools; $(MAKE) $(MFLAGS) clean
 
-ifeq ($(ARCH), WINNT)
-	cd ntds; $(MAKE) $(MFLAGS) clean
-else
-	echo NTDS not built on non-windows
-endif
-
-
-

+ 0 - 73
ldap/servers/ntds/Makefile

@@ -1,73 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-# GNU Makefile for ldap/servers
-#
-
-BUILD_ROOT = ../../..
-LDAP_SRC = $(BUILD_ROOT)/ldap
-
-NOSTDCLEAN=true # don't let nsconfig.mk define target clean
-NOSTDSTRIP=true # don't let nsconfig.mk define target strip
-
-include $(BUILD_ROOT)/nsdefs.mk
-include $(BUILD_ROOT)/nsconfig.mk
-include $(LDAP_SRC)/nsldap.mk
-
-ifeq ($(BUILD_NTDS),1)
-all:	_netman _apacheds _wrapper
-else
-all:
-	echo set BUILD_NTDS=1 to build NTDS
-endif
-
-_netman:
-	cd netman; $(MAKE) $(MFLAGS) all	
-
-_apacheds:
-	cd apacheds; $(MAKE) $(MFLAGS) all	
-
-_wrapper:
-	cd wrapper; $(MAKE) $(MFLAGS) all	
-
-
-clean:
-	cd netman; $(MAKE) $(MFLAGS) clean
-	cd apacheds; $(MAKE) $(MFLAGS) clean
-	cd wrapper; $(MAKE) $(MFLAGS) clean

+ 0 - 81
ldap/servers/ntds/apacheds/Makefile

@@ -1,81 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-# 
-LDAP_SRC = ../../..
-BUILD_ROOT = ../../../..
-
-OBJDEST = $(OBJDIR)/lib/netman
-LIBDIR = $(LIB_RELDIR)
-
-NOSTDCLEAN=true # don't let nsconfig.mk define target clean
-NOSTDSTRIP=true # don't let nsconfig.mk define target strip
-include $(BUILD_ROOT)/nsconfig.mk
-include $(LDAP_SRC)/nsldap.mk
-include $(LDAP_SRC)/javarules.mk
-
-export JAVA_HOME=$(JDKPRELIB)/../
-export MAVEN_HOME
-
-USERSYNCJAR=$(JAVA_DEST_DIR)/ntds/usersync.jar
-all: $(USERSYNCJAR)
-
-#no banner on maven
-MAVEN_OPTS=-b 
-
-ifeq ($(BUILD_NTDS_OFFLINE),1)
-MAVEN_OPTS+=-o
-endif
-
-export CLASSPATH=$(APACHEDS_FILE);$(JAVA_DEST_DIR)/ntds/jnetman.jar 
-
-$(APACHEDSSOURCE)/core/target: $(JAVA_DEST_DIR)/ntds/jnetman.jar
-	$(CP) project.properties $(APACHEDSSOURCE)/core 
-	$(CP) usersync.schema $(APACHEDSSOURCE)/core/src/main/schema
-	$(MAVEN_EXE) $(MAVEN_OPTS) -d $(APACHEDSSOURCE)/core -e directory:schema 
-	$(JAVAC) -classpath $(APACHEDS_FILE) $(APACHEDSSOURCE)/core/target/schema/org/apache/ldap/server/schema/bootstrap/*.java
-	$(JAVAC) -d $(APACHEDSSOURCE)/core/target/schema/ org/apache/ldap/server/*.java
-	$(RM) $(APACHEDSSOURCE)/core/target/schema/org/apache/ldap/server/schema/bootstrap/*.java
-
-$(USERSYNCJAR): $(APACHEDSSOURCE)/core/target 
-	( cd  $(APACHEDSSOURCE)/core/target/schema && pwd && jar cf  usersync.jar org)
-	$(MV) $(APACHEDSSOURCE)/core/target/schema/usersync.jar $(USERSYNCJAR) 
-	$(RM) $(APACHEDSSOURCE)/core/target
-
-clean:
-	$(RM) $(USERSYNCJAR) 

+ 0 - 393
ldap/servers/ntds/apacheds/apache.diff

@@ -1,393 +0,0 @@
-Index: apacheds/trunk/main/src/main/java/org/apache/ldap/server/jndi/ServerContextFactory.java
-===================================================================
---- apacheds/trunk/main/src/main/java/org/apache/ldap/server/jndi/ServerContextFactory.java	(revision 169374)
-+++ apacheds/trunk/main/src/main/java/org/apache/ldap/server/jndi/ServerContextFactory.java	(working copy)
-@@ -28,16 +28,17 @@
- import javax.naming.ldap.InitialLdapContext;
- import javax.naming.ldap.Control;
- 
- import org.apache.ldap.common.exception.LdapConfigurationException;
- import org.apache.ldap.common.name.LdapName;
- import org.apache.ldap.common.util.PropertiesUtils;
- import org.apache.ldap.server.protocol.LdapProtocolProvider;
- import org.apache.mina.common.TransportType;
-+import org.apache.mina.io.filter.SSLFilter;
- import org.apache.mina.registry.Service;
- import org.apache.mina.registry.ServiceRegistry;
- import org.apache.mina.registry.SimpleServiceRegistry;
- import org.apache.kerberos.service.KdcConfiguration;
- import org.apache.kerberos.protocol.KerberosProtocolProvider;
- import org.apache.kerberos.store.PrincipalStore;
- import org.apache.kerberos.store.JndiPrincipalStoreImpl;
- 
-@@ -49,17 +50,17 @@
-  * @author <a href="mailto:[email protected]">Apache Directory Project</a>
-  * @version $Rev$
-  * @see javax.naming.spi.InitialContextFactory
-  */
- public class ServerContextFactory extends CoreContextFactory
- {
-     /** the default LDAP port to use */
-     private static final int LDAP_PORT = 389;
--
-+    private static final int LDAPS_PORT = 636;
-     private static final ServiceRegistry DEFAULT_MINA_REGISTRY;
-     
-     private static Service ldapService;
- 
-     private static Service kerberosService;
- 
-     private static ServiceRegistry minaRegistry;
- 
-@@ -263,24 +264,61 @@
- 
-     /**
-      * Starts up the LDAP protocol provider to service LDAP requests
-      *
-      * @throws NamingException if there are problems starting the LDAP provider
-      */
-     private void startLdapProtocol() throws NamingException
-     {
--        int port = PropertiesUtils.get( initialEnv, EnvKeys.LDAP_PORT, LDAP_PORT );
-+        int port = 0;
-+        
-+        boolean useSSL = false;
-+        if (initialEnv.containsKey(EnvKeys.LDAPS_ENABLE)) {
-+            useSSL = (Boolean.valueOf((String) initialEnv.get(EnvKeys.LDAPS_ENABLE))).booleanValue();
-+        }
-+
-+        if (useSSL)
-+        {
-+        	port = PropertiesUtils.get( initialEnv, EnvKeys.LDAPS_PORT, LDAPS_PORT );
-+        } 
-+        else 
-+        {
-+        	port = PropertiesUtils.get( initialEnv, EnvKeys.LDAP_PORT, LDAP_PORT );  
-+        }
-+
- 
-         Service service = new Service( "ldap", TransportType.SOCKET, new InetSocketAddress( port ) );
- 
-         try
-         {
-             minaRegistry.bind( service, new LdapProtocolProvider( ( Hashtable ) initialEnv.clone() ) );
- 
-+
-+            if ( useSSL) 
-+			{
-+                SSLContextFactory.setKeystore( (String) initialEnv.get(EnvKeys.LDAPS_KEYSTORE_LOCATION) );
-+                if (initialEnv.containsKey( EnvKeys.LDAPS_KEYSTORE_PASSWORD ) && 
-+                    initialEnv.get( EnvKeys.LDAPS_KEYSTORE_PASSWORD ) != null)
-+			{
-+                        String pw = (String)initialEnv.get( EnvKeys.LDAPS_KEYSTORE_PASSWORD );
-+                        SSLContextFactory.setKeystorePassword( pw );
-+			}
-+                try 
-+                {
-+                   SSLFilter sslFilter = new SSLFilter (org.apache.ldap.server.jndi.SSLContextFactory.getInstance(true));
-+                   minaRegistry.getIoAcceptor(TransportType.SOCKET).getFilterChain().addLast("sslFilter", sslFilter);
-+
-+                } catch (java.security.GeneralSecurityException ge) 
-+                {
-+			throw new NamingException("can't invoke ssl filter");  
-+                } 
-+            }
-+
-+
-             ldapService = service;
-         }
-         catch ( IOException e )
-         {
-             String msg = "Failed to bind the LDAP protocol service to the service registry: " + service;
- 
-             LdapConfigurationException lce = new LdapConfigurationException( msg );
- 
-Index: apacheds/trunk/main/src/main/java/org/apache/ldap/server/jndi/TrustManagerFactory.java
-===================================================================
---- apacheds/trunk/main/src/main/java/org/apache/ldap/server/jndi/TrustManagerFactory.java	(revision 0)
-+++ apacheds/trunk/main/src/main/java/org/apache/ldap/server/jndi/TrustManagerFactory.java	(revision 0)
-@@ -0,0 +1,73 @@
-+/*
-+ *   Copyright 2004 The Apache Software Foundation
-+ *
-+ *   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.
-+ *
-+ */
-+package org.apache.ldap.server.jndi;
-+
-+import java.security.InvalidAlgorithmParameterException;
-+import java.security.KeyStore;
-+import java.security.KeyStoreException;
-+import java.security.cert.CertificateException;
-+import java.security.cert.X509Certificate;
-+
-+import javax.net.ssl.ManagerFactoryParameters;
-+import javax.net.ssl.TrustManager;
-+import javax.net.ssl.TrustManagerFactorySpi;
-+import javax.net.ssl.X509TrustManager;
-+
-+class TrustManagerFactory extends TrustManagerFactorySpi
-+{
-+
-+    static final X509TrustManager X509 = new X509TrustManager()
-+    {
-+        public void checkClientTrusted( X509Certificate[] x509Certificates,
-+                                       String s ) throws CertificateException
-+        {
-+        }
-+
-+        public void checkServerTrusted( X509Certificate[] x509Certificates,
-+                                       String s ) throws CertificateException
-+        {
-+        }
-+
-+        public X509Certificate[] getAcceptedIssuers()
-+        {
-+            return new X509Certificate[ 0 ];
-+        }
-+    };
-+
-+    static final TrustManager[] X509_MANAGERS = new TrustManager[] { X509 };
-+
-+    public TrustManagerFactory()
-+    {
-+    }
-+
-+    protected TrustManager[] engineGetTrustManagers()
-+    {
-+        return X509_MANAGERS;
-+    }
-+
-+    protected void engineInit( KeyStore keystore ) throws KeyStoreException
-+    {
-+        // noop
-+    }
-+
-+    protected void engineInit(
-+                              ManagerFactoryParameters managerFactoryParameters )
-+            throws InvalidAlgorithmParameterException
-+    {
-+        // noop
-+    }
-+}
-Index: apacheds/trunk/main/src/main/java/org/apache/ldap/server/jndi/SSLContextFactory.java
-===================================================================
---- apacheds/trunk/main/src/main/java/org/apache/ldap/server/jndi/SSLContextFactory.java	(revision 0)
-+++ apacheds/trunk/main/src/main/java/org/apache/ldap/server/jndi/SSLContextFactory.java	(revision 0)
-@@ -0,0 +1,146 @@
-+/*
-+ *   Copyright 2004 The Apache Software Foundation
-+ *
-+ *   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.
-+ *
-+ */
-+package org.apache.ldap.server.jndi;
-+
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.security.GeneralSecurityException;
-+import java.security.KeyStore;
-+import java.security.SecureRandom; 
-+import java.security.Security; 
-+import javax.net.ssl.KeyManagerFactory;
-+import javax.net.ssl.SSLContext;
-+
-+class SSLContextFactory
-+{
-+    /**
-+     * Protocol to use.
-+     */
-+    private static final String PROTOCOL = "TLS";
-+    private static String keystore = ""; 
-+    private static String keystorepassword = null;
-+
-+    private static SSLContext serverInstance = null;
-+    private static SSLContext clientInstance = null;
-+    
-+    private static String[] supported = null;
-+
-+     static void setKeystore(String kstore)
-+    {
-+        keystore = kstore;
-+    }
-+    
-+     static void setKeystorePassword(String pw)
-+    {
-+        keystorepassword = pw;
-+    }
-+    
-+    /**
-+     * Get SSLContext singleton.
-+     *
-+     * @return SSLContext
-+     * @throws java.security.GeneralSecurityException
-+     *
-+     */
-+    public static SSLContext getInstance( boolean server )
-+            throws GeneralSecurityException
-+    {
-+        SSLContext retInstance = null;
-+        if( server )
-+        {
-+            if( serverInstance == null )
-+            {
-+                synchronized( SSLContextFactory.class )
-+                {
-+                    if( serverInstance == null )
-+                    {
-+                        try
-+                        {
-+                            Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
-+                            Security.addProvider(new com.sun.crypto.provider.SunJCE()); 
-+                            serverInstance = createServerSSLContext();
-+                        }
-+                        catch( Exception ioe )
-+                        {
-+                            throw new GeneralSecurityException(
-+                                    "Can't create Server SSLContext:" + ioe );
-+                        }
-+                    }
-+                }
-+            }
-+            retInstance = serverInstance;
-+        }
-+        else
-+        {
-+            if( clientInstance == null )
-+            {
-+                synchronized( SSLContextFactory.class )
-+                {
-+                    if( clientInstance == null )
-+                    {
-+                      //  clientInstance = createClientSSLContext();
-+                    }
-+                }
-+            }
-+            retInstance = clientInstance;
-+        }
-+        return retInstance;
-+    }
-+
-+    private static SSLContext createServerSSLContext()
-+            throws GeneralSecurityException, IOException
-+    {
-+        // Create keystore
-+        KeyStore ks = KeyStore.getInstance( "JKS" );
-+        java.io.FileInputStream in = null;
-+      
-+        try
-+        {
-+            in = new java.io.FileInputStream(keystore);
-+            ks.load( in, keystorepassword.toCharArray() );
-+           
-+        }
-+        catch (java.io.IOException e) {
-+            throw new IOException("unable to load keystore: " + keystore);
-+        }
-+        finally
-+        {
-+            if( in != null )
-+            {
-+                try
-+                {
-+                    in.close();
-+                }
-+                catch( IOException ignored )
-+                {
-+                }
-+            }
-+        }
-+
-+        // Set up key manager factory to use our key store
-+        KeyManagerFactory kmf = KeyManagerFactory.getInstance( "SunX509" );
-+        kmf.init( ks, keystorepassword.toCharArray() );
-+
-+        // Initialize the SSLContext to work with our key managers. */
-+        SSLContext sslContext = SSLContext.getInstance( PROTOCOL );
-+        
-+        sslContext.init( kmf.getKeyManagers(), TrustManagerFactory.X509_MANAGERS,  SecureRandom.getInstance("SHA1PRNG") );
-+        
-+        return sslContext;
-+    }
-+
-+}
-Index: apacheds/trunk/core/src/main/java/org/apache/ldap/server/jndi/EnvKeys.java
-===================================================================
---- apacheds/trunk/core/src/main/java/org/apache/ldap/server/jndi/EnvKeys.java	(revision 169377)
-+++ apacheds/trunk/core/src/main/java/org/apache/ldap/server/jndi/EnvKeys.java	(working copy)
-@@ -90,17 +90,22 @@
-     /** key used to disable the networking layer (wire protocol) */
-     public static final String DISABLE_PROTOCOL = "server.net.disable.protocol";
-     /** key used to hold the MINA registry instance to use rather than creating one */
-     public static final String PASSTHRU = "server.net.passthru";
-     /** key for port setting for ldap requests beside default 389 */
-     public static final String LDAP_PORT = "server.net.ldap.port";
-     /** key for port setting for secure ldap requests besides default 636 */
-     public static final String LDAPS_PORT = "server.net.ldaps.port";
--
-+    /** key used to enable secure ldap */
-+    public static final String LDAPS_ENABLE = "server.net.ldaps.enable";
-+    /** key for location of keystore used */
-+    public static final String LDAPS_KEYSTORE_LOCATION = "javax.net.ssl.keyStore";
-+    /** key for password of keystore used (if any) */
-+    public static final String LDAPS_KEYSTORE_PASSWORD = "javax.net.ssl.keyStorePassword";
-     // ------------------------------------------------------------------------
-     // Properties for partition configuration
-     // ------------------------------------------------------------------------
- 
-     /** a comma separated list of partition names */
-     public static final String PARTITIONS = "server.db.partitions";
-     /** the envprop key base to the suffix of a partition */
-     public static final String SUFFIX = "server.db.partition.suffix.";
-Index: apacheds/trunk/core/src/main/java/org/apache/ldap/server/jndi/CoreContextFactory.java
-===================================================================
---- apacheds/trunk/core/src/main/java/org/apache/ldap/server/jndi/CoreContextFactory.java	(revision 169377)
-+++ apacheds/trunk/core/src/main/java/org/apache/ldap/server/jndi/CoreContextFactory.java	(working copy)
-@@ -373,18 +373,25 @@
- 
-             attributes.put( "objectClass", "person" );
- 
-             attributes.put( "objectClass", "organizationalPerson" );
- 
-             attributes.put( "objectClass", "inetOrgPerson" );
- 
-             attributes.put( "uid", SystemPartition.ADMIN_UID );
--
--            attributes.put( "userPassword", SystemPartition.ADMIN_PW );
-+            
-+            if (initialEnv.containsKey( "server.net.admin.password" )) 
-+            {
-+                 attributes.put( "userPassword", (String) initialEnv.get( "server.net.admin.password" ) );
-+            }
-+            else 
-+            {
-+                throw new NamingException("ERROR: Admin password not set. Server not starting for security reasons. ");
-+            }
- 
-             attributes.put( "displayName", "Directory Superuser" );
- 
-             attributes.put( "creatorsName", ADMIN );
- 
-             attributes.put( "createTimestamp", DateUtils.getGeneralizedTime() );
- 
-             attributes.put( "displayName", "Directory Superuser" );

+ 0 - 120
ldap/servers/ntds/apacheds/noleak.diff

@@ -1,120 +0,0 @@
-Index: trunk/src/java/org/apache/mina/common/ByteBuffer.java
-===================================================================
---- trunk/src/java/org/apache/mina/common/ByteBuffer.java	(revision 168349)
-+++ trunk/src/java/org/apache/mina/common/ByteBuffer.java	(working copy)
-@@ -114,29 +114,14 @@
- {
-     private static final int MINIMUM_CAPACITY = 1;
- 
--    private static final Stack containerStack = new Stack();
--
--    private static final Stack[] heapBufferStacks = new Stack[] {
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(), };
--    
--    private static final Stack[] directBufferStacks = new Stack[] {
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(),
--            new Stack(), new Stack(), new Stack(), new Stack(), };
--    
-     /**
-+     * This class leaked great amounts of memory when doing dymanic 
-+     * ByteBuffer'ing. This part was removed and replaced with traditonal 
-+     * new()'s. This patch will no longer need to be applied when this class
-+     * is operates without leaks in the future.
-+     **/
-+    
-+     /**
-      * Returns the direct or heap buffer which is capable of the specified
-      * size.  This method tries to allocate direct buffer first, and then
-      * tries heap buffer if direct buffer memory is exhausted.  Please use
-@@ -157,7 +142,7 @@
-             return allocate( capacity, false );
-         }
-     }
--    
-+        
-     /**
-      * Returns the buffer which is capable of the specified size.
-      * 
-@@ -169,38 +154,18 @@
-     {
-         java.nio.ByteBuffer nioBuffer = allocate0( capacity, direct );
-         DefaultByteBuffer buf;
--        
--        synchronized( containerStack )
--        {
--            buf = ( DefaultByteBuffer ) containerStack.pop();
--        }
--        
--        if( buf == null )
--        {
--            buf = new DefaultByteBuffer();
--        }
- 
-+        buf = new DefaultByteBuffer();
-+
-         buf.init( nioBuffer );
-         return buf;
-     }
-     
-     private static java.nio.ByteBuffer allocate0( int capacity, boolean direct )
-     {
--        Stack[] bufferStacks = direct? directBufferStacks : heapBufferStacks;
--        int idx = getBufferStackIndex( bufferStacks, capacity );
--        Stack stack = bufferStacks[ idx ];
--
--        java.nio.ByteBuffer buf;
--        synchronized( stack )
--        {
--            buf = ( java.nio.ByteBuffer ) stack.pop();
--        }
--
--        if( buf == null )
--        {
--            buf = direct ? java.nio.ByteBuffer.allocateDirect( MINIMUM_CAPACITY << idx ) :
--                           java.nio.ByteBuffer.allocate( MINIMUM_CAPACITY << idx );
--        }
-+         java.nio.ByteBuffer buf;
-+         buf = direct ? java.nio.ByteBuffer.allocateDirect( capacity ) :
-+                        java.nio.ByteBuffer.allocate( capacity  );
-         
-         buf.clear();
-         buf.order( ByteOrder.BIG_ENDIAN );
-@@ -209,13 +174,7 @@
-     
-     private static void release0( java.nio.ByteBuffer buf )
-     {
--        Stack[] bufferStacks = buf.isDirect()? directBufferStacks : heapBufferStacks;
--        Stack stack = bufferStacks[ getBufferStackIndex( bufferStacks, buf.capacity() ) ];
--        synchronized( stack )
--        {
--            // push back
--            stack.push( buf );
--        }
-+       buf = null;
-     }
-     
-     /**
-@@ -567,10 +526,6 @@
-             }
- 
-             release0( buf );
--            synchronized( containerStack )
--            {
--                containerStack.push( this );
--            }
-         }
- 
-         public java.nio.ByteBuffer buf()

+ 0 - 1645
ldap/servers/ntds/apacheds/org/apache/ldap/server/NetAPIPartition.java

@@ -1,1645 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
-/*
- * NetAPIPartition.java
- *
- * Created on February 22, 2005, 9:34 AM
- */
-package org.apache.ldap.server;
-
-import java.util.Map;
-//import java.util.Collection;
-import java.util.Date;
-import java.util.Properties;
-import java.io.File;
-import java.io.FileWriter;
-import javax.naming.Name;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.ModificationItem;
-import javax.naming.directory.SearchControls;
-
-import org.apache.ldap.common.name.LdapName;
-//import org.apache.ldap.common.util.PropertiesUtils;
-import org.apache.ldap.common.filter.ExprNode;
-import org.apache.ldap.server.ContextPartition;
-//import org.apache.ldap.common.message.Control;
-import org.apache.ldap.common.filter.PresenceNode;
-
-import javax.naming.directory.BasicAttribute;
-import javax.naming.directory.BasicAttributes;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.SearchResult;
-import javax.naming.directory.DirContext;
-import java.util.StringTokenizer;
-import java.util.HashSet;
-import org.bpi.jnetman.*;
-
-/**
- *
- * @author scott
- */
-public class NetAPIPartition implements ContextPartition {
-
-    static {
-    	System.loadLibrary("jnetman");
-        //System.out.println("dll loaded");
-    }
-
-	public static byte[] HexStringToByteArray(String hexString) {
-		byte[] byteArray = new byte[hexString.length() / 2]; 
-		for(int i = 0; i < hexString.length() / 2; i++) {
-			byteArray[i] = (byte)Integer.parseInt(hexString.substring(i * 2, (i * 2) + 2), 16);
-		}
-		return byteArray;
-	}
-	
-	public static String ByteArrayToHexString(byte[] byteArray) {
-		String hexString = "";
-		for(int i = 0; i < byteArray.length; i++) {
-			hexString = hexString.concat(Integer.toHexString(byteArray[i] & 0xff));
-		}
-		return hexString;
-	}
-    
-    //private LdapName suffix;
-    private String suffix;
-    private static final String container = new String("cn=users").toLowerCase();
-    private static final String logFilename = new String("../logs/usersync.log");
-    private static final int GLOBAL_FLAG = 0x00000002;
-    private static final int DOMAINLOCAL_FLAG = 0x00000004;
-    private FileWriter outLog;
-    
-    /** Creates a new instance of NetAPIPartition */
-    public NetAPIPartition(Name upSuffix, Name normSuffix, String properties) {
-        try {
-        	outLog = new FileWriter(new File(logFilename));
-        }
-        catch(Exception e) {
-        }
-        
-        try {
-        	outLog.write(new Date() + ": reached NetAPIPartition" + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition");
-        suffix = normSuffix.toString();
-    }
-
-    /**
-     * Deletes a leaf entry from this BackingStore: non-leaf entries cannot be 
-     * deleted until this operation has been applied to their children.
-     *
-     * @param name the normalized distinguished/absolute name of the entry to
-     * delete from this BackingStore.
-     * @throws NamingException if there are any problems
-     */ 
-    public void delete( Name name ) throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.delete: " + name + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.delete: " + name);
-        
-        String rdn = getRDN(name.toString());
-        boolean deletedSomthing = false;
-        NTUser user = new NTUser();
-        NTGroup group = new NTGroup();
-        NTLocalGroup localGroup = new NTLocalGroup();
-        
-        if(name.toString().toLowerCase().startsWith(new String("sAMAccountName").toLowerCase())) {
-        	if(user.RetriveUserByAccountName(rdn) == 0) {
-        		if(user.DeleteUser() == 0) {
-        			deletedSomthing = true;
-        		}
-        	}
-        	if(group.RetriveGroupByAccountName(rdn) == 0) {
-        		if(group.DeleteGroup() == 0) {
-        			deletedSomthing = true;
-        		}
-        	}
-        	if(localGroup.RetriveLocalGroupByAccountName(rdn) == 0) {
-        		if(localGroup.DeleteLocalGroup() == 0) {
-        			deletedSomthing = true;
-        		}
-        	}
-        }
-        else if((name.toString().toLowerCase().startsWith(new String("objectGUID").toLowerCase())) ||
-        		(name.toString().toLowerCase().startsWith(new String("GUID").toLowerCase()))) {
-        	
-        	if(user.RetriveUserBySIDHexStr(rdn) == 0) {
-        		if(user.DeleteUser() == 0) {
-        			deletedSomthing = true;
-        		}
-        	}
-        	if(group.RetriveGroupBySIDHexStr(rdn) == 0) {
-        		if(group.DeleteGroup() == 0) {
-        			deletedSomthing = true;
-        		}
-        	}
-        	if(localGroup.RetriveLocalGroupBySIDHexStr(rdn) == 0) {
-        		if(localGroup.DeleteLocalGroup() == 0) {
-        			deletedSomthing = true;
-        		}
-        	}
-        }
-        else {
-        	throw new NamingException("Can not delete DN: " + name);
-        }
-        
-        if(!deletedSomthing) {
-            throw new NamingException("No matching users or groups: " + rdn);
-        }
-    }
-
-    /**
-     * Adds an entry to this BackingStore.
-     *
-     * @param upName the user provided distinguished/absolute name of the entry
-     * @param normName the normalized distinguished/absolute name of the entry
-     * @param entry the entry to add to this BackingStore
-     * @throws NamingException if there are any problems
-     */
-    public void add( String upName, Name normName, Attributes entry ) throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.add: " + normName + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.add: " + normName);
-        
-        String rdn = getRDN(normName.toString());
-        Attribute attribute = entry.get("objectClass");
-        Attribute groupType;
-        ModificationItem[] modItems = new ModificationItem[entry.size()];
-        NamingEnumeration modAttributes = entry.getAll();
-        NTUser user = new NTUser();
-        NTGroup group = new NTGroup();
-        NTLocalGroup localGroup = new NTLocalGroup();
-        int result;
-
-        for(int i = 0; i < entry.size(); i++) {
-        	modItems[i] = new ModificationItem(DirContext.ADD_ATTRIBUTE, (Attribute)modAttributes.next());
-        }
-
-        if(normName.toString().compareToIgnoreCase(suffix) == 0) {
-        	// Gets us past the CoreContextFactory.startUpAppPartitions
-        }
-        else if((normName.toString().toLowerCase().endsWith(container + "," + suffix)) &&
-        		(normName.toString().toLowerCase().startsWith(new String("sAMAccountName").toLowerCase()))) {
-        	
-            if(attribute.contains("user")) {
-                if(user.NewUser(rdn) != 0) {
-                	throw new NamingException("Failed to add new user: " + normName);
-                }
-                modNTUserAttributes(user, modItems);
-            }
-            else if(attribute.contains("group")) {
-            	attribute = entry.get("groupType");
-            	if(attribute == null) {
-            		throw new NamingException("Missing groupType");
-            	}
-            	
-            	if(((new Integer((String)attribute.get())).intValue() & GLOBAL_FLAG) == GLOBAL_FLAG) {
-                    if(group.NewGroup(rdn) != 0) {
-                    	throw new NamingException("Failed to add new group: " + normName);
-                    }
-                    modNTGroupAttributes(group, modItems);
-            	}
-            	else if(((new Integer((String)attribute.get())).intValue() & DOMAINLOCAL_FLAG) == DOMAINLOCAL_FLAG) {
-                    if(localGroup.NewLocalGroup(rdn) != 0) {
-                    	throw new NamingException("Failed add new local group: " + normName);
-                    }
-                    modNTLocalGroupAttributes(localGroup, modItems);
-            	}
-            	else {
-            		throw new NamingException("Unknown group type: " + (Integer)attribute.get());
-            	}
-            }
-            else {
-                throw new NamingException("No matching objectClass");
-            }
-        }
-        else {
-            throw new NamingException("Attempt to add an entry outside partition scope: " + normName);
-        }
-    }
-
-    /**
-     * Modifies an entry by adding, removing or replacing a set of attributes.
-     *
-     * @param name the normalized distinguished/absolute name of the entry to
-     * modify
-     * @param modOp the modification operation to perform on the entry which
-     * is one of constants specified by the DirContext interface:
-     * <code>ADD_ATTRIBUTE, REMOVE_ATTRIBUTE, REPLACE_ATTRIBUTE</code>.
-     * @param mods the attributes and their values used to affect the
-     * modification with.
-     * @throws NamingException if there are any problems
-     * @see javax.naming.directory.DirContext
-     * @see javax.naming.directory.DirContext.ADD_ATTRIBUTE
-     * @see javax.naming.directory.DirContext.REMOVE_ATTRIBUTE
-     * @see javax.naming.directory.DirContext.REPLACE_ATTRIBUTE
-     */
-    public void modify( Name name, int modOp, Attributes mods ) throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.modify1: " + name + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.modify1: " + name);
-        
-        ModificationItem[] modItems = new ModificationItem[mods.size()];
-        NamingEnumeration modAttributes = mods.getAll();
-
-        for(int i = 0; i < mods.size(); i++) {
-        	modItems[i] = new ModificationItem(modOp, (Attribute)modAttributes.next());
-        }
-        
-        modify(name, modItems);
-    }
-
-    /**
-     * Modifies an entry by using a combination of adds, removes or replace 
-     * operations using a set of ModificationItems.
-     *
-     * @param name the normalized distinguished/absolute name of the entry to modify
-     * @param mods the ModificationItems used to affect the modification with
-     * @throws NamingException if there are any problems
-     * @see ModificationItem
-     */
-    public void modify( Name name, ModificationItem [] mods ) throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.modify2: " + name + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.modify2: " + name);
-
-        String rdn = getRDN(name.toString());
-        boolean modifiedSomething = false;
-        NTUser user = new NTUser();
-        NTGroup group = new NTGroup();
-        NTLocalGroup localGroup = new NTLocalGroup();
-
-        if(name.toString().toLowerCase().startsWith(new String("sAMAccountName").toLowerCase())) {
-            if(user.RetriveUserByAccountName(rdn) == 0) {
-                modNTUserAttributes(user, mods);
-                
-                modifiedSomething = true;
-            }
-            else if(group.RetriveGroupByAccountName(rdn) == 0) {
-                modNTGroupAttributes(group, mods);
-                
-                modifiedSomething = true;
-            }
-            else if(localGroup.RetriveLocalGroupByAccountName(rdn) == 0) {
-                modNTLocalGroupAttributes(localGroup, mods);
-                
-                modifiedSomething = true;
-            }
-        }
-        else if((name.toString().toLowerCase().startsWith(new String("objectGUID").toLowerCase())) ||
-        		(name.toString().toLowerCase().startsWith(new String("GUID").toLowerCase()))) {
-        	
-        	if(user.RetriveUserBySIDHexStr(rdn) == 0) {
-                modNTUserAttributes(user, mods);
-                
-                modifiedSomething = true;
-            }
-            else if(group.RetriveGroupBySIDHexStr(rdn) == 0) {
-                modNTGroupAttributes(group, mods);
-                
-                modifiedSomething = true;
-            }
-            else if(localGroup.RetriveLocalGroupBySIDHexStr(rdn) == 0) {
-                modNTLocalGroupAttributes(localGroup, mods);
-                
-                modifiedSomething = true;
-            }
-        }
-        else {
-            throw new NamingException("Can not delete DN: " + name);
-        }
-        
-        if(!modifiedSomething) {
-            throw new NamingException("No matching users or groups: " + rdn);
-        }
-    }
-
-    /**
-     * A specialized form of one level search used to return a minimal set of 
-     * information regarding child entries under a base.  Convenience method
-     * used to optimize operations rather than conducting a full search with 
-     * retrieval.
-     *
-     * @param base the base distinguished/absolute name for the search/listing
-     * @return a NamingEnumeration containing objects of type
-     * {@link org.apache.ldap.server.db.DbSearchResult}
-     * @throws NamingException if there are any problems
-     */
-    public NamingEnumeration list( Name base ) throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.list" + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.list");
-
-        return new BasicAttribute(base.toString()).getAll();
-    }
-    
-    /**
-     * Conducts a search against this BackingStore.  Namespace specific
-     * parameters for search are contained within the environment using
-     * namespace specific keys into the hash.  For example in the LDAP namespace
-     * a BackingStore implementation may look for search Controls using a
-     * namespace specific or implementation specific key for the set of LDAP
-     * Controls.
-     *
-     * @param base the normalized distinguished/absolute name of the search base
-     * @param env the environment under which operation occurs
-     * @param filter the root node of the filter expression tree
-     * @param searchCtls the search controls
-     * @throws NamingException if there are any problems
-     * @return a NamingEnumeration containing objects of type 
-     * <a href="http://java.sun.com/j2se/1.4.2/docs/api/
-     * javax/naming/directory/SearchResult.html">SearchResult</a>.
-     */
-    public NamingEnumeration search( Name base, Map env, ExprNode filter,
-        SearchControls searchCtls ) throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.search: " + base + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.search: " + base + " " + filter);
-        
-        BasicAttribute results = new BasicAttribute(null);
-        SearchResult result;
-        BasicAttributes attributes;
-        BasicAttribute attribute;
-        String rdn = getRDN(base.toString());
-        NTUser user = new NTUser();
-        NTGroup group = new NTGroup();
-        NTLocalGroup localGroup = new NTLocalGroup();
-        
-        // base equals suffix
-        if(base.toString().compareToIgnoreCase(suffix) == 0) {
-        	// object scope
-        	if(((searchCtls.getSearchScope() == SearchControls.OBJECT_SCOPE) ||
-        			(searchCtls.getSearchScope() == SearchControls.SUBTREE_SCOPE)) &&
-        			(filter.toString().toLowerCase().startsWith(new String("(objectClass=*)").toLowerCase()))) {
-        		
-                attributes = new BasicAttributes();
-
-                attribute = new BasicAttribute("objectClass");
-                attribute.add("top");
-                attribute.add("domain");
-                attributes.put(attribute);
-
-                result = new SearchResult(suffix, null, attributes);
-                results.add(result);
-        	}
-        	
-        	// one level or subtree scope
-        	if(((searchCtls.getSearchScope() == SearchControls.ONELEVEL_SCOPE) ||
-					(searchCtls.getSearchScope() == SearchControls.SUBTREE_SCOPE)) &&
-        			(filter.toString().toLowerCase().startsWith(new String("(objectClass=*)").toLowerCase()))) {
-                
-                result = new SearchResult(container + "," + suffix, null, new BasicAttributes());
-                results.add(result);
-        	}
-        	
-        	// subtree scope
-        	if(searchCtls.getSearchScope() == SearchControls.SUBTREE_SCOPE) {
-        		searchAccounts(base, env, filter, searchCtls, results);
-        	}
-        }
-        // base equals container plus suffix 
-        else if(base.toString().compareToIgnoreCase(container + "," + suffix) == 0) {
-        	// object scope
-        	if(((searchCtls.getSearchScope() == SearchControls.OBJECT_SCOPE) ||
-					(searchCtls.getSearchScope() == SearchControls.SUBTREE_SCOPE)) &&
-        			(filter.toString().toLowerCase().startsWith(new String("(objectClass=*)").toLowerCase()))) {
-        		
-        		attributes = new BasicAttributes();
-
-                attribute = new BasicAttribute("objectClass");
-                attribute.add("top");
-                attribute.add("domain");
-                attributes.put(attribute);
-
-                result = new SearchResult(container + "," + suffix, null, attributes);
-                results.add(result);
-        	}
-        	
-        	// one level or subtree scope
-        	if((searchCtls.getSearchScope() == SearchControls.ONELEVEL_SCOPE) ||
-					(searchCtls.getSearchScope() == SearchControls.SUBTREE_SCOPE)) {
-        		
-        		searchAccounts(base, env, filter, searchCtls, results);
-        	}
-        	
-        	// subtree scope
-        	if(searchCtls.getSearchScope() == SearchControls.SUBTREE_SCOPE) {
-        		// Nothing that OVELEVEL_SCOPE || SUBTREE_SCOPE doesn't already cover
-        	}
-        }
-        // base ends with container plus suffix
-        else if(base.toString().toLowerCase().endsWith(new String(container + "," + suffix).toLowerCase())) {
-        	// object scope
-        	if((searchCtls.getSearchScope() == SearchControls.OBJECT_SCOPE) ||
-					(searchCtls.getSearchScope() == SearchControls.SUBTREE_SCOPE)) {
-        		
-        		searchAccounts(base, env, filter, searchCtls, results);
-        	}
-        	
-        	// one level or subtree scope
-        	if((searchCtls.getSearchScope() == SearchControls.ONELEVEL_SCOPE) ||
-					(searchCtls.getSearchScope() == SearchControls.SUBTREE_SCOPE)) {
-        		// Empty set
-        	}
-        	
-        	// subtree scope
-        	if(searchCtls.getSearchScope() == SearchControls.SUBTREE_SCOPE) {
-        		// Nothing that OBJECT_SCOPE || SUBTREE_SCOPE doesn't already cover
-        	}
-        }
-        // unknown base
-        else {
-        	throw new NamingException("Attempt to search for an entry outside partition scope: " + base);
-        }
-        
-        return results.getAll();
-    }
-
-    /**
-     * Looks up an entry by distinguished/absolute name.  This is a simplified
-     * version of the search operation used to point read an entry used for
-     * convenience.
-     *
-     * @param name the normalized distinguished name of the object to lookup
-     * @return an Attributes object representing the entry
-     * @throws NamingException if there are any problems
-     */
-    public Attributes lookup( Name name ) throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.lookup1: " + name + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.lookup1: " + name);
-        
-        BasicAttributes attributes = null;
-        BasicAttribute attribute;
-        String rdn = getRDN(name.toString());
-        NTUser user = new NTUser();
-        NTGroup group = new NTGroup();
-        NTLocalGroup localGroup = new NTLocalGroup();
-        
-        if(name.toString().compareToIgnoreCase(suffix) == 0) {
-            attributes = new BasicAttributes();
-
-            attribute = new BasicAttribute("objectClass");
-            attribute.add("top");
-            attribute.add("domain");
-            attributes.put(attribute);
-        }
-        else if(name.toString().compareToIgnoreCase(container + "," + suffix) == 0) {
-            attributes = new BasicAttributes();
-
-            attribute = new BasicAttribute("objectClass");
-            attribute.add("top");
-            attribute.add("domain");
-            attributes.put(attribute);
-        }
-        else if(name.toString().toLowerCase().endsWith(container + "," + suffix)) {
-	        if(user.RetriveUserByAccountName(rdn) == 0) {
-	            attributes = getNTUserAttributes(user, rdn);
-	        }
-	        else if(group.RetriveGroupByAccountName(rdn) == 0) {
-	            attributes = getNTGroupAttributes(group, rdn);
-	        }
-	        else if(localGroup.RetriveLocalGroupByAccountName(rdn) == 0) {
-	            attributes = getNTLocalGroupAttributes(localGroup, rdn);
-	        }
-        }
-        else {
-            throw new NamingException("Attempt to look up an entry outside partition scope: " + name);
-        }
-        
-        return attributes;
-    }
-
-    /**
-     * Looks up an entry by distinguished name.  This is a simplified version
-     * of the search operation used to point read an entry used for convenience
-     * with a set of attributes to return.  If the attributes are null or emty
-     * this defaults to the lookup opertion without the attributes.
-     *
-     * @param dn the normalized distinguished name of the object to lookup
-     * @param attrIds the set of attributes to return
-     * @return an Attributes object representing the entry
-     * @throws NamingException if there are any problems
-     */
-    public Attributes lookup( Name dn, String [] attrIds ) throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.lookup2: " + dn + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.lookup2: " + dn);
-        
-        return lookup(dn);
-    }
-
-    /**
-     * Fast operation to check and see if a particular entry exists.
-     *
-     * @param name the normalized distinguished/absolute name of the object to
-     * check for existance
-     * @return true if the entry exists, false if it does not
-     * @throws NamingException if there are any problems
-     */
-    public boolean hasEntry( Name name ) throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.hasEntry: " + name + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.hasEntry: " + name);
-
-        boolean result = false;
-        String rdn = getRDN(name.toString());
-        NTUser user = new NTUser();
-        NTGroup group = new NTGroup();
-        NTLocalGroup localGroup = new NTLocalGroup();
-
-        if(name.toString().compareToIgnoreCase(suffix) == 0) {
-            result = true;
-        }
-        else if(name.toString().compareToIgnoreCase(container + "," + suffix) == 0) {
-            result = true;
-        }
-        
-        // An exception raised in searchAccounts is treated as a false hasEntry result
-        try {
-        	if(searchAccounts(name, new Properties(), new PresenceNode(null), new SearchControls(), new BasicAttribute(null)) > 0) {
-            	result = true;
-        	}
-        }
-        catch(Exception e) {
-        }
-
-        return result;
-    }
-
-    /**
-     * Checks to see if name is a context suffix.
-     *
-     * @param name the normalized distinguished/absolute name of the context
-     * @return true if the name is a context suffix, false if it is not.
-     * @throws NamingException if there are any problems
-     */
-    public boolean isSuffix( Name name ) throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.isSuffix" + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.isSuffix");
-
-        return false;
-    }
-
-    /**
-     * Modifies an entry by changing its relative name. Optionally attributes
-     * associated with the old relative name can be removed from the entry.
-     * This makes sense only in certain namespaces like LDAP and will be ignored
-     * if it is irrelavent.
-     *
-     * @param name the normalized distinguished/absolute name of the entry to
-     * modify the RN of.
-     * @param newRn the new RN of the entry specified by name
-     * @param deleteOldRn boolean flag which removes the old RN attribute
-     * from the entry if set to true, and has no affect if set to false
-     * @throws NamingException if there are any problems
-     */
-    public void modifyRn( Name name, String newRn, boolean deleteOldRn )
-        throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.modifyRn" + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.modifyRn");
-
-    }
-
-    /**
-     * Transplants a child entry, to a position in the namespace under a new
-     * parent entry.
-     *
-     * @param newParentName the normalized distinguished/absolute name of the
-     * new parent to move the target entry to
-     * @param oriChildName the normalized distinguished/absolute name of the
-     * original child name representing the child entry to move
-     * @throws NamingException if there are any problems
-     */
-    public void move( Name oriChildName, Name newParentName ) throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.move1" + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.move1");
-
-    }
-
-    /**
-     * Transplants a child entry, to a position in the namespace under a new
-     * parent entry and changes the RN of the child entry which can optionally
-     * have its old RN attributes removed.  The removal of old RN attributes
-     * may not make sense in all namespaces.  If the concept is undefined in a
-     * namespace this parameters is ignored.  An example of a namespace where
-     * this parameter is significant is the LDAP namespace.
-     *
-     * @param oriChildName the normalized distinguished/absolute name of the
-     * original child name representing the child entry to move
-     * @param newParentName the normalized distinguished/absolute name of the
-     * new parent to move the targeted entry to
-     * @param newRn the new RN of the entry
-     * @param deleteOldRn boolean flag which removes the old RN attribute
-     * from the entry if set to true, and has no affect if set to false
-     * @throws NamingException if there are any problems
-     */
-    public void move( Name oriChildName, Name newParentName, String newRn,
-               boolean deleteOldRn ) throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.move2" + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.move2");
-
-    }
-
-    /**
-     * Cue to BackingStores with caches to flush entry and index changes to disk.
-     *
-     * @throws NamingException if there are problems flushing caches
-     */
-    public void sync() throws NamingException {
-    }
-
-    /**
-     * Closes or shuts down this BackingStore.  Operations against closed
-     * BackingStores will fail.
-     *
-     * @throws NamingException if there are problems shutting down
-     */
-    public void close() throws NamingException {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.close" + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.close");
-
-    }
-
-    /**
-     * Checks to see if this BackingStore has been closed or shut down.
-     * Operations against closed BackingStores will fail.
-     *
-     * @return true if shut down, false otherwise
-     */
-    public boolean isClosed() {
-    	try {
-        	outLog.write(new Date() + ": reached NetAPIPartition.isClosed" + "\n");
-        	outLog.flush();
-        }
-        catch(Exception e) {
-        }
-        //System.out.println("reached NetAPIPartition.isClosed");
-
-        return true;
-    }
-    
-    /**
-     * Gets the distinguished/absolute name of the suffix for all entries
-     * stored within this BackingStore.
-     *
-     * @param normalized boolean value used to control the normalization of the
-     * returned Name.  If true the normalized Name is returned, otherwise the 
-     * original user provided Name without normalization is returned.
-     * @return Name representing the distinguished/absolute name of this
-     * BackingStores root context.
-     */
-    public Name getSuffix( boolean normalized ) {
-    	LdapName name = null; 
-    	
-    	try {
-    		name = new LdapName(suffix);
-    	}
-    	catch(NamingException ne) {
-    	}
-    	
-    	return name;
-    }
-    
-    private String getRDN(String dn) {
-        StringTokenizer tokenizer;
-        String rdn;
-
-        tokenizer = new StringTokenizer(dn, "(),=<>");
-        rdn = tokenizer.nextToken();
-        rdn = tokenizer.nextToken();
-        
-        return rdn;
-    }
-    
-    private int searchAccounts(Name base, Map env, ExprNode filter,
-            SearchControls searchCtls, BasicAttribute results) throws NamingException {
-    	
-    	int resultCount = 0;
-    	SearchResult result;
-    	BasicAttributes attributes;
-        String rdn = getRDN(base.toString());
-
-        NTUser user = new NTUser();
-        NTGroup group = new NTGroup();
-        NTLocalGroup localGroup = new NTLocalGroup();
-        
-        if(base.toString().toLowerCase().startsWith(new String("sAMAccountName").toLowerCase())) {
-        	if(user.RetriveUserByAccountName(rdn) == 0) {
-        		attributes = new BasicAttributes();
-	            
-	            attributes = getNTUserAttributes(user, rdn);
-	            result = new SearchResult("sAMAccountName=" + user.GetAccountName() + "," + container + "," + suffix, null, attributes);
-	            results.add(result);
-	            resultCount++;
-        	}
-        	else if(group.RetriveGroupByAccountName(rdn) == 0) {
-        		attributes = new BasicAttributes();
-	            
-	            attributes = getNTGroupAttributes(group, rdn);
-	            result = new SearchResult("sAMAccountName=" + group.GetAccountName() + "," + container + "," + suffix, null, attributes);
-	            results.add(result);
-	            resultCount++;
-        	}
-        	else if(localGroup.RetriveLocalGroupByAccountName(rdn) == 0) {
-        		attributes = new BasicAttributes();
-	            
-	            attributes = getNTLocalGroupAttributes(localGroup, rdn);
-	            result = new SearchResult("sAMAccountName=" + localGroup.GetAccountName() + "," + container + "," + suffix, null, attributes);
-	            results.add(result);
-	            resultCount++;
-        	}
-        	else {
-        		// empty set
-        	}
-        }
-        else if((base.toString().toLowerCase().startsWith(new String("objectGUID").toLowerCase())) ||
-        		(base.toString().toLowerCase().startsWith(new String("GUID").toLowerCase()))) {
-        	if(user.RetriveUserBySIDHexStr(rdn) == 0) {
-        		attributes = new BasicAttributes();
-	            
-	            attributes = getNTUserAttributes(user, rdn);
-	            result = new SearchResult("sAMAccountName=" + user.GetAccountName() + "," + container + "," + suffix, null, attributes);
-	            results.add(result);
-	            resultCount++;
-        	}
-        	else if(group.RetriveGroupBySIDHexStr(rdn) == 0) {
-        		attributes = new BasicAttributes();
-	            
-	            attributes = getNTGroupAttributes(group, rdn);
-	            result = new SearchResult("sAMAccountName=" + group.GetAccountName() + "," + container + "," + suffix, null, attributes);
-	            results.add(result);
-	            resultCount++;
-        	}
-        	else if(localGroup.RetriveLocalGroupBySIDHexStr(rdn) == 0) {
-        		attributes = new BasicAttributes();
-	            
-	            attributes = getNTLocalGroupAttributes(localGroup, rdn);
-	            result = new SearchResult("sAMAccountName=" + localGroup.GetAccountName() + "," + container + "," + suffix, null, attributes);
-	            results.add(result);
-	            resultCount++;
-        	}
-        	else {
-        		// empty set
-        	}
-        }
-        else if((base.toString().compareToIgnoreCase(suffix) == 0) ||
-        		base.toString().compareToIgnoreCase(container + "," + suffix) == 0) {
-        	if(filter.toString().toLowerCase().startsWith(new String("(sAMAccountName=").toLowerCase())) {
-        		rdn = getRDN(filter.toString());
-        		
-            	if(user.RetriveUserByAccountName(rdn) == 0) {
-            		attributes = new BasicAttributes();
-    	            
-    	            attributes = getNTUserAttributes(user, rdn);
-    	            result = new SearchResult("sAMAccountName=" + user.GetAccountName() + "," + container + "," + suffix, null, attributes);
-    	            results.add(result);
-    	            resultCount++;
-            	}
-            	else if(group.RetriveGroupByAccountName(rdn) == 0) {
-            		attributes = new BasicAttributes();
-    	            
-    	            attributes = getNTGroupAttributes(group, rdn);
-    	            result = new SearchResult("sAMAccountName=" + group.GetAccountName() + "," + container + "," + suffix, null, attributes);
-    	            results.add(result);
-    	            resultCount++;
-            	}
-            	else if(localGroup.RetriveLocalGroupByAccountName(rdn) == 0) {
-            		attributes = new BasicAttributes();
-    	            
-    	            attributes = getNTLocalGroupAttributes(localGroup, rdn);
-    	            result = new SearchResult("sAMAccountName=" + localGroup.GetAccountName() + "," + container + "," + suffix, null, attributes);
-    	            results.add(result);
-    	            resultCount++;
-            	}
-            	else {
-            		// empty set
-            	}
-        	}
-        	else if((filter.toString().toLowerCase().startsWith(new String("(objectGUID=").toLowerCase())) ||
-        			(filter.toString().toLowerCase().startsWith(new String("(GUID=").toLowerCase()))) {
-        		rdn = getRDN(filter.toString());
-        		
-            	if(user.RetriveUserBySIDHexStr(rdn) == 0) {
-            		attributes = new BasicAttributes();
-    	            
-    	            attributes = getNTUserAttributes(user, rdn);
-    	            result = new SearchResult("sAMAccountName=" + user.GetAccountName() + "," + container + "," + suffix, null, attributes);
-    	            results.add(result);
-    	            resultCount++;
-            	}
-            	else if(group.RetriveGroupBySIDHexStr(rdn) == 0) {
-            		attributes = new BasicAttributes();
-    	            
-    	            attributes = getNTGroupAttributes(group, rdn);
-    	            result = new SearchResult("sAMAccountName=" + group.GetAccountName() + "," + container + "," + suffix, null, attributes);
-    	            results.add(result);
-    	            resultCount++;
-            	}
-            	else if(localGroup.RetriveLocalGroupBySIDHexStr(rdn) == 0) {
-            		attributes = new BasicAttributes();
-    	            
-    	            attributes = getNTLocalGroupAttributes(localGroup, rdn);
-    	            result = new SearchResult("sAMAccountName=" + localGroup.GetAccountName() + "," + container + "," + suffix, null, attributes);
-    	            results.add(result);
-    	            resultCount++;
-            	}
-            	else {
-            		// empty set
-            	}
-        	}
-        	else if(filter.toString().toLowerCase().startsWith(new String("(objectClass=*)").toLowerCase())) {
-		    	NTUserList users = new NTUserList();
-		        if(users.loadList() != 0) {
-		            throw new NamingException("Failed to load user list");
-		        }
-		        while(users.hasMore()) {
-		            attributes = new BasicAttributes();
-		            
-		            rdn = users.nextUsername();
-		            if(!rdn.endsWith("$")) {
-			            user.RetriveUserByAccountName(rdn);
-			            attributes = getNTUserAttributes(user, rdn);
-			            result = new SearchResult("sAMAccountName=" + user.GetAccountName() + "," + container + "," + suffix, null, attributes);
-			            results.add(result);
-			            resultCount++;
-		            }
-		        }
-		        
-		        NTGroupList groups = new NTGroupList();
-		        if(groups.loadList() != 0) {
-		            throw new NamingException("Failed to load group list");
-		        }
-		        while(groups.hasMore()) {
-		            attributes = new BasicAttributes();
-		            
-		            rdn = groups.nextGroupName();
-		            if(!rdn.endsWith("$")) {
-		            	group.RetriveGroupByAccountName(rdn);
-		            	attributes = getNTGroupAttributes(group, rdn);
-		            	result = new SearchResult("sAMAccountName=" + group.GetAccountName() + "," + container + "," + suffix, null, attributes);
-		            	results.add(result);
-		            	resultCount++;
-		            }
-		        }
-		        
-		        NTLocalGroupList localGroups = new NTLocalGroupList();
-		        if(localGroups.loadList() != 0) {
-		            throw new NamingException("Failed to load local group list");
-		        }
-		        while(localGroups.hasMore()) {
-		            attributes = new BasicAttributes();
-		            
-		            if(!rdn.endsWith("$")) {
-			            rdn = localGroups.nextLocalGroupName();
-			            localGroup.RetriveLocalGroupByAccountName(rdn);
-			            attributes = getNTLocalGroupAttributes(localGroup, rdn);
-			            result = new SearchResult("sAMAccountName=" + localGroup.GetAccountName() + "," + container + "," + suffix, null, attributes);
-			            results.add(result);
-			            resultCount++;
-		            }
-		        }
-        	}
-        	else {
-        		throw new NamingException("Unsupported search filter: " + filter);
-        	}
-        }
-        else {
-        	throw new NamingException("Bad base DN: " + base);
-        }
-        
-        return resultCount;
-    }
-    
-    private BasicAttributes getNTUserAttributes(NTUser user, String username) throws NamingException {
-    	int result = 0;
-        BasicAttributes attributes = new BasicAttributes();
-        BasicAttribute attribute;
-        String tempName;
-        
-        attribute = new BasicAttribute("objectClass");
-        attribute.add("top");
-        attribute.add("person");
-        attribute.add("organizationalPerson");
-        attribute.add("user");
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("objectGUID");
-        attribute.add(user.GetSIDHexStr());
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("objectSid");
-        attribute.add(user.GetSIDHexStr());
-        attributes.put(attribute);
-        
-        // Convert from NT4 format to AD format
-        Long accountExpires = new Long(user.GetAccountExpires());
-        // First convert epoch from 1970 to 1601
-        accountExpires = new Long(accountExpires.longValue() + ((long)134774 * (long)86400));
-        // Then convert from seconds to tenths of micro seconds 
-        accountExpires = new Long(accountExpires.longValue() * (long)10000000);
-        attribute = new BasicAttribute("accountExpires");
-        attribute.add(accountExpires.toString());
-        attributes.put(attribute);
-
-        attribute = new BasicAttribute("badPwdCount");
-        attribute.add(new Long(user.GetBadPasswordCount()).toString());
-        attributes.put(attribute);
-
-        attribute = new BasicAttribute("codePage");
-        attribute.add(new Long(user.GetCodePage()).toString());
-        attributes.put(attribute);
-
-        if(!user.GetComment().equals("")) {
-        	attribute = new BasicAttribute("description");
-        	attribute.add(user.GetComment());
-        	attributes.put(attribute);
-        }
-
-        attribute = new BasicAttribute("countryCode");
-        attribute.add(new Long(user.GetCountryCode()).toString());
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("userAccountControl");
-        attribute.add(new Long(user.GetFlags()).toString());
-        attributes.put(attribute);
-        
-        if(!user.GetHomeDir().equals("")) {
-        	attribute = new BasicAttribute("homeDirectory");
-        	attribute.add(user.GetHomeDir());
-        	attributes.put(attribute);
-        }
-        
-        if(!user.GetHomeDirDrive().equals("")) {
-        	attribute = new BasicAttribute("homeDrive");
-        	attribute.add(user.GetHomeDirDrive());
-        	attributes.put(attribute);
-        }
-
-        attribute = new BasicAttribute("lastLogoff");
-        attribute.add(new Long(user.GetLastLogoff()).toString());
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("lastLogon");
-        attribute.add(new Long(user.GetLastLogon()).toString());
-        attributes.put(attribute);
-
-        attribute = new BasicAttribute("logonHours");
-        attribute.add(HexStringToByteArray(user.GetLogonHours()));
-        attributes.put(attribute);
-
-        attribute = new BasicAttribute("maxStorage");
-        attribute.add(new Long(user.GetMaxStorage()).toString());
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("logonCount");
-        attribute.add(new Long(user.GetNumLogons()).toString());
-        attributes.put(attribute);
-        
-        if(!user.GetProfile().equals("")) {
-        	attribute = new BasicAttribute("profilePath");
-        	attribute.add(user.GetProfile());
-        	attributes.put(attribute);
-        }
-        
-        if(!user.GetScriptPath().equals("")) {
-        	attribute = new BasicAttribute("scriptPath");
-        	attribute.add(user.GetScriptPath());
-        	attributes.put(attribute);
-        }
-        
-        attribute = new BasicAttribute("sAMAccountName");
-        attribute.add(username);
-        attributes.put(attribute);
-
-        if(!user.GetWorkstations().equals("")) {
-        	attribute = new BasicAttribute("userWorkstations");
-        	attribute.add(user.GetWorkstations());
-        	attributes.put(attribute);
-        }
-        
-        if(!user.GetFullname().equals("")) {
-        	attribute = new BasicAttribute("cn");
-        	attribute.add(user.GetFullname());
-        	attributes.put(attribute);
-        }
-        
-        if(!user.GetFullname().equals("")) {
-        	attribute = new BasicAttribute("name");
-        	attribute.add(user.GetFullname());
-        	attributes.put(attribute);
-        }
-        
-        attribute = new BasicAttribute("memberOf");
-        result = user.LoadGroups();
-        if(result != 0) {
-        	throw new NamingException("Could not load groups: " + result);
-        }
-        while(user.HasMoreGroups()) {
-        	tempName = user.NextGroupName();
-        	if(!tempName.endsWith("$")) {
-        		attribute.add("sAMAccountName=" + tempName + "," + container + "," + suffix);
-        	}
-        }
-        result = user.LoadLocalGroups();
-        if(result != 0) {
-        	throw new NamingException("Could not load local groups: " + result);
-        }
-        while(user.HasMoreLocalGroups()) {
-        	tempName = user.NextLocalGroupName();
-        	if(!tempName.endsWith("$")) {
-        		attribute.add("sAMAccountName=" + tempName + "," + container + "," + suffix);
-        	}
-        }
-        attributes.put(attribute);
-        
-        return attributes;
-    }
-    
-    private BasicAttributes getNTGroupAttributes(NTGroup group, String groupName) throws NamingException {
-        BasicAttributes attributes = new BasicAttributes();
-        BasicAttribute attribute;
-        String tempName;
-        int result = 0;
-        
-        attribute = new BasicAttribute("objectClass");
-        attribute.add("top");
-        attribute.add("group");
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("objectGUID");
-        attribute.add(group.GetSIDHexStr());
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("objectSid");
-        attribute.add(group.GetSIDHexStr());
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("name");
-        attribute.add(groupName);
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("sAMAccountName");
-        attribute.add(groupName);
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("cn");
-        attribute.add(groupName);
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("groupType");
-        attribute.add(new Long(GLOBAL_FLAG).toString());
-        attributes.put(attribute);
-
-        if(!group.GetComment().equals("")) {
-        	attribute = new BasicAttribute("description");
-        	attribute.add(group.GetComment());
-        	attributes.put(attribute);
-        }
-        
-        attribute = new BasicAttribute("member");
-        result = group.LoadUsers();
-        if(result != 0) {
-        	throw new NamingException("Could not load users: " + result);
-        }
-        while(group.HasMoreUsers()) {
-        	tempName = group.NextUserName();
-        	// members that end with '$' are supposed to be hidden
-        	if(!tempName.endsWith("$")) {
-        		attribute.add("sAMAccountName=" + tempName + "," + container + "," + suffix);
-        	}
-        }
-        attributes.put(attribute);
-        
-        return attributes;
-    }
-    
-    private BasicAttributes getNTLocalGroupAttributes(NTLocalGroup localGroup, String localGroupName) throws NamingException {
-        BasicAttributes attributes = new BasicAttributes();
-        BasicAttribute attribute;
-        String tempName;
-        int result = 0;
-        
-        attribute = new BasicAttribute("objectClass");
-        attribute.add("top");
-        attribute.add("group");
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("objectGUID");
-        attribute.add(localGroup.GetSIDHexStr());
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("objectSid");
-        attribute.add(localGroup.GetSIDHexStr());
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("name");
-        attribute.add(localGroupName);
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("sAMAccountName");
-        attribute.add(localGroupName);
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("cn");
-        attribute.add(localGroupName);
-        attributes.put(attribute);
-        
-        attribute = new BasicAttribute("groupType");
-        attribute.add(new Long(DOMAINLOCAL_FLAG).toString());
-        attributes.put(attribute);
-        
-        if(!localGroup.GetComment().equals("")) {
-        	attribute = new BasicAttribute("description");
-        	attribute.add(localGroup.GetComment());
-        	attributes.put(attribute);
-        }
-        
-        attribute = new BasicAttribute("member");
-        result = localGroup.LoadUsers();
-        if(result != 0) {
-        	throw new NamingException("Could not load users: " + result);
-        }
-        while(localGroup.HasMoreUsers()) {
-        	tempName = localGroup.NextUserName();
-        	// members that end with '$' are supposed to be hidden
-        	if(!tempName.endsWith("$")) {
-        		attribute.add("sAMAccountName=" + tempName + "," + container + "," + suffix);
-        	}
-        }
-        attributes.put(attribute);
-        
-        return attributes;
-    }
-    
-    private void modNTUserAttributes(NTUser user, ModificationItem[] mods) throws NamingException {
-        for(int i = 0; i < mods.length; i++) {
-        	
-        	if(mods[i].getAttribute().getID().compareToIgnoreCase("accountExpires") == 0) {
-                // Convert from AD format to NT4 format
-        		Long accountExpires = new Long((String)mods[i].getAttribute().get());
-                // First convert from tenths of micro seconds to seconds 
-                accountExpires = new Long(accountExpires.longValue() / (long)10000000);
-                // Then convert epoch from 1601 to 1970
-                accountExpires = new Long(accountExpires.longValue() - ((long)134774 * (long)86400));                
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetAccountExpires(accountExpires.longValue());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetAccountExpires(new Long(-1).longValue());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetAccountExpires(accountExpires.longValue());
-        		}
-        	}
-        	else if(mods[i].getAttribute().getID().compareToIgnoreCase("codePage") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetCodePage(new Long((String)mods[i].getAttribute().get()).longValue());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetCodePage(new Long(0).longValue());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetCodePage(new Long((String)mods[i].getAttribute().get()).longValue());
-        		}
-        	}
-        	else if(mods[i].getAttribute().getID().compareToIgnoreCase("description") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetComment((String)mods[i].getAttribute().get());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetComment("");
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetComment((String)mods[i].getAttribute().get());
-        		}
-        	}
-        	else if(mods[i].getAttribute().getID().compareToIgnoreCase("countryCode") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetCountryCode(new Long((String)mods[i].getAttribute().get()).longValue());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetCountryCode(new Long(0).longValue());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetCountryCode(new Long((String)mods[i].getAttribute().get()).longValue());
-        		}
-        	}
-        	else if(mods[i].getAttribute().getID().compareToIgnoreCase("userAccountControl") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetFlags(new Long((String)mods[i].getAttribute().get()).longValue());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetFlags(new Long(1).longValue());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetFlags(new Long((String)mods[i].getAttribute().get()).longValue());
-        		}
-        	}
-        	else if(mods[i].getAttribute().getID().compareToIgnoreCase("homeDirectory") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetHomeDir((String)mods[i].getAttribute().get());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetHomeDir("");
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetHomeDir((String)mods[i].getAttribute().get());
-        		}
-        	}
-        	else if(mods[i].getAttribute().getID().compareToIgnoreCase("homeDrive") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetHomeDirDrive((String)mods[i].getAttribute().get());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetHomeDirDrive("");
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetHomeDirDrive((String)mods[i].getAttribute().get());
-        		}
-        	}
-        	else if(mods[i].getAttribute().getID().compareToIgnoreCase("logonHours") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetLogonHours(ByteArrayToHexString(mods[i].getAttribute().get().toString().getBytes()));
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetLogonHours("ffffffffffffffffffffffffffffffffffffffffff");
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetLogonHours(ByteArrayToHexString(mods[i].getAttribute().get().toString().getBytes()));
-        		}
-        	}
-        	else if(mods[i].getAttribute().getID().compareToIgnoreCase("maxStorage") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetMaxStorage(new Long((String)mods[i].getAttribute().get()).longValue());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetMaxStorage(new Long(-1).longValue());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetMaxStorage(new Long((String)mods[i].getAttribute().get()).longValue());
-        		}
-        	}
-        	else if(mods[i].getAttribute().getID().compareToIgnoreCase("profilePath") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetProfile((String)mods[i].getAttribute().get());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetProfile("");
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetProfile((String)mods[i].getAttribute().get());
-        		}
-        	}
-        	else if(mods[i].getAttribute().getID().compareToIgnoreCase("scriptPath") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetScriptPath((String)mods[i].getAttribute().get());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetScriptPath((String)mods[i].getAttribute().get());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetScriptPath((String)mods[i].getAttribute().get());
-        		}
-        	}
-        	else if(mods[i].getAttribute().getID().compareToIgnoreCase("userWorkstations") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetWorkstations((String)mods[i].getAttribute().get());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetWorkstations("");
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetWorkstations((String)mods[i].getAttribute().get());
-        		}
-        	}
-            else if(mods[i].getAttribute().getID().compareToIgnoreCase("cn") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetFullname((String)mods[i].getAttribute().get());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetFullname("");
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetFullname((String)mods[i].getAttribute().get());
-        		}
-            }
-            else if(mods[i].getAttribute().getID().compareToIgnoreCase("name") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetFullname((String)mods[i].getAttribute().get());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			user.SetFullname("");
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetFullname((String)mods[i].getAttribute().get());
-        		}
-            }
-            else if(mods[i].getAttribute().getID().compareToIgnoreCase("unicodePwd") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			user.SetPassword((String)mods[i].getAttribute().get());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			// Do nothing
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			user.SetPassword((String)mods[i].getAttribute().get());
-        		}
-            }
-            else if(mods[i].getAttribute().getID().compareToIgnoreCase("memberOf") == 0) {
-            	String tempName;
-            	
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			for(int j = 0; j < mods[i].getAttribute().size(); j++) {
-        				tempName = getRDN((String)mods[i].getAttribute().get(j));
-        				user.AddToGroup(tempName);
-        				user.AddToLocalGroup(tempName);
-            		}
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			for(int j = 0; j < mods[i].getAttribute().size(); j++) {
-	    				tempName = getRDN((String)mods[i].getAttribute().get(j));
-	        			user.RemoveFromGroup(tempName);
-	        			user.RemoveFromLocalGroup(tempName);
-        			}
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			HashSet groups = new HashSet();
-        			Object[] deletedGroups;
-        			
-        			user.LoadGroups();
-        			while(user.HasMoreGroups()) {
-        				tempName = user.NextGroupName();
-        				if(!tempName.endsWith("$")) {
-        					groups.add(tempName);
-        				}
-        			}
-        			
-        			user.LoadLocalGroups();
-        			while(user.HasMoreLocalGroups()) {
-        				tempName = user.NextLocalGroupName();
-        				if(!tempName.endsWith("$")) {
-        					groups.add(tempName);
-        				}
-        			}
-        			
-        			for(int j = 0; j < mods[i].getAttribute().size(); j++) {
-        				tempName = getRDN((String)mods[i].getAttribute().get(j));
-        				if(groups.contains(tempName)) {
-        					groups.remove(tempName);
-        				}
-        				else {
-        					user.AddToGroup(tempName);
-            				user.AddToLocalGroup(tempName);
-        				}
-            		}
-        			
-        			deletedGroups = groups.toArray();
-        			for(int j = 0; j < deletedGroups.length; j++) {
-        				user.RemoveFromGroup((String)deletedGroups[j]);
-        				user.RemoveFromLocalGroup((String)deletedGroups[j]);
-        			}
-        		}
-            }
-        }
-    }
-    
-    private void modNTGroupAttributes(NTGroup group, ModificationItem[] mods) throws NamingException {
-    	for(int i = 0; i < mods.length; i++) {
-        	if(mods[i].getAttribute().getID().compareToIgnoreCase("description") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			group.SetComment((String)mods[i].getAttribute().get());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			group.SetComment("");
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			group.SetComment((String)mods[i].getAttribute().get());
-        		}
-        	}
-	    	else if(mods[i].getAttribute().getID().compareToIgnoreCase("member") == 0) {	
-	    		String tempName;
-	    		
-	    		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-	    			for(int j = 0; j < mods[i].getAttribute().size(); j++) {
-	    				tempName = getRDN((String)mods[i].getAttribute().get(j));
-	    				group.AddUser(tempName);
-	        		}
-	    		}
-	    		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-	    			tempName = (String)mods[i].getAttribute().get();
-					if(tempName != null) {
-	    			  tempName = getRDN((String)mods[i].getAttribute().get());
-	    			  group.RemoveUser(tempName);
-					}
-					else {
-						group.LoadUsers();
-						while(group.HasMoreUsers()) {
-		    				tempName = group.NextUserName();
-							if(!tempName.endsWith("$")) {
-								group.RemoveUser(tempName);
-							}
-		    			}
-					}
-	    		}
-	    		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-	    			HashSet users = new HashSet();
-	    			Object[] deletedUsers;
-		    		
-	    			group.LoadUsers();
-	    			while(group.HasMoreUsers()) {
-	    				tempName = group.NextUserName();
-						if(!tempName.endsWith("$")) {
-							users.add(tempName);
-						}
-	    			}
-	    			
-	    			for(int j = 0; j < mods[i].getAttribute().size(); j++) {
-	    				tempName = getRDN((String)mods[i].getAttribute().get(j));
-	    				if(users.contains(tempName)) {
-	    					users.remove(tempName);
-	    				}
-	    				else {
-	    					group.AddUser(tempName);
-	    				}
-	        		}
-	    			
-	    			deletedUsers = users.toArray();
-	    			for(int j = 0; j < deletedUsers.length; j++) {
-        				group.RemoveUser((String)deletedUsers[j]);
-        			}
-	    		}
-	        }
-    	}
-    }
-    
-    private void modNTLocalGroupAttributes(NTLocalGroup localGroup, ModificationItem[] mods) throws NamingException {
-    	for(int i = 0; i < mods.length; i++) {
-        	if(mods[i].getAttribute().getID().compareToIgnoreCase("description") == 0) {
-        		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-        			localGroup.SetComment((String)mods[i].getAttribute().get());
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-        			localGroup.SetComment("");
-        		}
-        		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-        			localGroup.SetComment((String)mods[i].getAttribute().get());
-        		}
-        	}
-    		else if(mods[i].getAttribute().getID().compareToIgnoreCase("member") == 0) {	
-	    		String tempName;
-	    		
-	    		if(mods[i].getModificationOp() == DirContext.ADD_ATTRIBUTE) {
-	    			for(int j = 0; j < mods[i].getAttribute().size(); j++) {
-	    				tempName = getRDN((String)mods[i].getAttribute().get(j));
-	    				localGroup.AddUser(tempName);
-	        		}
-	    		}
-	    		else if(mods[i].getModificationOp() == DirContext.REMOVE_ATTRIBUTE) {
-	    			tempName = (String)mods[i].getAttribute().get();
-					if(tempName != null) {
-	    			  tempName = getRDN((String)mods[i].getAttribute().get());
-	    			  localGroup.RemoveUser(tempName);
-					}
-					else {
-						localGroup.LoadUsers();
-						while(localGroup.HasMoreUsers()) {
-		    				tempName = localGroup.NextUserName();
-							if(!tempName.endsWith("$")) {
-								localGroup.RemoveUser(tempName);
-							}
-		    			}
-					}
-	    		}
-	    		else if(mods[i].getModificationOp() == DirContext.REPLACE_ATTRIBUTE) {
-	    			HashSet users = new HashSet();
-	    			Object[] deletedUsers;
-		    		
-	    			localGroup.LoadUsers();
-	    			while(localGroup.HasMoreUsers()) {
-	    				tempName = localGroup.NextUserName();
-						if(!tempName.endsWith("$")) {
-							users.add(tempName);
-						}
-	    			}
-	    			
-	    			for(int j = 0; j < mods[i].getAttribute().size(); j++) {
-	    				tempName = getRDN((String)mods[i].getAttribute().get(j));
-	    				if(users.contains(tempName)) {
-	    					users.remove(tempName);
-	    				}
-	    				else {
-	    					localGroup.AddUser(tempName);
-	    				}
-	        		}
-	    			
-	    			deletedUsers = users.toArray();
-	    			for(int j = 0; j < deletedUsers.length; j++) {
-        				localGroup.RemoveUser((String)deletedUsers[j]);
-        			}
-	    		}
-	        }
-    	}
-    }
-}

+ 0 - 88
ldap/servers/ntds/apacheds/project.properties

@@ -1,88 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-maven.compile.source = 1.4
-maven.compile.target = 1.4
-maven.compile.debug=on
-maven.compile.optimize=on
-maven.compile.deprecation=on
-
-#maven.junit.fork=yes
-maven.xdoc.includeProjectDocumentation=yes
-
-#maven.javadoc.private=true
-
-# AspectJ Properties
-# =======================
-
-#maven.aspectj.verbose=true
-#maven.aspectj.incremental=true
-maven.aspectj.time=true
-
-
-# schema class generation
-# =======================
-
-maven.ldap.server.schemas=apachedns,autofs,core,cosine,corba,apache,inetorgperson,java,krb5kdc,nis,system,dhcp,samba,usersync
-
-maven.ldap.server.schema.deps.apachedns=system,core
-maven.ldap.server.schema.deps.autofs=system,core,cosine
-maven.ldap.server.schema.deps.corba=system,core
-maven.ldap.server.schema.deps.core=system
-maven.ldap.server.schema.deps.cosine=system,core
-maven.ldap.server.schema.deps.apache=system
-maven.ldap.server.schema.deps.inetorgperson=system,core,cosine
-maven.ldap.server.schema.deps.java=system,core
-maven.ldap.server.schema.deps.krb5kdc=system,core
-maven.ldap.server.schema.deps.nis=system,core,cosine
-maven.ldap.server.schema.deps.system=
-maven.ldap.server.schema.deps.dhcp=system,core
-maven.ldap.server.schema.deps.samba=cosine,inetorg,nis
-maven.ldap.server.schema.deps.usersync=
-
-maven.license.licenseFile=${basedir}/../LICENSE.txt
-
-maven.junit.sysproperties=java.util.prefs.PreferencesFactory
-java.util.prefs.PreferencesFactory=org.apache.ldap.server.prefs.ServerPreferencesFactory
-
-maven.eclipse.classpath.include=${basedir}/target/schema,${basedir}/src/main/aspects
-
-# Disabled temporarilly; Eclipse build doesn't work.
-#maven.eclipse.buildcommands=org.eclipse.ajdt.core.ajbuilder
-#maven.eclipse.projectnatures=org.eclipse.ajdt.ui.ajnature

+ 0 - 18
ldap/servers/ntds/apacheds/readme.txt

@@ -1,18 +0,0 @@
-basic instructions for our apacheds:
-
-for our jar component
-# svn co http://svn.apache.org/repos/asf/directory
-# cd directory/apacheds/trunk/
-# apply the patches
-# maven -D maven.test.skip=true multiproject:install
-# cd main/target
-# copy apacheds-main-${VER}.jar into component directory
-
-for our source component:
-# svn co http://svn.apache.org/repos/asf/directory
-# cd directory/apacheds/
-# cp -R trunk apacheds-${VER}
-# zip apacheds-${VER} into apacheds-${VER}-src.zip
-# copy apacheds-${VER}-src.zip into component directory
-
-

+ 0 - 582
ldap/servers/ntds/apacheds/usersync.schema

@@ -1,582 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-# mystery section attributes
-attributetype ( 1.3.6.1.4.1.7114.2.1.10 NAME 'changetype'
-        DESC 'AD ubiquitous changetype attribute'
-        EQUALITY caseIgnoreIA5Match
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{8} SINGLE-VALUE )
-
-# Microsoft attributes
-#
-# Here follows definitions from schema/microsoft.schema
-# if you don't have the file o dont like the OIDs or so,
-# you MUST copy and paste this list attribute definition:
-#
-# SYNTAX changes:
-#
-# Large-Integer: 1.3.6.1.4.1.1466.115.121.1.27
-# Encoded as an Integer (OID 1.3.6.1.4.1.1466.115.121.1.27), but guaranteed
-# to support 64 bit numbers.
-
-# user attrs
-
-attributetype ( 1.2.840.113556.1.4.8  NAME 'userAccountControl'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.166
-        NAME 'groupMembershipSAM'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.213
-        NAME 'defaultClassStore'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )
-
-attributetype ( 1.2.840.113556.1.4.656
-        NAME 'userPrincipalName'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.86
-        NAME 'userWorkstations'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.65
-        NAME 'logonWorkstation'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.751
-        NAME 'userSharedFolder'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.49
-        NAME 'badPasswordTime'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.302
-        NAME 'sAMAccountType'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.98
-        NAME 'primaryGroupID'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.159
-        NAME 'accountExpires'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.346
-        NAME 'desktopProfile'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.782
-        NAME 'objectCategory'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.221
-        NAME 'sAMAccountName'
-		EQUALITY caseIgnoreMatch
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.144
-        NAME 'operatorCount'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.44
-        NAME 'homeDirectory'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.772
-        NAME 'aCSPolicyName'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.94
-        NAME 'ntPwdHistory'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
- 
-
-attributetype ( 1.2.840.113556.1.4.160
-        NAME 'lmPwdHistory'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
-
-attributetype ( 1.2.840.113556.1.2.1
-        NAME 'instanceType'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE
-        NO-USER-MODIFICATION )
-
-attributetype ( 1.2.840.113556.1.4.97
-        NAME 'preferredOU'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.662
-        NAME 'lockoutTime'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.25
-        NAME 'countryCode'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.139
-        NAME 'profilePath'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.12
-        NAME 'badPwdCount'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.2.13
-        NAME 'displayName'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.2.3
-        NAME 'whenChanged'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.2.19
-        NAME 'uSNCreated'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.64
-        NAME 'logonHours'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.96
-        NAME 'pwdLastSet'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.169
-        NAME 'logonCount'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.90
-        NAME 'unicodePwd'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.62
-        NAME 'scriptPath'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.76
-        NAME 'maxStorage'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.51
-        NAME 'lastLogoff'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.2.120
-        NAME 'uSNChanged'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.2
-        NAME 'objectGUID'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
-        SINGLE-VALUE )
-
-# added for usersync
-attributetype ( 1.2.840.113556.1.4.3
-        NAME 'GUID'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.52
-        NAME 'lastLogon'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.45
-        NAME 'homeDrive'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.2.102
-        NAME 'memberOf'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
-        NO-USER-MODIFICATION )
-
-attributetype ( 1.2.840.113556.1.4.58
-        NAME 'localeID'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
-
-attributetype ( 1.2.840.113556.1.4.16
-        NAME 'codePage'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.55
-        NAME 'dBCSPwd'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.91
-        NAME 'otherLoginWorkstations'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
-
-attributetype ( 1.2.840.113556.1.4.752
-        NAME 'userSharedFolderOther'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
-
-attributetype ( 1.2.840.113556.1.2.353
-        NAME 'displayNamePrintable'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.44
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.771
-        NAME 'servicePrincipalName'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
-
-attributetype ( 1.2.840.113556.1.4.200
-        NAME 'controlAccessRights'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
-
-# computer attrs
-attributetype ( 1.2.840.113556.1.4.669
-        NAME 'rIDSetReferences'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
-        NO-USER-MODIFICATION )
-
-attributetype ( 1.2.840.113556.1.4.56
-        NAME 'localPolicyFlags'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.363
-        NAME 'operatingSystem'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.507
-        NAME 'volumeCount'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.619
-        NAME 'dNSHostName'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.71
-        NAME 'machineRole'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.365
-        NAME 'operatingSystemServicePack'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.364
-        NAME 'operatingSystemVersion'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.868
-        NAME 'isCriticalSystemObject'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.514
-        NAME 'physicalLocationObject'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.415
-        NAME 'operatingSystemHotfix'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.2.2
-        NAME 'whenCreated'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
-        SINGLE-VALUE
-        NO-USER-MODIFICATION )
-
-# group attrs
-attributetype ( 1.2.840.113556.1.4.375
-        NAME 'systemFlags'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE
-        NO-USER-MODIFICATION )
- 
-
-attributetype ( 1.2.840.113556.1.4.150
-        NAME 'adminCount'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.750
-        NAME 'groupType'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.146
-        NAME 'objectSid'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
-        SINGLE-VALUE )
- 
-
-attributetype ( 1.2.840.113556.1.2.169
-        NAME 'showInAdvancedViewOnly'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
-        SINGLE-VALUE )
-
-# ridSet attrs
-attributetype ( 1.2.840.113556.1.4.371
-        NAME 'rIDAllocationPool'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE
-        NO-USER-MODIFICATION )
-
-attributetype ( 1.2.840.113556.1.4.373
-        NAME 'rIDUsedPool'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE
-        NO-USER-MODIFICATION )
-
-attributetype ( 1.2.840.113556.1.4.372
-        NAME 'rIDPreviousAllocationPool'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE
-        NO-USER-MODIFICATION )
-
-attributetype ( 1.2.840.113556.1.4.374
-        NAME 'rIDNextRID'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE
-        NO-USER-MODIFICATION )
-
-# ridManager attrs
-attributetype ( 1.2.840.113556.1.4.370
-        NAME 'rIDAvailablePool'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
-        SINGLE-VALUE )
-
-attributetype ( 1.2.840.113556.1.4.369
-        NAME 'fSMORoleOwner'
-        SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
-        SINGLE-VALUE )
- 
-
-# objectClass defs
-
-objectclass ( 1.3.6.1.4.1.7114.2.2.10
-    NAME 'user'
-    SUP organizationalPerson
-    STRUCTURAL
-    MUST ( objectSid $ objectClass $ cn )
-    MAY (
-        accountExpires $
-        aCSPolicyName $
-        adminCount $
-        badPasswordTime $
-        badPwdCount $
-        changetype $
-        codePage $
-        controlAccessRights $
-        countryCode $
-        dBCSPwd $
-        defaultClassStore $
-        description $
-        desktopProfile $
-        displayName $
-        distinguishedName $
-        givenName $
-        groupMembershipSAM $
-        homeDirectory $
-        homeDrive $
-        instanceType $
-        lastLogoff $
-        lastLogon $
-        lmPwdHistory $
-        localeID $
-        lockoutTime $
-        logonCount $
-        logonHours $
-        logonWorkstation $
-        maxStorage $
-        memberOf $
-        name $
-        ntPwdHistory $
-        objectCategory $
-        objectGUID $
-        GUID $ # added for usersync
-        operatorCount $
-        otherLoginWorkstations $
-        preferredOU $
-        primaryGroupID $
-        profilePath $
-        pwdLastSet $
-        sAMAccountName $
-        sAMAccountType $
-        scriptPath $
-        servicePrincipalName $
-        unicodePwd $
-        userAccountControl $
-        userPrincipalName $
-        userSharedFolder $
-        userSharedFolderOther $
-        userWorkstations $
-        uSNChanged $
-        uSNCreated $
-        whenChanged $
-        whenCreated ) )
-
-objectclass ( 1.3.6.1.4.1.7114.2.2.11
-    NAME 'computer'
-    SUP user
-    STRUCTURAL
-    MAY (
-        description $
-        dNSHostName $
-        isCriticalSystemObject $
-        localPolicyFlags $
-        machineRole $
-        operatingSystem $
-        operatingSystemHotfix $
-        operatingSystemServicePack $
-        operatingSystemVersion $
-        physicalLocationObject $
-        rIDSetReferences $
-        volumeCount ) )
- 
-
-objectclass ( 1.3.6.1.4.1.7114.2.2.12
-    NAME 'group'
-    SUP top
-    STRUCTURAL
-    MUST (groupType $ cn )
-    MAY (
-        adminCount $
-        changetype $
-        controlAccessRights $
-        description $
-        distinguishedName $
-        instanceType $
-        isCriticalSystemObject $
-        member $
-        name $
-        showInAdvancedViewOnly $
-        systemFlags $
-        objectCategory $
-        objectGUID $
-        GUID $ # added for usersync
-        objectSid $
-        sAMAccountName $
-        sAMAccountType $
-        uSNChanged $
-        uSNCreated $
-        whenChanged $
-        whenCreated ) )
-
-objectclass ( 1.3.6.1.4.1.7114.2.2.13
-    NAME 'rIDManager'
-    SUP top
-    STRUCTURAL
-    MUST (rIDAvailablePool )
-    MAY (
-        changetype $
-        cn $
-        fSMORoleOwner $
-        instanceType $
-        isCriticalSystemObject $
-        distinguishedName $
-        objectCategory $
-        objectGUID $
-        name $
-        showInAdvancedViewOnly $
-        systemFlags $
-        uSNChanged $
-        uSNCreated $
-        whenChanged $
-        whenCreated ) )
- 
-
-objectclass ( 1.3.6.1.4.1.7114.2.2.14
-    NAME 'rIDSet'
-    SUP top
-    STRUCTURAL
-    MUST (
-        cn $
-        rIDAllocationPool $
-        rIDPreviousAllocationPool $
-        rIDUsedPool $
-        rIDNextRID )
-    MAY (
-        instanceType $
-        distinguishedName $
-        objectCategory $
-        objectGUID $
-        name $
-        showInAdvancedViewOnly $
-        uSNChanged $
-        uSNCreated $
-        whenChanged $
-        whenCreated $
-        changetype ) )

+ 0 - 96
ldap/servers/ntds/netman/Makefile

@@ -1,96 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-LDAP_SRC = ../../..
-BUILD_ROOT = ../../../..
-
-NOSTDCLEAN=true # don't let nsconfig.mk define target clean
-NOSTDSTRIP=true # don't let nsconfig.mk define target strip
-
-OBJDEST = $(OBJDIR)/lib/netman
-LIBDIR = $(LIB_RELDIR)
-
-include $(BUILD_ROOT)/nsconfig.mk
-include $(LDAP_SRC)/nsldap.mk
-include $(LDAP_SRC)/javarules.mk
-JAR=jar
-SWIG_OPTS=-v -outdir $(OBJDEST)
-JNETDEST=$(JAVA_DEST_DIR)/jnetman
-JAVA_HOME=$(JDKPRELIB)/..
-
-
-CPP_PROJ=$(CFLAGS)
-
-all:	$(OBJDEST) $(OBJDEST)/jnetman_wrap.cxx $(OBJDEST)/jnetman.dll  $(JAVA_DEST_DIR)/ntds/jnetman.jar 
-
-$(OBJDEST):
-	$(MKDIR) $(OBJDEST)
-
-$(OBJDEST)/jnetman_wrap.cxx:
-	$(SWIG_EXE) $(SWIG_OPTS) -java -package org.bpi.jnetman -c++ jnetman.i
-	$(MV) jnetman_wrap.cxx $(OBJDEST)
-
-$(JAVA_DEST_DIR)/ntds/jnetman.jar:	$(OBJDEST)/jnetman_wrap.cxx
-	$(MKDIR) $(JAVA_DEST_DIR)/ntds 
-	$(JAVAC) -d $(JAVA_DEST_DIR)/ntds $(OBJDEST)/*.java
-	( cd  $(JAVA_DEST_DIR)/ntds && jar cf $(JAVA_DEST_DIR)/ntds/jnetman.jar org)
-	#$(JAR) cf $(JAVA_DEST_DIR)/ntds/jnetman.jar $(JAVA_DEST_DIR)/ntds 
-
-
-$(OBJDEST)/jnetman.dll:  $(OBJDEST)/netman.obj $(OBJDEST)/jnetman_wrap.obj
-	$(LINK_DLL) /out:$(OBJDEST)/jnetman.dll    $(EXTRA_LIBS) netapi32.lib  $(OBJDEST)/netman.obj $(OBJDEST)/jnetman_wrap.obj
-
-$(OBJDEST)/netman.obj: netman.cpp netman.h
-	$(CC) -c netman.cpp $(CFLAGS)   $(MCC_INCLUDE) -Fo$(OBJDEST)/ $(CBSCFLAGS)
-
-$(OBJDEST)/jnetman_wrap.obj: $(OBJDEST)/jnetman_wrap.cxx
-	$(CC) -c  $(OBJDEST)/jnetman_wrap.cxx $(CFLAGS)   $(MCC_INCLUDE) -Fo$(OBJDEST)/ $(CBSCFLAGS) /I$(JAVA_HOME)/include /I$(JAVA_HOME)/include/win32 /I.
-
-veryclean: clean
-
-clean:
-	$(RM) $(OBJDEST)/jnetman_wrap.cxx 
-	$(RM) $(OBJDEST)/jnetman.dll  
-	$(RM) $(OBJDEST)/jnetman.lib  
-	$(RM) $(OBJDEST)/*.obj
-	$(RM) $(OBJDEST)/*.java
-	$(RM) $(JAVA_DEST_DIR)/ntds/jnetman.jar 
-
-
-

+ 0 - 53
ldap/servers/ntds/netman/jnetman.i

@@ -1,53 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
- %module jnetman
-
- %include "typemaps.i"
- %include "cpointer.i"
- %pragma(java) jniclassclassmodifiers="public class"
-
- /* swig -java -package org.bpi -c++ jnetman.i */
-
- %{
- /* Includes the header in the wrapper code */
- #include "netman.h"
-
- %}
- 
- /* Parse the header file to generate wrappers */
- %include "netman.h"

+ 0 - 2604
ldap/servers/ntds/netman/netman.cpp

@@ -1,2604 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
-// ****************************************************************
-// netman.cpp
-// ****************************************************************
-#include "netman.h"
-
-// ****************************************************************
-// quickFree
-// ****************************************************************
-void quickFree(char** buf)
-{
-	if(*buf != NULL)
-	{
-		free(*buf);
-		*buf = NULL;
-	}
-}
-
-// ****************************************************************
-// UTF16ToUTF8
-// ****************************************************************
-int UTF16ToUTF8(unsigned short* inStr, char* outStr, unsigned long* outStrBufLen)
-{
-	int result = 0;
-	unsigned long length = WideCharToMultiByte(CP_ACP, 0, inStr, -1, 0, 0, 0, 0);
-
-	if(outStr == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-	if(*outStrBufLen < length)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	WideCharToMultiByte(CP_ACP, 0, inStr, -1, outStr, length, 0, 0);
-
-exit:
-	*outStrBufLen = length;
-
-	return result;
-}
-
-// ****************************************************************
-// UTF8ToUTF16
-// ****************************************************************
-int UTF8ToUTF16(char* inStr, unsigned short* outStr, unsigned long* outStrBufLen)
-{
-	int result = 0;
-	unsigned long length = MultiByteToWideChar(CP_ACP, 0, inStr, -1, 0, 0) * 2;
-
-	if(outStr == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-	if(*outStrBufLen < length)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	MultiByteToWideChar(CP_ACP, 0, inStr, -1, outStr, length);
-
-exit:
-	*outStrBufLen = length;
-
-	return result;
-}
-
-// ****************************************************************
-// BinToHexStr
-// ****************************************************************
-int BinToHexStr(char* bin, unsigned long binLen, char* hexStr, unsigned long* hexStrBufLen)
-{
-	int result = 0;
-	unsigned long length = binLen * 2 + 1;
-	unsigned long i;
-
-	if(hexStr == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-	if(*hexStrBufLen < length)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	for(i = 0; i < binLen; i++)
-	{
-		sprintf(&hexStr[i * 2], "%02X", (unsigned char)bin[i]);
-	}
-
-exit:
-	*hexStrBufLen = length;
-
-	return result;
-}
-
-// ****************************************************************
-// HexStrToBin
-// ****************************************************************
-int HexStrToBin(char* hexStr, char* bin, unsigned long* binBufLen)
-{
-	int result = 0;
-	unsigned long length = strlen(hexStr) / 2;
-	unsigned long i;
-	int temp;
-
-	if(bin == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-	if(*binBufLen < length)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	for(i = 0; i < length; i++)
-	{
-		sscanf(&hexStr[i * 2], "%02X", &temp);
-		bin[i] = (unsigned char)temp;
-	}
-
-exit:
-	*binBufLen = length;
-
-	return result;
-}
-
-// ****************************************************************
-// GetSIDByAccountName
-// ****************************************************************
-int GetSIDByAccountName(char* accountName, char* sid, unsigned long* sidBufLen)
-{
-	int result = 0;
-	unsigned long sidLen = 0;
-	unsigned long domainLen = 0;
-	char* domain = NULL;
-	SID_NAME_USE testType;
-
-	LookupAccountName(NULL, accountName, NULL, &sidLen, NULL, &domainLen, &testType);
-
-	if(sid == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-	if(*sidBufLen < sidLen)
-	{
-		result = -1;
-		goto exit;
-	}
-	domain = (char*)malloc(domainLen);
-
-	if(LookupAccountName(NULL, accountName, (void*)sid, &sidLen, domain, &domainLen, &testType) == 0)
-	{
-		result = GetLastError();
-		goto exit;
-	}
-
-exit:
-	*sidBufLen = sidLen;
-
-	quickFree(&domain);
-
-	return result;
-}
-
-// ****************************************************************
-// GetAccountNameBySID
-// ****************************************************************
-int GetAccountNameBySID(char* sid, char* accountName, unsigned long* accountNameBufLen)
-{
-	int result = 0;
-	unsigned long accountNameLen = 0;
-	unsigned long domainLen = 0;
-	char* domain = NULL;
-	SID_NAME_USE testType;
-
-	LookupAccountSid(NULL, sid, NULL, &accountNameLen, NULL, &domainLen, &testType);
-
-
-	if(accountName == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-	if(*accountNameBufLen < accountNameLen)
-	{
-		result = -1;
-		goto exit;
-	}
-	domain = (char*)malloc(domainLen);
-
-	if(LookupAccountSid(NULL, sid, accountName, &accountNameLen, domain, &domainLen, &testType) == 0)
-	{
-		result = GetLastError();
-		goto exit;
-	}
-
-exit:
-	*accountNameBufLen = accountNameLen;
-
-	quickFree(&domain);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::NTUser
-// ****************************************************************
-NTUser::NTUser()
-{
-	currentAccountName = NULL;
-	userInfo = NULL;
-
-	groupsInfo = NULL;
-	currentGroupEntry = 0;
-	groupEntriesRead = 0;
-	groupEntriesTotal = 0;
-
-	localGroupsInfo = NULL;
-	currentLocalGroupEntry = 0;
-	localGroupEntriesRead = 0;
-	localGroupEntriesTotal = 0;
-
-	resultBuf = NULL;
-}
-
-// ****************************************************************
-// NTUser::~NTUser
-// ****************************************************************
-NTUser::~NTUser()
-{
-	quickFree((char**)&currentAccountName);
-	if(userInfo != NULL)
-	{
-		NetApiBufferFree(userInfo);
-		userInfo = NULL;
-	}
-	if(groupsInfo != NULL)
-	{
-		NetApiBufferFree(groupsInfo);
-		groupsInfo = NULL;
-	}
-	if(localGroupsInfo != NULL)
-	{
-		NetApiBufferFree(localGroupsInfo);
-		localGroupsInfo = NULL;
-	}
-	quickFree((char**)&resultBuf);
-}
-
-// ****************************************************************
-// NTUser::LoadUserInfo
-// ****************************************************************
-int NTUser::LoadUserInfo()
-{
-	int result = 0;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	if(userInfo != NULL)
-	{
-		NetApiBufferFree(userInfo);
-		userInfo = NULL;
-	}
-
-	if(NetUserGetInfo(NULL, currentAccountName, USER_INFO_LEVEL, (unsigned char**)&userInfo) != NERR_Success)
-	{
-		result = -1;
-	}
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::NewUser
-// ****************************************************************
-int NTUser::NewUser(char* username)
-{
-	int result = 0;
-	unsigned long length;
-	PUSER_INFO_3 info = NULL;
-	DWORD badParam = 0;
-
-	quickFree((char**)&currentAccountName);
-	UTF8ToUTF16(username, NULL, &length);
-	currentAccountName = (unsigned short*)malloc(length);
-	UTF8ToUTF16(username, currentAccountName, &length);
-
-	info = (USER_INFO_3*)malloc(sizeof(USER_INFO_3));
-	memset(info, 0, sizeof(USER_INFO_3));
-	info->usri3_name = currentAccountName;
-
-	// NT4 required inits for AddUser
-	info->usri3_flags = UF_SCRIPT;
-	info->usri3_primary_group_id = DOMAIN_GROUP_RID_USERS;
-
-	// Other inits
-	info->usri3_acct_expires = (unsigned long)-1;
-
-	// Add user
-	result = NetUserAdd(NULL, USER_INFO_LEVEL, (unsigned char*)info, &badParam);
-
-	// Free buffers
-	quickFree((char**)&info);
-
-	// Load info for quick retrevial
-	LoadUserInfo();
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::RetriveUserByUsername
-// ****************************************************************
-int NTUser::RetriveUserByAccountName(char* username)
-{
-	int result;
-	unsigned long length = 0;
-	PUSER_INFO_3 info = NULL;
-
-	quickFree((char**)&currentAccountName);
-	UTF8ToUTF16(username, NULL, &length);
-	currentAccountName = (unsigned short*)malloc(length);
-	UTF8ToUTF16(username, currentAccountName, &length);
-
-	result = LoadUserInfo();
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::RetriveUserBySIDHexStr
-// ****************************************************************
-int NTUser::RetriveUserBySIDHexStr(char* sidHexStr)
-{
-	int result = 0;
-	unsigned long length = 0;
-	char* username;
-	char* sid;
-
-	quickFree((char**)&currentAccountName);
-
-	HexStrToBin(sidHexStr, NULL, &length);
-	sid = (char*)malloc(length);
-	HexStrToBin(sidHexStr, sid, &length);
-
-	if(GetAccountNameBySID(sid, NULL, &length) != 0)
-	{
-		result = -1;
-		goto exit;
-	}
-	username = (char*)malloc(length);
-	GetAccountNameBySID(sid, username, &length);
-
-	if(RetriveUserByAccountName(username) != 0)
-	{
-		result =-1;
-		goto exit;
-	}
-
-exit:
-	quickFree(&sid);
-	quickFree(&username);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::DeleteUser
-// ****************************************************************
-int NTUser::DeleteUser()
-{
-	int result;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	result = NetUserDel(NULL, currentAccountName);
-
-	quickFree((char**)&currentAccountName);
-
-	if(userInfo != NULL)
-	{
-		NetApiBufferFree(userInfo);
-		userInfo = NULL;
-	}
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetAccountName
-// ****************************************************************
-char* NTUser::GetAccountName()
-{
-	char* result = NULL;
-	unsigned long length = 0;
-
-	if(currentAccountName == NULL)
-	{
-		goto exit;
-		result = NULL;
-	}
-
-	quickFree(&resultBuf);
-	UTF16ToUTF8(currentAccountName, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	UTF16ToUTF8(currentAccountName, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetSIDHexStr
-// ****************************************************************
-char* NTUser::GetSIDHexStr()
-{
-	char* result = NULL;
-	unsigned long length = 0;
-	unsigned long binLength = 0;
-	char* username = NULL;
-	char* sid = NULL;
-
-	if(currentAccountName == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	UTF16ToUTF8(currentAccountName, NULL, &length);
-	username = (char*)malloc(length);
-	UTF16ToUTF8(currentAccountName, username, &length);
-
-	if(GetSIDByAccountName(username, NULL, &binLength) != 0)
-	{
-		result = NULL;
-		goto exit;
-	}
-	sid = (char*)malloc(binLength);
-	GetSIDByAccountName(username, sid, &binLength);
-
-	quickFree(&resultBuf);
-	BinToHexStr(sid, binLength, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	BinToHexStr(sid, binLength, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	quickFree(&username);
-	quickFree(&sid);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetAccountExpires
-// ****************************************************************
-unsigned long NTUser::GetAccountExpires()
-{
-	unsigned long result = 0;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-
-	result = userInfo->usri3_acct_expires;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetAccountExpires
-// ****************************************************************
-int NTUser::SetAccountExpires(unsigned long accountExpires)
-{
-	int result = 0;
-	USER_INFO_1017 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	info.usri1017_acct_expires = accountExpires;
-	result = NetUserSetInfo(NULL, currentAccountName, 1017, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetBadPasswordCount
-// ****************************************************************
-unsigned long NTUser::GetBadPasswordCount()
-{
-	unsigned long result = 0;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-
-	result = userInfo->usri3_bad_pw_count;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetCodePage
-// ****************************************************************
-unsigned long NTUser::GetCodePage()
-{
-	unsigned long result = 0;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-
-	result = userInfo->usri3_code_page;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetCodePage
-// ****************************************************************
-int NTUser::SetCodePage(unsigned long codePage)
-{
-	int result = 0;
-	USER_INFO_1025 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	info.usri1025_code_page = codePage;
-	result = NetUserSetInfo(NULL, currentAccountName, 1025, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetComment
-// ****************************************************************
-char* NTUser::GetComment()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	quickFree(&resultBuf);
-	UTF16ToUTF8(userInfo->usri3_comment, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	UTF16ToUTF8(userInfo->usri3_comment, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetComment
-// ****************************************************************
-int NTUser::SetComment(char* comment)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-	USER_INFO_1007 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(comment, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(comment, wideStr, &length);
-
-	info.usri1007_comment = wideStr;
-	result = NetUserSetInfo(NULL, currentAccountName, 1007, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetCountryCode
-// ****************************************************************
-unsigned long NTUser::GetCountryCode()
-{
-	unsigned long result = 0;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-
-	result = userInfo->usri3_country_code;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetCountryCode
-// ****************************************************************
-int NTUser::SetCountryCode(unsigned long countryCode)
-{
-	int result = 0;
-	USER_INFO_1024 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	info.usri1024_country_code = countryCode;
-	result = NetUserSetInfo(NULL, currentAccountName, 1024, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetFlags
-// ****************************************************************
-unsigned long NTUser::GetFlags()
-{
-	unsigned long result = 0;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-
-	result = userInfo->usri3_flags;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetFlags
-// ****************************************************************
-int NTUser::SetFlags(unsigned long flags)
-{
-	int result = 0;
-	USER_INFO_1008 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	info.usri1008_flags = flags;
-	result = NetUserSetInfo(NULL, currentAccountName, 1008, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetHomeDir
-// ****************************************************************
-char* NTUser::GetHomeDir()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	quickFree(&resultBuf);
-	UTF16ToUTF8(userInfo->usri3_home_dir, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	UTF16ToUTF8(userInfo->usri3_home_dir, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetHomeDir
-// ****************************************************************
-int NTUser::SetHomeDir(char* path)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-	USER_INFO_1006 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(path, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(path, wideStr, &length);
-
-	info.usri1006_home_dir = wideStr;
-	result = NetUserSetInfo(NULL, currentAccountName, 1006, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetHomeDirDrive
-// ****************************************************************
-char* NTUser::GetHomeDirDrive()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	quickFree(&resultBuf);
-	UTF16ToUTF8(userInfo->usri3_home_dir_drive, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	UTF16ToUTF8(userInfo->usri3_home_dir_drive, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetHomeDirDrive
-// ****************************************************************
-int NTUser::SetHomeDirDrive(char* path)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-	USER_INFO_1053 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(path, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(path, wideStr, &length);
-
-	info.usri1053_home_dir_drive = wideStr;
-	result = NetUserSetInfo(NULL, currentAccountName, 1053, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetLastLogoff
-// ****************************************************************
-unsigned long NTUser::GetLastLogoff()
-{
-	unsigned long result = 0;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-
-	result = userInfo->usri3_last_logoff;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetLastLogon
-// ****************************************************************
-unsigned long NTUser::GetLastLogon()
-{
-	unsigned long result = 0;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-
-	result = userInfo->usri3_last_logon;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetLogonHours
-// ****************************************************************
-char* NTUser::GetLogonHours()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	quickFree(&resultBuf);
-	BinToHexStr((char*)userInfo->usri3_logon_hours, 21, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	BinToHexStr((char*)userInfo->usri3_logon_hours, 21, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetLogonHours
-// ****************************************************************
-int NTUser::SetLogonHours(char* logonHours)
-{
-	int result = 0;
-	unsigned long length;
-	char* bin = NULL;
-	USER_INFO_1020 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	HexStrToBin(logonHours, NULL, &length);
-	bin = (char*)malloc(length);
-	HexStrToBin(logonHours, bin, &length);
-
-	info.usri1020_units_per_week = UNITS_PER_WEEK;
-	info.usri1020_logon_hours = (unsigned char*)bin;
-	result = NetUserSetInfo(NULL, currentAccountName, 1020, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	quickFree(&bin);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetMaxStorage
-// ****************************************************************
-unsigned long NTUser::GetMaxStorage()
-{
-	unsigned long result = 0;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-
-	result = userInfo->usri3_max_storage;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetMaxStorage
-// ****************************************************************
-int NTUser::SetMaxStorage(unsigned long maxStorage)
-{
-	int result = 0;
-	USER_INFO_1018 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	info.usri1018_max_storage = maxStorage;
-	result = NetUserSetInfo(NULL, currentAccountName, 1018, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetNumLogons
-// ****************************************************************
-unsigned long NTUser::GetNumLogons()
-{
-	unsigned long result = 0;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = 0;
-		goto exit;
-	}
-
-	result = userInfo->usri3_num_logons;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetProfile
-// ****************************************************************
-char* NTUser::GetProfile()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	quickFree(&resultBuf);
-	UTF16ToUTF8(userInfo->usri3_profile, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	UTF16ToUTF8(userInfo->usri3_profile, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetProfile
-// ****************************************************************
-int NTUser::SetProfile(char* path)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-	USER_INFO_1052 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(path, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(path, wideStr, &length);
-
-	info.usri1052_profile = wideStr;
-	result = NetUserSetInfo(NULL, currentAccountName, 1052, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetScriptPath
-// ****************************************************************
-char* NTUser::GetScriptPath()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	quickFree(&resultBuf);
-	UTF16ToUTF8(userInfo->usri3_script_path, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	UTF16ToUTF8(userInfo->usri3_script_path, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetScriptPath
-// ****************************************************************
-int NTUser::SetScriptPath(char* path)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-	USER_INFO_1009 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(path, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(path, wideStr, &length);
-
-	info.usri1009_script_path = wideStr;
-	result = NetUserSetInfo(NULL, currentAccountName, 1009, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetWorkstations
-// ****************************************************************
-char* NTUser::GetWorkstations()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	quickFree(&resultBuf);
-	UTF16ToUTF8(userInfo->usri3_workstations, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	UTF16ToUTF8(userInfo->usri3_workstations, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetWorkstations
-// ****************************************************************
-int NTUser::SetWorkstations(char* workstations)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-	USER_INFO_1014 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(workstations, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(workstations, wideStr, &length);
-
-	info.usri1014_workstations = wideStr;
-	result = NetUserSetInfo(NULL, currentAccountName, 1014, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::GetFullname
-// ****************************************************************
-char* NTUser::GetFullname()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentAccountName == NULL || userInfo == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	quickFree(&resultBuf);
-	UTF16ToUTF8(userInfo->usri3_full_name, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	UTF16ToUTF8(userInfo->usri3_full_name, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetFullname
-// ****************************************************************
-int NTUser::SetFullname(char* fullname)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-	USER_INFO_1011 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(fullname, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(fullname, wideStr, &length);
-
-	info.usri1011_full_name = wideStr;
-	result = NetUserSetInfo(NULL, currentAccountName, 1011, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::SetPassword
-// ****************************************************************
-int NTUser::SetPassword(char* password)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-	USER_INFO_1003 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(password, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(password, wideStr, &length);
-
-	info.usri1003_password = wideStr;
-	result = NetUserSetInfo(NULL, currentAccountName, 1003, (unsigned char*)&info, NULL);
-	LoadUserInfo();
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::AddToGroup
-// ****************************************************************
-int NTUser::AddToGroup(char* groupName)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(groupName, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(groupName, wideStr, &length);
-
-	result = NetGroupAddUser(NULL, wideStr, currentAccountName);
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::RemoveFromGroup
-// ****************************************************************
-int NTUser::RemoveFromGroup(char* groupName)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(groupName, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(groupName, wideStr, &length);
-
-	result = NetGroupDelUser(NULL, wideStr, currentAccountName);
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::LoadGroups
-// ****************************************************************
-int NTUser::LoadGroups()
-{
-	int result = 0;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	if(groupsInfo != NULL)
-	{
-		NetApiBufferFree(groupsInfo);
-		groupsInfo = NULL;
-		currentGroupEntry = 0;
-		groupEntriesRead = 0;
-		groupEntriesTotal = 0;
-	}
-
-	result = NetUserGetGroups(NULL, currentAccountName, USER_GROUPS_INFO_LEVEL, (unsigned char**)&groupsInfo, MAX_PREFERRED_LENGTH, &groupEntriesRead, &groupEntriesTotal);
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::HasMoreGroups
-// ****************************************************************
-bool NTUser::HasMoreGroups()
-{
-	bool result;
-
-	if(currentGroupEntry < groupEntriesRead)
-	{
-		result = true;
-	}
-	else
-	{
-		result = false; 
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::NextGroupName
-// ****************************************************************
-char* NTUser::NextGroupName()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentGroupEntry < groupEntriesRead)
-	{
-		quickFree(&resultBuf);
-		UTF16ToUTF8(groupsInfo[currentGroupEntry].grui0_name, NULL, &length);
-		resultBuf = (char*)malloc(length);
-		UTF16ToUTF8(groupsInfo[currentGroupEntry].grui0_name, resultBuf, &length);
-		result = resultBuf;
-
-		currentGroupEntry++;
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::AddToLocalGroup
-// ****************************************************************
-int NTUser::AddToLocalGroup(char* localGroupName)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr;
-	char userSID[256];
-	wchar_t domain[256];
-	DWORD SIDLen = sizeof(userSID);
-	DWORD domainLen = sizeof(domain);
-	SID_NAME_USE SIDUseIndicator;
-	LOCALGROUP_MEMBERS_INFO_0 membersbuf[1];
-
-	memset(&domain, 0, sizeof(domain));
-	memset(&userSID, 0, sizeof(userSID));
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	result = LookupAccountName(NULL, GetAccountName(), &userSID, &SIDLen, (LPTSTR)&domain, &domainLen, &SIDUseIndicator);
-
-	if(result != 0)
-	{
-		membersbuf[0].lgrmi0_sid = &userSID;
-
-		UTF8ToUTF16(localGroupName, NULL, &length);
-		wideStr = (unsigned short*)malloc(length);
-		UTF8ToUTF16(localGroupName, wideStr, &length);
-		result = NetLocalGroupAddMembers(NULL, wideStr, 0, (LPBYTE)&membersbuf, 1);
-	}
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::RemoveFromLocalGroup
-// ****************************************************************
-int NTUser::RemoveFromLocalGroup(char* localGroupName)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr;
-	char userSID[256];
-	wchar_t domain[256];
-	DWORD SIDLen = sizeof(userSID);
-	DWORD domainLen = sizeof(domain);
-	SID_NAME_USE SIDUseIndicator;
-	LOCALGROUP_MEMBERS_INFO_0 membersbuf[1];
-
-	memset(&domain, 0, sizeof(domain));
-	memset(&userSID, 0, sizeof(userSID));
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	result = LookupAccountName(NULL, GetAccountName(), &userSID, &SIDLen, (LPTSTR)&domain, &domainLen, &SIDUseIndicator);
-
-	if(result != 0)
-	{
-		membersbuf[0].lgrmi0_sid = &userSID;
-
-		UTF8ToUTF16(localGroupName, NULL, &length);
-		wideStr = (unsigned short*)malloc(length);
-		UTF8ToUTF16(localGroupName, wideStr, &length);
-		result = NetLocalGroupDelMembers(NULL, wideStr, 0, (LPBYTE)&membersbuf, 1);
-	}
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::LoadLocalGroups
-// ****************************************************************
-int NTUser::LoadLocalGroups()
-{
-	int result = 0;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	if(localGroupsInfo != NULL)
-	{
-		NetApiBufferFree(localGroupsInfo);
-		localGroupsInfo = NULL;
-		currentLocalGroupEntry = 0;
-		localGroupEntriesRead = 0;
-		localGroupEntriesTotal = 0;
-	}
-
-	result = NetUserGetLocalGroups(NULL, currentAccountName, 0, USER_LOCALGROUPS_INFO_LEVEL, (unsigned char**)&localGroupsInfo, MAX_PREFERRED_LENGTH, &localGroupEntriesRead, &localGroupEntriesTotal);
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTUser::HasMoreLocalGroups
-// ****************************************************************
-bool NTUser::HasMoreLocalGroups()
-{
-	bool result;
-
-	if(currentLocalGroupEntry < localGroupEntriesRead)
-	{
-		result = true;
-	}
-	else
-	{
-		result = false;
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTUser::NextLocalGroupName
-// ****************************************************************
-char* NTUser::NextLocalGroupName()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentLocalGroupEntry < localGroupEntriesRead)
-	{
-		quickFree(&resultBuf);
-		UTF16ToUTF8(localGroupsInfo[currentLocalGroupEntry].lgrui0_name, NULL, &length);
-		resultBuf = (char*)malloc(length);
-		UTF16ToUTF8(localGroupsInfo[currentLocalGroupEntry].lgrui0_name, resultBuf, &length);
-		result = resultBuf;
-
-		currentLocalGroupEntry++;
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTUserList::NTUserList
-// ****************************************************************
-NTUserList::NTUserList()
-{
-	bufptr = NULL;
-	currentEntry = 0;
-	resumeHandle = 0;
-	resultBuf = NULL;
-}
-
-// ****************************************************************
-// NTUserList::~NTUserList
-// ****************************************************************
-NTUserList::~NTUserList()
-{
-	if(bufptr != NULL)
-	{
-		NetApiBufferFree(bufptr);
-		bufptr = NULL;
-	}
-	quickFree(&resultBuf);
-}
-
-// ****************************************************************
-// NTUserList::loadList
-// ****************************************************************
-int NTUserList::loadList()
-{
-	int result;
-
-	result = NetUserEnum(NULL, USER_INFO_LEVEL, 0, (LPBYTE*)&bufptr, MAX_PREFERRED_LENGTH, &entriesRead, &totalEntries, &resumeHandle);
-
-	return result;
-}
-
-// ****************************************************************
-// NTUserList::hasMore
-// ****************************************************************
-bool NTUserList::hasMore()
-{
-	bool result;
-
-	if(currentEntry < entriesRead)
-	{
-		result = true;
-	}
-	else
-	{
-		result = false;
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTUserList::nextUsername
-// ****************************************************************
-char* NTUserList::nextUsername()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentEntry < entriesRead)
-	{
-		quickFree(&resultBuf);
-		UTF16ToUTF8(bufptr[currentEntry].usri3_name, NULL, &length);
-		resultBuf = (char*)malloc(length);
-		UTF16ToUTF8(bufptr[currentEntry].usri3_name, resultBuf, &length);
-		result = resultBuf;
-
-		currentEntry++;
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::NTGroup
-// ****************************************************************
-NTGroup::NTGroup()
-{
-	currentAccountName = NULL;
-	groupInfo = NULL;
-	usersInfo = NULL;
-	currentUserEntry = 0;
-	userEntriesRead = 0;
-	userEntriesTotal = 0;
-	resultBuf = NULL;
-}
-
-// ****************************************************************
-// NTGroup::~NTGroup
-// ****************************************************************
-NTGroup::~NTGroup()
-{
-	quickFree((char**)&currentAccountName);
-	if(groupInfo != NULL)
-	{
-		NetApiBufferFree(groupInfo);
-		groupInfo = NULL;
-	}
-	if(usersInfo != NULL)
-	{
-		NetApiBufferFree(usersInfo);
-		usersInfo = NULL;
-	}
-	quickFree(&resultBuf);
-}
-
-// ****************************************************************
-// NTGroup::LoadGroupInfo
-// ****************************************************************
-int NTGroup::LoadGroupInfo()
-{
-	int result = 0;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	if(groupInfo != NULL)
-	{
-		NetApiBufferFree(groupInfo);
-		groupInfo = NULL;
-	}
-
-	if(NetGroupGetInfo(NULL, currentAccountName, GROUP_INFO_LEVEL, (unsigned char**)&groupInfo) != NERR_Success)
-	{
-		result = -1;
-	}
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::NewGroup
-// ****************************************************************
-int NTGroup::NewGroup(char* groupName)
-{
-	int result = 0;
-	unsigned long length;
-	PGROUP_INFO_2 info = NULL;
-	DWORD badParam = 0;
-
-	quickFree((char**)&currentAccountName);
-
-	UTF8ToUTF16(groupName, NULL, &length);
-	currentAccountName = (unsigned short*)malloc(length);
-	UTF8ToUTF16(groupName, currentAccountName, &length);
-
-	info = (PGROUP_INFO_2)malloc(sizeof(GROUP_INFO_2));
-	memset(info, 0, sizeof(GROUP_INFO_2));
-	info->grpi2_name = currentAccountName;
-
-	// Add group
-	result = NetGroupAdd(NULL, GROUP_INFO_LEVEL, (unsigned char*)info, &badParam);
-
-	// Free buffers
-	quickFree((char**)&info);
-
-	// Load info for quick retrevial
-	LoadGroupInfo();
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::RetriveGroupByAccountName
-// ****************************************************************
-int NTGroup::RetriveGroupByAccountName(char* groupName)
-{
-	int result;
-	unsigned long length;
-	PGROUP_INFO_2 info = NULL;
-
-	quickFree((char**)&currentAccountName);
-	UTF8ToUTF16(groupName, NULL, &length);
-	currentAccountName = (unsigned short*)malloc(length);
-	UTF8ToUTF16(groupName, currentAccountName, &length);
-
-	result = LoadGroupInfo();
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::RetriveGroupBySIDHexStr
-// ****************************************************************
-int NTGroup::RetriveGroupBySIDHexStr(char* sidHexStr)
-{
-	int result = 0;
-	unsigned long length;
-	char* groupName;
-	char* sid;
-
-	quickFree((char**)&currentAccountName);
-
-	HexStrToBin(sidHexStr, NULL, &length);
-	sid = (char*)malloc(length);
-	HexStrToBin(sidHexStr, sid, &length);
-
-	if(GetAccountNameBySID(sid, NULL, &length) != 0)
-	{
-		result = -1;
-		goto exit;
-	}
-	groupName = (char*)malloc(length);
-	GetAccountNameBySID(sid, groupName, &length);
-
-	if(RetriveGroupByAccountName(groupName) != 0)
-	{
-		result =-1;
-		goto exit;
-	}
-
-exit:
-	quickFree(&sid);
-	quickFree(&groupName);
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::DeleteGroup
-// ****************************************************************
-int NTGroup::DeleteGroup()
-{
-	int result;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	result = NetGroupDel(NULL, currentAccountName);
-
-	quickFree((char**)&currentAccountName);
-	
-	if(groupInfo != NULL)
-	{
-		NetApiBufferFree(groupInfo);
-		groupInfo = NULL;
-	}
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::GetAccountName
-// ****************************************************************
-char* NTGroup::GetAccountName()
-{
-	char* result = NULL;
-	unsigned long length = 0;
-
-	if(currentAccountName == NULL)
-	{
-		goto exit;
-		result = NULL;
-	}
-
-	quickFree(&resultBuf);
-	UTF16ToUTF8(currentAccountName, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	UTF16ToUTF8(currentAccountName, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::GetSIDHexStr
-// ****************************************************************
-char* NTGroup::GetSIDHexStr()
-{	
-	char* result = NULL;
-	unsigned long length = 0;
-	unsigned long binLength = 0;
-	char* groupName = NULL;
-	char* sid = NULL;
-
-	if(currentAccountName == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	UTF16ToUTF8(currentAccountName, NULL, &length);
-	groupName = (char*)malloc(length);
-	UTF16ToUTF8(currentAccountName, groupName, &length);
-
-	if(GetSIDByAccountName(groupName, NULL, &binLength) != 0)
-	{
-		result = NULL;
-		goto exit;
-	}
-	sid = (char*)malloc(binLength);
-	GetSIDByAccountName(groupName, sid, &binLength);
-
-	quickFree(&resultBuf);
-	BinToHexStr(sid, binLength, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	BinToHexStr(sid, binLength, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	quickFree(&groupName);
-	quickFree(&sid);
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::GetComment
-// ****************************************************************
-char* NTGroup::GetComment()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentAccountName == NULL || groupInfo == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	quickFree(&resultBuf);
-	UTF16ToUTF8(groupInfo->grpi2_comment, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	UTF16ToUTF8(groupInfo->grpi2_comment, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::SetComment
-// ****************************************************************
-int NTGroup::SetComment(char* comment)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-	GROUP_INFO_1002 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(comment, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(comment, wideStr, &length);
-
-	info.grpi1002_comment = wideStr;
-	result = NetGroupSetInfo(NULL, currentAccountName, 1002, (unsigned char*)&info, NULL);
-
-	LoadGroupInfo();
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::AddUser
-// ****************************************************************
-int NTGroup::AddUser(char* userName)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(userName, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(userName, wideStr, &length);
-
-	result = NetGroupAddUser(NULL, currentAccountName, wideStr);
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::RemoveUser
-// ****************************************************************
-int NTGroup::RemoveUser(char* userName)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(userName, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(userName, wideStr, &length);
-
-	result = NetGroupDelUser(NULL, currentAccountName, wideStr);
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::LoadUsers
-// ****************************************************************
-int NTGroup::LoadUsers()
-{
-	int result = 0;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	if(usersInfo != NULL)
-	{
-		NetApiBufferFree(usersInfo);
-		usersInfo = NULL;
-		currentUserEntry = 0;
-		userEntriesRead = 0;
-		userEntriesTotal = 0;
-	}
-	result = NetGroupGetUsers(NULL, currentAccountName, GROUP_USERS_INFO_LEVEL, (unsigned char**)&usersInfo, MAX_PREFERRED_LENGTH, &userEntriesRead, &userEntriesTotal, NULL);
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::HasMoreUsers
-// ****************************************************************
-bool NTGroup::HasMoreUsers()
-{
-	bool result;
-
-	if(currentUserEntry < userEntriesRead)
-	{
-		result = true;
-	}
-	else
-	{
-		result = false; 
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::NextUserName
-// ****************************************************************
-char* NTGroup::NextUserName()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentUserEntry < userEntriesRead)
-	{
-		quickFree(&resultBuf);
-		UTF16ToUTF8(usersInfo[currentUserEntry].lgrui0_name, NULL, &length);
-		resultBuf = (char*)malloc(length);
-		UTF16ToUTF8(usersInfo[currentUserEntry].lgrui0_name, resultBuf, &length);
-		result = resultBuf;
-
-		currentUserEntry++;
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroupList::NTGroupList
-// ****************************************************************
-NTGroupList::NTGroupList()
-{
-	bufptr = NULL;
-	currentEntry = 0;
-	resumeHandle = 0;
-	resultBuf = NULL;
-}
-
-// ****************************************************************
-// NTGroupList::~NTGroupList
-// ****************************************************************
-NTGroupList::~NTGroupList()
-{
-	if(bufptr != NULL)
-	{
-		NetApiBufferFree(bufptr);
-		bufptr = NULL;
-	}
-	quickFree(&resultBuf);
-}
-
-// ****************************************************************
-// NTGroupList::loadList
-// ****************************************************************
-int NTGroupList::loadList()
-{
-	int result;
-
-	result = NetGroupEnum(NULL, GROUP_INFO_LEVEL, (LPBYTE*)&bufptr, MAX_PREFERRED_LENGTH, &entriesRead, &totalEntries, &resumeHandle);
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroupList::hasMore
-// ****************************************************************
-bool NTGroupList::hasMore()
-{
-	bool result;
-
-	if(currentEntry < entriesRead)
-	{
-		result = true;
-	}
-	else
-	{
-		result = false;
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroupList::nextGroupName
-// ****************************************************************
-char* NTGroupList::nextGroupName()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentEntry < entriesRead)
-	{
-		quickFree(&resultBuf);
-		UTF16ToUTF8(bufptr[currentEntry].grpi2_name, NULL, &length);
-		resultBuf = (char*)malloc(length);
-		UTF16ToUTF8(bufptr[currentEntry].grpi2_name, resultBuf, &length);
-		result = resultBuf;
-
-		currentEntry++;
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::NTLocalGroup
-// ****************************************************************
-NTLocalGroup::NTLocalGroup()
-{
-	currentAccountName = NULL;
-	localGroupInfo = NULL;
-	usersInfo = NULL;
-	currentUserEntry = 0;
-	userEntriesRead = 0;
-	userEntriesTotal = 0;
-	resultBuf = NULL;
-}
-
-// ****************************************************************
-// NTLocalGroup::~NTLocalGroup
-// ****************************************************************
-NTLocalGroup::~NTLocalGroup()
-{
-	quickFree((char**)&currentAccountName);
-	if(localGroupInfo != NULL)
-	{
-		NetApiBufferFree(localGroupInfo);
-		localGroupInfo = NULL;
-	}
-	if(usersInfo != NULL)
-	{
-		NetApiBufferFree(usersInfo);
-		usersInfo = NULL;
-	}
-	quickFree(&resultBuf);
-}
-
-// ****************************************************************
-// NTLocalGroup::LoadLocalGroupInfo
-// ****************************************************************
-int NTLocalGroup::LoadLocalGroupInfo()
-{
-	int result = 0;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	if(localGroupInfo != NULL)
-	{
-		NetApiBufferFree(localGroupInfo);
-		localGroupInfo = NULL;
-	}
-
-	if(NetLocalGroupGetInfo(NULL, currentAccountName, LOCALGROUP_INFO_LEVEL, (unsigned char**)&localGroupInfo) != NERR_Success)
-	{
-		result = -1;
-	}
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::NewLocalGroup
-// ****************************************************************
-int NTLocalGroup::NewLocalGroup(char* localGroupName)
-{
-
-	int result = 0;
-	unsigned long length;
-	PLOCALGROUP_INFO_1 info = NULL;
-	DWORD badParam = 0;
-
-	quickFree((char**)&currentAccountName);
-	UTF8ToUTF16(localGroupName, NULL, &length);
-	currentAccountName = (unsigned short*)malloc(length);
-	UTF8ToUTF16(localGroupName, currentAccountName, &length);
-
-	info = (PLOCALGROUP_INFO_1)malloc(sizeof(LOCALGROUP_INFO_1));
-	memset(info, 0, sizeof(LOCALGROUP_INFO_1));
-	info->lgrpi1_name = currentAccountName;
-
-	// Add group
-	result = NetLocalGroupAdd(NULL, LOCALGROUP_INFO_LEVEL, (unsigned char*)info, &badParam);
-
-	// Free buffers
-	quickFree((char**)&info);
-
-	// Load info for quick retrevial
-	LoadLocalGroupInfo();
-
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::RetriveLocalGroupByAccountName
-// ****************************************************************
-int NTLocalGroup::RetriveLocalGroupByAccountName(char* localGroupName)
-{
-	int result;
-	unsigned long length;
-	PLOCALGROUP_INFO_1 info = NULL;
-
-	quickFree((char**)&currentAccountName);
-	UTF8ToUTF16(localGroupName, NULL, &length);
-	currentAccountName = (unsigned short*)malloc(length);
-	UTF8ToUTF16(localGroupName, currentAccountName, &length);
-
-	result = LoadLocalGroupInfo();
-
-	return result;
-}
-
-// ****************************************************************
-// NTGroup::RetriveLocalGroupBySIDHexStr
-// ****************************************************************
-int NTLocalGroup::RetriveLocalGroupBySIDHexStr(char* sidHexStr)
-{
-	int result = 0;
-	unsigned long length;
-	char* localGroupName;
-	char* sid;
-
-	quickFree((char**)&currentAccountName);
-
-	HexStrToBin(sidHexStr, NULL, &length);
-	sid = (char*)malloc(length);
-	HexStrToBin(sidHexStr, sid, &length);
-
-	if(GetAccountNameBySID(sid, NULL, &length) != 0)
-	{
-		result = -1;
-		goto exit;
-	}
-	localGroupName = (char*)malloc(length);
-	GetAccountNameBySID(sid, localGroupName, &length);
-
-	if(RetriveLocalGroupByAccountName(localGroupName) != 0)
-	{
-		result =-1;
-		goto exit;
-	}
-
-exit:
-	quickFree(&sid);
-	quickFree(&localGroupName);
-
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::DeleteLocalGroup
-// ****************************************************************
-int NTLocalGroup::DeleteLocalGroup()
-{
-	int result;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	result = NetLocalGroupDel(NULL, currentAccountName);
-
-	quickFree((char**)&currentAccountName);
-
-	if(localGroupInfo != NULL)
-	{
-		NetApiBufferFree(localGroupInfo);
-		localGroupInfo = NULL;
-	}
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::GetAccountName
-// ****************************************************************
-char* NTLocalGroup::GetAccountName()
-{
-	char* result = NULL;
-	unsigned long length = 0;
-
-	if(currentAccountName == NULL)
-	{
-		goto exit;
-		result = NULL;
-	}
-
-	quickFree((char**)&resultBuf);
-	UTF16ToUTF8(currentAccountName, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	UTF16ToUTF8(currentAccountName, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::GetSIDHexStr
-// ****************************************************************
-char* NTLocalGroup::GetSIDHexStr()
-{
-	char* result = NULL;
-	unsigned long length = 0;
-	unsigned long binLength = 0;
-	char* localGroupName = NULL;
-	char* sid = NULL;
-
-	if(currentAccountName == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	UTF16ToUTF8(currentAccountName, NULL, &length);
-	localGroupName = (char*)malloc(length);
-	UTF16ToUTF8(currentAccountName, localGroupName, &length);
-
-	if(GetSIDByAccountName(localGroupName, NULL, &binLength) != 0)
-	{
-		result = NULL;
-		goto exit;
-	}
-	sid = (char*)malloc(binLength);
-	GetSIDByAccountName(localGroupName, sid, &binLength);
-
-	quickFree(&resultBuf);
-	BinToHexStr(sid, binLength, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	BinToHexStr(sid, binLength, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-	quickFree(&localGroupName);
-	quickFree(&sid);
-
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::GetComment
-// ****************************************************************
-char* NTLocalGroup::GetComment()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentAccountName == NULL)
-	{
-		result = NULL;
-		goto exit;
-	}
-
-	quickFree(&resultBuf);
-	UTF16ToUTF8(localGroupInfo->lgrpi1_comment, NULL, &length);
-	resultBuf = (char*)malloc(length);
-	UTF16ToUTF8(localGroupInfo->lgrpi1_comment, resultBuf, &length);
-	result = resultBuf;
-
-exit:
-
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::SetComment
-// ****************************************************************
-int NTLocalGroup::SetComment(char* comment)
-{
-	int result = 0;
-	unsigned long length;
-	unsigned short* wideStr = NULL;
-	LOCALGROUP_INFO_1002 info;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	UTF8ToUTF16(comment, NULL, &length);
-	wideStr = (unsigned short*)malloc(length);
-	UTF8ToUTF16(comment, wideStr, &length);
-
-	info.lgrpi1002_comment = wideStr;
-	result = NetLocalGroupSetInfo(NULL, currentAccountName, 1002, (unsigned char*)&info, NULL);
-
-	LoadLocalGroupInfo();
-
-exit:
-	quickFree((char**)&wideStr);
-
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::AddUser
-// ****************************************************************
-int NTLocalGroup::AddUser(char* username)
-{
-	int result = 0;
-	unsigned long length;
-	char* sid;
-	LOCALGROUP_MEMBERS_INFO_0 members[1];
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	GetSIDByAccountName(username, NULL, &length);
-	sid = (char*)malloc(length);
-	GetSIDByAccountName(username, sid, &length);
-	members[0].lgrmi0_sid = sid;
-
-	result = NetLocalGroupAddMembers(NULL, currentAccountName, 0, (unsigned char*)&members, 1);
-
-exit:
-	quickFree(&sid);
-
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::RemoveUser
-// ****************************************************************
-int NTLocalGroup::RemoveUser(char* username)
-{
-	int result = 0;
-	unsigned long length;
-	char* sid;
-	LOCALGROUP_MEMBERS_INFO_0 members[1];
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	GetSIDByAccountName(username, NULL, &length);
-	sid = (char*)malloc(length);
-	GetSIDByAccountName(username, sid, &length);
-	members[0].lgrmi0_sid = sid;
-
-	result = NetLocalGroupDelMembers(NULL, currentAccountName, 0, (unsigned char*)&members, 1);
-
-exit:
-	quickFree(&sid);
-
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::LoadUsers
-// ****************************************************************
-int NTLocalGroup::LoadUsers()
-{
-	int result = 0;
-
-	if(currentAccountName == NULL)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	if(usersInfo != NULL)
-	{
-		NetApiBufferFree(usersInfo);
-		usersInfo = NULL;
-		currentUserEntry = 0;
-		userEntriesRead = 0;
-		userEntriesTotal = 0;
-	}
-	result = NetLocalGroupGetMembers(NULL, currentAccountName, LOCALGROUP_USERS_INFO_LEVEL, (unsigned char**)&usersInfo, MAX_PREFERRED_LENGTH, &userEntriesRead, &userEntriesTotal, NULL);
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::HasMoreUsers
-// ****************************************************************
-bool NTLocalGroup::HasMoreUsers()
-{
-	bool result;
-
-	if(currentUserEntry < userEntriesRead)
-	{
-		result = true;
-	}
-	else
-	{
-		result = false; 
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroup::NextUserName
-// ****************************************************************
-char* NTLocalGroup::NextUserName()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentUserEntry < userEntriesRead)
-	{
-		quickFree(&resultBuf);
-		GetAccountNameBySID((char*)usersInfo[currentUserEntry].lgrmi0_sid, NULL, &length);
-		resultBuf = (char*)malloc(length);
-		GetAccountNameBySID((char*)usersInfo[currentUserEntry].lgrmi0_sid, resultBuf, &length);
-		result = resultBuf;
-
-		currentUserEntry++;
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroupList::NTLocalGroupList
-// ****************************************************************
-NTLocalGroupList::NTLocalGroupList()
-{
-	bufptr = NULL;
-	currentEntry = 0;
-	resumeHandle = 0;
-	resultBuf = NULL;
-}
-
-// ****************************************************************
-// NTLocalGroupList::~NTLocalGroupList
-// ****************************************************************
-NTLocalGroupList::~NTLocalGroupList()
-{
-	if(bufptr != NULL)
-	{
-		NetApiBufferFree(bufptr);
-		bufptr = NULL;
-	}
-	quickFree(&resultBuf);
-}
-
-// ****************************************************************
-// NTLocalGroupList::loadList
-// ****************************************************************
-int NTLocalGroupList::loadList()
-{
-	int result;
-
-	result = NetLocalGroupEnum(NULL, LOCALGROUP_INFO_LEVEL, (LPBYTE*)&bufptr, MAX_PREFERRED_LENGTH, &entriesRead, &totalEntries, &resumeHandle);
-
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroupList::hasMore
-// ****************************************************************
-bool NTLocalGroupList::hasMore()
-{
-	bool result;
-
-	if(currentEntry < entriesRead)
-	{
-		result = true;
-	}
-	else
-	{
-		result = false;
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// NTLocalGroupList::nextLocalGroupName
-// ****************************************************************
-char* NTLocalGroupList::nextLocalGroupName()
-{
-	char* result = NULL;
-	unsigned long length;
-
-	if(currentEntry < entriesRead)
-	{
-		quickFree(&resultBuf);
-		UTF16ToUTF8(bufptr[currentEntry].lgrpi1_name, NULL, &length);
-		resultBuf = (char*)malloc(length);
-		UTF16ToUTF8(bufptr[currentEntry].lgrpi1_name, resultBuf, &length);
-		result = resultBuf;
-
-		currentEntry++;
-	}
-
-	return result;
-}

+ 0 - 281
ldap/servers/ntds/netman/netman.h

@@ -1,281 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
-// ****************************************************************
-// netman.h
-// ****************************************************************
-#include <windows.h>
-#include <lm.h>
-#include <stdio.h>
-
-#define USER_INFO_LEVEL 3
-#define USER_GROUPS_INFO_LEVEL 0
-#define USER_LOCALGROUPS_INFO_LEVEL 0
-
-#define GROUP_INFO_LEVEL 2
-#define GROUP_USERS_INFO_LEVEL 0
-
-#define LOCALGROUP_INFO_LEVEL 1
-#define LOCALGROUP_USERS_INFO_LEVEL 0
-
-#define NETMAN_BUF_LEN 256
-
-// ****************************************************************
-// NTUser
-// ****************************************************************
-class NTUser
-{
-public:
-	NTUser();
-	~NTUser();
-
-	int NewUser(char* username);
-	int RetriveUserByAccountName(char* username);
-	int RetriveUserBySIDHexStr(char* sidHexStr);
-	int DeleteUser();
-	char* GetAccountName();
-	char* GetSIDHexStr();
-
-	unsigned long GetAccountExpires();
-	int SetAccountExpires(unsigned long accountExpires);
-	unsigned long GetBadPasswordCount();
-	unsigned long GetCodePage();
-	int SetCodePage(unsigned long codePage);
-	char* GetComment();
-	int SetComment(char* comment);
-	unsigned long GetCountryCode();
-	int SetCountryCode(unsigned long countryCode);
-	unsigned long GetFlags();
-	int SetFlags(unsigned long flags);
-	char* GetHomeDir();
-	int SetHomeDir(char* path);
-	char* GetHomeDirDrive();
-	int SetHomeDirDrive(char* path);
-	unsigned long GetLastLogoff();
-	unsigned long GetLastLogon();
-	char* GetLogonHours();
-	int SetLogonHours(char* logonHours);
-	unsigned long GetMaxStorage();
-	int SetMaxStorage(unsigned long maxStorage);
-	unsigned long GetNumLogons();
-	char* GetProfile();
-	int SetProfile(char* path);
-	char* GetScriptPath();
-	int SetScriptPath(char* path);
-	char* GetWorkstations();
-	int SetWorkstations(char* workstations);
-	char* GetFullname();
-	int SetFullname(char* fullname);
-	int SetPassword(char* password);
-
-	int AddToGroup(char* groupName);
-	int RemoveFromGroup(char* groupName);
-	int LoadGroups();
-	bool HasMoreGroups();
-	char* NextGroupName();
-
-	int AddToLocalGroup(char* localGroupName);
-	int RemoveFromLocalGroup(char* localGroupName);
-	int LoadLocalGroups();
-	bool HasMoreLocalGroups();
-	char* NextLocalGroupName();
-
-private:
-	int LoadUserInfo();
-
-	unsigned short* currentAccountName;
-	PUSER_INFO_3 userInfo;
-
-	GROUP_USERS_INFO_0* groupsInfo;
-	DWORD currentGroupEntry;
-	DWORD groupEntriesRead;
-	DWORD groupEntriesTotal;
-
-	LOCALGROUP_USERS_INFO_0* localGroupsInfo;
-	DWORD currentLocalGroupEntry;
-	DWORD localGroupEntriesRead;
-	DWORD localGroupEntriesTotal;
-
-	char* resultBuf;
-};
-
-// ****************************************************************
-// NTUserList
-// ****************************************************************
-class NTUserList
-{
-public:
-	NTUserList();
-	~NTUserList();
-
-	int loadList();
-	bool hasMore();
-	char* nextUsername();
-
-private:
-	USER_INFO_3*  bufptr;
-	DWORD entriesRead;
-	DWORD totalEntries;
-	DWORD resumeHandle;
-	DWORD currentEntry;
-
-	char* resultBuf;
-};
-
-// ****************************************************************
-// NTGroup
-// ****************************************************************
-class NTGroup
-{
-public:
-	NTGroup();
-	~NTGroup();
-
-	int NewGroup(char* groupName);
-	int RetriveGroupByAccountName(char* groupName);
-	int RetriveGroupBySIDHexStr(char* sidHexStr);
-	int DeleteGroup();
-	char* GetAccountName();
-	char* GetSIDHexStr();
-
-	char* GetComment();
-	int SetComment(char* comment);
-
-	int AddUser(char* username);
-	int RemoveUser(char* username);
-	int LoadUsers();
-	bool HasMoreUsers();
-	char* NextUserName();
-
-private:
-	int LoadGroupInfo();
-
-	unsigned short* currentAccountName;
-	PGROUP_INFO_2 groupInfo;
-
-	LOCALGROUP_USERS_INFO_0* usersInfo;
-	DWORD currentUserEntry;
-	DWORD userEntriesRead;
-	DWORD userEntriesTotal;
-
-	char* resultBuf;
-};
-
-// ****************************************************************
-// NTGroupList
-// ****************************************************************
-class NTGroupList
-{
-public:
-	NTGroupList();
-	~NTGroupList();
-
-	int loadList();
-	bool hasMore();
-	char* nextGroupName();
-
-private:
-	GROUP_INFO_2* bufptr;
-	DWORD entriesRead;
-	DWORD totalEntries;
-	DWORD resumeHandle;
-	DWORD currentEntry;
-
-	char* resultBuf;
-};
-
-// ****************************************************************
-// NTLocalGroup
-// ****************************************************************
-class NTLocalGroup
-{
-public:
-	NTLocalGroup();
-	~NTLocalGroup();
-
-	int NewLocalGroup(char* localGroupName);
-	int RetriveLocalGroupByAccountName(char* localGroupName);
-	int RetriveLocalGroupBySIDHexStr(char* sidHexStr);
-	int DeleteLocalGroup();
-	char* GetAccountName();
-	char* GetSIDHexStr();
-
-	char* GetComment();
-	int SetComment(char* comment);
-
-	int AddUser(char* username);
-	int RemoveUser(char* username);
-	int LoadUsers();
-	bool HasMoreUsers();
-	char* NextUserName();
-
-private:
-	int LoadLocalGroupInfo();
-
-	unsigned short* currentAccountName;
-	PLOCALGROUP_INFO_1 localGroupInfo;
-
-	LOCALGROUP_MEMBERS_INFO_0* usersInfo;
-	DWORD currentUserEntry;
-	DWORD userEntriesRead;
-	DWORD userEntriesTotal;
-
-	char* resultBuf;
-};
-
-// ****************************************************************
-// NTLocalGroupList
-// ****************************************************************
-class NTLocalGroupList
-{
-public:
-	NTLocalGroupList();
-	~NTLocalGroupList();
-
-	int loadList();
-	bool hasMore();
-	char* nextLocalGroupName();
-
-private:
-	LOCALGROUP_INFO_1* bufptr;
-	DWORD entriesRead;
-	DWORD totalEntries;
-	DWORD resumeHandle;
-	DWORD currentEntry;
-
-	char* resultBuf;
-};

+ 0 - 90
ldap/servers/ntds/wrapper/Makefile

@@ -1,90 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-LDAP_SRC = ../../..
-BUILD_ROOT = ../../../..
-
-OBJDEST = $(OBJDIR)/usersync
-LIBDIR = $(LIB_RELDIR)
-
-NOSTDCLEAN=true # don't let nsconfig.mk define target clean
-NOSTDSTRIP=true # don't let nsconfig.mk define target strip
-include $(BUILD_ROOT)/nsconfig.mk
-include $(LDAP_SRC)/nsldap.mk
-include $(LDAP_SRC)/javarules.mk
-
-PRODUCT=ntds
-WRAPPER_FILES=$(WRAPPER_DEST)/$(WRAPPER_REL_DIR)
-
-all: $(PRODUCT).msi
-
-$(OBJDEST):
-	$(MKDIR) $(OBJDEST)
-
-layout: $(OBJDEST)
-	$(MKDIR) $(OBJDEST)/bin
-	$(CP) $(WRAPPER_FILES)/bin/wrapper.exe $(OBJDEST)/bin/
-	$(CP) $(WRAPPER_FILES)/bin/InstallTestWrapper-NT.bat $(OBJDEST)/bin/installusersync.bat
-	$(CP) $(WRAPPER_FILES)/bin/UninstallTestWrapper-NT.bat $(OBJDEST)/bin/uninstallusersync.bat
-	$(CP) usersync.bat $(OBJDEST)/bin/
-	$(CP) $(JAVA_DEST_DIR)/ntds/usersync.jar $(OBJDEST)/bin
-	$(CP) $(JAVA_DEST_DIR)/ntds/jnetman.jar $(OBJDEST)/bin
-	$(CP) $(APACHEDS_FILE) $(OBJDEST)/bin/apacheds-main.jar
-	
-	$(MKDIR) $(OBJDEST)/conf
-	$(CP) wrapper.conf $(OBJDEST)/conf
-	$(CP) usersync.conf $(OBJDEST)/conf
-
-	$(MKDIR) $(OBJDEST)/lib
-	$(CP) $(OBJDIR)/lib/netman/jnetman.dll $(OBJDEST)/lib
-	$(CP) $(WRAPPER_FILES)/lib/wrapper.dll $(OBJDEST)/lib
-	$(CP) $(WRAPPER_FILES)/lib/wrapper.jar $(OBJDEST)/lib
-
-	$(MKDIR) $(OBJDEST)/logs
-
-
-$(PRODUCT).msi:	layout
-	$(CP) wix/Binary $(OBJDEST)/
-	# Do not allow MAKEFLAGS or other environment variables to influence nmake.
-	env -i PATH="${PATH}" LIB="${LIB}" INCLUDE="${INCLUDE}" BUILD_DEBUG=${BUILD_DEBUG} OBJDEST=${OBJDEST} build.bat
-	
-clean:
-	$(RM) wix/$(PRODUCT)*.msi wix/ntds.wixobj
-	$(RM) $(OBJDEST)
-	$(RM) wix/bin wix/conf wix/lib wix/logs/

+ 0 - 45
ldap/servers/ntds/wrapper/build.bat

@@ -1,45 +0,0 @@
-@rem //
-@rem // BEGIN COPYRIGHT BLOCK
-@rem // Copyright (C) 2005 Red Hat, Inc.
-@rem // All rights reserved.
-@rem // END COPYRIGHT BLOCK
-@rem //
-
-@echo off
-
-pushd
-
-if NOT [%BUILD_DEBUG%] == [] (
-    if [%BUILD_DEBUG%] == [optimize] (
-        set LIBROOT=..\..\..\..\..\dist\WINNT5.0_OPT.OBJ
-    ) else (
-        set LIBROOT=..\..\..\..\..\dist\WINNT5.0_DBG.OBJ
-    )
-)
-
-set PATH=%PATH%;%CD%\%LIBROOT%\wix
-
-set WXSLOC=%CD%\wix
-echo %WXSLOC%
-
-call :relative %OBJDEST%
-cd %OBJDEST%
-
-set OK=0
-
-candle %WXSLOC%\ntds.wxs
-set /a OK=%OK% + %ERRORLEVEL%
-
-light ntds.wixobj
-set /a OK=%OK% + %ERRORLEVEL%
-
-
-:END
-popd
-if %OK% GTR 1 (set OK=1)
-exit %OK%
-
-goto :EOF
-:relative
-set OBJDEST=%~f1
-goto :EOF

+ 0 - 77
ldap/servers/ntds/wrapper/usersync.bat

@@ -1,77 +0,0 @@
-@rem // --- BEGIN COPYRIGHT BLOCK ---
-@rem // This Program is free software; you can redistribute it and/or modify it under
-@rem // the terms of the GNU General Public License as published by the Free Software
-@rem // Foundation; version 2 of the License.
-@rem // 
-@rem // This Program is distributed in the hope that it will be useful, but WITHOUT
-@rem // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-@rem // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-@rem // 
-@rem // You should have received a copy of the GNU General Public License along with
-@rem // this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-@rem // Place, Suite 330, Boston, MA 02111-1307 USA.
-@rem // 
-@rem // In addition, as a special exception, Red Hat, Inc. gives You the additional
-@rem // right to link the code of this Program with code not covered under the GNU
-@rem // General Public License ("Non-GPL Code") and to distribute linked combinations
-@rem // including the two, subject to the limitations in this paragraph. Non-GPL Code
-@rem // permitted under this exception must only link to the code of this Program
-@rem // through those well defined interfaces identified in the file named EXCEPTION
-@rem // found in the source code files (the "Approved Interfaces"). The files of
-@rem // Non-GPL Code may instantiate templates or use macros or inline functions from
-@rem // the Approved Interfaces without causing the resulting work to be covered by
-@rem // the GNU General Public License. Only Red Hat, Inc. may make changes or
-@rem // additions to the list of Approved Interfaces. You must obey the GNU General
-@rem // Public License in all respects for all of the Program code and other code used
-@rem // in conjunction with the Program except the Non-GPL Code covered by this
-@rem // exception. If you modify this file, you may extend this exception to your
-@rem // version of the file, but you are not obligated to do so. If you do not wish to
-@rem // provide this exception without modification, you must delete this exception
-@rem // statement from your version and license this file solely under the GPL without
-@rem // exception. 
-@rem // 
-@rem // 
-@rem // Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-@rem // Copyright (C) 2005 Red Hat, Inc.
-@rem // All rights reserved.
-@rem // --- END COPYRIGHT BLOCK ---
-@echo off
-setlocal
-
-rem
-rem Java Service Wrapper general startup script
-rem
-
-rem
-rem Resolve the real path of the Wrapper.exe
-rem  For non NT systems, the _REALPATH and _WRAPPER_CONF values
-rem  can be hard-coded below and the following test removed.
-rem
-if "%OS%"=="Windows_NT" goto nt
-echo This script only works with NT-based versions of Windows.
-goto :eof
-
-:nt
-rem
-rem Find the application home.
-rem
-rem %~dp0 is location of current script under NT
-set _REALPATH=%~dp0
-set _WRAPPER_EXE=%_REALPATH%Wrapper.exe
-
-rem
-rem Find the wrapper.conf
-rem
-:conf
-set _WRAPPER_CONF="%~f1"
-if not %_WRAPPER_CONF%=="" goto startup
-set _WRAPPER_CONF="%_REALPATH%..\conf\wrapper.conf"
-
-rem
-rem Start the Wrapper
-rem
-:startup
-"%_WRAPPER_EXE%" -c %_WRAPPER_CONF%
-if not errorlevel 1 goto :eof
-pause
-

+ 0 - 55
ldap/servers/ntds/wrapper/usersync.conf

@@ -1,55 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-
-#server.net.ldap.port=389
-#server.net.ldaps.port=636
-#server.net.admin.password=changeit
-#javax.net.ssl.keyStore=c:\\Path\\To\\Fedora Directory Synchronization\\conf\\keystore
-#javax.net.ssl.keyStorePassword=changeit
-#server.net.ldaps.enable=true
-server.db.partition.suffix.usersync=dc=example,dc=com
-
-# do not modify beyond this point
-server.schemas = org.apache.ldap.server.schema.bootstrap.CoreSchema org.apache.ldap.server.schema.bootstrap.CosineSchema org.apache.ldap.server.schema.bootstrap.ApacheSchema org.apache.ldap.server.schema.bootstrap.InetorgpersonSchema org.apache.ldap.server.schema.bootstrap.JavaSchema org.apache.ldap.server.schema.bootstrap.SystemSchema org.apache.ldap.server.schema.bootstrap.UsersyncSchema
-server.db.partitions=usersync
-server.db.partition.class.usersync=org.apache.ldap.server.NetAPIPartition
-server.db.partition.indices.usersync=ou objectClass
-server.db.partition.attributes.usersync.ou=usersync
-server.db.partition.attributes.usersync.objectClass=top organizationalUnit extensibleObject

BIN
ldap/servers/ntds/wrapper/wix/Binary/Remove.ico


BIN
ldap/servers/ntds/wrapper/wix/Binary/Repair.ico


+ 0 - 1189
ldap/servers/ntds/wrapper/wix/ntds.wxs

@@ -1,1189 +0,0 @@
-<?xml version='1.0' encoding='windows-1252'?>
-<!-- BEGIN COPYRIGHT BLOCK
- This Program is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free Software
- Foundation; version 2 of the License.
- 
- This Program is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- 
- You should have received a copy of the GNU General Public License along with
- this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- Place, Suite 330, Boston, MA 02111-1307 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the additional
- right to link the code of this Program with code not covered under the GNU
- General Public License ("Non-GPL Code") and to distribute linked combinations
- including the two, subject to the limitations in this paragraph. Non-GPL Code
- permitted under this exception must only link to the code of this Program
- through those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files of
- Non-GPL Code may instantiate templates or use macros or inline functions from
- the Approved Interfaces without causing the resulting work to be covered by
- the GNU General Public License. Only Red Hat, Inc. may make changes or
- additions to the list of Approved Interfaces. You must obey the GNU General
- Public License in all respects for all of the Program code and other code used
- in conjunction with the Program except the Non-GPL Code covered by this
- exception. If you modify this file, you may extend this exception to your
- version of the file, but you are not obligated to do so. If you do not wish to
- provide this exception without modification, you must delete this exception
- statement from your version and license this file solely under the GPL without
- exception. 
-
-
- Copyright (C) 2005 Red Hat, Inc.
- All rights reserved.
- END COPYRIGHT BLOCK -->
-<Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'>
-  <Product Name='Fedora Directory Synchronization' Id='9FABDEC3-CAA0-40D5-871F-A0E1759C38C1'
-    Language='1033' Codepage='1252'
-    Version='1.0.1' Manufacturer='Fedora Project'>
-
-    <Package Id='????????-????-????-????-????????????' Keywords='Installer'
-      Description="Fedora Directory Synchronization Installer"
-      Manufacturer='Fedora Project'
-      InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
-
-    <Media Id='1' Cabinet='Sample.cab' EmbedCab='yes' DiskPrompt="CD-ROM #1" />
-    <Property Id='DiskPrompt' Value="Fedora Directory Synchronization Installation [1]" />
-
-<Directory Id='ProgramFilesFolder' Name='PFiles'>
-
-<Directory Id='INSTALLDIR' Name='UserSync' LongName='Fedora Directory Synchronization'>
-
-<Directory Id='bin' Name='bin'>
-<Component Id='bin' Guid='2354cddf-a2e1-4c80-836b-0ed9302d8a2a'>
-<File Id='apachejar' Name='apache~1.jar' LongName='apacheds-main.jar' DiskId='1' src='bin\apacheds-main.jar' Vital='yes' />
-<File Id='install' Name='instal~1.bat' LongName='installuseresync.bat' DiskId='1' src='bin\installusersync.bat' Vital='yes' />
-<File Id='jnetmanjar' Name='jnetman.jar' DiskId='1' src='bin\jnetman.jar' Vital='yes' />
-<File Id='uninstall' Name='uninst~1.bat' LongName='uninstalluseresync.bat' DiskId='1' src='bin\uninstallusersync.bat' Vital='yes' />
-<File Id='usersync' Name='usersync.bat' DiskId='1' src='bin\usersync.bat' Vital='yes' />
-<File Id='usersyncjar' Name='usersync.jar' DiskId='1' src='bin\usersync.jar' Vital='yes' />
-<File Id='wrapperbin' Name='wrapper.exe' DiskId='1' src='bin\wrapper.exe' Vital='yes' />
-</Component>
-</Directory>
-
-<Directory Id='conf' Name='conf'>
-<Component Id='conf' Guid='c3de9b1d-d818-4998-aa61-b494f96068be'>
-<File Id='usersyncconf' Name='usersy~1.con' LongName='usersync.conf' DiskId='1' src='conf\usersync.conf' Vital='yes' />
-<File Id='wrapperconf' Name='wrappe~1.con' LongName='wrapper.conf' DiskId='1' src='conf\wrapper.conf' Vital='yes' />
-</Component>
-</Directory>
-
-<Directory Id='lib' Name='lib'>
-<Component Id='lib' Guid='abad968e-3799-419f-9ffb-ce5387c563cd'>
-<File Id='netmandll' Name='jnetman.dll' DiskId='1' src='lib\jnetman.dll' Vital='yes' />
-<File Id='wrapperlib' Name='wrapper.dll' DiskId='1' src='lib\wrapper.dll' Vital='yes' />
-<File Id='wrapperjar' Name='wrapper.jar' DiskId='1' src='lib\wrapper.jar' Vital='yes' />
-</Component>
-</Directory>
-
-
-<Directory Id='logs' Name='logs'>
-<Component Id='logs' SharedDllRefCount='no' KeyPath='no' NeverOverwrite='no' Permanent='no' Transitive='no' Guid='2ee0e998-e326-4310-888e-a0470d266112'
-        Win64='no' Location='either'>
-<CreateFolder/>
-</Component>
-</Directory>
-
-
-
-</Directory>
-</Directory>
-
-<Feature Id='All' Title='Fedora Directory Synchronization' Description='The complete package.'
-  TypicalDefault='install' Display='expand' Level='1'
-  ConfigurableDirectory='INSTALLDIR'>
-  <ComponentRef Id='bin'/>
-  <ComponentRef Id='conf'/>
-  <ComponentRef Id='lib'/>
-  <ComponentRef Id='logs'/>
-</Feature>
-
-    <UI>
-      <Property Id="DefaultUIFont">DlgFont8</Property>
-      <Property Id="ErrorDialog">ErrorDlg</Property>
-
-      <Dialog Id="VerifyReadyDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
-        <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Install]">
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>The [Wizard] is ready to begin the [InstallMode] installation</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="20">
-          <Text>Click Install to begin the installation. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Ready to Install</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      
-      <Dialog Id="AdminWelcomeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Property="InstallMode" Value="Server Image">1</Publish>
-          <Publish Event="NewDialog" Value="AdminRegistrationDlg">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
-          <Text>The [Wizard] will create a server image of [ProductName], at a specified network location. Click Next to continue or Cancel to exit the [Wizard].</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="PrepareDlg" Width="370" Height="270" Title="[ProductName] [Setup]" Modeless="yes">
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="ActionText" Type="Text" X="135" Y="100" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
-          <Subscribe Event="ActionText" Attribute="Text" />
-        </Control>
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Please wait while the [Wizard] prepares to guide you through the installation.</Text>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" TabSkip="yes" Text="[ButtonText_Next]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" TabSkip="yes" Text="[ButtonText_Back]" />
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
-        </Control>
-        <Control Id="ActionData" Type="Text" X="135" Y="125" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
-          <Subscribe Event="ActionData" Attribute="Text" />
-        </Control>
-      </Dialog>
-
-      <Dialog Id="ProgressDlg" Width="370" Height="270" Title="[ProductName] [Setup]" Modeless="yes">
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Next]" />
-        <Control Id="ActionText" Type="Text" X="70" Y="100" Width="265" Height="10">
-          <Subscribe Event="ActionText" Attribute="Text" />
-        </Control>
-        <Control Id="Text" Type="Text" X="35" Y="65" Width="300" Height="20">
-          <Text>Please wait while the [Wizard] [Progress2] [ProductName]. This may take several minutes.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="20" Y="15" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont][Progress1] [ProductName]</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="ProgressBar" Type="ProgressBar" X="35" Y="115" Width="300" Height="10" ProgressBlocks="yes" Text="Progress done">
-          <Subscribe Event="SetProgress" Attribute="Progress" />
-        </Control>
-        <Control Id="StatusLabel" Type="Text" X="35" Y="100" Width="35" Height="10" Text="Status:" />
-      </Dialog>
-
-      <Dialog Id="UserExit" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Finish]">
-          <Publish Event="EndDialog" Value="Exit">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Cancel]" />
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}[ProductName] [Wizard] was interrupted</Text>
-        </Control>
-        <Control Id="Description1" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes">
-          <Text>[ProductName] setup was interrupted. Your system has not been modified. To install this program at a later time, please run the installation again.</Text>
-        </Control>
-        <Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Click the Finish button to exit the [Wizard].</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="FatalError" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Finish]">
-          <Publish Event="EndDialog" Value="Exit">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Cancel]" />
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}[ProductName] [Wizard] ended prematurely</Text>
-        </Control>
-        <Control Id="Description1" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes">
-          <Text>[ProductName] setup ended prematurely because of an error. Your system has not been modified. To install this program at a later time, please run the installation again.</Text>
-        </Control>
-        <Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Click the Finish button to exit the [Wizard].</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="ExitDialog" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Finish]">
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Cancel]" />
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Click the Finish button to exit the [Wizard].</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}Completing the [ProductName] [Wizard]</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="AdminBrowseDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="PathEdit" Type="PathEdit" X="84" Y="202" Width="261" Height="17" Property="TARGETDIR" />
-        <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_OK]">
-          <Publish Event="SetTargetPath" Value="TARGETDIR">1</Publish>
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="240" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="Reset" Value="0">1</Publish>
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="&amp;Look in:" />
-        <Control Id="DirectoryCombo" Type="DirectoryCombo" X="70" Y="55" Width="220" Height="80" Property="TARGETDIR" Removable="yes" Fixed="yes" Remote="yes">
-          <Subscribe Event="IgnoreChange" Attribute="IgnoreChange" />
-        </Control>
-        <Control Id="Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="Up One Level" Icon="no" FixedSize="yes" IconSize="16" Text="Up">
-          <Publish Event="DirectoryListUp" Value="0">1</Publish>
-        </Control>
-        <Control Id="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19" ToolTip="Create A New Folder" Icon="no" FixedSize="yes" IconSize="16" Text="New">
-          <Publish Event="DirectoryListNew" Value="0">1</Publish>
-        </Control>
-        <Control Id="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="110" Property="TARGETDIR" Sunken="yes" TabSkip="no" />
-        <Control Id="PathLabel" Type="Text" X="25" Y="205" Width="59" Height="10" TabSkip="no" Text="&amp;Folder name:" />
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Browse to the destination folder</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Change current destination folder</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="AdminInstallPointDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Text" Type="Text" X="25" Y="80" Width="320" Height="10" TabSkip="no">
-          <Text>&amp;Enter a new network location or click Browse to browse to one.</Text>
-        </Control>
-        <Control Id="PathEdit" Type="PathEdit" X="25" Y="93" Width="320" Height="18" Property="TARGETDIR" />
-        <Control Id="Browse" Type="PushButton" X="289" Y="119" Width="56" Height="17" Text="[ButtonText_Browse]">
-          <Publish Event="SpawnDialog" Value="AdminBrowseDlg">1</Publish>
-        </Control>
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="AdminRegistrationDlg">1</Publish>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="SetTargetPath" Value="TARGETDIR">1</Publish>
-          <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Please specify a network location for the server image of [ProductName] product</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Network Location</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="AdminRegistrationDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="OrganizationLabel" Type="Text" X="45" Y="71" Width="285" Height="30" TabSkip="no">
-          <Text>&amp;Please enter the name of your organization in the box below. This will be used as default company name for subsequent installations of [ProductName]:</Text>
-        </Control>
-        <Control Id="OrganizationEdit" Type="Edit" X="45" Y="105" Width="220" Height="18" Property="COMPANYNAME" Text="{80}" />
-        <Control Id="CDKeyLabel" Type="Text" X="45" Y="130" Width="50" Height="10" TabSkip="no">
-          <Text>CD &amp;Key:</Text>
-        </Control>
-        <Control Id="CDKeyEdit" Type="MaskedEdit" X="45" Y="143" Width="250" Height="16" Property="PIDKEY" Text="[PortTemplate]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Image="yes" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="AdminWelcomeDlg">1</Publish>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="ValidateProductID" Value="0">0</Publish>
-          <Publish Event="NewDialog" Value="AdminInstallPointDlg">ProductID</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Please enter your company information</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Company Information</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="BrowseDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="PathEdit" Type="PathEdit" X="84" Y="202" Width="261" Height="18" Property="_BrowseProperty" Indirect="yes" />
-        <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_OK]">
-          <Publish Event="SetTargetPath" Value="[_BrowseProperty]">1</Publish>
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="240" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="Reset" Value="0">1</Publish>
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="&amp;Look in:" />
-        <Control Id="DirectoryCombo" Type="DirectoryCombo" X="70" Y="55" Width="220" Height="80" Property="_BrowseProperty" Indirect="yes" Fixed="yes" Remote="yes">
-          <Subscribe Event="IgnoreChange" Attribute="IgnoreChange" />
-        </Control>
-        <Control Id="Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="Up One Level" Icon="no" FixedSize="yes" IconSize="16" Text="Up">
-          <Publish Event="DirectoryListUp" Value="0">1</Publish>
-        </Control>
-        <Control Id="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19" ToolTip="Create A New Folder" Icon="no" FixedSize="yes" IconSize="16" Text="New">
-          <Publish Event="DirectoryListNew" Value="0">1</Publish>
-        </Control>
-        <Control Id="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="110" Property="_BrowseProperty" Sunken="yes" Indirect="yes" TabSkip="no" />
-        <Control Id="PathLabel" Type="Text" X="25" Y="205" Width="59" Height="10" TabSkip="no" Text="&amp;Folder name:" />
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Browse to the destination folder</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Change current destination folder</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="CancelDlg" Width="260" Height="85" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="No" Type="PushButton" X="132" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_No]">
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="Yes" Type="PushButton" X="72" Y="57" Width="56" Height="17" Text="[ButtonText_Yes]">
-          <Publish Event="EndDialog" Value="Exit">1</Publish>
-        </Control>
-        <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30">
-          <Text>Are you sure you want to cancel [ProductName] installation?</Text>
-        </Control>
-        <Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Information icon" FixedSize="yes" IconSize="32" Text="[InfoIcon]" />
-      </Dialog>
-
-      <Dialog Id="CustomizeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
-        <Control Id="Tree" Type="SelectionTree" X="25" Y="85" Width="175" Height="95" Property="_BrowseProperty" Sunken="yes" TabSkip="no" Text="Tree of selections" />
-        <Control Id="Browse" Type="PushButton" X="304" Y="200" Width="56" Height="17" Text="[ButtonText_Browse]">
-          <Publish Event="SelectionBrowse" Value="BrowseDlg">1</Publish>
-          <Condition Action="hide">Installed</Condition>
-        </Control>
-        <Control Id="Reset" Type="PushButton" X="42" Y="243" Width="56" Height="17" Text="[ButtonText_Reset]">
-          <Publish Event="Reset" Value="0">1</Publish>
-          <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
-        </Control>
-        <Control Id="DiskCost" Type="PushButton" X="111" Y="243" Width="56" Height="17">
-          <Text>Disk &amp;Usage</Text>
-          <Publish Event="SpawnDialog" Value="DiskCostDlg">1</Publish>
-          <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
-        </Control>
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="MaintenanceTypeDlg"><![CDATA[InstallMode = "Change"]]></Publish>
-          <Publish Event="NewDialog" Value="SetupTypeDlg"><![CDATA[InstallMode = "Custom"]]></Publish>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-          <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Select the way you want features to be installed.</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="25" Y="55" Width="320" Height="20">
-          <Text>Click on the icons in the tree below to change the way features will be installed.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Custom Setup</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="Box" Type="GroupBox" X="210" Y="81" Width="140" Height="98" />
-        <Control Id="ItemDescription" Type="Text" X="215" Y="90" Width="131" Height="30">
-          <Text>Multiline description of the currently selected item.</Text>
-          <Subscribe Event="SelectionDescription" Attribute="Text" />
-        </Control>
-        <Control Id="ItemSize" Type="Text" X="215" Y="130" Width="131" Height="45">
-          <Text>The size of the currently selected item.</Text>
-          <Subscribe Event="SelectionSize" Attribute="Text" />
-        </Control>
-        <Control Id="Location" Type="Text" X="75" Y="200" Width="215" Height="20">
-          <Text>&lt;The selection's path&gt;</Text>
-          <Subscribe Event="SelectionPath" Attribute="Text" />
-          <Subscribe Event="SelectionPathOn" Attribute="Visible" />
-          <Condition Action="hide">Installed</Condition>
-        </Control>
-        <Control Id="LocationLabel" Type="Text" X="25" Y="200" Width="50" Height="10" Text="Location:">
-          <Subscribe Event="SelectionPathOn" Attribute="Visible" />
-          <Condition Action="hide">Installed</Condition>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="DiskCostDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_OK]">
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>The disk space required for the installation of the selected features.</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
-          <Text>The highlighted volumes (if any) do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Disk Space Requirements</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="VolumeList" Type="VolumeCostList" X="20" Y="100" Width="330" Height="120" Sunken="yes" Fixed="yes" Remote="yes">
-          <Text>{120}{70}{70}{70}{70}</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="ErrorDlg" Width="270" Height="105" Title="Installer Information" ErrorDialog="yes" NoMinimize="yes">
-        <Control Id="ErrorText" Type="Text" X="48" Y="15" Width="205" Height="60" TabSkip="no" Text="Information text" />
-        <Control Id="Y" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Yes]">
-          <Publish Event="EndDialog" Value="ErrorYes">1</Publish>
-        </Control>
-        <Control Id="A" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="EndDialog" Value="ErrorAbort">1</Publish>
-        </Control>
-        <Control Id="C" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="EndDialog" Value="ErrorCancel">1</Publish>
-        </Control>
-        <Control Id="ErrorIcon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Information icon" FixedSize="yes" IconSize="32" Text="[InfoIcon]" />
-        <Control Id="I" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Ignore]">
-          <Publish Event="EndDialog" Value="ErrorIgnore">1</Publish>
-        </Control>
-        <Control Id="N" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_No]">
-          <Publish Event="EndDialog" Value="ErrorNo">1</Publish>
-        </Control>
-        <Control Id="O" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_OK]">
-          <Publish Event="EndDialog" Value="ErrorOk">1</Publish>
-        </Control>
-        <Control Id="R" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Retry]">
-          <Publish Event="EndDialog" Value="ErrorRetry">1</Publish>
-        </Control>
-      </Dialog>
-
-      
-      
-      <Dialog Id="FilesInUse" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" KeepModeless="yes">
-        <Control Id="Retry" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Retry]">
-          <Publish Event="EndDialog" Value="Retry">1</Publish>
-        </Control>
-        <Control Id="Ignore" Type="PushButton" X="235" Y="243" Width="56" Height="17" Text="[ButtonText_Ignore]">
-          <Publish Event="EndDialog" Value="Ignore">1</Publish>
-        </Control>
-        <Control Id="Exit" Type="PushButton" X="166" Y="243" Width="56" Height="17" Text="[ButtonText_Exit]">
-          <Publish Event="EndDialog" Value="Exit">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Some files that need to be updated are currently in use.</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="20" Y="55" Width="330" Height="30">
-          <Text>The following applications are using files that need to be updated by this setup. Close these applications and then click Retry to continue the installation or Cancel to exit it.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Files in Use</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="List" Type="ListBox" X="20" Y="87" Width="330" Height="130" Property="FileInUseProcess" Sunken="yes" TabSkip="yes" />
-      </Dialog>
-
-      <Dialog Id="LicenseAgreementDlg" Width="370" Height="270" Title="[ProductName] License Agreement" NoMinimize="yes">
-        <Control Id="Buttons" Type="RadioButtonGroup" X="20" Y="187" Width="330" Height="40" Property="IAgree" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="NewDialog" Value="VerifyReadyDlg"><![CDATA[IAgree = "Yes" AND ShowUserRegistrationDlg = 1]]></Publish>
-          <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
-          <Publish Event="NewDialog" Value="SetupTypeDlg"><![CDATA[IAgree = "Yes" AND ShowUserRegistrationDlg <> 1]]></Publish>
-          <Condition Action="disable"><![CDATA[IAgree <> "Yes"]]></Condition>
-          <Condition Action="enable">IAgree = "Yes"</Condition>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-<!--        <Control Id="AgreementText" Type="ScrollableText" X="20" Y="60" Width="330" Height="120" Sunken="yes" TabSkip="no">
-          <Text src="Binary/License.rtf" />
-        </Control> -->
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Please read the following license agreement carefully</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]End-User License Agreement</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="MaintenanceTypeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-          <Control Id="RepairLabel" Type="Text" X="105" Y="114" Width="100" Height="10" TabSkip="no">
-          <Text>[DlgTitleFont]Re&amp;pair</Text>
-        </Control>
-        <Control Id="RepairButton" Type="PushButton" X="50" Y="114" Width="38" Height="38" ToolTip="Repair Installation" Icon="yes" FixedSize="yes" IconSize="32" Text="[RepairIcon]">
-          <Publish Property="InstallMode" Value="Repair">1</Publish>
-          <Publish Property="Progress1" Value="Repairing">1</Publish>
-          <Publish Property="Progress2" Value="repaires">1</Publish>
-          <Publish Event="NewDialog" Value="VerifyRepairDlg">1</Publish>
-        </Control>
-        <Control Id="RemoveLabel" Type="Text" X="105" Y="163" Width="100" Height="10" TabSkip="no">
-          <Text>[DlgTitleFont]&amp;Remove</Text>
-        </Control>
-        <Control Id="RemoveButton" Type="PushButton" X="50" Y="163" Width="38" Height="38" ToolTip="Remove Installation" Icon="yes" FixedSize="yes" IconSize="32" Text="[RemoveIcon]">
-          <Publish Property="InstallMode" Value="Remove">1</Publish>
-          <Publish Property="Progress1" Value="Removing">1</Publish>
-          <Publish Property="Progress2" Value="removes">1</Publish>
-          <Publish Event="NewDialog" Value="VerifyRemoveDlg">1</Publish>
-        </Control>
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Next]" />
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Select the operation you wish to perform.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="240" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Modify, Repair or Remove installation</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="RemoveText" Type="Text" X="105" Y="176" Width="230" Height="20">
-          <Text>Removes [ProductName] from your computer.</Text>
-        </Control>
-        <Control Id="RepairText" Type="Text" X="105" Y="127" Width="230" Height="30">
-          <Text>Repairs errors in the most recent installation state - fixes missing or corrupt files, shortcuts and registry entries.</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="MaintenanceWelcomeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
-          <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>The [Wizard] will allow you to change the way [ProductName] features are installed on your computer or even to remove [ProductName] from your computer. Click Next to continue or Cancel to exit the [Wizard].</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="OutOfDiskDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_OK]">
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Disk space required for the installation exceeds available disk space.</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
-          <Text>The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Out of Disk Space</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="VolumeList" Type="VolumeCostList" X="20" Y="100" Width="330" Height="120" Sunken="yes" Fixed="yes" Remote="yes">
-          <Text>{120}{70}{70}{70}{70}</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="OutOfRbDiskDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="No" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_No]">
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="Yes" Type="PushButton" X="240" Y="243" Width="56" Height="17" Text="[ButtonText_Yes]">
-          <Publish Event="EnableRollback" Value="False">1</Publish>
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Disk space required for the installation exceeds available disk space.</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
-          <Text>The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Out of Disk Space</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="VolumeList" Type="VolumeCostList" X="20" Y="140" Width="330" Height="80" Sunken="yes" Fixed="yes" Remote="yes" ShowRollbackCost="yes">
-          <Text>{120}{70}{70}{70}{70}</Text>
-        </Control>
-        <Control Id="Text2" Type="Text" X="20" Y="94" Width="330" Height="40">
-          <Text>Alternatively, you may choose to disable the installer's rollback functionality. This allows the installer to restore your computer's original state should the installation be interrupted in any way. Click Yes if you wish to take the risk to disable rollback.</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="ResumeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Install]">
-          <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
-          <Text>The [Wizard] will complete the installation of [ProductName] on your computer. Click Install to continue or Cancel to exit the [Wizard].</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}Resuming the [ProductName] [Wizard]</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="SetupTypeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="TypicalLabel" Type="Text" X="105" Y="65" Width="100" Height="10" TabSkip="no">
-          <Text>[DlgTitleFont]&amp;Typical</Text>
-        </Control>
-        <Control Id="TypicalButton" Type="PushButton" X="50" Y="65" Width="38" Height="38" ToolTip="Typical Installation" Default="yes" Icon="no" FixedSize="yes" IconSize="32" Text="[InstallerIcon]">
-          <Publish Property="InstallMode" Value="Typical">1</Publish>
-          <Publish Event="SetInstallLevel" Value="3">1</Publish>
-          <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-        </Control>
-        <Control Id="CustomLabel" Type="Text" X="105" Y="118" Width="100" Height="10" TabSkip="no">
-          <Text>[DlgTitleFont]C&amp;ustom</Text>
-        </Control>
-        <Control Id="CustomButton" Type="PushButton" X="50" Y="118" Width="38" Height="38" ToolTip="Custom Installation" Icon="no" FixedSize="yes" IconSize="32" Text="[CustomSetupIcon]">
-          <Publish Property="InstallMode" Value="Custom">1</Publish>
-          <Publish Event="NewDialog" Value="CustomizeDlg">1</Publish>
-        </Control>
-        <Control Id="CompleteLabel" Type="Text" X="105" Y="171" Width="100" Height="10" TabSkip="no">
-          <Text>[DlgTitleFont]C&amp;omplete</Text>
-        </Control>
-        <Control Id="CompleteButton" Type="PushButton" X="50" Y="171" Width="38" Height="38" ToolTip="Complete Installation" Icon="no" FixedSize="yes" IconSize="32" Text="[CompleteSetupIcon]">
-          <Publish Property="InstallMode" Value="Complete">1</Publish>
-          <Publish Event="SetInstallLevel" Value="1000">1</Publish>
-          <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-        </Control>
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="LicenseAgreementDlg"><![CDATA[ShowUserRegistrationDlg <> 1]]></Publish>
-          <!-- <Publish Event="NewDialog" Value="UserRegistrationDlg">ShowUserRegistrationDlg = 1</Publish> -->
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Next]" />
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Choose the setup type that best suits your needs</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Choose Setup Type</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="CompleteText" Type="Text" X="105" Y="184" Width="230" Height="20">
-          <Text>All program features will be installed. (Requires most disk space)</Text>
-        </Control>
-        <Control Id="CustomText" Type="Text" X="105" Y="131" Width="230" Height="30">
-          <Text>Allows users to choose which program features will be installed and where they will be installed. Recommended for advanced users.</Text>
-        </Control>
-        <Control Id="TypicalText" Type="Text" X="105" Y="78" Width="230" Height="20">
-          <Text>Installs the most common program features. Recommended for most users.</Text>
-        </Control>
-      </Dialog>
-      
-      <Dialog Id="VerifyRemoveDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
-        </Control>
-        <Control Id="Remove" Type="PushButton" X="236" Y="243" Width="56" Height="17" Text="[ButtonText_Remove]">
-          <Publish Event="Remove" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>You have chosen to remove the program from your computer.</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="30">
-          <Text>Click Remove to remove [ProductName] from your computer. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Remove [ProductName]</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="VerifyRepairDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
-        <Control Id="Repair" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Repair]">
-          <Publish Event="ReinstallMode" Value="ecmus"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="Reinstall" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
-        </Control>
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>The [Wizard] is ready to begin the repair of [ProductName].</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="30">
-          <Text>Click Repair to repair the installation of [ProductName]. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Repair [ProductName]</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="WaitForCostingDlg" Width="260" Height="85" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Return" Type="PushButton" X="102" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Return]">
-          <Publish Event="EndDialog" Value="Exit">1</Publish>
-        </Control>
-        <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30">
-          <Text>Please wait while the installer finishes determining your disk space requirements.</Text>
-        </Control>
-        <Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Exclamation icon" FixedSize="yes" IconSize="32" Text="[ExclamationIcon]" />
-      </Dialog>
-
-      <Dialog Id="WelcomeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
-          <Text>The [Wizard] will install [ProductName] on your computer. Click Next to continue or Cancel to exit the [Wizard].</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
-        </Control>
-      </Dialog>
-
-      <RadioButtonGroup Property="IAgree">
-        <RadioButton Text="{\DlgFont8}I &amp;accept the terms in the License Agreement" Value="Yes" X="5" Y="0" Width="250" Height="15" />
-        <RadioButton Text="{\DlgFont8}I &amp;do not accept the terms in the License Agreement" Value="No" X="5" Y="20" Width="250" Height="15" />
-      </RadioButtonGroup>
-
-      <TextStyle Id="DlgFont8" FaceName="Tahoma" Size="8" />
-      <TextStyle Id="DlgFontBold8" FaceName="Tahoma" Size="8" Bold="yes" />
-      <TextStyle Id="VerdanaBold13" FaceName="Verdana" Size="13" Bold="yes" />
-
-      <UIText Id="AbsentPath" />
-      <UIText Id="bytes">bytes</UIText>
-      <UIText Id="GB">GB</UIText>
-      <UIText Id="KB">KB</UIText>
-      <UIText Id="MB">MB</UIText>
-      <UIText Id="MenuAbsent">Entire feature will be unavailable</UIText>
-      <UIText Id="MenuAdvertise">Feature will be installed when required</UIText>
-      <UIText Id="MenuAllCD">Entire feature will be installed to run from CD</UIText>
-      <UIText Id="MenuAllLocal">Entire feature will be installed on local hard drive</UIText>
-      <UIText Id="MenuAllNetwork">Entire feature will be installed to run from network</UIText>
-      <UIText Id="MenuCD">Will be installed to run from CD</UIText>
-      <UIText Id="MenuLocal">Will be installed on local hard drive</UIText>
-      <UIText Id="MenuNetwork">Will be installed to run from network</UIText>
-      <UIText Id="ScriptInProgress">Gathering required information...</UIText>
-      <UIText Id="SelAbsentAbsent">This feature will remain uninstalled</UIText>
-      <UIText Id="SelAbsentAdvertise">This feature will be set to be installed when required</UIText>
-      <UIText Id="SelAbsentCD">This feature will be installed to run from CD</UIText>
-      <UIText Id="SelAbsentLocal">This feature will be installed on the local hard drive</UIText>
-      <UIText Id="SelAbsentNetwork">This feature will be installed to run from the network</UIText>
-      <UIText Id="SelAdvertiseAbsent">This feature will become unavailable</UIText>
-      <UIText Id="SelAdvertiseAdvertise">Will be installed when required</UIText>
-      <UIText Id="SelAdvertiseCD">This feature will be available to run from CD</UIText>
-      <UIText Id="SelAdvertiseLocal">This feature will be installed on your local hard drive</UIText>
-      <UIText Id="SelAdvertiseNetwork">This feature will be available to run from the network</UIText>
-      <UIText Id="SelCDAbsent">This feature will be uninstalled completely, you won't be able to run it from CD</UIText>
-      <UIText Id="SelCDAdvertise">This feature will change from run from CD state to set to be installed when required</UIText>
-      <UIText Id="SelCDCD">This feature will remain to be run from CD</UIText>
-      <UIText Id="SelCDLocal">This feature will change from run from CD state to be installed on the local hard drive</UIText>
-      <UIText Id="SelChildCostNeg">This feature frees up [1] on your hard drive.</UIText>
-      <UIText Id="SelChildCostPos">This feature requires [1] on your hard drive.</UIText>
-      <UIText Id="SelCostPending">Compiling cost for this feature...</UIText>
-      <UIText Id="SelLocalAbsent">This feature will be completely removed</UIText>
-      <UIText Id="SelLocalAdvertise">This feature will be removed from your local hard drive, but will be set to be installed when required</UIText>
-      <UIText Id="SelLocalCD">This feature will be removed from your local hard drive, but will be still available to run from CD</UIText>
-      <UIText Id="SelLocalLocal">This feature will remain on you local hard drive</UIText>
-      <UIText Id="SelLocalNetwork">This feature will be removed from your local hard drive, but will be still available to run from the network</UIText>
-      <UIText Id="SelNetworkAbsent">This feature will be uninstalled completely, you won't be able to run it from the network</UIText>
-      <UIText Id="SelNetworkAdvertise">This feature will change from run from network state to set to be installed when required</UIText>
-      <UIText Id="SelNetworkLocal">This feature will change from run from network state to be installed on the local hard drive</UIText>
-      <UIText Id="SelNetworkNetwork">This feature will remain to be run from the network</UIText>
-      <UIText Id="SelParentCostNegNeg">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</UIText>
-      <UIText Id="SelParentCostNegPos">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</UIText>
-      <UIText Id="SelParentCostPosNeg">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</UIText>
-      <UIText Id="SelParentCostPosPos">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</UIText>
-      <UIText Id="TimeRemaining">Time remaining: {[1] minutes }{[2] seconds}</UIText>
-      <UIText Id="VolumeCostAvailable">Available</UIText>
-      <UIText Id="VolumeCostDifference">Difference</UIText>
-      <UIText Id="VolumeCostRequired">Required</UIText>
-      <UIText Id="VolumeCostSize">Disk Size</UIText>
-      <UIText Id="VolumeCostVolume">Volume</UIText>
-      <ProgressText Action="CostFinalize">Computing space requirements</ProgressText>
-      <ProgressText Action="CostInitialize">Computing space requirements</ProgressText>
-      <ProgressText Action="FileCost">Computing space requirements</ProgressText>
-      <ProgressText Action="InstallValidate">Validating install</ProgressText>
-      <ProgressText Action="InstallFiles" Template="File: [1],  Directory: [9],  Size: [6]">Copying new files</ProgressText>
-      <ProgressText Action="InstallAdminPackage" Template="File: [1], Directory: [9], Size: [6]">Copying network install files</ProgressText>
-      <ProgressText Action="CreateShortcuts" Template="Shortcut: [1]">Creating shortcuts</ProgressText>
-      <ProgressText Action="PublishComponents" Template="Component ID: [1], Qualifier: [2]">Publishing Qualified Components</ProgressText>
-      <ProgressText Action="PublishFeatures" Template="Feature: [1]">Publishing Product Features</ProgressText>
-      <ProgressText Action="PublishProduct">Publishing product information</ProgressText>
-      <ProgressText Action="ClassInfo" Template="Class Id: [1]">Registering Class servers</ProgressText>
-      <ProgressText Action="RegisterExtensionInfo" Template="Extension: [1]">Registering extension servers</ProgressText>
-      <ProgressText Action="RegisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">Registering MIME info</ProgressText>
-      <ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">Registering program identifiers</ProgressText>
-      <ProgressText Action="AllocateRegistrySpace" Template="Free space: [1]">Allocating registry space</ProgressText>
-      <ProgressText Action="AppSearch" Template="Property: [1], Signature: [2]">Searching for installed applications</ProgressText>
-      <ProgressText Action="BindImage" Template="File: [1]">Binding executables</ProgressText>
-      <ProgressText Action="CCPSearch">Searching for qualifying products</ProgressText>
-      <ProgressText Action="CreateFolders" Template="Folder: [1]">Creating folders</ProgressText>
-      <ProgressText Action="DeleteServices" Template="Service: [1]">Deleting services</ProgressText>
-      <ProgressText Action="DuplicateFiles" Template="File: [1],  Directory: [9],  Size: [6]">Creating duplicate files</ProgressText>
-      <ProgressText Action="FindRelatedProducts" Template="Found application: [1]">Searching for related applications</ProgressText>
-      <ProgressText Action="InstallODBC">Installing ODBC components</ProgressText>
-      <ProgressText Action="InstallServices" Template="Service: [2]">Installing new services</ProgressText>
-      <ProgressText Action="LaunchConditions">Evaluating launch conditions</ProgressText>
-      <ProgressText Action="MigrateFeatureStates" Template="Application: [1]">Migrating feature states from related applications</ProgressText>
-      <ProgressText Action="MoveFiles" Template="File: [1],  Directory: [9],  Size: [6]">Moving files</ProgressText>
-      <ProgressText Action="PatchFiles" Template="File: [1],  Directory: [2],  Size: [3]">Patching files</ProgressText>
-      <ProgressText Action="ProcessComponents">Updating component registration</ProgressText>
-      <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">Registering COM+ Applications and Components</ProgressText>
-      <ProgressText Action="RegisterFonts" Template="Font: [1]">Registering fonts</ProgressText>
-      <ProgressText Action="RegisterProduct" Template="[1]">Registering product</ProgressText>
-      <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">Registering type libraries</ProgressText>
-      <ProgressText Action="RegisterUser" Template="[1]">Registering user</ProgressText>
-      <ProgressText Action="RemoveDuplicateFiles" Template="File: [1], Directory: [9]">Removing duplicated files</ProgressText>
-      <ProgressText Action="RemoveEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">Updating environment strings</ProgressText>
-      <ProgressText Action="RemoveExistingProducts" Template="Application: [1], Command line: [2]">Removing applications</ProgressText>
-      <ProgressText Action="RemoveFiles" Template="File: [1], Directory: [9]">Removing files</ProgressText>
-      <ProgressText Action="RemoveFolders" Template="Folder: [1]">Removing folders</ProgressText>
-      <ProgressText Action="RemoveIniValues" Template="File: [1],  Section: [2],  Key: [3], Value: [4]">Removing INI files entries</ProgressText>
-      <ProgressText Action="RemoveODBC">Removing ODBC components</ProgressText>
-      <ProgressText Action="RemoveRegistryValues" Template="Key: [1], Name: [2]">Removing system registry values</ProgressText>
-      <ProgressText Action="RemoveShortcuts" Template="Shortcut: [1]">Removing shortcuts</ProgressText>
-      <ProgressText Action="RMCCPSearch">Searching for qualifying products</ProgressText>
-      <ProgressText Action="SelfRegModules" Template="File: [1], Folder: [2]">Registering modules</ProgressText>
-      <ProgressText Action="SelfUnregModules" Template="File: [1], Folder: [2]">Unregistering modules</ProgressText>
-      <ProgressText Action="SetODBCFolders">Initializing ODBC directories</ProgressText>
-      <ProgressText Action="StartServices" Template="Service: [1]">Starting services</ProgressText>
-      <ProgressText Action="StopServices" Template="Service: [1]">Stopping services</ProgressText>
-      <ProgressText Action="UnpublishComponents" Template="Component ID: [1], Qualifier: [2]">Unpublishing Qualified Components</ProgressText>
-      <ProgressText Action="UnpublishFeatures" Template="Feature: [1]">Unpublishing Product Features</ProgressText>
-      <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Unregister Class servers</ProgressText>
-      <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">Unregistering COM+ Applications and Components</ProgressText>
-      <ProgressText Action="UnregisterExtensionInfo" Template="Extension: [1]">Unregistering extension servers</ProgressText>
-      <ProgressText Action="UnregisterFonts" Template="Font: [1]">Unregistering fonts</ProgressText>
-      <ProgressText Action="UnregisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">Unregistering MIME info</ProgressText>
-      <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">Unregistering program identifiers</ProgressText>
-      <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">Unregistering type libraries</ProgressText>
-      <ProgressText Action="WriteEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">Updating environment strings</ProgressText>
-      <ProgressText Action="WriteIniValues" Template="File: [1],  Section: [2],  Key: [3], Value: [4]">Writing INI files values</ProgressText>
-      <ProgressText Action="WriteRegistryValues" Template="Key: [1], Name: [2], Value: [3]">Writing system registry values</ProgressText>
-      <ProgressText Action="Advertise">Advertising application</ProgressText>
-      <ProgressText Action="GenerateScript" Template="[1]">Generating script operations for action:</ProgressText>
-      <ProgressText Action="InstallSFPCatalogFile" Template="File: [1],  Dependencies: [2]">Installing system catalog</ProgressText>
-      <ProgressText Action="MsiPublishAssemblies" Template="Application Context:[1], Assembly Name:[2]">Publishing assembly information</ProgressText>
-      <ProgressText Action="MsiUnpublishAssemblies" Template="Application Context:[1], Assembly Name:[2]">Unpublishing assembly information</ProgressText>
-      <ProgressText Action="Rollback" Template="[1]">Rolling back action:</ProgressText>
-      <ProgressText Action="RollbackCleanup" Template="File: [1]">Removing backup files</ProgressText>
-      <ProgressText Action="UnmoveFiles" Template="File: [1], Directory: [9]">Removing moved files</ProgressText>
-      <ProgressText Action="UnpublishProduct">Unpublishing product information</ProgressText>
-      <Error Id="0">{{Fatal error: }}</Error>
-      <Error Id="1">{{Error [1]. }}</Error>
-      <Error Id="2">Warning [1]. </Error>
-      <Error Id="3" />
-      <Error Id="4">Info [1]. </Error>
-      <Error Id="5">The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is [1]. {{The arguments are: [2], [3], [4]}}</Error>
-      <Error Id="6" />
-      <Error Id="7">{{Disk full: }}</Error>
-      <Error Id="8">Action [Time]: [1]. [2]</Error>
-      <Error Id="9">[ProductName]</Error>
-      <Error Id="10">{[2]}{, [3]}{, [4]}</Error>
-      <Error Id="11">Message type: [1], Argument: [2]</Error>
-      <Error Id="12">=== Logging started: [Date]  [Time] ===</Error>
-      <Error Id="13">=== Logging stopped: [Date]  [Time] ===</Error>
-      <Error Id="14">Action start [Time]: [1].</Error>
-      <Error Id="15">Action ended [Time]: [1]. Return value [2].</Error>
-      <Error Id="16">Time remaining: {[1] minutes }{[2] seconds}</Error>
-      <Error Id="17">Out of memory. Shut down other applications before retrying.</Error>
-      <Error Id="18">Installer is no longer responding.</Error>
-      <Error Id="19">Installer stopped prematurely.</Error>
-      <Error Id="20">Please wait while Windows configures [ProductName]</Error>
-      <Error Id="21">Gathering required information...</Error>
-      <Error Id="22">Removing older versions of this application...</Error>
-      <Error Id="23">Preparing to remove older versions of this application...</Error>
-      <Error Id="32">{[ProductName] }Setup completed successfully.</Error>
-      <Error Id="33">{[ProductName] }Setup failed.</Error>
-      <Error Id="1101">Error reading from file: [2]. {{ System error [3].}}  Verify that the file exists and that you can access it.</Error>
-      <Error Id="1301">Cannot create the file '[2]'. A directory with this name already exists. Cancel the install and try installing to a different location.</Error>
-      <Error Id="1302">Please insert the disk: [2]</Error>
-      <Error Id="1303">The installer has insufficient privileges to access this directory: [2]. The installation cannot continue. Log on as administrator or contact your system administrator.</Error>
-      <Error Id="1304">Error writing to file: [2]. Verify that you have access to that directory.</Error>
-      <Error Id="1305">Error reading from file [2]. {{ System error [3].}} Verify that the file exists and that you can access it.</Error>
-      <Error Id="1306">Another application has exclusive access to the file '[2]'. Please shut down all other applications, then click Retry.</Error>
-      <Error Id="1307">There is not enough disk space to install this file: [2]. Free some disk space and click Retry, or click Cancel to exit.</Error>
-      <Error Id="1308">Source file not found: [2]. Verify that the file exists and that you can access it.</Error>
-      <Error Id="1309">Error reading from file: [3]. {{ System error [2].}}  Verify that the file exists and that you can access it.</Error>
-      <Error Id="1310">Error writing to file: [3]. {{ System error [2].}}  Verify that you have access to that directory.</Error>
-      <Error Id="1311">Source file not found{{(cabinet)}}: [2]. Verify that the file exists and that you can access it.</Error>
-      <Error Id="1312">Cannot create the directory '[2]'. A file with this name already exists. Please rename or remove the file and click retry, or click Cancel to exit.</Error>
-      <Error Id="1313">The volume [2] is currently unavailable. Please select another.</Error>
-      <Error Id="1314">The specified path '[2]' is unavailable.</Error>
-      <Error Id="1315">Unable to write to the specified folder: [2].</Error>
-      <Error Id="1316">A network error occurred while attempting to read from the file: [2]</Error>
-      <Error Id="1317">An error occurred while attempting to create the directory: [2]</Error>
-      <Error Id="1318">A network error occurred while attempting to create the directory: [2]</Error>
-      <Error Id="1319">A network error occurred while attempting to open the source file cabinet: [2]</Error>
-      <Error Id="1320">The specified path is too long: [2]</Error>
-      <Error Id="1321">The Installer has insufficient privileges to modify this file: [2].</Error>
-      <Error Id="1322">A portion of the folder path '[2]' is invalid. It is either empty or exceeds the length allowed by the system.</Error>
-      <Error Id="1323">The folder path '[2]' contains words that are not valid in folder paths.</Error>
-      <Error Id="1324">The folder path '[2]' contains an invalid character.</Error>
-      <Error Id="1325">'[2]' is not a valid short file name.</Error>
-      <Error Id="1326">Error getting file security: [3] GetLastError: [2]</Error>
-      <Error Id="1327">Invalid Drive: [2]</Error>
-      <Error Id="1328">Error applying patch to file [2]. It has probably been updated by other means, and can no longer be modified by this patch. For more information contact your patch vendor. {{System Error: [3]}}</Error>
-      <Error Id="1329">A file that is required cannot be installed because the cabinet file [2] is not digitally signed. This may indicate that the cabinet file is corrupt.</Error>
-      <Error Id="1330">A file that is required cannot be installed because the cabinet file [2] has an invalid digital signature. This may indicate that the cabinet file is corrupt.{{  Error [3] was returned by WinVerifyTrust.}}</Error>
-      <Error Id="1331">Failed to correctly copy [2] file: CRC error.</Error>
-      <Error Id="1332">Failed to correctly move [2] file: CRC error.</Error>
-      <Error Id="1333">Failed to correctly patch [2] file: CRC error.</Error>
-      <Error Id="1334">The file '[2]' cannot be installed because the file cannot be found in cabinet file '[3]'. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package.</Error>
-      <Error Id="1335">The cabinet file '[2]' required for this installation is corrupt and cannot be used. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package.</Error>
-      <Error Id="1336">There was an error creating a temporary file that is needed to complete this installation.{{  Folder: [3]. System error code: [2]}}</Error>
-      <Error Id="1401">Could not create key: [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel. </Error>
-      <Error Id="1402">Could not open key: [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel. </Error>
-      <Error Id="1403">Could not delete value [2] from key [3]. {{ System error [4].}}  Verify that you have sufficient access to that key, or contact your support personnel. </Error>
-      <Error Id="1404">Could not delete key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel. </Error>
-      <Error Id="1405">Could not read value [2] from key [3]. {{ System error [4].}}  Verify that you have sufficient access to that key, or contact your support personnel. </Error>
-      <Error Id="1406">Could not write value [2] to key [3]. {{ System error [4].}}  Verify that you have sufficient access to that key, or contact your support personnel.</Error>
-      <Error Id="1407">Could not get value names for key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel.</Error>
-      <Error Id="1408">Could not get sub key names for key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel.</Error>
-      <Error Id="1409">Could not read security information for key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel.</Error>
-      <Error Id="1410">Could not increase the available registry space. [2] KB of free registry space is required for the installation of this application.</Error>
-      <Error Id="1500">Another installation is in progress. You must complete that installation before continuing this one.</Error>
-      <Error Id="1501">Error accessing secured data. Please make sure the Windows Installer is configured properly and try the install again.</Error>
-      <Error Id="1502">User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product. Your current install will now continue.</Error>
-      <Error Id="1503">User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product.</Error>
-      <Error Id="1601">Out of disk space -- Volume: '[2]'; required space: [3] KB; available space: [4] KB. Free some disk space and retry.</Error>
-      <Error Id="1602">Are you sure you want to cancel?</Error>
-      <Error Id="1603">The file [2][3] is being held in use{ by the following process: Name: [4], Id: [5], Window Title: '[6]'}. Close that application and retry.</Error>
-      <Error Id="1604">The product '[2]' is already installed, preventing the installation of this product. The two products are incompatible.</Error>
-      <Error Id="1605">There is not enough disk space on the volume '[2]' to continue the install with recovery enabled. [3] KB are required, but only [4] KB are available. Click Ignore to continue the install without saving recovery information, click Retry to check for available space again, or click Cancel to quit the installation.</Error>
-      <Error Id="1606">Could not access network location [2].</Error>
-      <Error Id="1607">The following applications should be closed before continuing the install:</Error>
-      <Error Id="1608">Could not find any previously installed compliant products on the machine for installing this product.</Error>
-      <Error Id="1609">An error occurred while applying security settings. [2] is not a valid user or group. This could be a problem with the package, or a problem connecting to a domain controller on the network. Check your network connection and click Retry, or Cancel to end the install. {{Unable to locate the user's SID, system error [3]}}</Error>
-      <Error Id="1701">The key [2] is not valid. Verify that you entered the correct key.</Error>
-      <Error Id="1702">The installer must restart your system before configuration of [2] can continue. Click Yes to restart now or No if you plan to manually restart later.</Error>
-      <Error Id="1703">You must restart your system for the configuration changes made to [2] to take effect. Click Yes to restart now or No if you plan to manually restart later.</Error>
-      <Error Id="1704">An installation for [2] is currently suspended. You must undo the changes made by that installation to continue. Do you want to undo those changes?</Error>
-      <Error Id="1705">A previous installation for this product is in progress. You must undo the changes made by that installation to continue. Do you want to undo those changes?</Error>
-      <Error Id="1706">An installation package for the product [2] cannot be found. Try the installation again using a valid copy of the installation package '[3]'.</Error>
-      <Error Id="1707">Installation completed successfully.</Error>
-      <Error Id="1708">Installation failed.</Error>
-      <Error Id="1709">Product: [2] -- [3]</Error>
-      <Error Id="1710">You may either restore your computer to its previous state or continue the install later. Would you like to restore?</Error>
-      <Error Id="1711">An error occurred while writing installation information to disk. Check to make sure enough disk space is available, and click Retry, or Cancel to end the install.</Error>
-      <Error Id="1712">One or more of the files required to restore your computer to its previous state could not be found. Restoration will not be possible.</Error>
-      <Error Id="1713">[2] cannot install one of its required products. Contact your technical support group. {{System Error: [3].}}</Error>
-      <Error Id="1714">The older version of [2] cannot be removed. Contact your technical support group. {{System Error [3].}}</Error>
-      <Error Id="1715">Installed [2]</Error>
-      <Error Id="1716">Configured [2]</Error>
-      <Error Id="1717">Removed [2]</Error>
-      <Error Id="1718">File [2] was rejected by digital signature policy.</Error>
-      <Error Id="1719">The Windows Installer Service could not be accessed. This can occur if you are running Windows in safe mode, or if the Windows Installer is not correctly installed. Contact your support personnel for assistance.</Error>
-      <Error Id="1720">There is a problem with this Windows Installer package. A script required for this install to complete could not be run. Contact your support personnel or package vendor. {{Custom action [2] script error [3], [4]: [5] Line [6], Column [7], [8] }}</Error>
-      <Error Id="1721">There is a problem with this Windows Installer package. A program required for this install to complete could not be run. Contact your support personnel or package vendor. {{Action: [2], location: [3], command: [4] }}</Error>
-      <Error Id="1722">There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor. {{Action [2], location: [3], command: [4] }}</Error>
-      <Error Id="1723">There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor. {{Action [2], entry: [3], library: [4] }}</Error>
-      <Error Id="1724">Removal completed successfully.</Error>
-      <Error Id="1725">Removal failed.</Error>
-      <Error Id="1726">Advertisement completed successfully.</Error>
-      <Error Id="1727">Advertisement failed.</Error>
-      <Error Id="1728">Configuration completed successfully.</Error>
-      <Error Id="1729">Configuration failed.</Error>
-      <Error Id="1730">You must be an Administrator to remove this application. To remove this application, you can log on as an Administrator, or contact your technical support group for assistance.</Error>
-      <Error Id="1801">The path [2] is not valid. Please specify a valid path.</Error>
-      <Error Id="1802">Out of memory. Shut down other applications before retrying.</Error>
-      <Error Id="1803">There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to go back to the previously selected volume.</Error>
-      <Error Id="1804">There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to return to the browse dialog and select a different volume.</Error>
-      <Error Id="1805">The folder [2] does not exist. Please enter a path to an existing folder.</Error>
-      <Error Id="1806">You have insufficient privileges to read this folder.</Error>
-      <Error Id="1807">A valid destination folder for the install could not be determined.</Error>
-      <Error Id="1901">Error attempting to read from the source install database: [2].</Error>
-      <Error Id="1902">Scheduling reboot operation: Renaming file [2] to [3]. Must reboot to complete operation.</Error>
-      <Error Id="1903">Scheduling reboot operation: Deleting file [2]. Must reboot to complete operation.</Error>
-      <Error Id="1904">Module [2] failed to register. HRESULT [3]. Contact your support personnel.</Error>
-      <Error Id="1905">Module [2] failed to unregister. HRESULT [3]. Contact your support personnel.</Error>
-      <Error Id="1906">Failed to cache package [2]. Error: [3]. Contact your support personnel.</Error>
-      <Error Id="1907">Could not register font [2]. Verify that you have sufficient permissions to install fonts, and that the system supports this font.</Error>
-      <Error Id="1908">Could not unregister font [2]. Verify that you that you have sufficient permissions to remove fonts.</Error>
-      <Error Id="1909">Could not create Shortcut [2]. Verify that the destination folder exists and that you can access it.</Error>
-      <Error Id="1910">Could not remove Shortcut [2]. Verify that the shortcut file exists and that you can access it.</Error>
-      <Error Id="1911">Could not register type library for file [2]. Contact your support personnel.</Error>
-      <Error Id="1912">Could not unregister type library for file [2]. Contact your support personnel.</Error>
-      <Error Id="1913">Could not update the ini file [2][3]. Verify that the file exists and that you can access it.</Error>
-      <Error Id="1914">Could not schedule file [2] to replace file [3] on reboot. Verify that you have write permissions to file [3].</Error>
-      <Error Id="1915">Error removing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.</Error>
-      <Error Id="1916">Error installing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.</Error>
-      <Error Id="1917">Error removing ODBC driver: [4], ODBC error [2]: [3]. Verify that you have sufficient privileges to remove ODBC drivers.</Error>
-      <Error Id="1918">Error installing ODBC driver: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.</Error>
-      <Error Id="1919">Error configuring ODBC data source: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.</Error>
-      <Error Id="1920">Service '[2]' ([3]) failed to start. Verify that you have sufficient privileges to start system services.</Error>
-      <Error Id="1921">Service '[2]' ([3]) could not be stopped. Verify that you have sufficient privileges to stop system services.</Error>
-      <Error Id="1922">Service '[2]' ([3]) could not be deleted. Verify that you have sufficient privileges to remove system services.</Error>
-      <Error Id="1923">Service '[2]' ([3]) could not be installed. Verify that you have sufficient privileges to install system services.</Error>
-      <Error Id="1924">Could not update environment variable '[2]'. Verify that you have sufficient privileges to modify environment variables.</Error>
-      <Error Id="1925">You do not have sufficient privileges to complete this installation for all users of the machine. Log on as administrator and then retry this installation.</Error>
-      <Error Id="1926">Could not set file security for file '[3]'. Error: [2]. Verify that you have sufficient privileges to modify the security permissions for this file.</Error>
-      <Error Id="1927">Component Services (COM+ 1.0) are not installed on this computer. This installation requires Component Services in order to complete successfully. Component Services are available on Windows 2000.</Error>
-      <Error Id="1928">Error registering COM+ Application. Contact your support personnel for more information.</Error>
-      <Error Id="1929">Error unregistering COM+ Application. Contact your support personnel for more information.</Error>
-      <Error Id="1930">The description for service '[2]' ([3]) could not be changed.</Error>
-      <Error Id="1931">The Windows Installer service cannot update the system file [2] because the file is protected by Windows. You may need to update your operating system for this program to work correctly. {{Package version: [3], OS Protected version: [4]}}</Error>
-      <Error Id="1932">The Windows Installer service cannot update the protected Windows file [2]. {{Package version: [3], OS Protected version: [4], SFP Error: [5]}}</Error>
-      <Error Id="1933">The Windows Installer service cannot update one or more protected Windows files. {{SFP Error: [2]. List of protected files:\r\n[3]}}</Error>
-      <Error Id="1934">User installations are disabled via policy on the machine.</Error>
-      <Error Id="1935">An error occured during the installation of assembly component [2]. HRESULT: [3]. {{assembly interface: [4], function: [5], assembly name: [6]}}</Error>
-
-      <AdminUISequence>
-        <Show Dialog="FatalError" OnExit="error" />
-        <Show Dialog="UserExit" OnExit="cancel" />
-        <Show Dialog="ExitDialog" OnExit="success" />
-        <Show Dialog="PrepareDlg" Before="CostInitialize"></Show>
-        <Show Dialog="AdminWelcomeDlg" After="CostFinalize" />
-        <Show Dialog="ProgressDlg" After="AdminWelcomeDlg" />
-      </AdminUISequence>
-
-      <InstallUISequence>
-        <Show Dialog="FatalError" OnExit="error" />
-        <Show Dialog="UserExit" OnExit="cancel" />
-        <Show Dialog="ExitDialog" OnExit="success" />
-        <Show Dialog="PrepareDlg" After="LaunchConditions" />
-        <Show Dialog="WelcomeDlg" After="MigrateFeatureStates">NOT Installed</Show>
-        <Show Dialog="ResumeDlg" After="WelcomeDlg">Installed AND (RESUME OR Preselected)</Show>
-        <Show Dialog="MaintenanceWelcomeDlg" After="ResumeDlg">Installed AND NOT RESUME AND NOT Preselected</Show>
-        <Show Dialog="ProgressDlg" After="MaintenanceWelcomeDlg" />
-      </InstallUISequence>
-    </UI>
-
-    <Property Id="ALLUSERS">2</Property>
-    <Property Id="ROOTDRIVE"><![CDATA[C:\]]></Property>
-    <Property Id="ButtonText_No">&amp;No</Property>
-    <Property Id="ButtonText_Install">&amp;Install</Property>
-    <Property Id="Setup">Setup</Property>
-    <Property Id="ButtonText_Browse">Br&amp;owse</Property>
-    <Property Id="CustomSetupIcon">custicon</Property>
-    <Property Id="ButtonText_Next">&amp;Next &gt;</Property>
-    <Property Id="ButtonText_Back">&lt; &amp;Back</Property>
-    <Property Id="InstallMode">Typical</Property>
-    <Property Id="Progress2">installs</Property>
-    <Property Id="IAgree">No</Property>
-    <Property Id="Wizard">Setup Wizard</Property>
-    <Property Id="RemoveIcon">removico</Property>
-    <Property Id="ExclamationIcon">exclamic</Property>
-    <Property Id="ShowUserRegistrationDlg">1</Property>
-    <Property Id="ProductID">none</Property>
-    <Property Id="ButtonText_Reset">&amp;Reset</Property>
-    <Property Id="ButtonText_Remove">&amp;Remove</Property>
-    <Property Id="CompleteSetupIcon">completi</Property>
-    <Property Id="ButtonText_Yes">&amp;Yes</Property>
-    <Property Id="ButtonText_Exit">&amp;Exit</Property>
-    <Property Id="ButtonText_Return">&amp;Return</Property>
-    <Property Id="DialogBitmap">dlgbmp</Property>
-    <Property Id="DlgTitleFont">{&amp;DlgFontBold8}</Property>
-    <Property Id="ButtonText_Ignore">&amp;Ignore</Property>
-    <Property Id="RepairIcon">repairic</Property>
-    <Property Id="ButtonText_Resume">&amp;Resume</Property>
-    <Property Id="InstallerIcon">insticon</Property>
-    <Property Id="ButtonText_Finish">&amp;Finish</Property>
-    <Property Id="PROMPTROLLBACKCOST">P</Property>
-    <Property Id="PortTemplate"><![CDATA[12345<######>@@@@@]]></Property>
-    <Property Id="Progress1">Installing</Property>
-    <Property Id="ButtonText_Cancel">Cancel</Property>
-    <Property Id="INSTALLLEVEL">3</Property>
-    <Property Id="InfoIcon">info</Property>
-    <Property Id="ButtonText_Repair">&amp;Repair</Property>
-    <Property Id="ButtonText_Retry">&amp;Retry</Property>
-    <Property Id="BannerBitmap">bannrbmp</Property>
-    <Property Id="ButtonText_OK">OK</Property>
-
-    <AdminExecuteSequence />
-
-    <InstallExecuteSequence>
-      <RemoveExistingProducts After='InstallFinalize' />
-    </InstallExecuteSequence>
-
-     <Binary Id="repairic" src="Binary\Repair.ico" />
-     <Binary Id="removico" src="Binary\Remove.ico" />
-
-</Product>
-</Wix>

+ 0 - 136
ldap/servers/ntds/wrapper/wrapper.conf

@@ -1,136 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-#********************************************************************
-# Wrapper Properties
-#********************************************************************
-# Java Application
-wrapper.java.command=java
-
-# Java Main class.  This class must implement the WrapperListener interface
-#  or guarantee that the WrapperManager class is initialized.  Helper
-#  classes are provided to do this for you.  See the Integration section
-#  of the documentation for details.
-wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
-
-# Java Classpath (include wrapper.jar)  Add class path elements as
-#  needed starting from 1
-wrapper.java.classpath.1=../lib/wrapper.jar
-wrapper.java.classpath.2=./jnetman.jar
-wrapper.java.classpath.3=./usersync.jar
-wrapper.java.classpath.4=./apacheds-main.jar
-
-# Java Library Path (location of Wrapper.DLL or libwrapper.so)
-wrapper.java.library.path.1=../lib
-
-# Java Additional Parameters
-#wrapper.java.additional.1=
-
-# Initial Java Heap Size (in MB)
-wrapper.java.initmemory=4
-
-# Maximum Java Heap Size (in MB)
-wrapper.java.maxmemory=256
-
-# Application parameters.  Add parameters as needed starting from 1
-wrapper.app.parameter.1=org.apache.ldap.server.ServerMain
-wrapper.app.parameter.2=../conf/usersync.conf
-
-#********************************************************************
-# Wrapper Logging Properties
-#********************************************************************
-# Format of output for the console.  (See docs for formats)
-wrapper.console.format=PM
-
-# Log Level for console output.  (See docs for log levels)
-wrapper.console.loglevel=INFO
-
-# Log file to use for wrapper output logging.
-wrapper.logfile=../logs/wrapper.log
-
-# Format of output for the log file.  (See docs for formats)
-wrapper.logfile.format=LPTM
-
-# Log Level for log file output.  (See docs for log levels)
-wrapper.logfile.loglevel=INFO
-
-# Maximum size that the log file will be allowed to grow to before
-#  the log is rolled. Size is specified in bytes.  The default value
-#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
-#  'm' (mb) suffix.  For example: 10m = 10 megabytes.
-wrapper.logfile.maxsize=0
-
-# Maximum number of rolled log files which will be allowed before old
-#  files are deleted.  The default value of 0 implies no limit.
-wrapper.logfile.maxfiles=0
-
-# Log Level for sys/event log output.  (See docs for log levels)
-wrapper.syslog.loglevel=NONE
-
-#********************************************************************
-# Wrapper Windows Properties
-#********************************************************************
-# Title to use when running as a console
-wrapper.console.title=UserSync
-
-#********************************************************************
-# Wrapper Windows NT/2000/XP Service Properties
-#********************************************************************
-# WARNING - Do not modify any of these properties when an application
-#  using this configuration file has been installed as a service.
-#  Please uninstall the service before modifying this section.  The
-#  service can then be reinstalled.
-
-# Name of the service
-wrapper.ntservice.name=UserSync
-
-# Display name of the service
-wrapper.ntservice.displayname=User Sync Service
-
-# Description of the service
-wrapper.ntservice.description=User Sync Service
-
-# Service dependencies.  Add dependencies as needed starting from 1
-wrapper.ntservice.dependency.1=
-
-# Mode in which the service is installed.  AUTO_START or DEMAND_START
-wrapper.ntservice.starttype=AUTO_START
-
-# Allow the service to interact with the desktop.
-wrapper.ntservice.interactive=false

+ 0 - 55
ldap/synctools/Makefile

@@ -1,55 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-
-# GNU Makefile for Directory Server and Ldap SDK
-#
-BUILD_ROOT = ../../
-include $(BUILD_ROOT)/nsdefs.mk
-include $(BUILD_ROOT)/nsconfig.mk
-
-OBJDEST=../$(OBJDIR)/passsync
-
-all: passsync
-
-passsync:
-ifeq ($(ARCH), WINNT)
-	# Do not allow MAKEFLAGS or other environment variables to influence nmake.
-	cd passwordsync; env -i PATH="${PATH}" LIB="${LIB}" INCLUDE="${INCLUDE}" BUILD_DEBUG=${BUILD_DEBUG} OBJDEST=`echo ${OBJDEST} | sed 's/\//\\\\/g'` build.bat
-endif

+ 0 - 49
ldap/synctools/passwordsync/README.txt

@@ -1,49 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-1. Download Wix (http://sourceforge.net/projects/wix/) and unzip it into the Wix folder.
-   (steps 2 and 3 can be skipped if ldapserver has been built)
-2. Add the location of the Mozilla LDAP C SDK header files to your INCLUDE path.
-   The LDAP C SDK is a component of the Directory Server and is "pulled"
-   when the Directory Server is built; it can also be obtained individually from Mozilla.
-   e.x. 
-      set INCLUDE=%INCLUDE%;c:\source\dist\WINNT5.0_DBG.OBJ\ldapsdk\include
-3. Add the location of the LDAP C SDK libraries to your LIB path.
-   e.x. 
-      set LIB=%LIB%;c:\source\dist\WINNT5.0_DBG.OBJ\ldapsdk\lib
-4. Run build.bat.

+ 0 - 139
ldap/synctools/passwordsync/build.bat

@@ -1,139 +0,0 @@
-@rem //
-@rem // BEGIN COPYRIGHT BLOCK
-@rem // This Program is free software; you can redistribute it and/or modify it under
-@rem // the terms of the GNU General Public License as published by the Free Software
-@rem // Foundation; version 2 of the License.
-@rem // 
-@rem // This Program is distributed in the hope that it will be useful, but WITHOUT
-@rem // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-@rem // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-@rem // 
-@rem // You should have received a copy of the GNU General Public License along with
-@rem // this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-@rem // Place, Suite 330, Boston, MA 02111-1307 USA.
-@rem // 
-@rem // In addition, as a special exception, Red Hat, Inc. gives You the additional
-@rem // right to link the code of this Program with code not covered under the GNU
-@rem // General Public License ("Non-GPL Code") and to distribute linked combinations
-@rem // including the two, subject to the limitations in this paragraph. Non-GPL Code
-@rem // permitted under this exception must only link to the code of this Program
-@rem // through those well defined interfaces identified in the file named EXCEPTION
-@rem // found in the source code files (the "Approved Interfaces"). The files of
-@rem // Non-GPL Code may instantiate templates or use macros or inline functions from
-@rem // the Approved Interfaces without causing the resulting work to be covered by
-@rem // the GNU General Public License. Only Red Hat, Inc. may make changes or
-@rem // additions to the list of Approved Interfaces. You must obey the GNU General
-@rem // Public License in all respects for all of the Program code and other code used
-@rem // in conjunction with the Program except the Non-GPL Code covered by this
-@rem // exception. If you modify this file, you may extend this exception to your
-@rem // version of the file, but you are not obligated to do so. If you do not wish to
-@rem // provide this exception without modification, you must delete this exception
-@rem // statement from your version and license this file solely under the GPL without
-@rem // exception. 
-@rem // 
-@rem // 
-@rem // Copyright (C) 2005 Red Hat, Inc.
-@rem // All rights reserved.
-@rem // END COPYRIGHT BLOCK
-@rem //
-
-@echo off
-
-pushd
-
-rem Convert %OBJEST% to absolute.
-call :relative %OBJDEST%
-
-if [%BUILD_DEBUG%] == [optimize] (
-    set LIBROOT=..\..\..\..\dist\WINNT5.0_OPT.OBJ
-) else (
-    set LIBROOT=..\..\..\..\dist\WINNT5.0_DBG.OBJ
-)
-
-echo %LIBROOT%
-
-set WXSDIR=%CD%\wix
-
-set INCLUDE=%INCLUDE%;%CD%\%LIBROOT%\ldapsdk\include;%CD%\%LIBROOT%\nspr\include;%CD%\%LIBROOT%\nss\include
-set LIB=%LIB%;%CD%\%LIBROOT%\ldapsdk\lib;%CD%\%LIBROOT%\nspr\lib;%CD%\%LIBROOT%\nss\lib
-set PATH=%PATH%;%CD%\%LIBROOT%\wix
-
-set OK=0
-
-cd passsync
-echo Entering %CD%
-
-:BUILD
-nmake passsync.mak
-set /a OK=%OK% + %ERRORLEVEL%
-
-copy /Y %OBJDEST%\passsync\passsync.exe %OBJDEST%\
-set /a OK=%OK% + %ERRORLEVEL%
-
-cd ..\passhook
-echo Entering %CD%
-
-nmake passhook.mak
-set /a OK=%OK% + %ERRORLEVEL%
-
-copy /Y %OBJDEST%\passhook\passhook.dll %OBJDEST%\
-set /a OK=%OK% + %ERRORLEVEL%
-
-:PKG
-
-if EXIST ..\%LIBROOT%\ldapsdk\lib\nsldap32v50.dll (
-    copy /Y ..\%LIBROOT%\ldapsdk\lib\nsldap32v50.dll %OBJDEST%\
-)
-if EXIST ..\%LIBROOT%\ldapsdk\lib\nsldapssl32v50.dll (
-    copy /Y ..\%LIBROOT%\ldapsdk\lib\nsldapssl32v50.dll %OBJDEST%\
-)
-if EXIST ..\%LIBROOT%\ldapsdk\lib\nsldappr32v50.dll (
-    copy /Y ..\%LIBROOT%\ldapsdk\lib\nsldappr32v50.dll %OBJDEST%\
-)
-if EXIST ..\%LIBROOT%\nspr\lib\libnspr4.dll (
-    copy /Y ..\%LIBROOT%\nspr\lib\libnspr4.dll %OBJDEST%\
-)
-if EXIST ..\%LIBROOT%\nspr\lib\libplds4.dll (
-    copy /Y ..\%LIBROOT%\nspr\lib\libplds4.dll %OBJDEST%\
-)
-if EXIST ..\%LIBROOT%\nspr\lib\libplc4.dll (
-    copy /Y ..\%LIBROOT%\nspr\lib\libplc4.dll %OBJDEST%\
-)
-if EXIST ..\%LIBROOT%\nss\lib\nss3.dll (
-    copy /Y ..\%LIBROOT%\nss\lib\nss3.dll %OBJDEST%\
-)
-if EXIST ..\%LIBROOT%\nss\lib\ssl3.dll (
-    copy /Y ..\%LIBROOT%\nss\lib\ssl3.dll %OBJDEST%\ 
-)
-if EXIST ..\%LIBROOT%\nss\lib\softokn3.dll (
-    copy /Y ..\%LIBROOT%\nss\lib\softokn3.dll %OBJDEST%\
-)
-if EXIST ..\%LIBROOT%\nss\lib\smime3.dll (
-    copy /Y ..\%LIBROOT%\nss\lib\smime3.dll %OBJDEST%\
-)
-if EXIST ..\%LIBROOT%\nss\bin\certutil.exe (
-    copy /Y ..\%LIBROOT%\nss\bin\certutil.exe %OBJDEST%\
-)
-if EXIST ..\%LIBROOT%\nss\bin\pk12util.exe (
-    copy /Y ..\%LIBROOT%\nss\bin\pk12util.exe %OBJDEST%\
-)
-
-xcopy /E /Y /I %WXSDIR%\Binary %OBJDEST%\Binary 
-
-cd %OBJDEST%
-echo Entering %CD%
-
-candle %WXSDIR%\PassSync.wxs
-set /a OK=%OK% + %ERRORLEVEL%
-
-light PassSync.wixobj
-set /a OK=%OK% + %ERRORLEVEL%
-
-:relative
-set OBJDEST=%~f1
-goto :EOF
-
-:END
-popd
-if %OK% GTR 1 (set OK=1)
-exit %OK%

+ 0 - 362
ldap/synctools/passwordsync/passhand.cpp

@@ -1,362 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
-// Created: 2-8-2005
-// Author(s): Scott Bridges
-#include "passhand.h"
-#include <time.h>
-
-#define KEY {0xe8, 0xa7, 0x7c, 0xe2, 0x05, 0x63, 0x6a, 0x31}
-#define IV {0xe4, 0xbb, 0x3b, 0xd3, 0xc3, 0x71, 0x2e, 0x58}
-
-void timeStamp(fstream* outFile)
-{
-	if(outFile->is_open())
-	{
-		char dateBuf[32];
-		char timeBuf[32];
-
-		_strdate(dateBuf);
-		_strtime(timeBuf);
-		*outFile << dateBuf << " " << timeBuf << ": ";
-	}
-}
-
-int saveSet(PASS_INFO_LIST* passInfoList, char* filename)
-{
-	int result = 0;
-	fstream outFile;
-	PASS_INFO_LIST_ITERATOR currentPair;
-	strstream plainTextStream;
-	char* cipherTextBuf;
-	int usernameLen;
-	int passwordLen;
-	int plainTextLen;
-	int cipherTextLen;
-	int resultTextLen = 0;
-	int pairCount = passInfoList->size();
-
-	// Write usernames and passwords to a strstream
-	plainTextStream.write((char*)&pairCount, sizeof(pairCount));
-	for(currentPair = passInfoList->begin(); currentPair != passInfoList->end(); currentPair++)
-	{
-		// Usernames
-		usernameLen = strlen(currentPair->username) + 1;
-		plainTextStream.write((char*)&usernameLen, sizeof(usernameLen));
-		plainTextStream.write(currentPair->username, usernameLen);
-		
-		// Passwords
-		passwordLen = strlen(currentPair->password) + 1;
-		plainTextStream.write((char*)&passwordLen, sizeof(passwordLen));
-		plainTextStream.write(currentPair->password, passwordLen);
-	}
-
-
-	plainTextLen = plainTextStream.tellp() - plainTextStream.tellg();
-	// cipherTextBuf length must be at least plainTextLen + 8
-	cipherTextLen = plainTextLen + 8;
-
-	cipherTextBuf = (char*)malloc(cipherTextLen);
-
-	if(encrypt(plainTextStream.str(), plainTextLen, cipherTextBuf, cipherTextLen, &resultTextLen) != 0)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	// Write cipher text to file
-	outFile.open(filename, ios::out | ios::binary);
-	if(!outFile.is_open())
-	{
-		result = -1;
-		goto exit;
-	}
-	outFile.write(cipherTextBuf, resultTextLen);
-	outFile.close();
-
-exit:
-	return result;
-}
-
-int loadSet(PASS_INFO_LIST* passInfoList, char* filename)
-{
-	int result = 0;
-	int i;
-	fstream inFile;
-	PASS_INFO newPair;
-	strstream* plainTextStream;
-	char* cipherTextBuf;
-	char* plainTextBuf;
-	int usernameLen;
-	int passwordLen;
-	int plainTextLen;
-	int cipherTextLen;
-	int resultTextLen = 0;
-	int pairCount;
-
-	// Read in cipher text from file
-	inFile.open(filename, ios::in | ios::binary);
-	if(!inFile.is_open())
-	{
-		result = -1;
-		goto exit;
-	}
-	// Determine file size
-	inFile.seekg(0, ios::end);
-	cipherTextLen = inFile.tellg();
-	inFile.seekg(0, ios::beg);
-	// plainTextLen length must be at least cipherTextLen
-	plainTextLen = cipherTextLen;
-
-	cipherTextBuf = (char*)malloc(cipherTextLen);
-	plainTextBuf = (char*)malloc(plainTextLen);
-
-	inFile.read(cipherTextBuf, cipherTextLen);
-	inFile.close();
-
-	if(decrypt(cipherTextBuf, cipherTextLen, plainTextBuf, plainTextLen, &resultTextLen) != 0)
-	{
-		result = -1;
-		goto exit;
-	}
-
-	plainTextStream = new strstream(plainTextBuf, resultTextLen);
-
-	plainTextStream->read((char*)&pairCount, sizeof(pairCount));
-
-	// Read usernames and passwords from a strstream
-	for(i = 0; i < pairCount; i++)
-	{
-		// Username
-		plainTextStream->read((char*)&usernameLen, sizeof(usernameLen));
-		newPair.username = (char*)malloc(usernameLen);
-		plainTextStream->read((char*)newPair.username, usernameLen);
-
-		// Password
-		plainTextStream->read((char*)&passwordLen, sizeof(passwordLen));
-		newPair.password = (char*)malloc(passwordLen);
-		plainTextStream->read((char*)newPair.password, passwordLen);
-
-		// Backoff
-		newPair.backoffCount = 0;
-
-		// Load time
-		time(&newPair.atTime);
-
-		passInfoList->push_back(newPair);
-	}
-
-	delete plainTextStream;
-
-exit:
-	return result;
-}
-
-int clearSet(PASS_INFO_LIST* passInfoList)
-{
-	// ToDo: zero out memory
-
-	passInfoList->clear();
-
-	return -1;
-}
-
-int encrypt(char* plainTextBuf, int plainTextLen, char* cipherTextBuf, int cipherTextLen, int* resultTextLen)
-{
-	int result = 0;
-	SECStatus rv1, rv2, rv3;
-	PK11SlotInfo* slot = NULL;
-	PK11SymKey* SymKey = NULL;
-	SECItem* SecParam = NULL;
-	PK11Context* EncContext = NULL;
-	unsigned char gKey[] = KEY;
-	unsigned char gIV[] = IV;
-	PK11SymKey* key = NULL;
-	SECItem keyItem;
-	SECItem	ivItem;
-	CK_MECHANISM_TYPE cipherMech = CKM_DES_CBC_PAD;
-	int offset;
-	int tempTextLen;
-
-	// Initialize NSS
-	rv1 = NSS_NoDB_Init(".");
-	if(rv1 != SECSuccess)
-	{
-		result = PR_GetError();
-		goto exit;
-	}
-
-	// Get a key slot
-	slot = PK11_GetInternalKeySlot();
-	if(slot == NULL)
-	{
-		result = PR_GetError();
-		goto exit;
-	}
-
-	// Generate a symmetric key
-	keyItem.data = gKey;
-	keyItem.len = sizeof(gKey);
-	SymKey = PK11_ImportSymKey(slot, cipherMech, PK11_OriginUnwrap, CKA_ENCRYPT, &keyItem, NULL);
-	if(SymKey == NULL)
-	{
-		result = PR_GetError();
-		goto exit;
-	}
-
-	// Set up the PKCS11 encryption paramters
-	ivItem.data = gIV;
-	ivItem.len = sizeof(gIV);
-	SecParam = PK11_ParamFromIV(cipherMech, &ivItem);
-	if(SecParam == NULL)
-	{
-		if(SymKey != NULL)
-		{
-			PK11_FreeSymKey(SymKey);
-		}
-		result = PR_GetError();
-		goto exit;
-	}
-
-	// ToDo: check parameters
-
-
-	// Encrypt
-	tempTextLen = 0;
-	EncContext = PK11_CreateContextBySymKey(cipherMech, CKA_ENCRYPT, SymKey, SecParam);
-	rv2 = PK11_CipherOp(EncContext, (unsigned char*)cipherTextBuf, &tempTextLen, cipherTextLen, (unsigned char*)plainTextBuf, plainTextLen);
-	offset = tempTextLen;
-	rv3 = PK11_DigestFinal(EncContext, (unsigned char*)cipherTextBuf + offset, (unsigned int*)&tempTextLen, cipherTextLen - offset);
-	*resultTextLen = offset + tempTextLen;
-
-	// Clean up
-	PK11_DestroyContext(EncContext, PR_TRUE);
-	PK11_FreeSymKey(SymKey);
-	SECITEM_FreeItem(SecParam, PR_TRUE);
-
-	if((rv2 != SECSuccess) || (rv2 != SECSuccess))
-	{
-		result = PR_GetError();
-		goto exit;
-	}
-
-exit:
-	return result;
-}
-
-int decrypt(char* cipherTextBuf, int cipherTextLen, char* plainTextBuf, int plainTextLen, int* resultTextLen)
-{
-	int result = 0;
-	SECStatus rv1, rv2, rv3;
-	PK11SlotInfo* slot = NULL;
-	PK11SymKey* SymKey = NULL;
-	SECItem* SecParam = NULL;
-	PK11Context* EncContext = NULL;
-	unsigned char gKey[] = KEY;
-	unsigned char gIV[] = IV;
-	PK11SymKey* key = NULL;
-	SECItem keyItem;
-	SECItem	ivItem;
-	CK_MECHANISM_TYPE cipherMech = CKM_DES_CBC_PAD;
-	int offset;
-	int tempTextLen;
-
-	// Initialize NSS
-	rv1 = NSS_NoDB_Init(".");
-	if(rv1 != SECSuccess)
-	{
-		result = PR_GetError();
-		goto exit;
-	}
-
-	// Get a key slot
-	slot = PK11_GetInternalKeySlot();
-	if(slot == NULL)
-	{
-		result = PR_GetError();
-		goto exit;
-	}
-
-	// Generate a symmetric key
-	keyItem.data = gKey;
-	keyItem.len = sizeof(gKey);
-	SymKey = PK11_ImportSymKey(slot, cipherMech, PK11_OriginUnwrap, CKA_ENCRYPT, &keyItem, NULL);
-	if(SymKey == NULL)
-	{
-		result = PR_GetError();
-		goto exit;
-	}
-
-	// Set up the PKCS11 encryption paramters
-	ivItem.data = gIV;
-	ivItem.len = sizeof(gIV);
-	SecParam = PK11_ParamFromIV(cipherMech, &ivItem);
-	if(SecParam == NULL)
-	{
-		if(SymKey != NULL)
-		{
-			PK11_FreeSymKey(SymKey);
-		}
-		result = PR_GetError();
-		goto exit;
-	}
-
-	// ToDo: check parameters
-
-
-	// Decrypt
-	tempTextLen = 0;
-	EncContext = PK11_CreateContextBySymKey(cipherMech, CKA_DECRYPT, SymKey, SecParam);
-	rv2 = PK11_CipherOp(EncContext, (unsigned char*)plainTextBuf, &tempTextLen, plainTextLen, (unsigned char*)cipherTextBuf, cipherTextLen);
-	offset = tempTextLen;
-	rv3 = PK11_DigestFinal(EncContext, (unsigned char*)plainTextBuf + offset, (unsigned int*)&tempTextLen, plainTextLen - offset);
-	*resultTextLen = offset + tempTextLen;
-
-	// Clean up
-	PK11_DestroyContext(EncContext, PR_TRUE);
-	PK11_FreeSymKey(SymKey);
-	SECITEM_FreeItem(SecParam, PR_TRUE);
-
-	if((rv2 != SECSuccess) || (rv2 != SECSuccess))
-	{
-		result = PR_GetError();
-		goto exit;
-	}
-
-exit:
-	return result;
-}

+ 0 - 78
ldap/synctools/passwordsync/passhand.h

@@ -1,78 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
-// Created: 2-8-2005
-// Author(s): Scott Bridges
-#ifndef _PASSHAND_H_
-#define _PASSHAND_H_
-
-#include <windows.h>
-#include <time.h>
-#include <strstream>
-#include <fstream>
-#include <list>
-#include "nss.h"
-#include "pk11func.h"
-#include "prerror.h"
-
-#define PASSHAND_EVENT_NAME "passhand_event"
-
-#define PASSHAND_BUF_SIZE 256
-
-using namespace std;
-
-struct PASS_INFO
-{
-	char* username;
-	char* password;
-	int backoffCount;
-	time_t atTime;
-};
-
-typedef list<PASS_INFO> PASS_INFO_LIST;
-typedef list<PASS_INFO>::iterator PASS_INFO_LIST_ITERATOR;
-
-void timeStamp(fstream* outFile);
-
-int encrypt(char* plainTextBuf, int plainTextLen, char* cipherTextBuf, int cipherTextLen, int* resultTextLen);
-int decrypt(char* cipherTextBuf, int cipherTextLen, char* plainTextBuf, int plainTextLen, int* resultTextLen);
-
-int saveSet(PASS_INFO_LIST* passInfoList, char* filename);
-int loadSet(PASS_INFO_LIST* passInfoList, char* filename);
-int clearSet(PASS_INFO_LIST* passInfoList);
-
-#endif

+ 0 - 158
ldap/synctools/passwordsync/passhook/passhook.cpp

@@ -1,158 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
-// Created: 2-8-2005
-// Author(s): Scott Bridges
-#include <windows.h>
-#include <ntsecapi.h>
-// Work around for enum redefinition
-// Effects nssILockOp enumeration in nssilckt.h
-#define Unlock Unlock_ntsecapi
-#include "../passhand.h"
-
-#ifndef STATUS_SUCCESS
-#define STATUS_SUCCESS  ((NTSTATUS)0x00000000L)
-#endif
-
-NTSTATUS NTAPI PasswordChangeNotify(PUNICODE_STRING UserName, ULONG RelativeId, PUNICODE_STRING Password)
-{
-	char singleByteUsername[PASSHAND_BUF_SIZE];
-	char singleBytePassword[PASSHAND_BUF_SIZE];
-	HANDLE passhookEventHandle = OpenEvent(EVENT_MODIFY_STATE, FALSE, PASSHAND_EVENT_NAME);
-	PASS_INFO newPassInfo;
-	PASS_INFO_LIST passInfoList;
-	HKEY regKey;
-	DWORD type;
-	unsigned long buffSize;
-	char regBuff[PASSHAND_BUF_SIZE];
-	unsigned long logLevel;
-	fstream outLog;
-
-	RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\PasswordSync", &regKey);
-	buffSize = PASSHAND_BUF_SIZE;
-	if(RegQueryValueEx(regKey, "Log Level", NULL, &type, (unsigned char*)regBuff, &buffSize) == ERROR_SUCCESS)
-	{
-		logLevel = (unsigned long)atoi(regBuff);
-	}
-	else
-	{
-		logLevel = 0;
-	}
-	if(logLevel > 0)
-	{
-		outLog.open("passhook.log", ios::out | ios::app);
-	}
-	RegCloseKey(regKey);
-
-	_snprintf(singleByteUsername, PASSHAND_BUF_SIZE, "%S", UserName->Buffer);
-	singleByteUsername[UserName->Length / 2] = '\0';
-	_snprintf(singleBytePassword, PASSHAND_BUF_SIZE, "%S", Password->Buffer);
-	singleBytePassword[Password->Length / 2] = '\0';
-
-	if(outLog.is_open())
-	{
-		timeStamp(&outLog);
-		outLog << "user " << singleByteUsername << " password changed" << endl;
-		//outLog << "user " << singleByteUsername << " password changed to " << singleBytePassword << endl;
-	}
-
-	if(loadSet(&passInfoList, "passhook.dat") == 0)
-	{
-		if(outLog.is_open())
-		{
-			timeStamp(&outLog);
-			outLog << passInfoList.size() << " entries loaded from file" << endl;
-		}
-	}
-	else
-	{
-		if(outLog.is_open())
-		{
-			timeStamp(&outLog);
-			outLog << "failed to load entries from file" << endl;
-		}
-	}
-
-	newPassInfo.username = singleByteUsername;
-	newPassInfo.password = singleBytePassword;
-	passInfoList.push_back(newPassInfo);
-
-	if(saveSet(&passInfoList, "passhook.dat") == 0)
-	{
-		if(outLog.is_open())
-		{
-			timeStamp(&outLog);
-			outLog << passInfoList.size() << " entries saved to file" << endl;
-		}
-	}
-	else
-	{
-		if(outLog.is_open())
-		{
-			timeStamp(&outLog);
-			outLog << "failed to save entries to file" << endl;
-		}
-	}
-
-	if(passhookEventHandle == NULL)
-	{
-		if(outLog.is_open())
-		{
-			timeStamp(&outLog);
-			outLog << "can not get password sync service event handle, service not running" << endl;
-		}
-
-	}
-	else
-	{
-		SetEvent(passhookEventHandle);
-	}
-
-	outLog.close();
-
-	return STATUS_SUCCESS;
-}
-
-BOOL NTAPI PasswordFilter(PUNICODE_STRING UserName, PUNICODE_STRING FullName, PUNICODE_STRING Password, BOOL SetOperation)
-{
-	return TRUE;
-}
-
-BOOL NTAPI InitializeChangeNotify()
-{
-	return TRUE;
-}

+ 0 - 6
ldap/synctools/passwordsync/passhook/passhook.def

@@ -1,6 +0,0 @@
-
-LIBRARY passhook
-EXPORTS
-        InitializeChangeNotify
-        PasswordChangeNotify
-        PasswordFilter

+ 0 - 47
ldap/synctools/passwordsync/passhook/passhook.dep

@@ -1,47 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-# Microsoft Developer Studio Generated Dependency File, included by passhook.mak
-
-..\passhand.cpp : \
-	"..\passhand.h"\
-	
-
-.\passhook.cpp : \
-	"..\passhand.h"\
-	

+ 0 - 118
ldap/synctools/passwordsync/passhook/passhook.dsp

@@ -1,118 +0,0 @@
-# Microsoft Developer Studio Project File - Name="passhook" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=passhook - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "passhook.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "passhook.mak" CFG="passhook - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "passhook - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "passhook - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "passhook - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PASSHOOK_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PASSHOOK_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-
-!ELSEIF  "$(CFG)" == "passhook - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PASSHOOK_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PASSHOOK_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 nss3.lib libnspr4.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-
-!ENDIF 
-
-# Begin Target
-
-# Name "passhook - Win32 Release"
-# Name "passhook - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\passhand.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\passhook.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\passhook.def
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\passhand.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project

+ 0 - 245
ldap/synctools/passwordsync/passhook/passhook.mak

@@ -1,245 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-# Microsoft Developer Studio Generated NMAKE File, Based on passhook.dsp
-!IF "$(CFG)" == ""
-CFG=passhook - Win32 Debug
-!MESSAGE No configuration specified. Defaulting to passhook - Win32 Debug.
-!ENDIF 
-
-!IF "$(CFG)" != "passhook - Win32 Release" && "$(CFG)" != "passhook - Win32 Debug"
-!MESSAGE Invalid configuration "$(CFG)" specified.
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "passhook.mak" CFG="passhook - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "passhook - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "passhook - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-!ERROR An invalid configuration is specified.
-!ENDIF 
-
-!IF "$(OS)" == "Windows_NT"
-NULL=
-!ELSE 
-NULL=nul
-!ENDIF 
-
-!IF  "$(CFG)" == "passhook - Win32 Release"
-
-OUTDIR=$(OBJDEST)\passhook
-INTDIR=$(OBJDEST)\passhook
-# Begin Custom Macros
-OutDir=$(OBJDEST)\passhook
-# End Custom Macros
-
-ALL : "$(OUTDIR)\passhook.dll"
-
-
-CLEAN :
-	-@erase "$(INTDIR)\passhand.obj"
-	-@erase "$(INTDIR)\passhook.obj"
-	-@erase "$(INTDIR)\vc60.idb"
-	-@erase "$(OUTDIR)\passhook.dll"
-	-@erase "$(OUTDIR)\passhook.exp"
-	-@erase "$(OUTDIR)\passhook.lib"
-
-"$(OUTDIR)" :
-    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP=cl.exe
-CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PASSHOOK_EXPORTS" /Fp"$(INTDIR)\passhook.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
-
-.c{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cpp{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cxx{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.c{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cpp{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cxx{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-MTL=midl.exe
-MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 
-RSC=rc.exe
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\passhook.bsc" 
-BSC32_SBRS= \
-	
-LINK32=link.exe
-LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\passhook.pdb" /machine:I386 /def:".\passhook.def" /out:"$(OUTDIR)\passhook.dll" /implib:"$(OUTDIR)\passhook.lib" 
-DEF_FILE= \
-	".\passhook.def"
-LINK32_OBJS= \
-	"$(INTDIR)\passhand.obj" \
-	"$(INTDIR)\passhook.obj"
-
-"$(OUTDIR)\passhook.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
-    $(LINK32) @<<
-  $(LINK32_FLAGS) $(LINK32_OBJS)
-<<
-
-!ELSEIF  "$(CFG)" == "passhook - Win32 Debug"
-
-OUTDIR=$(OBJDEST)\passhook
-INTDIR=$(OBJDEST)\passhook
-# Begin Custom Macros
-OutDir=$(OBJDEST)\passhook
-# End Custom Macros
-
-ALL : "$(OUTDIR)\passhook.dll"
-
-
-CLEAN :
-	-@erase "$(INTDIR)\passhand.obj"
-	-@erase "$(INTDIR)\passhook.obj"
-	-@erase "$(INTDIR)\vc60.idb"
-	-@erase "$(INTDIR)\vc60.pdb"
-	-@erase "$(OUTDIR)\passhook.dll"
-	-@erase "$(OUTDIR)\passhook.exp"
-	-@erase "$(OUTDIR)\passhook.ilk"
-	-@erase "$(OUTDIR)\passhook.lib"
-	-@erase "$(OUTDIR)\passhook.pdb"
-
-"$(OUTDIR)" :
-    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP=cl.exe
-CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PASSHOOK_EXPORTS" /Fp"$(INTDIR)\passhook.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
-
-.c{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cpp{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cxx{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.c{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cpp{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cxx{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-MTL=midl.exe
-MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 
-RSC=rc.exe
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\passhook.bsc" 
-BSC32_SBRS= \
-	
-LINK32=link.exe
-LINK32_FLAGS=nss3.lib libnspr4.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\passhook.pdb" /debug /machine:I386 /def:".\passhook.def" /out:"$(OUTDIR)\passhook.dll" /implib:"$(OUTDIR)\passhook.lib" /pdbtype:sept 
-DEF_FILE= \
-	".\passhook.def"
-LINK32_OBJS= \
-	"$(INTDIR)\passhand.obj" \
-	"$(INTDIR)\passhook.obj"
-
-"$(OUTDIR)\passhook.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
-    $(LINK32) @<<
-  $(LINK32_FLAGS) $(LINK32_OBJS)
-<<
-
-!ENDIF 
-
-
-!IF "$(NO_EXTERNAL_DEPS)" != "1"
-!IF EXISTS("passhook.dep")
-!INCLUDE "passhook.dep"
-!ELSE 
-!MESSAGE Warning: cannot find "passhook.dep"
-!ENDIF 
-!ENDIF 
-
-
-!IF "$(CFG)" == "passhook - Win32 Release" || "$(CFG)" == "passhook - Win32 Debug"
-SOURCE=..\passhand.cpp
-
-"$(INTDIR)\passhand.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=.\passhook.cpp
-
-"$(INTDIR)\passhook.obj" : $(SOURCE) "$(INTDIR)"
-
-
-
-!ENDIF 
-

+ 0 - 41
ldap/synctools/passwordsync/passsync.dsw

@@ -1,41 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "passhook"=.\passhook\passhook.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "passsync"=.\passsync\passsync.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-

BIN
ldap/synctools/passwordsync/passsync/MSG00001.bin


+ 0 - 70
ldap/synctools/passwordsync/passsync/dssynch.h

@@ -1,70 +0,0 @@
-/**
-/** BEGIN COPYRIGHT BLOCK
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * END COPYRIGHT BLOCK **/
-/***********************************************************************
-**
-**
-** NAME
-**  DSSynch.h
-**
-** DESCRIPTION
-**  Exported name of Directory Synchronization Service
-**
-** AUTHOR
-**   Rob Weltman <[email protected]>
-**
-***********************************************************************/
-
-#ifndef _DSSYNCH_H_
-#define _DSSYNCH_H_
-
-#define PLUGIN_STATE_UNKNOWN	0
-#define PLUGIN_STATE_DISABLED	1
-#define PLUGIN_STATE_ENABLED	2
-
-#if defined(_UNICODE)
-#define DS_SERVICE_NAME _T("Netscape Directory Synchronization Service")
-#else
-#define DS_SERVICE_NAME "Netscape Directory Synchronization Service"
-#endif
-#define DS_SERVICE_NAME_UNI L"Netscape Directory Synchronization Service"
-#define DS_EVENT_NAME TEXT("Netscape DirSynch")
-#define DSS_TERM_EVENT TEXT("NS_DSSYNCH")
-#define SYNCH_VERSION "1.0.1"
-
-#endif // _DSSYNCH_H_

+ 0 - 641
ldap/synctools/passwordsync/passsync/dssynchmsg.h

@@ -1,641 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
-//
-//  Values are 32 bit values layed out as follows:
-//
-//   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
-//   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
-//  +---+-+-+-----------------------+-------------------------------+
-//  |Sev|C|R|     Facility          |               Code            |
-//  +---+-+-+-----------------------+-------------------------------+
-//
-//  where
-//
-//      Sev - is the severity code
-//
-//          00 - Success
-//          01 - Informational
-//          10 - Warning
-//          11 - Error
-//
-//      C - is the Customer code flag
-//
-//      R - is a reserved bit
-//
-//      Facility - is the facility code
-//
-//      Code - is the facility's status code
-//
-//
-// Define the facility codes
-//
-
-
-//
-// Define the severity codes
-//
-
-
-//
-// MessageId: EVMSG_INSTALLED
-//
-// MessageText:
-//
-//  The %1 service was installed.
-//
-#define EVMSG_INSTALLED                  0x00000064L
-
-//
-// MessageId: EVMSG_REMOVED
-//
-// MessageText:
-//
-//  The %1 service was removed.
-//
-#define EVMSG_REMOVED                    0x00000065L
-
-//
-// MessageId: EVMSG_NOTREMOVED
-//
-// MessageText:
-//
-//  The %1 service could not be removed.
-//
-#define EVMSG_NOTREMOVED                 0x00000066L
-
-//
-// MessageId: EVMSG_CTRLHANDLERNOTINSTALLED
-//
-// MessageText:
-//
-//  The control handler could not be installed.
-//
-#define EVMSG_CTRLHANDLERNOTINSTALLED    0x00000067L
-
-//
-// MessageId: EVMSG_FAILEDINIT
-//
-// MessageText:
-//
-//  The initialization process failed.
-//
-#define EVMSG_FAILEDINIT                 0x00000068L
-
-//
-// MessageId: EVMSG_STARTED
-//
-// MessageText:
-//
-//  The service was started.
-//
-#define EVMSG_STARTED                    0x00000069L
-
-//
-// MessageId: EVMSG_RESTART
-//
-// MessageText:
-//
-//  The service was restarted.
-//
-#define EVMSG_RESTART                    0x0000006AL
-
-//
-// MessageId: EVMSG_BADREQUEST
-//
-// MessageText:
-//
-//  The service received an unsupported request.
-//
-#define EVMSG_BADREQUEST                 0x0000006BL
-
-//
-// MessageId: EVMSG_SECURITYREGISTER
-//
-// MessageText:
-//
-//  The service has registered for security events.
-//
-#define EVMSG_SECURITYREGISTER           0x0000006CL
-
-//
-// MessageId: EVMSG_FAILEDNOTIFY
-//
-// MessageText:
-//
-//  The service failed on waiting for security event.
-//
-#define EVMSG_FAILEDNOTIFY               0x0000006DL
-
-//
-// MessageId: EVMSG_SECURITYNOTIFY
-//
-// MessageText:
-//
-//  There was a security event.
-//
-#define EVMSG_SECURITYNOTIFY             0x0000006EL
-
-//
-// MessageId: EVMSG_FAILEDSECURITYNOTIFY
-//
-// MessageText:
-//
-//  Failure waiting for security event involving Users.
-//
-#define EVMSG_FAILEDSECURITYNOTIFY       0x0000006FL
-
-//
-// MessageId: EVMSG_SECURITYAUDITINGENABLED
-//
-// MessageText:
-//
-//  Auditing of User and Group Management events has been enabled.
-//
-#define EVMSG_SECURITYAUDITINGENABLED    0x00000070L
-
-//
-// MessageId: EVMSG_SECURITYAUDITINGDISABLED
-//
-// MessageText:
-//
-//  Auditing of User and Group Management events has been turned off.
-//  Notification-based monitoring of user changes has terminated.
-//
-#define EVMSG_SECURITYAUDITINGDISABLED   0x00000071L
-
-//
-// MessageId: EVMSG_FAILEDBINDDS
-//
-// MessageText:
-//
-//  Failed to bind to Directory Service on %1 at %2.
-//
-#define EVMSG_FAILEDBINDDS               0x00000072L
-
-//
-// MessageId: EVMSG_BINDDS
-//
-// MessageText:
-//
-//  Connected to Directory Service on %1 at %2.
-//
-#define EVMSG_BINDDS                     0x00000073L
-
-//
-// MessageId: EVMSG_FAILEDGETNTUSERS
-//
-// MessageText:
-//
-//  Failed to get user information from NT SAM.
-//
-#define EVMSG_FAILEDGETNTUSERS           0x00000074L
-
-//
-// MessageId: EVMSG_FAILEDGETDSUSERS
-//
-// MessageText:
-//
-//  Failed to get user information from Directory Server.
-//
-#define EVMSG_FAILEDGETDSUSERS           0x00000075L
-
-//
-// MessageId: EVMSG_FAILEDSETDSTIMESTAMPS
-//
-// MessageText:
-//
-//  Failed to set initial time stamps of NT users on Directory Server.
-//
-#define EVMSG_FAILEDSETDSTIMESTAMPS      0x00000076L
-
-//
-// MessageId: EVMSG_FAILEDGETNTUSERINFO
-//
-// MessageText:
-//
-//  Failed to get user information for <%1> from NT.
-//
-#define EVMSG_FAILEDGETNTUSERINFO        0x00000077L
-
-//
-// MessageId: EVMSG_FAILEDADDDSUSER
-//
-// MessageText:
-//
-//  Failed to add user <%1> to Directory Server.
-//
-#define EVMSG_FAILEDADDDSUSER            0x00000078L
-
-//
-// MessageId: EVMSG_FAILEDMODIFYDSUSER
-//
-// MessageText:
-//
-//  Failed to modify user <%1> on Directory Server.
-//
-#define EVMSG_FAILEDMODIFYDSUSER         0x00000079L
-
-//
-// MessageId: EVMSG_FAILEDDELETEDSUSER
-//
-// MessageText:
-//
-//  Failed to delete user <%1> on Directory Server.
-//
-#define EVMSG_FAILEDDELETEDSUSER         0x0000007AL
-
-//
-// MessageId: EVMSG_FAILEDADDNTUSER
-//
-// MessageText:
-//
-//  Failed to add user <%1> to NT.
-//
-#define EVMSG_FAILEDADDNTUSER            0x0000007BL
-
-//
-// MessageId: EVMSG_FAILEDMODIFYNTUSER
-//
-// MessageText:
-//
-//  Failed to modify user <%1> in NT.
-//
-#define EVMSG_FAILEDMODIFYNTUSER         0x0000007CL
-
-//
-// MessageId: EVMSG_FAILEDDELETENTUSER
-//
-// MessageText:
-//
-//  Failed to delete user <%1> in NT.
-//
-#define EVMSG_FAILEDDELETENTUSER         0x0000007DL
-
-//
-// MessageId: EVMSG_FAILEDREADEVENTLOG
-//
-// MessageText:
-//
-//  Failed reading Security Event Log.
-//
-#define EVMSG_FAILEDREADEVENTLOG         0x0000007EL
-
-//
-// MessageId: EVMSG_FAILEDCOMMANDOPEN
-//
-// MessageText:
-//
-//  Failed opening command socket at port %1.
-//
-#define EVMSG_FAILEDCOMMANDOPEN          0x0000007FL
-
-//
-// MessageId: EVMSG_FAILEDCOMMANDREAD
-//
-// MessageText:
-//
-//  Failed reading from command socket.
-//
-#define EVMSG_FAILEDCOMMANDREAD          0x00000080L
-
-//
-// MessageId: EVMSG_FAILEDCOMMANDWRITE
-//
-// MessageText:
-//
-//  Failed writing to command socket.
-//
-#define EVMSG_FAILEDCOMMANDWRITE         0x00000081L
-
-//
-// MessageId: EVMSG_FAILEDGETKEY
-//
-// MessageText:
-//
-//  Failed to get registry key <%1>.
-//
-#define EVMSG_FAILEDGETKEY               0x00000082L
-
-//
-// MessageId: EVMSG_FAILEDREADREGVALUE
-//
-// MessageText:
-//
-//  Failed to read registry value <%1>.
-//
-#define EVMSG_FAILEDREADREGVALUE         0x00000083L
-
-//
-// MessageId: EVMSG_FAILEDWRITEREGVALUE
-//
-// MessageText:
-//
-//  Failed to write registry value <%1>.
-//
-#define EVMSG_FAILEDWRITEREGVALUE        0x00000084L
-
-//
-// MessageId: EVMSG_FAILEDSAVESTATUS
-//
-// MessageText:
-//
-//  Failed to save status to registry.
-//
-#define EVMSG_FAILEDSAVESTATUS           0x00000085L
-
-//
-// MessageId: EVMSG_UserNotFound
-//
-// MessageText:
-//
-//  The user name could not be found.
-//
-#define EVMSG_UserNotFound               0x00000086L
-
-//
-// MessageId: EVMSG_UserExists
-//
-// MessageText:
-//
-//  The user account already exists.
-//
-#define EVMSG_UserExists                 0x00000087L
-
-//
-// MessageId: EVMSG_PasswordTooShort
-//
-// MessageText:
-//
-//  The password is shorter than required.
-//
-#define EVMSG_PasswordTooShort           0x00000088L
-
-//
-// MessageId: EVMSG_NameTooLong
-//
-// MessageText:
-//
-//  The user name %1 is too long.
-//
-#define EVMSG_NameTooLong                0x00000089L
-
-//
-// MessageId: EVMSG_PasswordHistConflict
-//
-// MessageText:
-//
-//  This password cannot be used now.
-//
-#define EVMSG_PasswordHistConflict       0x0000008AL
-
-//
-// MessageId: EVMSG_InvalidDatabase
-//
-// MessageText:
-//
-//  The security database is corrupted.
-//
-#define EVMSG_InvalidDatabase            0x0000008BL
-
-//
-// MessageId: EVMSG_NetworkError
-//
-// MessageText:
-//
-//  A general network error occurred.
-//
-#define EVMSG_NetworkError               0x0000008CL
-
-//
-// MessageId: EVMSG_BadUsername
-//
-// MessageText:
-//
-//  The user name or group name parameter is invalid.
-//
-#define EVMSG_BadUsername                0x0000008DL
-
-//
-// MessageId: EVMSG_UserUnkownError
-//
-// MessageText:
-//
-//  Unexpected error - number %1.
-//
-#define EVMSG_UserUnkownError            0x0000008EL
-
-//
-// MessageId: EVMSG_DEBUG
-//
-// MessageText:
-//
-//  Debug: %1
-//
-#define EVMSG_DEBUG                      0x0000008FL
-
-//
-// MessageId: EVMSG_STOPPED
-//
-// MessageText:
-//
-//  The service was stopped.
-//
-#define EVMSG_STOPPED                    0x00000090L
-
-//
-// MessageId: EVMSG_UIDNOTDUPLICATED
-//
-// MessageText:
-//
-//  The UID "%1" already exists in the subtree and has not been duplicated.
-//
-#define EVMSG_UIDNOTDUPLICATED           0x00000091L
-
-//
-// MessageId: EVMSG_UIDDUPLICATED
-//
-// MessageText:
-//
-//  The UID "%1" already exists in the subtree but HAS been duplicated because the user RDN component requires it.  Further action may need to be taken if there are systems using the Directory Server which require unique UIDs.
-//
-#define EVMSG_UIDDUPLICATED              0x00000092L
-
-//
-// MessageId: EVMSG_FAILEDCONTROLOPEN
-//
-// MessageText:
-//
-//  Failed opening control message socket at port %1.
-//
-#define EVMSG_FAILEDCONTROLOPEN          0x00000093L
-
-//
-// MessageId: EVMSG_FAILEDPREOPOPEN
-//
-// MessageText:
-//
-//  Failed opening preoperation processing socket at port %1.
-//
-#define EVMSG_FAILEDPREOPOPEN            0x00000094L
-
-//
-// MessageId: EVMSG_FAILEDPOSTOPEN
-//
-// MessageText:
-//
-//  Failed opening postoperation processing socket at port %1.
-//
-#define EVMSG_FAILEDPOSTOPEN             0x00000095L
-
-//
-// MessageId: EVMSG_FAILEDCONTROLWRITE
-//
-// MessageText:
-//
-//  Failed writing to control message socket at port %1.
-//
-#define EVMSG_FAILEDCONTROLWRITE         0x00000096L
-
-//
-// MessageId: EVMSG_FAILEDPREOPWRITE
-//
-// MessageText:
-//
-//  Failed writing to preoperation processing socket at port %1.
-//
-#define EVMSG_FAILEDPREOPWRITE           0x00000097L
-
-//
-// MessageId: EVMSG_FAILEDPOSTOPWRITE
-//
-// MessageText:
-//
-//  Failed writing to postoperation processing socket at port %1.
-//
-#define EVMSG_FAILEDPOSTOPWRITE          0x00000098L
-
-//
-// MessageId: EVMSG_FAILEDCONTROLREAD
-//
-// MessageText:
-//
-//  Failed reading from control message socket at port %1.
-//
-#define EVMSG_FAILEDCONTROLREAD          0x00000099L
-
-//
-// MessageId: EVMSG_FAILEDPREOPREAD
-//
-// MessageText:
-//
-//  Failed reading from preoperation processing socket at port %1.
-//
-#define EVMSG_FAILEDPREOPREAD            0x0000009AL
-
-//
-// MessageId: EVMSG_FAILEDPOSTOPREAD
-//
-// MessageText:
-//
-//  Failed reading from postoperation processing socket at port %1.
-//
-#define EVMSG_FAILEDPOSTOPREAD           0x0000009BL
-
-//
-// MessageId: EVMSG_FAILEDCONTROLBADBASE
-//
-// MessageText:
-//
-//  The subtree "%1" is invalid.
-//
-#define EVMSG_FAILEDCONTROLBADBASE       0x0000009CL
-
-//
-// MessageId: EVMSG_FAILEDGETNTGROUPINFO
-//
-// MessageText:
-//
-//  Failed to get group information for <%1> from NT.
-//
-#define EVMSG_FAILEDGETNTGROUPINFO       0x0000009DL
-
-//
-// MessageId: EVMSG_FAILEDADDDSGROUP
-//
-// MessageText:
-//
-//  Failed to add group <%1> to Directory Server.
-//
-#define EVMSG_FAILEDADDDSGROUP           0x0000009EL
-
-//
-// MessageId: EVMSG_FAILEDMODIFYDSGROUP
-//
-// MessageText:
-//
-//  Failed to modify group <%1> on Directory Server.
-//
-#define EVMSG_FAILEDMODIFYDSGROUP        0x0000009FL
-
-//
-// MessageId: EVMSG_FAILEDDELETEDSGROUP
-//
-// MessageText:
-//
-//  Failed to delete group <%1> on Directory Server.
-//
-#define EVMSG_FAILEDDELETEDSGROUP        0x000000A0L
-
-//
-// MessageId: EVMSG_FAILEDCONTROLDUPTREE
-//
-// MessageText:
-//
-//  Synch Service control connection rejected by Directory Server, duplicate users base <%1> or groups base <%2>.
-//
-#define EVMSG_FAILEDCONTROLDUPTREE       0x000000A1L
-
-//
-// MessageId: EVMSG_FAILEDCONTROLSETUP
-//
-// MessageText:
-//
-//  Synch Service control connection rejected by Directory Server, users base <%1>, groups base <%2>.
-//
-#define EVMSG_FAILEDCONTROLSETUP         0x000000A2L
-

+ 0 - 379
ldap/synctools/passwordsync/passsync/dssynchmsg.mc

@@ -1,379 +0,0 @@
-
-MessageId=100
-SymbolicName=EVMSG_INSTALLED
-Language=English
-The %1 service was installed.
-.
-
-MessageId=
-SymbolicName=EVMSG_REMOVED
-Language=English
-The %1 service was removed.
-.
-
-MessageId=
-SymbolicName=EVMSG_NOTREMOVED
-Language=English
-The %1 service could not be removed.
-.
-
-MessageId=
-SymbolicName=EVMSG_CTRLHANDLERNOTINSTALLED
-Language=English
-The control handler could not be installed.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDINIT
-Language=English
-The initialization process failed.
-.
-
-MessageId=
-SymbolicName=EVMSG_STARTED
-Language=English
-The service was started.
-.
-
-MessageId=
-SymbolicName=EVMSG_RESTART
-Language=English
-The service was restarted.
-.
-
-MessageId=
-SymbolicName=EVMSG_BADREQUEST
-Language=English
-The service received an unsupported request.
-.
-
-MessageId=
-SymbolicName=EVMSG_SECURITYREGISTER
-Language=English
-The service has registered for security events.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDNOTIFY
-Language=English
-The service failed on waiting for security event.
-.
-
-MessageId=
-SymbolicName=EVMSG_SECURITYNOTIFY
-Language=English
-There was a security event.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDSECURITYNOTIFY
-Language=English
-Failure waiting for security event involving Users.
-.
-
-MessageId=
-SymbolicName=EVMSG_SECURITYAUDITINGENABLED
-Language=English
-Auditing of User and Group Management events has been enabled.
-.
-
-MessageId=
-SymbolicName=EVMSG_SECURITYAUDITINGDISABLED
-Language=English
-Auditing of User and Group Management events has been turned off.
-Notification-based monitoring of user changes has terminated.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDBINDDS
-Language=English
-Failed to bind to Directory Service on %1 at %2.
-.
-
-MessageId=
-SymbolicName=EVMSG_BINDDS
-Language=English
-Connected to Directory Service on %1 at %2.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDGETNTUSERS
-Language=English
-Failed to get user information from NT SAM.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDGETDSUSERS
-Language=English
-Failed to get user information from Directory Server.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDSETDSTIMESTAMPS
-Language=English
-Failed to set initial time stamps of NT users on Directory Server.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDGETNTUSERINFO
-Language=English
-Failed to get user information for <%1> from NT.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDADDDSUSER
-Language=English
-Failed to add user <%1> to Directory Server.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDMODIFYDSUSER
-Language=English
-Failed to modify user <%1> on Directory Server.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDDELETEDSUSER
-Language=English
-Failed to delete user <%1> on Directory Server.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDADDNTUSER
-Language=English
-Failed to add user <%1> to NT.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDMODIFYNTUSER
-Language=English
-Failed to modify user <%1> in NT.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDDELETENTUSER
-Language=English
-Failed to delete user <%1> in NT.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDREADEVENTLOG
-Language=English
-Failed reading Security Event Log.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDCOMMANDOPEN
-Language=English
-Failed opening command socket at port %1.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDCOMMANDREAD
-Language=English
-Failed reading from command socket.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDCOMMANDWRITE
-Language=English
-Failed writing to command socket.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDGETKEY
-Language=English
-Failed to get registry key <%1>.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDREADREGVALUE
-Language=English
-Failed to read registry value <%1>.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDWRITEREGVALUE
-Language=English
-Failed to write registry value <%1>.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDSAVESTATUS
-Language=English
-Failed to save status to registry.
-.
-
-MessageId=
-SymbolicName=EVMSG_UserNotFound
-Language=English
-The user name could not be found.
-.
-
-MessageId=
-SymbolicName=EVMSG_UserExists
-Language=English
-The user account already exists.
-.
-
-MessageId=
-SymbolicName=EVMSG_PasswordTooShort
-Language=English
-The password is shorter than required.
-.
-
-MessageId=
-SymbolicName=EVMSG_NameTooLong
-Language=English
-The user name %1 is too long.
-.
-
-MessageId=
-SymbolicName=EVMSG_PasswordHistConflict
-Language=English
-This password cannot be used now.
-.
-
-MessageId=
-SymbolicName=EVMSG_InvalidDatabase
-Language=English
-The security database is corrupted.
-.
-
-MessageId=
-SymbolicName=EVMSG_NetworkError
-Language=English
-A general network error occurred.
-.
-
-MessageId=
-SymbolicName=EVMSG_BadUsername
-Language=English
-The user name or group name parameter is invalid.
-.
-
-MessageId=
-SymbolicName=EVMSG_UserUnkownError
-Language=English
-Unexpected error - number %1.
-.
-
-MessageId=
-SymbolicName=EVMSG_DEBUG
-Language=English
-Debug: %1
-.
-
-MessageId=
-SymbolicName=EVMSG_STOPPED
-Language=English
-The service was stopped.
-.
-
-MessageId=
-SymbolicName=EVMSG_UIDNOTDUPLICATED
-Language=English
-The UID "%1" already exists in the subtree and has not been duplicated.
-.
-
-MessageId=
-SymbolicName=EVMSG_UIDDUPLICATED
-Language=English
-The UID "%1" already exists in the subtree but HAS been duplicated because the user RDN component requires it.  Further action may need to be taken if there are systems using the Directory Server which require unique UIDs.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDCONTROLOPEN
-Language=English
-Failed opening control message socket at port %1.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDPREOPOPEN
-Language=English
-Failed opening preoperation processing socket at port %1.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDPOSTOPEN
-Language=English
-Failed opening postoperation processing socket at port %1.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDCONTROLWRITE
-Language=English
-Failed writing to control message socket at port %1.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDPREOPWRITE
-Language=English
-Failed writing to preoperation processing socket at port %1.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDPOSTOPWRITE
-Language=English
-Failed writing to postoperation processing socket at port %1.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDCONTROLREAD
-Language=English
-Failed reading from control message socket at port %1.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDPREOPREAD
-Language=English
-Failed reading from preoperation processing socket at port %1.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDPOSTOPREAD
-Language=English
-Failed reading from postoperation processing socket at port %1.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDCONTROLBADBASE
-Language=English
-The subtree "%1" is invalid.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDGETNTGROUPINFO
-Language=English
-Failed to get group information for <%1> from NT.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDADDDSGROUP
-Language=English
-Failed to add group <%1> to Directory Server.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDMODIFYDSGROUP
-Language=English
-Failed to modify group <%1> on Directory Server.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDDELETEDSGROUP
-Language=English
-Failed to delete group <%1> on Directory Server.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDCONTROLDUPTREE
-Language=English
-Synch Service control connection rejected by Directory Server, duplicate users base <%1> or groups base <%2>.
-.
-
-MessageId=
-SymbolicName=EVMSG_FAILEDCONTROLSETUP
-Language=English
-Synch Service control connection rejected by Directory Server, users base <%1>, groups base <%2>.
-.

+ 0 - 2
ldap/synctools/passwordsync/passsync/dssynchmsg.rc

@@ -1,2 +0,0 @@
-LANGUAGE 0x9,0x1
-1 11 MSG00001.bin

+ 0 - 613
ldap/synctools/passwordsync/passsync/ntservice.cpp

@@ -1,613 +0,0 @@
-/***********************************************************************
-**
-/** BEGIN COPYRIGHT BLOCK
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * END COPYRIGHT BLOCK **/
-/*
-**
-** NAME
-**  NTService.cpp
-**
-** DESCRIPTION
-**  Base class for NT Service app
-**
-** AUTHOR
-**   Rob Weltman <[email protected]>
-**
-***********************************************************************/
-
-/***********************************************************************
-** Includes
-***********************************************************************/
-// Removed: 2-8-2005
-//#include "sysplat.h"
-// Added: 2-8-2005
-#include <stdio.h>
-// End Change
-
-#include <tchar.h>
-#include <time.h>
-#include "NTService.h"
-// Remove: 2-8-2005
-//#include "uniutil.h"
-// End Change
-#include "dssynchmsg.h"
-
-// static variables
-CNTService* CNTService::m_pThis = NULL;
-
-CNTService::CNTService(const TCHAR* szServiceName)
-{
-    // copy the address of the current object so we can access it from
-    // the static member callback functions. 
-    // WARNING: This limits the application to only one CNTService object. 
-    m_pThis = this;
-    
-    // Set the default service name and version
-    _tcsncpy(m_szServiceName, szServiceName, sizeof(m_szServiceName)-1);
-    m_iMajorVersion = 1;
-    m_iMinorVersion = 0;
-    m_hEventSource = NULL;
-
-    // set up the initial service status 
-    m_hServiceStatus = NULL;
-    m_Status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
-    m_Status.dwCurrentState = SERVICE_STOPPED;
-    m_Status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
-    m_Status.dwWin32ExitCode = 0;
-    m_Status.dwServiceSpecificExitCode = 0;
-    m_Status.dwCheckPoint = 0;
-    m_Status.dwWaitHint = 0;
-    m_bIsRunning = FALSE;
-}
-
-CNTService::~CNTService()
-{
-    DebugMsg(_T("CNTService::~CNTService()"));
-    if (m_hEventSource) {
-        ::DeregisterEventSource(m_hEventSource);
-		m_hEventSource = NULL;
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////
-// Default command line argument parsing
-
-// Returns TRUE if it found an arg it recognised, FALSE if not
-// Note: processing some arguments causes output to stdout to be generated.
-BOOL CNTService::ParseStandardArgs(int argc, char* argv[])
-{
-    // See if we have any command line args we recognise
-    if (argc <= 1) return FALSE;
-
-    if (_stricmp(argv[1], "-v") == 0) {
-
-        // Spit out version info
-        _tprintf(_T("%s Version %d.%d\n"),
-               m_szServiceName, m_iMajorVersion, m_iMinorVersion);
-        _tprintf(_T("The service is %s installed\n"),
-               IsInstalled() ? _T("currently") : _T("not"));
-        return TRUE; // say we processed the argument
-
-    } else if (_stricmp(argv[1], "-i") == 0) {
-
-        // Request to install.
-        if (IsInstalled()) {
-            _tprintf(_T("%s is already installed\n"), m_szServiceName);
-        } else {
-            // Try and install the copy that's running
-            if (Install()) {
-                _tprintf(_T("%s installed\n"), m_szServiceName);
-            } else {
-                _tprintf(_T("%s failed to install. Error %d\n"),
-					m_szServiceName, GetLastError());
-            }
-        }
-        return TRUE; // say we processed the argument
-
-    } else if (_stricmp(argv[1], "-u") == 0) {
-
-        // Request to uninstall.
-        if (!IsInstalled()) {
-            _tprintf(_T("%s is not installed\n"), m_szServiceName);
-        } else {
-            // Try and remove the copy that's installed
-            if (Uninstall()) {
-                // Get the executable file path
-                TCHAR szFilePath[_MAX_PATH];
-                ::GetModuleFileName(NULL, szFilePath, sizeof(szFilePath));
-                _tprintf(_T("%s removed. (You must delete the file (%s) yourself.)\n"),
-                       m_szServiceName, szFilePath);
-            } else {
-                _tprintf(_T("Could not remove %s. Error %d\n"),
-					m_szServiceName, GetLastError());
-            }
-        }
-        return TRUE; // say we processed the argument
-    
-    }
-         
-    // Don't recognise the args
-    return FALSE;
-}
-
-////////////////////////////////////////////////////////////////////////////////////////
-// Install/uninstall routines
-
-// Test if the service is currently installed
-BOOL CNTService::IsInstalled()
-{
-    BOOL bResult = FALSE;
-
-    // Open the Service Control Manager
-    SC_HANDLE hSCM = ::OpenSCManager(NULL, // local machine
-                                     NULL, // ServicesActive database
-                                     SC_MANAGER_ALL_ACCESS); // full access
-    if (hSCM) {
-
-        // Try to open the service
-        SC_HANDLE hService = ::OpenService(hSCM,
-                                           m_szServiceName,
-                                           SERVICE_QUERY_CONFIG);
-        if (hService) {
-            bResult = TRUE;
-            ::CloseServiceHandle(hService);
-        }
-
-        ::CloseServiceHandle(hSCM);
-    }
-    
-    return bResult;
-}
-
-BOOL CNTService::Install()
-{
-    // Open the Service Control Manager
-    SC_HANDLE hSCM = ::OpenSCManager(NULL, // local machine
-                                     NULL, // ServicesActive database
-                                     SC_MANAGER_ALL_ACCESS); // full access
-    if (!hSCM) return FALSE;
-
-    // Get the executable file path
-    TCHAR szFilePath[_MAX_PATH];
-    ::GetModuleFileName(NULL, szFilePath, sizeof(szFilePath)/sizeof(*szFilePath));
-
-    // Create the service
-    SC_HANDLE hService = ::CreateService(hSCM,
-                                         m_szServiceName,
-                                         m_szServiceName,
-                                         SERVICE_ALL_ACCESS,
-                                         SERVICE_WIN32_OWN_PROCESS,
-                                         SERVICE_DEMAND_START,        // start condition
-                                         SERVICE_ERROR_NORMAL,
-                                         szFilePath,
-                                         NULL,
-                                         NULL,
-                                         NULL,
-                                         NULL,
-                                         NULL);
-    if (!hService) {
-        ::CloseServiceHandle(hSCM);
-        return FALSE;
-    }
-
-    // make registry entries to support logging messages
-    // Add the source name as a subkey under the Application
-    // key in the EventLog service portion of the registry.
-    TCHAR szKey[256];
-    HKEY hKey = NULL;
-    _tcscpy(szKey, _T("SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\"));
-    _tcscat(szKey, GetEventName());
-    if (::RegCreateKey(HKEY_LOCAL_MACHINE, szKey, &hKey) != ERROR_SUCCESS) {
-        ::CloseServiceHandle(hService);
-        ::CloseServiceHandle(hSCM);
-        return FALSE;
-    }
-
-    // Add the Event ID message-file name to the 'EventMessageFile' subkey.
-    ::RegSetValueEx(hKey,
-                    _T("EventMessageFile"),
-                    0,
-                    REG_EXPAND_SZ, 
-                    (CONST BYTE*)szFilePath,
-                    (_tcslen(szFilePath) + 1)*sizeof(*szFilePath));     
-
-    // Set the supported types flags.
-    DWORD dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE;
-    ::RegSetValueEx(hKey,
-                    _T("TypesSupported"),
-                    0,
-                    REG_DWORD,
-                    (CONST BYTE*)&dwData,
-                     sizeof(DWORD));
-    ::RegCloseKey(hKey);
-
-    LogEvent(EVENTLOG_INFORMATION_TYPE, EVMSG_INSTALLED, m_szServiceName);
-
-    // tidy up
-    ::CloseServiceHandle(hService);
-    ::CloseServiceHandle(hSCM);
-    return TRUE;
-}
-
-BOOL CNTService::Uninstall()
-{
-    // Open the Service Control Manager
-    SC_HANDLE hSCM = ::OpenSCManager(NULL, // local machine
-                                     NULL, // ServicesActive database
-                                     SC_MANAGER_ALL_ACCESS); // full access
-    if (!hSCM) return FALSE;
-
-    BOOL bResult = FALSE;
-    SC_HANDLE hService = ::OpenService(hSCM,
-                                       m_szServiceName,
-                                       DELETE);
-    if (hService) {
-		// Stop it if it is running
-		SERVICE_STATUS serviceStatus;
-		BOOL bStop = ControlService( hService, SERVICE_CONTROL_STOP,
-					&serviceStatus );
-        if (::DeleteService(hService)) {
-            LogEvent(EVENTLOG_INFORMATION_TYPE, EVMSG_REMOVED, m_szServiceName);
-            bResult = TRUE;
-        } else {
-            LogEvent(EVENTLOG_ERROR_TYPE, EVMSG_NOTREMOVED, m_szServiceName);
-        }
-        ::CloseServiceHandle(hService);
-    }
-    
-    ::CloseServiceHandle(hSCM);
-    return bResult;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////
-// Logging functions
-
-// This function makes an entry into the application event log
-void CNTService::LogEvent(WORD wType, DWORD dwID,
-                          const wchar_t* pszS1,
-                          const wchar_t* pszS2,
-                          const wchar_t* pszS3)
-{
-#ifndef _DEBUG
-	if ( EVMSG_DEBUG == dwID )
-		return;
-#endif
-    const wchar_t* ps[3];
-    ps[0] = pszS1;
-    ps[1] = pszS2;
-    ps[2] = pszS3;
-
-    int iStr = 0;
-    for (int i = 0; i < 3; i++) {
-        if (ps[i] != NULL) iStr++;
-    }
-        
-    // Check the event source has been registered and if
-    // not then register it now
-    if (!m_hEventSource) {
-		TCHAR *name = GetEventName();
-// Modification: 2-8-2005
-//        m_hEventSource = ::RegisterEventSourceW(NULL,  // local machine
-//                                               GetEventName()); // source name
-        m_hEventSource = ::RegisterEventSource(NULL,  // local machine
-                                               GetEventName()); // source name
-// End Change
-    }
-
-    if (m_hEventSource) {
-        ::ReportEventW(m_hEventSource,
-                      wType,
-                      0,
-                      dwID,
-                      NULL, // sid
-                      iStr,
-                      0,
-                      ps,
-                      NULL);
-    }
-}
-
-// This function makes an entry into the application event log
-void CNTService::LogEvent(WORD wType, DWORD dwID,
-                          const char* pszS1,
-                          const char* pszS2,
-                          const char* pszS3)
-{
-	wchar_t *p1 = pszS1 ? StrToUnicode( pszS1 ) : NULL;
-	wchar_t *p2 = pszS2 ? StrToUnicode( pszS2 ) : NULL;
-	wchar_t *p3 = pszS3 ? StrToUnicode( pszS3 ) : NULL;
-	LogEvent( wType, dwID, p1, p2, p3 );
-	if ( p1 )
-		free( p1 );
-	if ( p2 )
-		free( p2 );
-	if ( p3 )
-		free( p3 );
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////
-// Service startup and registration
-
-BOOL CNTService::StartService()
-{
-    CNTService* pService = m_pThis;
-    SERVICE_TABLE_ENTRY st[] = {
-        {m_szServiceName, ServiceMain},
-        {NULL, NULL}
-    };
-
-    DebugMsg(_T("Calling StartServiceCtrlDispatcher()"));
-	// Fails if started from command line, but StartService
-	// works any way
-    BOOL b = ::StartServiceCtrlDispatcher(st);
-	DWORD err = GetLastError();
-    DebugMsg(_T("Returned from StartServiceCtrlDispatcher()"));
-    return b;
-}
-
-BOOL CNTService::StartServiceDirect()
-{
-	BOOL b = FALSE;
-
-	// Open the Service Control Manager
-	SC_HANDLE hSCM = ::OpenSCManager(NULL, // local machine
-                                 NULL, // ServicesActive database
-                                 SC_MANAGER_ALL_ACCESS); // full access
-	if (!hSCM) return FALSE;
-	SC_HANDLE hService = ::OpenService(hSCM,
-                                   m_szServiceName,
-                                   SERVICE_START);
-	if (hService)
-	{
-		DebugMsg(_T("Calling StartServiceDirect()"));
-		b = ::StartService( hService, 0, NULL );
-		::CloseServiceHandle(hService);
-	}
-	::CloseServiceHandle(hSCM);
-
-	return b;
-}
-
-// static member function (callback)
-void CNTService::ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv)
-{
-    // Get a pointer to the C++ object
-    CNTService* pService = m_pThis;
-    
-    pService->DebugMsg(_T("Entering CNTService::ServiceMain()"));
-    // Register the control request handler
-    pService->m_Status.dwCurrentState = SERVICE_START_PENDING;
-    pService->m_hServiceStatus = RegisterServiceCtrlHandler(pService->m_szServiceName,
-                                                           Handler);
-    if (pService->m_hServiceStatus == NULL) {
-        pService->LogEvent(EVENTLOG_ERROR_TYPE, EVMSG_CTRLHANDLERNOTINSTALLED);
-        return;
-    }
-
-    // Start the initialisation
-    if (pService->Initialize()) {
-
-        // Do the real work. 
-        // When the Run function returns, the service has stopped.
-        pService->m_bIsRunning = TRUE;
-        pService->m_Status.dwWin32ExitCode = 0;
-        pService->m_Status.dwCheckPoint = 0;
-        pService->m_Status.dwWaitHint = 0;
-        pService->Run();
-    }
-
-    // Tell the service manager we are stopped
-    pService->SetStatus(SERVICE_STOPPED);
-
-    pService->DebugMsg(_T("Leaving CNTService::ServiceMain()"));
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////
-// status functions
-
-void CNTService::SetStatus(DWORD dwState)
-{
-    DebugMsg(_T("CNTService::SetStatus(%lu, %lu)"), m_hServiceStatus, dwState);
-    m_Status.dwCurrentState = dwState;
-    ::SetServiceStatus(m_hServiceStatus, &m_Status);
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////
-// Service initialization
-
-BOOL CNTService::Initialize()
-{
-    DebugMsg(_T("Entering CNTService::Initialize()"));
-
-    // Start the initialization
-    SetStatus(SERVICE_START_PENDING);
-    
-    // Perform the actual initialization
-    BOOL bResult = OnInit(); 
-    
-    // Set final state
-    m_Status.dwWin32ExitCode = GetLastError();
-    m_Status.dwCheckPoint = 0;
-    m_Status.dwWaitHint = 0;
-    if (!bResult) {
-        LogEvent(EVENTLOG_ERROR_TYPE, EVMSG_FAILEDINIT);
-        SetStatus(SERVICE_STOPPED);
-        return FALSE;    
-    }
-    
-    LogEvent(EVENTLOG_INFORMATION_TYPE, EVMSG_STARTED);
-    SetStatus(SERVICE_RUNNING);
-
-    DebugMsg(_T("Leaving CNTService::Initialize()"));
-    return TRUE;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-// main function to do the real work of the service
-
-// This function performs the main work of the service. 
-// When this function returns the service has stopped.
-void CNTService::Run()
-{
-    DebugMsg(_T("Entering CNTService::Run()"));
-
-    while (m_bIsRunning) {
-        DebugMsg(_T("Sleeping..."));
-        Sleep(5000);
-    }
-
-    // nothing more to do
-    DebugMsg(_T("Leaving CNTService::Run()"));
-}
-
-//////////////////////////////////////////////////////////////////////////////////////
-// Control request handlers
-
-// static member function (callback) to handle commands from the
-// service control manager
-void CNTService::Handler(DWORD dwOpcode)
-{
-    // Get a pointer to the object
-    CNTService* pService = m_pThis;
-    
-    pService->DebugMsg(_T("CNTService::Handler(%lu)"), dwOpcode);
-    switch (dwOpcode) {
-    case SERVICE_CONTROL_STOP: // 1
-        pService->SetStatus(SERVICE_STOP_PENDING);
-        pService->OnStop();
-        pService->m_bIsRunning = FALSE;
-        pService->LogEvent(EVENTLOG_INFORMATION_TYPE, EVMSG_STOPPED);
-		if (pService->m_hEventSource) {
-			::DeregisterEventSource(pService->m_hEventSource);
-			pService->m_hEventSource = NULL;
-		}
-
-        break;
-
-    case SERVICE_CONTROL_PAUSE: // 2
-        pService->OnPause();
-        break;
-
-    case SERVICE_CONTROL_CONTINUE: // 3
-        pService->OnContinue();
-        break;
-
-    case SERVICE_CONTROL_INTERROGATE: // 4
-        pService->OnInterrogate();
-        break;
-
-    case SERVICE_CONTROL_SHUTDOWN: // 5
-        pService->OnShutdown();
-        break;
-
-    default:
-        if (dwOpcode >= SERVICE_CONTROL_USER) {
-            if (!pService->OnUserControl(dwOpcode)) {
-                pService->LogEvent(EVENTLOG_ERROR_TYPE, EVMSG_BADREQUEST);
-            }
-        } else {
-            pService->LogEvent(EVENTLOG_ERROR_TYPE, EVMSG_BADREQUEST);
-        }
-        break;
-    }
-
-    // Report current status
-    pService->DebugMsg(_T("Updating status (%lu, %lu)"),
-                       pService->m_hServiceStatus,
-                       pService->m_Status.dwCurrentState);
-    ::SetServiceStatus(pService->m_hServiceStatus, &pService->m_Status);
-}
-        
-// Called when the service is first initialized
-BOOL CNTService::OnInit()
-{
-    DebugMsg(_T("CNTService::OnInit()"));
-	return TRUE;
-}
-
-// Called when the service control manager wants to stop the service
-void CNTService::OnStop()
-{
-    DebugMsg(_T("CNTService::OnStop()"));
-}
-
-// called when the service is interrogated
-void CNTService::OnInterrogate()
-{
-    DebugMsg(_T("CNTService::OnInterrogate()"));
-}
-
-// called when the service is paused
-void CNTService::OnPause()
-{
-    DebugMsg(_T("CNTService::OnPause()"));
-}
-
-// called when the service is continued
-void CNTService::OnContinue()
-{
-    DebugMsg(_T("CNTService::OnContinue()"));
-}
-
-// called when the service is shut down
-void CNTService::OnShutdown()
-{
-    DebugMsg(_T("CNTService::OnShutdown()"));
-}
-
-// called when the service gets a user control message
-BOOL CNTService::OnUserControl(DWORD dwOpcode)
-{
-    DebugMsg(_T("CNTService::OnUserControl(%8.8lXH)"), dwOpcode);
-    return FALSE; // say not handled
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////
-// Debugging support
-
-void CNTService::DebugMsg(const TCHAR* pszFormat, ...)
-{
-    TCHAR buf[1024];
-    _stprintf(buf, _T("[%s](%lu): "), m_szServiceName, GetCurrentThreadId());
-	va_list arglist;
-	va_start(arglist, pszFormat);
-    _vstprintf(&buf[_tcslen(buf)], pszFormat, arglist);
-	va_end(arglist);
-    _tcscat(buf, _T("\n"));
-    OutputDebugString(buf);
-}

+ 0 - 116
ldap/synctools/passwordsync/passsync/ntservice.h

@@ -1,116 +0,0 @@
-/** BEGIN COPYRIGHT BLOCK
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * END COPYRIGHT BLOCK **/
-/***********************************************************************
-**
-**
-** NAME
-**  NTService.h
-**
-** DESCRIPTION
-**
-**
-** AUTHOR
-**   Rob Weltman <[email protected]>
-**
-***********************************************************************/
-
-#ifndef _NTSERVICE_H_
-#define _NTSERVICE_H_
-
-// Added:  2-8-2005
-#include <windows.h>
-#include "subuniutil.h"
-// End Change
-
-// #include "dssynchmsg.h" // Event message ids
-
-#define SERVICE_CONTROL_USER 128
-
-class CNTService
-{
-public:
-    CNTService(const TCHAR* szServiceName);
-    virtual ~CNTService();
-    BOOL ParseStandardArgs(int argc, char* argv[]);
-    BOOL IsInstalled();
-    BOOL Install();
-    BOOL Uninstall();
-    void LogEvent(WORD wType, DWORD dwID,
-                  const wchar_t* pszS1 = NULL,
-                  const wchar_t* pszS2 = NULL,
-                  const wchar_t* pszS3 = NULL);
-    void LogEvent(WORD wType, DWORD dwID,
-                  const char* pszS1,
-                  const char* pszS2 = NULL,
-                  const char* pszS3 = NULL);
-    BOOL StartService();
-    BOOL StartServiceDirect();
-    void SetStatus(DWORD dwState);
-    BOOL Initialize();
-    virtual void Run();
-	virtual BOOL OnInit();
-    virtual void OnStop();
-    virtual void OnInterrogate();
-    virtual void OnPause();
-    virtual void OnContinue();
-    virtual void OnShutdown();
-    virtual BOOL OnUserControl(DWORD dwOpcode);
-	virtual TCHAR *GetEventName() { return m_szServiceName; }
-    void DebugMsg(const TCHAR* pszFormat, ...);
-    
-    // static member functions
-    static void WINAPI ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv);
-    static void WINAPI Handler(DWORD dwOpcode);
-
-    // data members
-    TCHAR m_szServiceName[64];
-    int m_iMajorVersion;
-    int m_iMinorVersion;
-    SERVICE_STATUS_HANDLE m_hServiceStatus;
-    SERVICE_STATUS m_Status;
-    BOOL IsRunning() { return m_bIsRunning; }
-
-    // static data
-    static CNTService* m_pThis; // nasty hack to get object ptr
-
-private:
-    HANDLE m_hEventSource;
-    BOOL m_bIsRunning;
-};
-
-#endif // _NTSERVICE_H_

+ 0 - 32
ldap/synctools/passwordsync/passsync/passsync.dep

@@ -1,32 +0,0 @@
-# Microsoft Developer Studio Generated Dependency File, included by passsync.mak
-
-.\ntservice.cpp : \
-	".\dssynchmsg.h"\
-	".\ntservice.h"\
-	".\subuniutil.h"\
-	
-
-..\passhand.cpp : \
-	"..\passhand.h"\
-	
-
-.\service.cpp : \
-	"..\passhand.h"\
-	".\dssynch.h"\
-	".\dssynchmsg.h"\
-	".\ntservice.h"\
-	".\subuniutil.h"\
-	".\synchcmds.h"\
-	".\syncserv.h"\
-	
-
-.\subuniutil.cpp : \
-	".\subuniutil.h"\
-	
-
-.\syncserv.cpp : \
-	"..\passhand.h"\
-	".\ntservice.h"\
-	".\subuniutil.h"\
-	".\syncserv.h"\
-	

+ 0 - 149
ldap/synctools/passwordsync/passsync/passsync.dsp

@@ -1,149 +0,0 @@
-# Microsoft Developer Studio Project File - Name="passsync" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=passsync - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "passsync.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "passsync.mak" CFG="passsync - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "passsync - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "passsync - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "passsync - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-
-!ELSEIF  "$(CFG)" == "passsync - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "passsync___Win32_Debug"
-# PROP BASE Intermediate_Dir "passsync___Win32_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 nss3.lib libplc4.lib libnspr4.lib nsldappr32v50.lib nsldapssl32v50.lib nsldap32v50.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF 
-
-# Begin Target
-
-# Name "passsync - Win32 Release"
-# Name "passsync - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\ntservice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\passhand.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\passsync.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\service.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\subuniutil.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\syncserv.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\dssynch.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\dssynchmsg.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ntservice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\passhand.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\subuniutil.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\synchcmds.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\syncserv.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project

+ 0 - 222
ldap/synctools/passwordsync/passsync/passsync.mak

@@ -1,222 +0,0 @@
-# Microsoft Developer Studio Generated NMAKE File, Based on passsync.dsp
-!IF "$(CFG)" == ""
-CFG=passsync - Win32 Debug
-!MESSAGE No configuration specified. Defaulting to passsync - Win32 Debug.
-!ENDIF 
-
-!IF "$(CFG)" != "passsync - Win32 Release" && "$(CFG)" != "passsync - Win32 Debug"
-!MESSAGE Invalid configuration "$(CFG)" specified.
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "passsync.mak" CFG="passsync - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "passsync - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "passsync - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-!ERROR An invalid configuration is specified.
-!ENDIF 
-
-!IF "$(OS)" == "Windows_NT"
-NULL=
-!ELSE 
-NULL=nul
-!ENDIF 
-
-!IF  "$(CFG)" == "passsync - Win32 Release"
-
-OUTDIR=$(OBJDEST)\passsync
-INTDIR=$(OBJDEST)\passsync
-# Begin Custom Macros
-OutDir=$(OBJDEST)\passsync
-# End Custom Macros
-
-ALL : "$(OUTDIR)\passsync.exe"
-
-
-CLEAN :
-	-@erase "$(INTDIR)\ntservice.obj"
-	-@erase "$(INTDIR)\passhand.obj"
-	-@erase "$(INTDIR)\service.obj"
-	-@erase "$(INTDIR)\subuniutil.obj"
-	-@erase "$(INTDIR)\syncserv.obj"
-	-@erase "$(INTDIR)\vc60.idb"
-	-@erase "$(OUTDIR)\passsync.exe"
-
-"$(OUTDIR)" :
-    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP=cl.exe
-CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\passsync.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
-
-.c{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cpp{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cxx{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.c{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cpp{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cxx{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-RSC=rc.exe
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\passsync.bsc" 
-BSC32_SBRS= \
-	
-LINK32=link.exe
-LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\passsync.pdb" /machine:I386 /out:"$(OUTDIR)\passsync.exe" 
-LINK32_OBJS= \
-	"$(INTDIR)\ntservice.obj" \
-	"$(INTDIR)\passhand.obj" \
-	"$(INTDIR)\service.obj" \
-	"$(INTDIR)\subuniutil.obj" \
-	"$(INTDIR)\syncserv.obj"
-
-"$(OUTDIR)\passsync.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
-    $(LINK32) @<<
-  $(LINK32_FLAGS) $(LINK32_OBJS)
-<<
-
-!ELSEIF  "$(CFG)" == "passsync - Win32 Debug"
-
-OUTDIR=$(OBJDEST)\passsync
-INTDIR=$(OBJDEST)\passsync
-# Begin Custom Macros
-OutDir=$(OBJDEST)\passsync
-# End Custom Macros
-
-ALL : "$(OUTDIR)\passsync.exe"
-
-
-CLEAN :
-	-@erase "$(INTDIR)\ntservice.obj"
-	-@erase "$(INTDIR)\passhand.obj"
-	-@erase "$(INTDIR)\service.obj"
-	-@erase "$(INTDIR)\subuniutil.obj"
-	-@erase "$(INTDIR)\syncserv.obj"
-	-@erase "$(INTDIR)\vc60.idb"
-	-@erase "$(INTDIR)\vc60.pdb"
-	-@erase "$(OUTDIR)\passsync.exe"
-	-@erase "$(OUTDIR)\passsync.ilk"
-	-@erase "$(OUTDIR)\passsync.pdb"
-
-"$(OUTDIR)" :
-    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP=cl.exe
-CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\passsync.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
-
-.c{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cpp{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cxx{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.c{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cpp{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cxx{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-RSC=rc.exe
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\passsync.bsc" 
-BSC32_SBRS= \
-	
-LINK32=link.exe
-LINK32_FLAGS=nss3.lib libplc4.lib libnspr4.lib nsldappr32v50.lib nsldapssl32v50.lib nsldap32v50.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\passsync.pdb" /debug /machine:I386 /out:"$(OUTDIR)\passsync.exe" /pdbtype:sept 
-LINK32_OBJS= \
-	"$(INTDIR)\ntservice.obj" \
-	"$(INTDIR)\passhand.obj" \
-	"$(INTDIR)\service.obj" \
-	"$(INTDIR)\subuniutil.obj" \
-	"$(INTDIR)\syncserv.obj"
-
-"$(OUTDIR)\passsync.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
-    $(LINK32) @<<
-  $(LINK32_FLAGS) $(LINK32_OBJS)
-<<
-
-!ENDIF 
-
-
-!IF "$(NO_EXTERNAL_DEPS)" != "1"
-!IF EXISTS("passsync.dep")
-!INCLUDE "passsync.dep"
-!ELSE 
-!MESSAGE Warning: cannot find "passsync.dep"
-!ENDIF 
-!ENDIF 
-
-
-!IF "$(CFG)" == "passsync - Win32 Release" || "$(CFG)" == "passsync - Win32 Debug"
-SOURCE=.\ntservice.cpp
-
-"$(INTDIR)\ntservice.obj" : $(SOURCE) "$(INTDIR)"
-
-
-SOURCE=..\passhand.cpp
-
-"$(INTDIR)\passhand.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=.\service.cpp
-
-"$(INTDIR)\service.obj" : $(SOURCE) "$(INTDIR)"
-
-
-SOURCE=.\subuniutil.cpp
-
-"$(INTDIR)\subuniutil.obj" : $(SOURCE) "$(INTDIR)"
-
-
-SOURCE=.\syncserv.cpp
-
-"$(INTDIR)\syncserv.obj" : $(SOURCE) "$(INTDIR)"
-
-
-
-!ENDIF 
-

+ 0 - 67
ldap/synctools/passwordsync/passsync/passsync.rc

@@ -1,67 +0,0 @@
-//Microsoft Developer Studio generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-#include <windows.h>
-#include "dssynchmsg.rc"
-
-/////////////////////////////////////////////////////////////////////////////
-#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
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE DISCARDABLE 
-BEGIN
-    "resource.h\0"
-END
-
-2 TEXTINCLUDE DISCARDABLE 
-BEGIN
-    "#include ""afxres.h""\r\n"
-    "#include <windows.h>\r\n"
-    "#include ""dssynchmsg.rc""\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
-

+ 0 - 52
ldap/synctools/passwordsync/passsync/resource.h

@@ -1,52 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
-//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
-// Used by passsync.rc
-//
-
-// Next default values for new objects
-// 
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        101
-#define _APS_NEXT_COMMAND_VALUE         40001
-#define _APS_NEXT_CONTROL_VALUE         1000
-#define _APS_NEXT_SYMED_VALUE           101
-#endif
-#endif

+ 0 - 332
ldap/synctools/passwordsync/passsync/service.cpp

@@ -1,332 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
-// Created: 2-8-2005
-// Author(s): Scott Bridges
-
-#include <windows.h>
-#include <iostream>
-#include "syncserv.h"
-#include "dssynchmsg.h"
-// syncserv.h
-//   ntservice.h (modified)
-//   ntservice.cpp (modified)
-//     sysplat
-//     uniutil
-//     dssynchmsg
-
-// Copied: 2-10-2005
-// From: ntsynch.cpp
-//#include "sysplat.h"
-
-//#include "NTSynch.h"
-//#include "ldapconn.h"
-//#include "dsperson.h"
-#include "synchcmds.h"
-#include "dssynch.h"
-
-#ifdef _DEBUG
-void doDebug( PassSyncService *pSynch );
-#endif // _DEBUG
-
-//#include <nspr.h>
-
-/////////////////////////////////////////////////////////////////
-static void usage()
-{
-	printf( "DS Synchronization Service version %s\n",
-		SYNCH_VERSION );
-	printf(	"  -%c NUMBER    NT polling interval (minutes)\n",
-								SYNCH_CMD_NT_POLL_INTERVAL );
-//	printf(	"  -%c NUMBER    DS polling interval (minutes)\n",
-//								SYNCH_CMD_DS_POLL_INTERVAL );
-//	printf(	"  -%c CALENDAR  NT update schedule\n",
-//								SYNCH_CMD_NT_CALENDAR );
-//	printf(	"  -%c CALENDAR  DS update schedule\n",
-//								SYNCH_CMD_DS_CALENDAR );
-	printf(	"  -%c NUMBER    NT synchronization start time (minutes)\n",
-								SYNCH_CMD_NT_CALENDAR );
-//	printf(	"  -%c NUMBER    DS synchronization start time (minutes)\n",
-//								SYNCH_CMD_DS_CALENDAR );
-	printf(	"  -%c NAME      DS distinguished name\n",
-								SYNCH_CMD_ADMIN_DN );
-	printf(	"  -%c USERS_BASE      DS users base\n",
-								SYNCH_CMD_DIRECTORY_USERS_BASE );
-	printf(	"  -%c GROUPS_BASE     DS groups base\n",
-								SYNCH_CMD_DIRECTORY_GROUPS_BASE );
-	printf(	"  -%c HOST      DS host\n",
-								SYNCH_CMD_DS_HOST );
-	printf(	"  -%c NUMBER    DS port\n",
-								SYNCH_CMD_DS_PORT );
-	printf(	"  -%c PASSWORD  DS password\n",
-								SYNCH_CMD_ADMIN_PASSWORD );
-	printf(	"  -%c NUMBER    Command port\n",
-								SYNCH_CMD_NT_PORT );
-	printf(	"  -v           Display this message\n",
-								SYNCH_CMD_NT_POLL_INTERVAL );
-	printf(	"  -i           Install the service\n" );
-	printf(	"  -u           Uninstall the service\n" );
-	printf(	"  -%c           Synchronize all NT users to DS now\n",
-								SYNCH_CMD_SYNCH_FROM_NT );
-//	printf(	"  -%c           Synchronize DS users to NT now\n",
-//								SYNCH_CMD_SYNCH_FROM_DS );
-	printf(	"  -%c           Resynchronize changes to NT users now\n",
-								SYNCH_CMD_SYNCH_CHANGES );
-	printf(	"  -%c           Load settings from Registry\n",
-								SYNCH_CMD_RELOAD_SETTINGS );
-//	printf( "Options -t and -k are contradictory, as are -m and -y\n" );
-}
-
-#define OPT_NONE 0
-#define OPT_START 1
-#define OPT_APP 2
-#define OPT_TERMINATE 3
-#define OPT_START_DIRECT 4
-
-/////////////////////////////////////////////////////////////////
-static int checkOptions( PassSyncService *pSynch, int& argc, char *argv[] )
-{
-	int result = OPT_START;  // Default is to start the service
-
-	// Check first for uninstall, since we shouldn't do anything else if set
-	int i;
-	for( i = 1; i < argc; i++ )
-	{
-		if ( !strncmp( argv[i], "-u", 2 ) )
-		{
-			// Uninstall
-			if ( !pSynch->IsInstalled() )
-				wprintf( L"%s is not installed\n", pSynch->m_szServiceName );
-			else
-			{
-				// Try and remove the copy that's installed
-				if ( pSynch->Uninstall() )
-					wprintf( L"%s removed\n", pSynch->m_szServiceName );
-				else
-					wprintf( L"Could not remove %s. Error %d\n",
-						pSynch->m_szServiceName, GetLastError() );
-//				pSynch->ClearRegistry();
-			}
-			// Terminate after completion
-			result = OPT_TERMINATE;
-			argc = 1;
-			return result;
-		}
-	}
-
-	// Check command-line arguments
-	for( i = 1; i < argc; )
-	{
-		if ( '-' != argv[i][0] )
-		{
-			i++;
-			continue;
-		}
-		char opt = argv[i][1];
-		BOOL bLocal = FALSE;
-
-		// Usage
-		if ( 'v' == opt )
-		{
-			result = OPT_NONE;
-			usage();
-			bLocal = TRUE;
-		}
-		// Secret option to start as app, not service
-		else if ( 'a' == opt )
-		{
-			result = OPT_APP;
-			bLocal = TRUE;
-		}
-		// Start service
-		else if ( 'x' == opt )
-		{
-			result = OPT_START_DIRECT;
-			bLocal = TRUE;
-		}
-/*
-		// Command port
-		else if ( 'c' == opt )
-		{
-			result = OPT_NONE;
-			if ( i < (argc-1) )
-			{
-				i++;
-				pSynch->SetCommandPort( atoi( argv[i] ) );
-				bLocal = TRUE;
-			}
-		}
-*/
-		// Install
-		else if ( 'i' == opt )
-		{
-			result = OPT_NONE;
-			if ( pSynch->IsInstalled() )
-				printf( "%S is already installed\n", pSynch->m_szServiceName );
-			else
-			{
-				// Try and install the copy that's running
-				if ( pSynch->Install() )
-				{
-					printf( "%S installed\n", pSynch->m_szServiceName );
-				}
-				else
-				{
-					printf( "%S failed to install. Error %d\n",
-						pSynch->m_szServiceName, GetLastError() );
-				}
-			}
-			bLocal = TRUE;
-		}
-		// Synchronize from NT to DS
-		// Terminate after completion
-		else if ( 'n' == opt )
-		{
-			result = OPT_NONE;
-		}
-		// Synchronize from DS to NT
-		// Terminate after completion
-		else if ( 's' == opt )
-		{
-			result = OPT_NONE;
-		}
-		// Synchronize both ways
-		// Terminate after completion
-		else if ( 'r' == opt )
-		{
-			result = OPT_NONE;
-		}
-		if ( bLocal )
-		{
-			for( int j = i; j < (argc-1); j++ )
-			{
-				argv[j] = argv[j+1];
-			}
-			argc--;
-		}
-		else
-		{
-			i++;
-			if ( i >= argc )
-				break;
-		}
-	}
-	return result;
-}
-
-static int initialize( PassSyncService *pSynch, int argc, char *argv[] )
-{
-	// Check command-line arguments
-	for( int i = 1; i < argc; i++ )
-	{
-		if ( '-' != argv[i][0] )
-			continue;
-		char opt = argv[i][1];
-
-//		pSynch->argToSynch( opt, argv[i] );
-
-		if ( i >= argc )
-			break;
-	}
-	if ( argc > 1 )
-	{
-		// Save settings to Registry
-//		pSynch->SaveConfig();
-	}
-
-	return 0;
-}
-
-/////////////////////////////////////////////////////////////////
-
-int
-main( int argc, char *argv[] )
-{
-	// Global single instance
-	PassSyncService theSynch("Password Synchronization Service");
-
-	// Process special install/uninstall switches; this does install/uninstall
-	// It returns non-zero to actually start the service
-	int nStart = checkOptions( &theSynch, argc, argv );
-
-	// Set up configuration
-	if ( OPT_TERMINATE != nStart )
-		initialize( &theSynch, argc, argv );
-
-	// Started by Service Control Manager
-	if ( OPT_START == nStart )
-	{
-		// Start the service; doesn't return until the service is started
-		BOOL bStarted = theSynch.StartService();
-		if ( !bStarted )
-		{
-			printf( "Service could not be started\n" );
-			return(1);
-		}
-		return 0;
-	}
-#if 0
-	// Started from command line
-	else if ( OPT_START_DIRECT == nStart )
-	{
-		// This may fail, but the rest still succeeds
-		BOOL bStarted = theSynch.StartService();
-		bStarted = theSynch.StartServiceDirect();
-		if ( !bStarted )
-		{
-			printf( "Service could not be started\n" );
-			return(1);
-		}
-		return 0;
-	}
-#endif
-	// Secret debugging option - run as app instead of as service
-	else if ( OPT_APP == nStart )
-	{
-		if ( theSynch.OnInit() )
-			theSynch.Run();
-	}
-
-	exit(theSynch.m_Status.dwWin32ExitCode);
-
-
-	////////// That's it - the rest is debugging stuff //////
-#ifdef _DEBUG
-	doDebug( &theSynch );
-#endif
-	return 0;
-}

+ 0 - 97
ldap/synctools/passwordsync/passsync/subuniutil.cpp

@@ -1,97 +0,0 @@
-/** BEGIN COPYRIGHT BLOCK
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * END COPYRIGHT BLOCK **/
-
-#include "subuniutil.h"
-
-// Copied: 2-8-2005
-// From: secuniutil.c
-unsigned long
-utf8getcc( const char** src )
-{
-    register unsigned long c;
-    register const unsigned char* s = (const unsigned char*)*src;
-    switch (UTF8len [(*s >> 2) & 0x3F]) {
-      case 0: /* erroneous: s points to the middle of a character. */
-	      c = (*s++) & 0x3F; goto more5;
-      case 1: c = (*s++); break;
-      case 2: c = (*s++) & 0x1F; goto more1;
-      case 3: c = (*s++) & 0x0F; goto more2;
-      case 4: c = (*s++) & 0x07; goto more3;
-      case 5: c = (*s++) & 0x03; goto more4;
-      case 6: c = (*s++) & 0x01; goto more5;
-      more5: if ((*s & 0xC0) != 0x80) break; c = (c << 6) | ((*s++) & 0x3F);
-      more4: if ((*s & 0xC0) != 0x80) break; c = (c << 6) | ((*s++) & 0x3F);
-      more3: if ((*s & 0xC0) != 0x80) break; c = (c << 6) | ((*s++) & 0x3F);
-      more2: if ((*s & 0xC0) != 0x80) break; c = (c << 6) | ((*s++) & 0x3F);
-      more1: if ((*s & 0xC0) != 0x80) break; c = (c << 6) | ((*s++) & 0x3F);
-	break;
-    }
-    *src = (const char*)s;
-    return c;
-}
-//
-wchar_t *
-ASCIIToUnicode( const char *buf, wchar_t *uni, int inUnilen )
-     /* Convert the 0-terminated UTF-8 string 'buf' to 0-terminated UCS-2;
-        write the result into uni, truncated (if necessary) to fit in 0..unilen-1. */
-     /* XXX This function should be named UTF8ToUnicode */
-     /* XXX unilen should be size_t, not int */
-{
-	auto size_t unilen = (size_t)inUnilen; /* to get rid of warnings for now */
-    auto size_t i;
-    if (unilen > 0 && buf && uni) {
-		for (i = 0; i < unilen; ++i) {
-			register unsigned long c = utf8getcc( &buf );
-			if (c >= 0xfffeUL) c = 0xfffdUL; /* REPLACEMENT CHARACTER */
-			if (0 == (uni[i] = (wchar_t)c)) break;
-		}
-		if (i >= unilen && unilen > 0) {
-			uni[unilen-1] = 0;
-		}
-	}
-    return uni;
-}
-
-wchar_t *
-StrToUnicode( const char *buf )
-{
-	wchar_t unibuf[1024];
-	ASCIIToUnicode( buf, unibuf, sizeof(unibuf) );
-	return _wcsdup( unibuf );
-}
-// End Copy

+ 0 - 58
ldap/synctools/passwordsync/passsync/subuniutil.h

@@ -1,58 +0,0 @@
-/** BEGIN COPYRIGHT BLOCK
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * END COPYRIGHT BLOCK **/
-
-#ifndef _SUBUNIUTIL_H_
-#define _SUBUNIUTIL_H_
-
-#include <windows.h>
-
-// Copied: 2-8-2005
-// From: secuniutil.c
-/* From ns/netsite/ldap/libraries/libldap/utf8.c */
-static char UTF8len[64]
-= {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-   2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 5, 6};
-// End Copy
-
-unsigned long utf8getcc( const char** src );
-wchar_t * ASCIIToUnicode( const char *buf, wchar_t *uni, int inUnilen );
-wchar_t * StrToUnicode( const char *buf );
-
-#endif

+ 0 - 85
ldap/synctools/passwordsync/passsync/synchcmds.h

@@ -1,85 +0,0 @@
-/** BEGIN COPYRIGHT BLOCK
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * END COPYRIGHT BLOCK **/
-/***********************************************************************
-**
-**
-** NAME
-**  synchcmds.h
-**
-** DESCRIPTION
-**  Commands accepted by DS Synchronization Service
-**
-** AUTHOR
-**   Rob Weltman <[email protected]>
-**
-***********************************************************************/
-
-#ifndef _SYNCHCMDS_H_
-#define _SYNCHCMDS_H_
-
-#define SYNCH_CMD_NT_POLL_INTERVAL	't'
-#define SYNCH_CMD_DS_POLL_INTERVAL	'm'
-#define SYNCH_CMD_ADMIN_DN			'd'
-#define SYNCH_CMD_ADMIN_PASSWORD	'w'
-#define SYNCH_CMD_DIRECTORY_USERS_BASE	'b'
-#define SYNCH_CMD_DIRECTORY_GROUPS_BASE	'f'
-#define SYNCH_CMD_DS_HOST			'h'
-#define SYNCH_CMD_DS_PORT			'p'
-#define SYNCH_CMD_NT_PORT			'c'
-#define SYNCH_CMD_NT_CALENDAR		'k'
-#define SYNCH_CMD_DS_CALENDAR		'y'
-#define SYNCH_CMD_SYNCH_FROM_NT		'n'
-#define SYNCH_CMD_SYNCH_FROM_DS		's'
-#define SYNCH_CMD_SYNCH_CHANGES		'r'
-#define SYNCH_CMD_RELOAD_SETTINGS	'l'
-
-/* LDAP error codes */
-#define SYNCH_ERR_PARTIAL_RESULTS		0x09
-#define SYNCH_ERR_INVALID_DN_SYNTAX		0x22
-#define SYNCH_ERR_INAPPROPRIATE_AUTH	0x30
-#define SYNCH_ERR_INVALID_CREDENTIALS	0x31
-#define SYNCH_ERR_INSUFFICIENT_ACCESS	0x32
-#define SYNCH_ERR_CONNECT_ERROR			0x5b
-
-#define SYNCH_ERR_INVALID_USERS_BASE			100
-#define SYNCH_ERR_INVALID_GROUPS_BASE			200
-#define SYNCH_ERR_INVALID_UID_UNIQUE_BASE		300
-#define SYNCH_ERR_BAD_CONFIG			400
-
-#endif _SYNCHCMDS_H_
-

+ 0 - 670
ldap/synctools/passwordsync/passsync/syncserv.cpp

@@ -1,670 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
-// Created: 2-8-2005
-// Author(s): Scott Bridges
-#include "syncserv.h"
-
-#include "prerror.h"
-static char* certdbh;
-
-// ****************************************************************
-// passwdcb
-// ****************************************************************
-char* passwdcb(PK11SlotInfo* info, PRBool retry, void* arg)
-{
-	char* result = NULL;
-	unsigned long resultLen = 0;
-	DWORD type;
-	HKEY regKey;
-
-	if (!retry)
-	{
-		RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\PasswordSync", &regKey);
-		RegQueryValueEx(regKey, "Install Path", NULL, &type, NULL, &resultLen);
-		result = (char*)malloc(resultLen);
-		RegQueryValueEx(regKey, "Cert Token", NULL, &type, (unsigned char*)result, &resultLen);
-		RegCloseKey(regKey);
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// PassSyncService::PassSyncService
-// ****************************************************************
-PassSyncService::PassSyncService(const TCHAR *serviceName) : CNTService(serviceName)
-{
-	char sysPath[SYNCSERV_BUF_SIZE];
-	char tempRegBuff[SYNCSERV_BUF_SIZE];
-	HKEY regKey;
-	DWORD type;
-	unsigned long size;
-
-	passhookEventHandle = CreateEvent(NULL, FALSE, FALSE, PASSHAND_EVENT_NAME);
-	mainLdapConnection = NULL;
-	results = NULL;
-	currentResult = NULL;
-	lastLdapError = LDAP_SUCCESS;
-	certdbh = NULL;
-
-	RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\PasswordSync", &regKey);
-
-	size = SYNCSERV_BUF_SIZE;
-	if(RegQueryValueEx(regKey, "Log Level", NULL, &type, (unsigned char*)tempRegBuff, &size) == ERROR_SUCCESS)
-	{
-		logLevel = (unsigned long)atoi(tempRegBuff);
-	}
-	else
-	{
-		logLevel = 0;
-	}
-
-	size = SYNCSERV_BUF_SIZE;
-	if(RegQueryValueEx(regKey, "Time To Live", NULL, &type, (unsigned char*)tempRegBuff, &size) == ERROR_SUCCESS)
-	{
-		maxBackoffTime = (unsigned long)atoi(tempRegBuff);
-	}
-	else
-	{
-		maxBackoffTime = (1 << 12) * SYNCSERV_BASE_BACKOFF_LEN;
-	}
-
-	size = SYNCSERV_BUF_SIZE;
-	RegQueryValueEx(regKey, "Install Path", NULL, &type, (unsigned char*)installPath, &size);
-	size = SYNCSERV_BUF_SIZE;
-	RegQueryValueEx(regKey, "Host Name", NULL, &type, (unsigned char*)ldapHostName, &size);
-	size = SYNCSERV_BUF_SIZE;
-	RegQueryValueEx(regKey, "Port Number", NULL, &type, (unsigned char*)ldapHostPort, &size);
-	size = SYNCSERV_BUF_SIZE;
-	RegQueryValueEx(regKey, "User Name", NULL, &type, (unsigned char*)ldapAuthUsername, &size);
-	size = SYNCSERV_BUF_SIZE;
-	RegQueryValueEx(regKey, "Password", NULL, &type, (unsigned char*)ldapAuthPassword, &size);
-	size = SYNCSERV_BUF_SIZE;
-	RegQueryValueEx(regKey, "Search Base", NULL, &type, (unsigned char*)ldapSearchBase, &size);
-	size = SYNCSERV_BUF_SIZE;
-	RegQueryValueEx(regKey, "User Name Field", NULL, &type, (unsigned char*)ldapUsernameField, &size);
-	size = SYNCSERV_BUF_SIZE;
-	RegQueryValueEx(regKey, "Password Field", NULL, &type, (unsigned char*)ldapPasswordField, &size);
-	RegCloseKey(regKey);
-
-	ExpandEnvironmentStrings("%SystemRoot%", sysPath, SYNCSERV_BUF_SIZE);
-	_snprintf(certPath, SYNCSERV_BUF_SIZE, "%s", installPath);
-	_snprintf(logPath, SYNCSERV_BUF_SIZE, "%spasssync.log", installPath);
-	_snprintf(dataFilename, SYNCSERV_BUF_SIZE, "%s\\system32\\passhook.dat", sysPath);
-
-	outLog.open(logPath, ios::out | ios::app);
-
-	if(outLog.is_open())
-	{
-		timeStamp(&outLog);
-		outLog << "PassSync service started" << endl;
-	}
-
-	PK11_SetPasswordFunc(passwdcb);
-
-	isRunning = false;
-}
-
-// ****************************************************************
-// PassSyncService::~PassSyncService
-// ****************************************************************
-PassSyncService::~PassSyncService()
-{
-	if(outLog.is_open())
-	{
-		timeStamp(&outLog);
-		outLog << "PassSync service stopped" << endl;
-	}
-	outLog.close();
-}
-
-// ****************************************************************
-// 
-// ****************************************************************
-void PassSyncService::OnStop()
-{
-	isRunning = false;
-	SetEvent(passhookEventHandle);
-}
-
-// ****************************************************************
-// 
-// ****************************************************************
-void PassSyncService::OnShutdown()
-{
-	isRunning = false;
-	SetEvent(passhookEventHandle);
-}
-
-// ****************************************************************
-// PassSyncService::Run
-// ****************************************************************
-void PassSyncService::Run()
-{
-	isRunning = true;
-
-	// Initialize NSS
-	if(ldapssl_client_init(certPath, &certdbh) != 0)
-	{
-		timeStamp(&outLog);
-		outLog << "Error initializing SSL: err=" << PR_GetError() << endl;
-		timeStamp(&outLog);
-		outLog << "Ensure that your SSL is setup correctly" << endl;
-
-		goto exit;
-	}
-
-	SyncPasswords();
-
-	while(isRunning)
-	{
-		if(passInfoList.empty())
-		{
-			if(logLevel > 0) {
-				timeStamp(&outLog);
-				outLog << "Password list is empty.  Waiting for passhook event" << endl;
-			}
-			WaitForSingleObject(passhookEventHandle, INFINITE);
-			if(logLevel > 0) {
-				timeStamp(&outLog);
-				outLog << "Received passhook event.  Attempting sync" << endl;
-			}
-		}
-		else
-		{
-			if(logLevel > 0) {
-				timeStamp(&outLog);
-				outLog << "Backing off for " << BackoffTime(GetMinBackoff()) << "ms" << endl;
-			}
-			WaitForSingleObject(passhookEventHandle, BackoffTime(GetMinBackoff()));
-			if(logLevel > 0) {
-				timeStamp(&outLog);
-				outLog << "Backoff time expired.  Attempting sync" << endl;
-			}
-		}
-
-		SyncPasswords();
-		UpdateBackoff();
-
-		ResetEvent(passhookEventHandle);
-	}
-
-	if(passInfoList.size() > 0)
-	{
-		if(saveSet(&passInfoList, dataFilename) == 0)
-		{
-			if(logLevel > 0)
-			{
-				timeStamp(&outLog);
-				outLog << passInfoList.size() << " entries saved to data file" << endl;
-			}
-		}
-		else
-		{
-			timeStamp(&outLog);
-			outLog << "Failed to save entries to data file" << endl;
-		}
-	}
-
-exit:
-	CloseHandle(passhookEventHandle);
-}
-
-// ****************************************************************
-// PassSyncService::SyncPasswords
-// ****************************************************************
-int PassSyncService::SyncPasswords()
-{
-	int result = 0;
-	PASS_INFO_LIST emptyPassInfoList;
-	PASS_INFO_LIST_ITERATOR currentPassInfo;
-	PASS_INFO_LIST_ITERATOR tempPassInfo;
-	char* dn;
-	int tempSize = passInfoList.size();
-
-	if(loadSet(&passInfoList, dataFilename) == 0)
-	{
-		if((passInfoList.size() - tempSize) > 0)
-		{
-			if(logLevel > 0)
-			{
-				timeStamp(&outLog);
-				outLog << passInfoList.size() - tempSize << " new entries loaded from data file" << endl;
-			}
-
-			if(saveSet(&emptyPassInfoList, dataFilename) == 0)
-			{
-				if(logLevel > 0)
-				{
-					timeStamp(&outLog);
-					outLog << "Cleared contents of data file" << endl;
-				}
-			}
-			else
-			{
-				timeStamp(&outLog);
-				outLog << "Failed to clear contents of data file" << endl;
-			}
-		}
-	}
-	else
-	{
-		timeStamp(&outLog);
-		outLog << "Failed to load entries from file" << endl;
-	}
-
-	if(passInfoList.size() > 0)
-	{
-		if(logLevel > 0)
-		{
-			timeStamp(&outLog);
-			outLog << "Password list has " << passInfoList.size() << " entries" << endl;
-		}
-	}
-
-	if(Connect(&mainLdapConnection, ldapAuthUsername, ldapAuthPassword) < 0)
-	{
-		// log connection failure.
-		timeStamp(&outLog);
-		outLog << "Can not connect to ldap server in SyncPasswords" << endl;
-
-		goto exit;
-	}
-
-	currentPassInfo = passInfoList.begin();
-	while(currentPassInfo != passInfoList.end())
-	{
-		if(logLevel > 0)
-		{
-			timeStamp(&outLog);
-			outLog << "Attempting to sync password for " << currentPassInfo->username << endl;
-		}
-
-		if(QueryUsername(currentPassInfo->username) == 0)
-		{
-			while((dn = GetDN()) != NULL)
-			{
-				if(FutureOccurrence(currentPassInfo))
-				{
-					if(logLevel > 0)
-					{
-						timeStamp(&outLog);
-						outLog << "Newer password changes for " << currentPassInfo->username << " exist" << endl;
-					}
-				}
-				else if(MultipleResults() && !SYNCSERV_ALLOW_MULTI_MOD)
-				{
-					timeStamp(&outLog);
-					outLog << "Multiple results not allowed: " << currentPassInfo->username << endl;
-				}
-				else if(CanBind(dn, currentPassInfo->password))
-				{
-					if(logLevel > 0)
-					{
-						timeStamp(&outLog);
-						outLog << "Password match, no modify performed: " << currentPassInfo->username << endl;
-					}
-				}
-				else if(ModifyPassword(dn, currentPassInfo->password) != 0)
-				{
-					// log modify failure.
-					timeStamp(&outLog);
-					outLog << "Modify password failed for remote entry: " << dn << endl;
-					// defer this change for later
-					timeStamp(&outLog);
-					outLog << "Deferring password change for " << currentPassInfo->username << endl;
-					currentPassInfo++;
-					continue;
-				}
-				else
-				{
-					if(logLevel > 0)
-					{
-						timeStamp(&outLog);
-						outLog << "Password modified for remote entry: " << dn << endl;
-					}
-				}
-				tempPassInfo = currentPassInfo;
-				currentPassInfo++;
-				if(logLevel > 0)
-				{
-					timeStamp(&outLog);
-					outLog << "Removing password change from list" << endl;
-				}
-				passInfoList.erase(tempPassInfo);
-			}
-		}
-		else
-		{
-			if(logLevel > 0)
-			{
-				timeStamp(&outLog);
-				outLog << "Deferring password change for " << currentPassInfo->username << endl;
-			}
-			currentPassInfo++;
-		}
-	}
-
-exit:
-	if(mainLdapConnection != NULL)
-	{
-		Disconnect(&mainLdapConnection);
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// PassSyncService::Connect
-// ****************************************************************
-int PassSyncService::Connect(LDAP** connection, char* dn, char* auth)
-{
-	int result = 0;
-
-	*connection = ldapssl_init(ldapHostName, atoi(ldapHostPort), 1);
-
-	if(*connection == NULL)
-	{
-		timeStamp(&outLog);
-		outLog << "ldapssl_init failed in Connect" << endl;
-
-		result = -1;
-		goto exit;
-	}
-
-	lastLdapError = ldap_simple_bind_s(*connection, dn, auth);
-
-	if(lastLdapError != LDAP_SUCCESS)
-	{
-		// Log error if we're binding as ldapAuthUsername
-		if(strcmp(dn, ldapAuthUsername) == 0)
-		{
-			timeStamp(&outLog);
-			outLog << "Ldap bind error in Connect" << endl;
-			outLog << "\t" << lastLdapError << ": " << ldap_err2string(lastLdapError) << endl;
-		}
-
-		result = -1;
-		goto exit;
-	}
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// PassSyncService::Disconnect
-// ****************************************************************
-int PassSyncService::Disconnect(LDAP** connection)
-{
-	ldap_unbind(*connection);
-
-	*connection = NULL;
-
-	return 0;
-}
-
-// ****************************************************************
-// PassSyncService::QueryUsername
-// ****************************************************************
-int PassSyncService::QueryUsername(char* username)
-{
-	int result = 0;
-	char searchFilter[SYNCSERV_BUF_SIZE];
-
-	results = NULL;
-
-	_snprintf(searchFilter, SYNCSERV_BUF_SIZE, "(%s=%s)", ldapUsernameField, username);
-
-	if(logLevel > 0)
-	{
-		timeStamp(&outLog);
-		outLog << "Searching for (" << ldapUsernameField << "=" << username << ")" << endl;
-	}
-
-	lastLdapError = ldap_search_ext_s(mainLdapConnection, ldapSearchBase, LDAP_SCOPE_SUBTREE, searchFilter, NULL, 0, NULL, NULL, NULL, -1, &results);
-
-	if(lastLdapError != LDAP_SUCCESS)
-	{
-		// log reason for search failure.
-		timeStamp(&outLog);
-		outLog << "Ldap error in QueryUsername" << endl;
-		outLog << "\t" << lastLdapError << ": " << ldap_err2string(lastLdapError) << endl;
-		result = -1;
-		goto exit;
-	}
-
-	if(ldap_first_entry(mainLdapConnection, results) == NULL)
-	{
-		if(logLevel > 0)
-		{
-			timeStamp(&outLog);
-			outLog << "There are no entries that match: " << username << endl;
-		}
-		result = -1;
-		goto exit;
-	}
-
-exit:
-	return result;
-}
-
-// ****************************************************************
-// PassSyncService::GetDN
-// ****************************************************************
-char* PassSyncService::GetDN()
-{
-	char* result = NULL;
-
-	if(currentResult == NULL)
-	{
-		currentResult = ldap_first_entry(mainLdapConnection, results);
-	}
-	else
-	{
-		currentResult = ldap_next_entry(mainLdapConnection, currentResult);
-	}
-
-	result = ldap_get_dn(mainLdapConnection, currentResult);
-
-	return result;
-}
-
-// ****************************************************************
-// PassSyncService::ModifyPassword
-// ****************************************************************
-int PassSyncService::ModifyPassword(char* dn, char* password)
-{
-	int result = 0;
-	LDAPMod passMod;
-	LDAPMod* mods[2] = {&passMod, NULL};
-	char* modValues[2] = {password, NULL};
-
-	passMod.mod_type = ldapPasswordField;
-	passMod.mod_op = LDAP_MOD_REPLACE;
-	passMod.mod_values = modValues;
-
-	lastLdapError = ldap_modify_ext_s(mainLdapConnection, dn, mods, NULL, NULL);
-	if(lastLdapError != LDAP_SUCCESS)
-	{
-		// log reason for modify failure.
-		timeStamp(&outLog);
-		outLog << "Ldap error in ModifyPassword" << endl;
-		outLog << "\t" << lastLdapError << ": " << ldap_err2string(lastLdapError) << endl;
-		result = -1;
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// PassSyncService::FutureOccurrence
-// ****************************************************************
-bool PassSyncService::FutureOccurrence(PASS_INFO_LIST_ITERATOR startingPassInfo)
-{
-	bool result = false;
-	PASS_INFO_LIST_ITERATOR currentPassInfo;
-
-	if((startingPassInfo != NULL) && (startingPassInfo != passInfoList.end()))
-	{
-		currentPassInfo = startingPassInfo;
-		currentPassInfo++;
-
-		while((currentPassInfo != passInfoList.end()) && (!result))
-		{
-			if(strcmp(currentPassInfo->username, startingPassInfo->username) == 0)
-			{
-				result = true;
-			}
-
-			currentPassInfo++;
-		}
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// PassSyncService::MultipleResults
-// ****************************************************************
-bool PassSyncService::MultipleResults()
-{
-	bool result = false;
-
-	if(ldap_next_entry(mainLdapConnection, ldap_first_entry(mainLdapConnection, results)) != NULL)
-	{
-		result = true;
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// PassSyncService::CanBind
-// ****************************************************************
-bool PassSyncService::CanBind(char* dn, char* password)
-{
-	bool result;
-	LDAP* tempConnection = NULL;
-
-	if(Connect(&tempConnection, dn, password) == 0)
-	{
-		result = true;
-	}
-	else
-	{
-		result = false;
-	}
-	
-	if(tempConnection != NULL)
-	{
-		Disconnect(&tempConnection);
-	}
-
-	return result;
-}
-
-// ****************************************************************
-// PassSyncService::BackoffTime
-// ****************************************************************
-unsigned long PassSyncService::BackoffTime(int backoff)
-{
-	unsigned long backoffTime = 0;
-
-	if(backoff > 0)
-	{
-		backoffTime = (1 << backoff) * SYNCSERV_BASE_BACKOFF_LEN;
-	}
-
-	return backoffTime;
-}
-
-// ****************************************************************
-// PassSyncService::UpdateBackoff
-// ****************************************************************
-void PassSyncService::UpdateBackoff()
-{
-	PASS_INFO_LIST_ITERATOR currentPassInfo;
-	PASS_INFO_LIST_ITERATOR tempPassInfo;
-	time_t currentTime;
-
-	time(&currentTime);
-
-	currentPassInfo = passInfoList.begin();
-	while(currentPassInfo != passInfoList.end())
-	{
-		if(((unsigned long)currentPassInfo->atTime + (BackoffTime(currentPassInfo->backoffCount) / 1000)) <= (unsigned long)currentTime)
-		{
-			currentPassInfo->backoffCount++;
-		}
-
-		if(((unsigned long)currentTime - (unsigned long)currentPassInfo->atTime) > (maxBackoffTime / 1000))
-		{
-			timeStamp(&outLog);
-			outLog << "Abandoning password change for " << currentPassInfo->username << ", backoff expired" << endl;
-
-			tempPassInfo = currentPassInfo;
-			currentPassInfo++;
-			passInfoList.erase(tempPassInfo);
-		}
-		else
-		{
-			currentPassInfo++;
-		}
-	}
-}
-
-// ****************************************************************
-// PassSyncService::GetMinBackoff
-// ****************************************************************
-int PassSyncService::GetMinBackoff()
-{
-	PASS_INFO_LIST_ITERATOR currentPassInfo;
-
-	unsigned long minBackoff = INFINITE;
-
-	for(currentPassInfo = passInfoList.begin(); currentPassInfo != passInfoList.end(); currentPassInfo++)
-	{
-		if((unsigned long)currentPassInfo->backoffCount < minBackoff)
-		{
-			minBackoff = currentPassInfo->backoffCount;
-		}
-	}
-
-	return minBackoff;
-}

+ 0 - 110
ldap/synctools/passwordsync/passsync/syncserv.h

@@ -1,110 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- * 
- * This Program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK --- */
-
-// Created: 2-8-2005
-// Author(s): Scott Bridges
-#ifndef _SYNCSERV_H_
-#define _SYNCSERV_H_
-
-#include <stdio.h>
-#include <math.h>
-#include "ldap.h"
-#include "ldap_ssl.h"
-#include "ldappr.h"
-#include "ntservice.h"
-#include "../passhand.h"
-
-#define SYNCSERV_BUF_SIZE 256
-#define SYNCSERV_TIMEOUT 10000
-#define SYNCSERV_ALLOW_MULTI_MOD false
-#define SYNCSERV_BASE_BACKOFF_LEN 1000
-
-class PassSyncService : public CNTService
-{
-public:
-	PassSyncService(const TCHAR* serviceName);
-	~PassSyncService();
-
-	void OnStop();
-	void OnShutdown();
-	void Run();
-
-	int SyncPasswords();
-
-private:
-	int Connect(LDAP** connection, char* dn, char* auth);
-	int Disconnect(LDAP** connection);
-	int QueryUsername(char* username);
-	char* GetDN();
-	int ModifyPassword(char* dn, char* password);
-
-	bool FutureOccurrence(PASS_INFO_LIST_ITERATOR startingPassInfo);
-	bool MultipleResults();
-	bool CanBind(char* dn, char* password);
-
-	unsigned long BackoffTime(int backoff);
-	void UpdateBackoff();
-	int GetMinBackoff();
-
-	PASS_INFO_LIST passInfoList;
-	HANDLE passhookEventHandle;
-
-	// LDAP variables
-	LDAP* mainLdapConnection;
-	LDAPMessage* results;
-	LDAPMessage* currentResult;
-	int lastLdapError;
-	char certPath[SYNCSERV_BUF_SIZE];
-	char logPath[SYNCSERV_BUF_SIZE];
-
-	// Config variables
-	char installPath[SYNCSERV_BUF_SIZE];
-	char dataFilename[SYNCSERV_BUF_SIZE];
-	char ldapHostName[SYNCSERV_BUF_SIZE];
-	char ldapHostPort[SYNCSERV_BUF_SIZE];
-	char ldapAuthUsername[SYNCSERV_BUF_SIZE];
-	char ldapAuthPassword[SYNCSERV_BUF_SIZE];
-	char ldapSearchBase[SYNCSERV_BUF_SIZE];
-	char ldapUsernameField[SYNCSERV_BUF_SIZE];
-	char ldapPasswordField[SYNCSERV_BUF_SIZE];
-	unsigned long maxBackoffTime;
-	int logLevel;
-	bool isRunning;
-	fstream outLog;
-};
-
-#endif

BIN
ldap/synctools/passwordsync/wix/Binary/Banner.bmp


BIN
ldap/synctools/passwordsync/wix/Binary/Complete.ico


BIN
ldap/synctools/passwordsync/wix/Binary/Custom.ico


BIN
ldap/synctools/passwordsync/wix/Binary/Dialog.bmp


BIN
ldap/synctools/passwordsync/wix/Binary/Exclam.ico


BIN
ldap/synctools/passwordsync/wix/Binary/Info.ico


BIN
ldap/synctools/passwordsync/wix/Binary/License.rtf


BIN
ldap/synctools/passwordsync/wix/Binary/New.ico


BIN
ldap/synctools/passwordsync/wix/Binary/Remove.ico


BIN
ldap/synctools/passwordsync/wix/Binary/Repair.ico


BIN
ldap/synctools/passwordsync/wix/Binary/Typical.ico


BIN
ldap/synctools/passwordsync/wix/Binary/Up.ico


+ 0 - 1335
ldap/synctools/passwordsync/wix/PassSync.wxs

@@ -1,1335 +0,0 @@
-<?xml version='1.0' encoding='windows-1252'?>
-<!-- BEGIN COPYRIGHT BLOCK
- This Program is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free Software
- Foundation; version 2 of the License.
- 
- This Program is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- 
- You should have received a copy of the GNU General Public License along with
- this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- Place, Suite 330, Boston, MA 02111-1307 USA.
-
- In addition, as a special exception, Red Hat, Inc. gives You the additional
- right to link the code of this Program with code not covered under the GNU
- General Public License ("Non-GPL Code") and to distribute linked combinations
- including the two, subject to the limitations in this paragraph. Non-GPL Code
- permitted under this exception must only link to the code of this Program
- through those well defined interfaces identified in the file named EXCEPTION
- found in the source code files (the "Approved Interfaces"). The files of
- Non-GPL Code may instantiate templates or use macros or inline functions from
- the Approved Interfaces without causing the resulting work to be covered by
- the GNU General Public License. Only Red Hat, Inc. may make changes or
- additions to the list of Approved Interfaces. You must obey the GNU General
- Public License in all respects for all of the Program code and other code used
- in conjunction with the Program except the Non-GPL Code covered by this
- exception. If you modify this file, you may extend this exception to your
- version of the file, but you are not obligated to do so. If you do not wish to
- provide this exception without modification, you must delete this exception
- statement from your version and license this file solely under the GPL without
- exception. 
-
-
- Copyright (C) 2005 Red Hat, Inc.
- All rights reserved.
- END COPYRIGHT BLOCK -->
-<Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'>
-  <Product Name='Fedora Directory Password Sync' Id='C1842CD5-4659-4E7C-A53C-37083B0CB59F'
-    Language='1033' Codepage='1252'
-    Version='1.0.1' Manufacturer='Fedora Project'>
-
-    <Package Id='????????-????-????-????-????????????' Keywords='Installer'
-      Description="Fedora Directory Password Synchronization Installer"
-      Manufacturer='Fedora Project'
-      InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
-
-    <Media Id='1' Cabinet='Sample.cab' EmbedCab='yes' DiskPrompt="CD-ROM #1" />
-    <Property Id='DiskPrompt' Value="Password Sync Installation [1]" />
-    <Property Id="HOSTNAME">
-      <RegistrySearch Id="HostName" Root="HKLM" Key="Software\PasswordSync"
-                      Name="Host Name" Type="registry" />
-    </Property>
-    <Property Id="PORTNUM">
-      <RegistrySearch Id="PortNum" Root="HKLM" Key="Software\PasswordSync"
-                      Name="Port Number" Type="registry" />
-    </Property>
-    <Property Id="USER">
-      <RegistrySearch Id="UserName" Root="HKLM" Key="Software\PasswordSync"
-                      Name="User Name" Type="registry" />
-    </Property>
-    <Property Id="PASSWORD">
-      <RegistrySearch Id="Password" Root="HKLM" Key="Software\PasswordSync"
-                      Name="Password" Type="registry" />
-    </Property>
-    <Property Id="CERTTOKEN">
-      <RegistrySearch Id="Certtkn" Root="HKLM" Key="Software\PasswordSync"
-                      Name="Cert Token" Type="registry" />
-    </Property>
-    <Property Id="SRCHBASE">
-      <RegistrySearch Id="SrchBase" Root="HKLM" Key="Software\PasswordSync"
-                      Name="Search Base" Type="registry" />
-    </Property>
-
-    <Directory Id='TARGETDIR' Name='SourceDir'>
-
-      <Directory Id='SystemFolder' Name='SysDir'>
-        <Component Id='HookLibrary' Guid='93790ACE-F522-413C-AEE3-DF05D99BAA6D'>
-          <File Id='PasshookDLL' Name='passhook.dll' DiskId='1' src='passhook.dll' Vital='yes' />
-        </Component>
-
-        <Component Id='NSLDAPLibrary' Guid='E3B9046B-1B9B-4E19-81F3-0A8D14CF72B2'>
-          <File Id='NSLDAP' LongName='nsldap32v50.dll' Name='nsldap.dll' DiskId='1' src='nsldap32v50.dll' Vital='yes' />
-        </Component>
-
-        <Component Id='NSLDAPSSLLibrary' Guid='794345C6-74B8-4917-A2E6-4DC9DCCFECD2'>
-          <File Id='NSLDAPSSL' LongName='nsldapssl32v50.dll' Name='nsldapss.dll' DiskId='1' src='nsldapssl32v50.dll' Vital='yes' />
-        </Component>
-
-        <Component Id='NSLDAPPRLibrary' Guid='D6ABE406-7663-4E27-81F3-482860FD6375'>
-          <File Id='NSLDAPRP' LongName='nsldappr32v50.dll' Name='nsldappr.dll' DiskId='1' src='nsldappr32v50.dll' Vital='yes' />
-        </Component>
-
-        <Component Id='NSPRLibrary' Guid='7DFF5449-F38C-4C3B-9876-E32A123F1EA5'>
-          <File Id='NSPR' LongName='libnspr4.dll' Name='libnspr4.dll' DiskId='1' src='libnspr4.dll' Vital='yes' />
-        </Component>
-
-        <Component Id='NSPRpldsLibrary' Guid='50C89341-754F-4092-8307-129DB119B42E'>
-          <File Id='NSPRPLDS' LongName='libplds4.dll' Name='libplds4.dll' DiskId='1' src='libplds4.dll' Vital='yes' />
-        </Component>
-
-        <Component Id='NSPRplcLibrary' Guid='1B8B1D78-E2C1-4F3A-A841-C79FFE26E6E0'>
-          <File Id='NSPRPLC' LongName='libplc4.dll' Name='libplc4.dll' DiskId='1' src='libplc4.dll' Vital='yes' />
-        </Component>
-
-        <Component Id='NSSLibrary' Guid='5E122346-6B77-456D-BCC5-76D7FA8AF258'>
-          <File Id='NSS' LongName='nss3.dll' Name='nss3.dll' DiskId='1' src='nss3.dll' Vital='yes' />
-        </Component>
-
-        <Component Id='NSSsslLibrary' Guid='A39CC896-F455-4701-9BF0-D1E31C116DE2'>
-          <File Id='NSSSSL' LongName='ssl3.dll' Name='ssl3.dll' DiskId='1' src='ssl3.dll' Vital='yes' />
-        </Component>
-
-        <Component Id='NSSsoftoknLibrary' Guid='9C57A076-D52A-4E74-A46A-DDF916A7D8BD'>
-          <File Id='NSSSOFTTOKN' LongName='softokn3.dll' Name='softokn3.dll' DiskId='1' src='softokn3.dll' Vital='yes' />
-        </Component>
-
-        <Component Id='NSSsmimeLibrary' Guid='E1030203-0A43-4767-BF5F-C7A51C687040'>
-          <File Id='NSSSMIME' LongName='smime3.dll' Name='smime3.dll' DiskId='1' src='smime3.dll' Vital='yes' />
-        </Component>
-      </Directory>
-
-      <Directory Id='ProgramFilesFolder' Name='PFiles'>
-
-          <Directory Id='INSTALLDIR' Name='PassSync' LongName='Fedora Directory Password Synchronization'>
-
-            <Component Id='MainExecutable' Guid='DCEECAA4-83F1-4F22-985B-FDB3C8ABD471'>
-              <File Id='PassSyncEXE' Name='PassSync.exe' LongName='passsync.exe' DiskId='1'
-                src='passsync.exe' Vital='yes' />
-            <!--  <Shortcut Id="startmenuPassSync" Directory="ProgramMenuDir" Name="PassSync" 
-                LongName="Password Synchronization" Target="MainProgram" WorkingDirectory='INSTALLDIR'
-                Icon="PassSync.exe" IconIndex="0" />
-                <Shortcut Id="desktopPassSync" Directory="DesktopFolder" Name="PassSync"
-                LongName="Password Synchronization" Target="MainProgram" WorkingDirectory='INSTALLDIR'
-                Icon="PassSync.exe" IconIndex="0" />
-            -->
-
-		  <ServiceInstall Id='PassSyncEXE' Name='PassSync' DisplayName='Password Synchronization' Type='ownProcess' 
-		   Interactive='yes' Start='auto' Vital='yes' ErrorControl='normal'/>
-		  <ServiceControl Id='PassSyncEXE' Name='PassSync' Start='install' Stop='both' Remove='uninstall' Wait='no'/>
-
-		  <Registry Id='InstPath' Root='HKLM' Key='Software\PasswordSync' Name='Install Path' Action='write' Type='string' Value='[INSTALLDIR]' />
-		  <Registry Id='HostName' Root='HKLM' Key='Software\PasswordSync' Name='Host Name' Action='write' Type='string' Value='[HOSTNAME]' />
-		  <Registry Id='PortNum' Root='HKLM' Key='Software\PasswordSync' Name='Port Number' Action='write' Type='string' Value='[PORTNUM]' />
-		  <Registry Id='UserName' Root='HKLM' Key='Software\PasswordSync' Name='User Name' Action='write' Type='string' Value='[USER]' />
-		  <Registry Id='Password' Root='HKLM' Key='Software\PasswordSync' Name='Password' Action='write' Type='string' Value='[PASSWORD]' />
-		  <Registry Id='Certtkn' Root='HKLM' Key='Software\PasswordSync' Name='Cert Token' Action='write' Type='string' Value='[CERTTOKEN]' />
-		  <Registry Id='SrchBase' Root='HKLM' Key='Software\PasswordSync' Name='Search Base' Action='write' Type='string' Value='[SRCHBASE]' />
-		  <Registry Id='UserFld' Root='HKLM' Key='Software\PasswordSync' Name='User Name Field' Action='write' Type='string' Value='ntuserdomainid' />
-		  <Registry Id='PassFld' Root='HKLM' Key='Software\PasswordSync' Name='Password Field' Action='write' Type='string' Value='userpassword' />
-                  <Registry Id='LogLevel' Root='HKLM' Key='Software\PasswordSync' Name='Log Level' Action='write' Type='string' Value='0' />
-		  <Registry Id='NotPkgs' Root='HKLM' Key='SYSTEM\ControlSet001\Control\Lsa' Name='Notification Packages' Action='append'
-		   Type='multiString' Value='passhook'/>
-            </Component>
-
-            <Component Id='NSScertutil' Guid='EE2FB62B-E104-4049-8A6D-B96D4524FC29'>
-              <File Id='NSSCERTUTIL' LongName='certutil.exe' Name='certutil.exe' DiskId='1' src='certutil.exe' Vital='yes' />
-            </Component>
-
-            <Component Id='NSSpk12util' Guid='13393BA9-550A-4330-85B9-76F14225A6D7'>
-              <File Id='NSSPK12UTIL' LongName='pk12util.exe' Name='pk12util.exe' DiskId='1' src='pk12util.exe' Vital='yes' />
-            </Component>
-
-          </Directory>
-      </Directory>
-
-      <!-- <Directory Id="ProgramMenuFolder" Name="PMenu" LongName="Programs">
-        <Directory Id="ProgramMenuDir" Name='PassSync' LongName="Fedora Directory Password Synchronization Service" />
-    </Directory>
-      -->
-
-      <Directory Id="DesktopFolder" Name="Desktop" />
-    </Directory>
-
-    <Feature Id='Complete' Title='Password Synchronization Service' Description='The complete package.'
-      TypicalDefault='install' Display='expand' Level='1'
-      ConfigurableDirectory='INSTALLDIR'>
-      <Feature Id='MainProgram' Title='Program' Description='The main executable.'
-        TypicalDefault='install' Level='1'>
-        <ComponentRef Id='MainExecutable' />
-        <ComponentRef Id='HookLibrary' />
-	  <ComponentRef Id='NSLDAPLibrary' />
-	  <ComponentRef Id='NSLDAPSSLLibrary' />
-	  <ComponentRef Id='NSLDAPPRLibrary' />
-	  <ComponentRef Id='NSPRLibrary' />
-	  <ComponentRef Id='NSPRpldsLibrary' />
-	  <ComponentRef Id='NSPRplcLibrary' />
-	  <ComponentRef Id='NSSLibrary' />
-	  <ComponentRef Id='NSSsslLibrary' />
-	  <ComponentRef Id='NSSsoftoknLibrary' />
-	  <ComponentRef Id='NSSsmimeLibrary' />
-	  <ComponentRef Id='NSScertutil' />
-	  <ComponentRef Id='NSSpk12util' />
-      </Feature>
-    </Feature>
-
-    <UI>
-      <Property Id="DefaultUIFont">DlgFont8</Property>
-      <Property Id="ErrorDialog">ErrorDlg</Property>
-
-      <Dialog Id="AdminWelcomeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Property="InstallMode" Value="Server Image">1</Publish>
-          <Publish Event="NewDialog" Value="AdminRegistrationDlg">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
-          <Text>The [Wizard] will create a server image of [ProductName], at a specified network location. Click Next to continue or Cancel to exit the [Wizard].</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="PrepareDlg" Width="370" Height="270" Title="[ProductName] [Setup]" Modeless="yes">
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="ActionText" Type="Text" X="135" Y="100" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
-          <Subscribe Event="ActionText" Attribute="Text" />
-        </Control>
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Please wait while the [Wizard] prepares to guide you through the installation.</Text>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" TabSkip="yes" Text="[ButtonText_Next]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" TabSkip="yes" Text="[ButtonText_Back]" />
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
-        </Control>
-        <Control Id="ActionData" Type="Text" X="135" Y="125" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
-          <Subscribe Event="ActionData" Attribute="Text" />
-        </Control>
-      </Dialog>
-
-      <Dialog Id="ProgressDlg" Width="370" Height="270" Title="[ProductName] [Setup]" Modeless="yes">
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Next]" />
-        <Control Id="ActionText" Type="Text" X="70" Y="100" Width="265" Height="10">
-          <Subscribe Event="ActionText" Attribute="Text" />
-        </Control>
-        <Control Id="Text" Type="Text" X="35" Y="65" Width="300" Height="20">
-          <Text>Please wait while the [Wizard] [Progress2] [ProductName]. This may take several minutes.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="20" Y="15" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont][Progress1] [ProductName]</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="ProgressBar" Type="ProgressBar" X="35" Y="115" Width="300" Height="10" ProgressBlocks="yes" Text="Progress done">
-          <Subscribe Event="SetProgress" Attribute="Progress" />
-        </Control>
-        <Control Id="StatusLabel" Type="Text" X="35" Y="100" Width="35" Height="10" Text="Status:" />
-      </Dialog>
-
-      <Dialog Id="UserExit" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Finish]">
-          <Publish Event="EndDialog" Value="Exit">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Cancel]" />
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}[ProductName] [Wizard] was interrupted</Text>
-        </Control>
-        <Control Id="Description1" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes">
-          <Text>[ProductName] setup was interrupted. Your system has not been modified. To install this program at a later time, please run the installation again.</Text>
-        </Control>
-        <Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Click the Finish button to exit the [Wizard].</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="FatalError" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Finish]">
-          <Publish Event="EndDialog" Value="Exit">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Cancel]" />
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}[ProductName] [Wizard] ended prematurely</Text>
-        </Control>
-        <Control Id="Description1" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes">
-          <Text>[ProductName] setup ended prematurely because of an error. Your system has not been modified. To install this program at a later time, please run the installation again.</Text>
-        </Control>
-        <Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Click the Finish button to exit the [Wizard].</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="ExitDialog" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Finish]">
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Cancel]" />
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Click the Finish button to exit the [Wizard].</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}Completing the [ProductName] [Wizard]</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="AdminBrowseDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="PathEdit" Type="PathEdit" X="84" Y="202" Width="261" Height="17" Property="TARGETDIR" />
-        <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_OK]">
-          <Publish Event="SetTargetPath" Value="TARGETDIR">1</Publish>
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="240" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="Reset" Value="0">1</Publish>
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="&amp;Look in:" />
-        <Control Id="DirectoryCombo" Type="DirectoryCombo" X="70" Y="55" Width="220" Height="80" Property="TARGETDIR" Removable="yes" Fixed="yes" Remote="yes">
-          <Subscribe Event="IgnoreChange" Attribute="IgnoreChange" />
-        </Control>
-        <Control Id="Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="Up One Level" Icon="yes" FixedSize="yes" IconSize="16" Text="Up">
-          <Publish Event="DirectoryListUp" Value="0">1</Publish>
-        </Control>
-        <Control Id="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19" ToolTip="Create A New Folder" Icon="yes" FixedSize="yes" IconSize="16" Text="New">
-          <Publish Event="DirectoryListNew" Value="0">1</Publish>
-        </Control>
-        <Control Id="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="110" Property="TARGETDIR" Sunken="yes" TabSkip="no" />
-        <Control Id="PathLabel" Type="Text" X="25" Y="205" Width="59" Height="10" TabSkip="no" Text="&amp;Folder name:" />
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Browse to the destination folder</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Change current destination folder</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="AdminInstallPointDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Text" Type="Text" X="25" Y="80" Width="320" Height="10" TabSkip="no">
-          <Text>&amp;Enter a new network location or click Browse to browse to one.</Text>
-        </Control>
-        <Control Id="PathEdit" Type="PathEdit" X="25" Y="93" Width="320" Height="18" Property="TARGETDIR" />
-        <Control Id="Browse" Type="PushButton" X="289" Y="119" Width="56" Height="17" Text="[ButtonText_Browse]">
-          <Publish Event="SpawnDialog" Value="AdminBrowseDlg">1</Publish>
-        </Control>
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="AdminRegistrationDlg">1</Publish>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="SetTargetPath" Value="TARGETDIR">1</Publish>
-          <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Please specify a network location for the server image of [ProductName] product</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Network Location</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="AdminRegistrationDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="OrganizationLabel" Type="Text" X="45" Y="71" Width="285" Height="30" TabSkip="no">
-          <Text>&amp;Please enter the name of your organization in the box below. This will be used as default company name for subsequent installations of [ProductName]:</Text>
-        </Control>
-        <Control Id="OrganizationEdit" Type="Edit" X="45" Y="105" Width="220" Height="18" Property="COMPANYNAME" Text="{80}" />
-        <Control Id="CDKeyLabel" Type="Text" X="45" Y="130" Width="50" Height="10" TabSkip="no">
-          <Text>CD &amp;Key:</Text>
-        </Control>
-        <Control Id="CDKeyEdit" Type="MaskedEdit" X="45" Y="143" Width="250" Height="16" Property="PIDKEY" Text="[PortTemplate]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Image="yes" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="AdminWelcomeDlg">1</Publish>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="ValidateProductID" Value="0">0</Publish>
-          <Publish Event="NewDialog" Value="AdminInstallPointDlg">ProductID</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Please enter your company information</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Company Information</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="BrowseDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="PathEdit" Type="PathEdit" X="84" Y="202" Width="261" Height="18" Property="_BrowseProperty" Indirect="yes" />
-        <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_OK]">
-          <Publish Event="SetTargetPath" Value="[_BrowseProperty]">1</Publish>
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="240" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="Reset" Value="0">1</Publish>
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="&amp;Look in:" />
-        <Control Id="DirectoryCombo" Type="DirectoryCombo" X="70" Y="55" Width="220" Height="80" Property="_BrowseProperty" Indirect="yes" Fixed="yes" Remote="yes">
-          <Subscribe Event="IgnoreChange" Attribute="IgnoreChange" />
-        </Control>
-        <Control Id="Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="Up One Level" Icon="yes" FixedSize="yes" IconSize="16" Text="Up">
-          <Publish Event="DirectoryListUp" Value="0">1</Publish>
-        </Control>
-        <Control Id="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19" ToolTip="Create A New Folder" Icon="yes" FixedSize="yes" IconSize="16" Text="New">
-          <Publish Event="DirectoryListNew" Value="0">1</Publish>
-        </Control>
-        <Control Id="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="110" Property="_BrowseProperty" Sunken="yes" Indirect="yes" TabSkip="no" />
-        <Control Id="PathLabel" Type="Text" X="25" Y="205" Width="59" Height="10" TabSkip="no" Text="&amp;Folder name:" />
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Browse to the destination folder</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Change current destination folder</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="CancelDlg" Width="260" Height="85" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="No" Type="PushButton" X="132" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_No]">
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="Yes" Type="PushButton" X="72" Y="57" Width="56" Height="17" Text="[ButtonText_Yes]">
-          <Publish Event="EndDialog" Value="Exit">1</Publish>
-        </Control>
-        <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30">
-          <Text>Are you sure you want to cancel [ProductName] installation?</Text>
-        </Control>
-        <Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Information icon" FixedSize="yes" IconSize="32" Text="[InfoIcon]" />
-      </Dialog>
-
-      <Dialog Id="CustomizeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
-        <Control Id="Tree" Type="SelectionTree" X="25" Y="85" Width="175" Height="95" Property="_BrowseProperty" Sunken="yes" TabSkip="no" Text="Tree of selections" />
-        <Control Id="Browse" Type="PushButton" X="304" Y="200" Width="56" Height="17" Text="[ButtonText_Browse]">
-          <Publish Event="SelectionBrowse" Value="BrowseDlg">1</Publish>
-          <Condition Action="hide">Installed</Condition>
-        </Control>
-        <Control Id="Reset" Type="PushButton" X="42" Y="243" Width="56" Height="17" Text="[ButtonText_Reset]">
-          <Publish Event="Reset" Value="0">1</Publish>
-          <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
-        </Control>
-        <Control Id="DiskCost" Type="PushButton" X="111" Y="243" Width="56" Height="17">
-          <Text>Disk &amp;Usage</Text>
-          <Publish Event="SpawnDialog" Value="DiskCostDlg">1</Publish>
-          <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
-        </Control>
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="MaintenanceTypeDlg"><![CDATA[InstallMode = "Change"]]></Publish>
-          <Publish Event="NewDialog" Value="SetupTypeDlg"><![CDATA[InstallMode = "Custom"]]></Publish>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-          <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Select the way you want features to be installed.</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="25" Y="55" Width="320" Height="20">
-          <Text>Click on the icons in the tree below to change the way features will be installed.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Custom Setup</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="Box" Type="GroupBox" X="210" Y="81" Width="140" Height="98" />
-        <Control Id="ItemDescription" Type="Text" X="215" Y="90" Width="131" Height="30">
-          <Text>Multiline description of the currently selected item.</Text>
-          <Subscribe Event="SelectionDescription" Attribute="Text" />
-        </Control>
-        <Control Id="ItemSize" Type="Text" X="215" Y="130" Width="131" Height="45">
-          <Text>The size of the currently selected item.</Text>
-          <Subscribe Event="SelectionSize" Attribute="Text" />
-        </Control>
-        <Control Id="Location" Type="Text" X="75" Y="200" Width="215" Height="20">
-          <Text>&lt;The selection's path&gt;</Text>
-          <Subscribe Event="SelectionPath" Attribute="Text" />
-          <Subscribe Event="SelectionPathOn" Attribute="Visible" />
-          <Condition Action="hide">Installed</Condition>
-        </Control>
-        <Control Id="LocationLabel" Type="Text" X="25" Y="200" Width="50" Height="10" Text="Location:">
-          <Subscribe Event="SelectionPathOn" Attribute="Visible" />
-          <Condition Action="hide">Installed</Condition>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="DiskCostDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_OK]">
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>The disk space required for the installation of the selected features.</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
-          <Text>The highlighted volumes (if any) do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Disk Space Requirements</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="VolumeList" Type="VolumeCostList" X="20" Y="100" Width="330" Height="120" Sunken="yes" Fixed="yes" Remote="yes">
-          <Text>{120}{70}{70}{70}{70}</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="ErrorDlg" Width="270" Height="105" Title="Installer Information" ErrorDialog="yes" NoMinimize="yes">
-        <Control Id="ErrorText" Type="Text" X="48" Y="15" Width="205" Height="60" TabSkip="no" Text="Information text" />
-        <Control Id="Y" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Yes]">
-          <Publish Event="EndDialog" Value="ErrorYes">1</Publish>
-        </Control>
-        <Control Id="A" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="EndDialog" Value="ErrorAbort">1</Publish>
-        </Control>
-        <Control Id="C" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="EndDialog" Value="ErrorCancel">1</Publish>
-        </Control>
-        <Control Id="ErrorIcon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Information icon" FixedSize="yes" IconSize="32" Text="[InfoIcon]" />
-        <Control Id="I" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Ignore]">
-          <Publish Event="EndDialog" Value="ErrorIgnore">1</Publish>
-        </Control>
-        <Control Id="N" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_No]">
-          <Publish Event="EndDialog" Value="ErrorNo">1</Publish>
-        </Control>
-        <Control Id="O" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_OK]">
-          <Publish Event="EndDialog" Value="ErrorOk">1</Publish>
-        </Control>
-        <Control Id="R" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Retry]">
-          <Publish Event="EndDialog" Value="ErrorRetry">1</Publish>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="FilesInUse" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" KeepModeless="yes">
-        <Control Id="Retry" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Retry]">
-          <Publish Event="EndDialog" Value="Retry">1</Publish>
-        </Control>
-        <Control Id="Ignore" Type="PushButton" X="235" Y="243" Width="56" Height="17" Text="[ButtonText_Ignore]">
-          <Publish Event="EndDialog" Value="Ignore">1</Publish>
-        </Control>
-        <Control Id="Exit" Type="PushButton" X="166" Y="243" Width="56" Height="17" Text="[ButtonText_Exit]">
-          <Publish Event="EndDialog" Value="Exit">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Some files that need to be updated are currently in use.</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="20" Y="55" Width="330" Height="30">
-          <Text>The following applications are using files that need to be updated by this setup. Close these applications and then click Retry to continue the installation or Cancel to exit it.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Files in Use</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="List" Type="ListBox" X="20" Y="87" Width="330" Height="130" Property="FileInUseProcess" Sunken="yes" TabSkip="yes" />
-      </Dialog>
-
-      <Dialog Id="LicenseAgreementDlg" Width="370" Height="270" Title="[ProductName] License Agreement" NoMinimize="yes">
-        <Control Id="Buttons" Type="RadioButtonGroup" X="20" Y="187" Width="330" Height="40" Property="IAgree" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="NewDialog" Value="UserRegistrationDlg"><![CDATA[IAgree = "Yes" AND ShowUserRegistrationDlg = 1]]></Publish>
-          <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
-          <Publish Event="NewDialog" Value="SetupTypeDlg"><![CDATA[IAgree = "Yes" AND ShowUserRegistrationDlg <> 1]]></Publish>
-          <Condition Action="disable"><![CDATA[IAgree <> "Yes"]]></Condition>
-          <Condition Action="enable">IAgree = "Yes"</Condition>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="AgreementText" Type="ScrollableText" X="20" Y="60" Width="330" Height="120" Sunken="yes" TabSkip="no">
-          <Text src="Binary/License.rtf" />
-        </Control>
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Please read the following license agreement carefully</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]End-User License Agreement</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="MaintenanceTypeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="ChangeLabel" Type="Text" X="105" Y="65" Width="100" Height="10" TabSkip="no">
-          <Text>[DlgTitleFont]&amp;Modify</Text>
-        </Control>
-        <Control Id="ChangeButton" Type="PushButton" X="50" Y="65" Width="38" Height="38" ToolTip="Modify Installation" Default="yes" Icon="yes" FixedSize="yes" IconSize="32" Text="[CustomSetupIcon]">
-          <Publish Property="InstallMode" Value="Change">1</Publish>
-          <Publish Property="Progress1" Value="Changing">1</Publish>
-          <Publish Property="Progress2" Value="changes">1</Publish>
-          <Publish Event="NewDialog" Value="UserRegistrationDlg">1</Publish>
-        </Control>
-        <Control Id="RepairLabel" Type="Text" X="105" Y="114" Width="100" Height="10" TabSkip="no">
-          <Text>[DlgTitleFont]Re&amp;pair</Text>
-        </Control>
-        <Control Id="RepairButton" Type="PushButton" X="50" Y="114" Width="38" Height="38" ToolTip="Repair Installation" Icon="yes" FixedSize="yes" IconSize="32" Text="[RepairIcon]">
-          <Publish Property="InstallMode" Value="Repair">1</Publish>
-          <Publish Property="Progress1" Value="Repairing">1</Publish>
-          <Publish Property="Progress2" Value="repaires">1</Publish>
-          <Publish Event="NewDialog" Value="VerifyRepairDlg">1</Publish>
-        </Control>
-        <Control Id="RemoveLabel" Type="Text" X="105" Y="163" Width="100" Height="10" TabSkip="no">
-          <Text>[DlgTitleFont]&amp;Remove</Text>
-        </Control>
-        <Control Id="RemoveButton" Type="PushButton" X="50" Y="163" Width="38" Height="38" ToolTip="Remove Installation" Icon="yes" FixedSize="yes" IconSize="32" Text="[RemoveIcon]">
-          <Publish Property="InstallMode" Value="Remove">1</Publish>
-          <Publish Property="Progress1" Value="Removing">1</Publish>
-          <Publish Property="Progress2" Value="removes">1</Publish>
-          <Publish Event="NewDialog" Value="VerifyRemoveDlg">1</Publish>
-        </Control>
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Next]" />
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Select the operation you wish to perform.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="240" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Modify, Repair or Remove installation</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="ChangeText" Type="Text" X="105" Y="78" Width="230" Height="20">
-          <Text>Allows users to change the way features are installed.</Text>
-        </Control>
-        <Control Id="RemoveText" Type="Text" X="105" Y="176" Width="230" Height="20">
-          <Text>Removes [ProductName] from your computer.</Text>
-        </Control>
-        <Control Id="RepairText" Type="Text" X="105" Y="127" Width="230" Height="30">
-          <Text>Repairs errors in the most recent installation state - fixes missing or corrupt files, shortcuts and registry entries.</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="MaintenanceWelcomeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
-          <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>The [Wizard] will allow you to change the way [ProductName] features are installed on your computer or even to remove [ProductName] from your computer. Click Next to continue or Cancel to exit the [Wizard].</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="OutOfDiskDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_OK]">
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Disk space required for the installation exceeds available disk space.</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
-          <Text>The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Out of Disk Space</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="VolumeList" Type="VolumeCostList" X="20" Y="100" Width="330" Height="120" Sunken="yes" Fixed="yes" Remote="yes">
-          <Text>{120}{70}{70}{70}{70}</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="OutOfRbDiskDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="No" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_No]">
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="Yes" Type="PushButton" X="240" Y="243" Width="56" Height="17" Text="[ButtonText_Yes]">
-          <Publish Event="EnableRollback" Value="False">1</Publish>
-          <Publish Event="EndDialog" Value="Return">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
-          <Text>Disk space required for the installation exceeds available disk space.</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
-          <Text>The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Out of Disk Space</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="VolumeList" Type="VolumeCostList" X="20" Y="140" Width="330" Height="80" Sunken="yes" Fixed="yes" Remote="yes" ShowRollbackCost="yes">
-          <Text>{120}{70}{70}{70}{70}</Text>
-        </Control>
-        <Control Id="Text2" Type="Text" X="20" Y="94" Width="330" Height="40">
-          <Text>Alternatively, you may choose to disable the installer's rollback functionality. This allows the installer to restore your computer's original state should the installation be interrupted in any way. Click Yes if you wish to take the risk to disable rollback.</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="ResumeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Install]">
-          <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
-          <Text>The [Wizard] will complete the installation of [ProductName] on your computer. Click Install to continue or Cancel to exit the [Wizard].</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}Resuming the [ProductName] [Wizard]</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="SetupTypeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="TypicalLabel" Type="Text" X="105" Y="65" Width="100" Height="10" TabSkip="no">
-          <Text>[DlgTitleFont]&amp;Typical</Text>
-        </Control>
-        <Control Id="TypicalButton" Type="PushButton" X="50" Y="65" Width="38" Height="38" ToolTip="Typical Installation" Default="yes" Icon="yes" FixedSize="yes" IconSize="32" Text="[InstallerIcon]">
-          <Publish Property="InstallMode" Value="Typical">1</Publish>
-          <Publish Event="SetInstallLevel" Value="3">1</Publish>
-          <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-        </Control>
-        <Control Id="CustomLabel" Type="Text" X="105" Y="118" Width="100" Height="10" TabSkip="no">
-          <Text>[DlgTitleFont]C&amp;ustom</Text>
-        </Control>
-        <Control Id="CustomButton" Type="PushButton" X="50" Y="118" Width="38" Height="38" ToolTip="Custom Installation" Icon="yes" FixedSize="yes" IconSize="32" Text="[CustomSetupIcon]">
-          <Publish Property="InstallMode" Value="Custom">1</Publish>
-          <Publish Event="NewDialog" Value="CustomizeDlg">1</Publish>
-        </Control>
-        <Control Id="CompleteLabel" Type="Text" X="105" Y="171" Width="100" Height="10" TabSkip="no">
-          <Text>[DlgTitleFont]C&amp;omplete</Text>
-        </Control>
-        <Control Id="CompleteButton" Type="PushButton" X="50" Y="171" Width="38" Height="38" ToolTip="Complete Installation" Icon="yes" FixedSize="yes" IconSize="32" Text="[CompleteSetupIcon]">
-          <Publish Property="InstallMode" Value="Complete">1</Publish>
-          <Publish Event="SetInstallLevel" Value="1000">1</Publish>
-          <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-        </Control>
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="LicenseAgreementDlg"><![CDATA[ShowUserRegistrationDlg <> 1]]></Publish>
-          <Publish Event="NewDialog" Value="UserRegistrationDlg">ShowUserRegistrationDlg = 1</Publish>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Next]" />
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Choose the setup type that best suits your needs</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Choose Setup Type</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-        <Control Id="CompleteText" Type="Text" X="105" Y="184" Width="230" Height="20">
-          <Text>All program features will be installed. (Requires most disk space)</Text>
-        </Control>
-        <Control Id="CustomText" Type="Text" X="105" Y="131" Width="230" Height="30">
-          <Text>Allows users to choose which program features will be installed and where they will be installed. Recommended for advanced users.</Text>
-        </Control>
-        <Control Id="TypicalText" Type="Text" X="105" Y="78" Width="230" Height="20">
-          <Text>Installs the most common program features. Recommended for most users.</Text>
-        </Control>
-      </Dialog>
-
-      <Dialog Id="UserRegistrationDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="HostLabel" Type="Text" X="45" Y="73" Width="50" Height="15" TabSkip="no" Text="&amp;Host Name:" />
-        <Control Id="HostEdit" Type="Edit" X="100" Y="71" Width="220" Height="18" Property="HOSTNAME"/>
-        <Control Id="PortLabel" Type="Text" X="45" Y="100" Width="50" Height="15" TabSkip="no" Text="&amp;Port Number:" />
-        <Control Id="PortEdit" Type="MaskedEdit" X="100" Y="98" Width="220" Height="18" Property="PORTNUM" Text="[PortTemplate]" />
-	  <Control Id="UserLabel" Type="Text" X="45" Y="127" Width="50" Height="15" TabSkip="no" Text="&amp;User Name:" />
-	  <Control Id="UserEdit" Type="Edit" X="100" Y="125" Width="220" Height="18" Property="USER"/>
-	  <Control Id="PwdLabel" Type="Text" X="45" Y="154" Width="50" Height="15" TabSkip="no" Text="&amp;Password:"/>
-	  <Control Id="PwdEdit" Type="Edit" Password="yes" X="100" Y="152" Width="220" Height="18" Property="PASSWORD"/>
-	  <Control Id="CertLabel" Type="Text" X="45" Y="181" Width="50" Height="15" TabSkip="no" Text="&amp;Cert Token:"/>
-	  <Control Id="CertEdit" Type="Edit" Password="yes" X="100" Y="179" Width="220" Height="18" Property="CERTTOKEN"/>
-	  <Control Id="SBLabel" Type="Text" X="45" Y="208" Width="50" Height="15" TabSkip="no" Text="&amp;Search Base:"/>
-	  <Control Id="SBEdit" Type="Edit" X="100" Y="206" Width="220" Height="18" Property="SRCHBASE"/>
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
-        </Control>
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
-          <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>Please enter your password synchronization information</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Password Synchronization Information</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="VerifyReadyDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
-        <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Install]">
-          <Publish Event="Reinstall" Value="ALL"><![CDATA[InstallMode = "Change"]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="UserRegistrationDlg">1</Publish>
-        </Control>
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>The [Wizard] is ready to begin the [InstallMode] installation</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="20">
-          <Text>Click Install to begin the installation. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Ready to Install</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="VerifyRemoveDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
-        </Control>
-        <Control Id="Remove" Type="PushButton" X="236" Y="243" Width="56" Height="17" Text="[ButtonText_Remove]">
-          <Publish Event="Remove" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>You have chosen to remove the program from your computer.</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="30">
-          <Text>Click Remove to remove [ProductName] from your computer. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Remove [ProductName]</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="VerifyRepairDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
-        <Control Id="Repair" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Repair]">
-          <Publish Event="ReinstallMode" Value="ecmus"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="Reinstall" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
-          <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
-          <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
-          <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
-        </Control>
-        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>The [Wizard] is ready to begin the repair of [ProductName].</Text>
-        </Control>
-        <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="30">
-          <Text>Click Repair to repair the installation of [ProductName]. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
-          <Text>[DlgTitleFont]Repair [ProductName]</Text>
-        </Control>
-        <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
-      </Dialog>
-
-      <Dialog Id="WaitForCostingDlg" Width="260" Height="85" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Return" Type="PushButton" X="102" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Return]">
-          <Publish Event="EndDialog" Value="Exit">1</Publish>
-        </Control>
-        <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30">
-          <Text>Please wait while the installer finishes determining your disk space requirements.</Text>
-        </Control>
-        <Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Exclamation icon" FixedSize="yes" IconSize="32" Text="[ExclamationIcon]" />
-      </Dialog>
-
-      <Dialog Id="WelcomeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
-        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
-          <Publish Event="NewDialog" Value="UserRegistrationDlg">1</Publish>
-        </Control>
-        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
-          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
-        </Control>
-        <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
-        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
-        <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
-          <Text>The [Wizard] will install [ProductName] on your computer. Click Next to continue or Cancel to exit the [Wizard].</Text>
-        </Control>
-        <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
-        <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
-          <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
-        </Control>
-      </Dialog>
-
-      <RadioButtonGroup Property="IAgree">
-        <RadioButton Text="{\DlgFont8}I &amp;accept the terms in the License Agreement" Value="Yes" X="5" Y="0" Width="250" Height="15" />
-        <RadioButton Text="{\DlgFont8}I &amp;do not accept the terms in the License Agreement" Value="No" X="5" Y="20" Width="250" Height="15" />
-      </RadioButtonGroup>
-
-      <TextStyle Id="DlgFont8" FaceName="Tahoma" Size="8" />
-      <TextStyle Id="DlgFontBold8" FaceName="Tahoma" Size="8" Bold="yes" />
-      <TextStyle Id="VerdanaBold13" FaceName="Verdana" Size="13" Bold="yes" />
-
-      <UIText Id="AbsentPath" />
-      <UIText Id="bytes">bytes</UIText>
-      <UIText Id="GB">GB</UIText>
-      <UIText Id="KB">KB</UIText>
-      <UIText Id="MB">MB</UIText>
-      <UIText Id="MenuAbsent">Entire feature will be unavailable</UIText>
-      <UIText Id="MenuAdvertise">Feature will be installed when required</UIText>
-      <UIText Id="MenuAllCD">Entire feature will be installed to run from CD</UIText>
-      <UIText Id="MenuAllLocal">Entire feature will be installed on local hard drive</UIText>
-      <UIText Id="MenuAllNetwork">Entire feature will be installed to run from network</UIText>
-      <UIText Id="MenuCD">Will be installed to run from CD</UIText>
-      <UIText Id="MenuLocal">Will be installed on local hard drive</UIText>
-      <UIText Id="MenuNetwork">Will be installed to run from network</UIText>
-      <UIText Id="ScriptInProgress">Gathering required information...</UIText>
-      <UIText Id="SelAbsentAbsent">This feature will remain uninstalled</UIText>
-      <UIText Id="SelAbsentAdvertise">This feature will be set to be installed when required</UIText>
-      <UIText Id="SelAbsentCD">This feature will be installed to run from CD</UIText>
-      <UIText Id="SelAbsentLocal">This feature will be installed on the local hard drive</UIText>
-      <UIText Id="SelAbsentNetwork">This feature will be installed to run from the network</UIText>
-      <UIText Id="SelAdvertiseAbsent">This feature will become unavailable</UIText>
-      <UIText Id="SelAdvertiseAdvertise">Will be installed when required</UIText>
-      <UIText Id="SelAdvertiseCD">This feature will be available to run from CD</UIText>
-      <UIText Id="SelAdvertiseLocal">This feature will be installed on your local hard drive</UIText>
-      <UIText Id="SelAdvertiseNetwork">This feature will be available to run from the network</UIText>
-      <UIText Id="SelCDAbsent">This feature will be uninstalled completely, you won't be able to run it from CD</UIText>
-      <UIText Id="SelCDAdvertise">This feature will change from run from CD state to set to be installed when required</UIText>
-      <UIText Id="SelCDCD">This feature will remain to be run from CD</UIText>
-      <UIText Id="SelCDLocal">This feature will change from run from CD state to be installed on the local hard drive</UIText>
-      <UIText Id="SelChildCostNeg">This feature frees up [1] on your hard drive.</UIText>
-      <UIText Id="SelChildCostPos">This feature requires [1] on your hard drive.</UIText>
-      <UIText Id="SelCostPending">Compiling cost for this feature...</UIText>
-      <UIText Id="SelLocalAbsent">This feature will be completely removed</UIText>
-      <UIText Id="SelLocalAdvertise">This feature will be removed from your local hard drive, but will be set to be installed when required</UIText>
-      <UIText Id="SelLocalCD">This feature will be removed from your local hard drive, but will be still available to run from CD</UIText>
-      <UIText Id="SelLocalLocal">This feature will remain on you local hard drive</UIText>
-      <UIText Id="SelLocalNetwork">This feature will be removed from your local hard drive, but will be still available to run from the network</UIText>
-      <UIText Id="SelNetworkAbsent">This feature will be uninstalled completely, you won't be able to run it from the network</UIText>
-      <UIText Id="SelNetworkAdvertise">This feature will change from run from network state to set to be installed when required</UIText>
-      <UIText Id="SelNetworkLocal">This feature will change from run from network state to be installed on the local hard drive</UIText>
-      <UIText Id="SelNetworkNetwork">This feature will remain to be run from the network</UIText>
-      <UIText Id="SelParentCostNegNeg">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</UIText>
-      <UIText Id="SelParentCostNegPos">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</UIText>
-      <UIText Id="SelParentCostPosNeg">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</UIText>
-      <UIText Id="SelParentCostPosPos">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</UIText>
-      <UIText Id="TimeRemaining">Time remaining: {[1] minutes }{[2] seconds}</UIText>
-      <UIText Id="VolumeCostAvailable">Available</UIText>
-      <UIText Id="VolumeCostDifference">Difference</UIText>
-      <UIText Id="VolumeCostRequired">Required</UIText>
-      <UIText Id="VolumeCostSize">Disk Size</UIText>
-      <UIText Id="VolumeCostVolume">Volume</UIText>
-      <ProgressText Action="CostFinalize">Computing space requirements</ProgressText>
-      <ProgressText Action="CostInitialize">Computing space requirements</ProgressText>
-      <ProgressText Action="FileCost">Computing space requirements</ProgressText>
-      <ProgressText Action="InstallValidate">Validating install</ProgressText>
-      <ProgressText Action="InstallFiles" Template="File: [1],  Directory: [9],  Size: [6]">Copying new files</ProgressText>
-      <ProgressText Action="InstallAdminPackage" Template="File: [1], Directory: [9], Size: [6]">Copying network install files</ProgressText>
-      <ProgressText Action="CreateShortcuts" Template="Shortcut: [1]">Creating shortcuts</ProgressText>
-      <ProgressText Action="PublishComponents" Template="Component ID: [1], Qualifier: [2]">Publishing Qualified Components</ProgressText>
-      <ProgressText Action="PublishFeatures" Template="Feature: [1]">Publishing Product Features</ProgressText>
-      <ProgressText Action="PublishProduct">Publishing product information</ProgressText>
-      <ProgressText Action="ClassInfo" Template="Class Id: [1]">Registering Class servers</ProgressText>
-      <ProgressText Action="RegisterExtensionInfo" Template="Extension: [1]">Registering extension servers</ProgressText>
-      <ProgressText Action="RegisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">Registering MIME info</ProgressText>
-      <ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">Registering program identifiers</ProgressText>
-      <ProgressText Action="AllocateRegistrySpace" Template="Free space: [1]">Allocating registry space</ProgressText>
-      <ProgressText Action="AppSearch" Template="Property: [1], Signature: [2]">Searching for installed applications</ProgressText>
-      <ProgressText Action="BindImage" Template="File: [1]">Binding executables</ProgressText>
-      <ProgressText Action="CCPSearch">Searching for qualifying products</ProgressText>
-      <ProgressText Action="CreateFolders" Template="Folder: [1]">Creating folders</ProgressText>
-      <ProgressText Action="DeleteServices" Template="Service: [1]">Deleting services</ProgressText>
-      <ProgressText Action="DuplicateFiles" Template="File: [1],  Directory: [9],  Size: [6]">Creating duplicate files</ProgressText>
-      <ProgressText Action="FindRelatedProducts" Template="Found application: [1]">Searching for related applications</ProgressText>
-      <ProgressText Action="InstallODBC">Installing ODBC components</ProgressText>
-      <ProgressText Action="InstallServices" Template="Service: [2]">Installing new services</ProgressText>
-      <ProgressText Action="LaunchConditions">Evaluating launch conditions</ProgressText>
-      <ProgressText Action="MigrateFeatureStates" Template="Application: [1]">Migrating feature states from related applications</ProgressText>
-      <ProgressText Action="MoveFiles" Template="File: [1],  Directory: [9],  Size: [6]">Moving files</ProgressText>
-      <ProgressText Action="PatchFiles" Template="File: [1],  Directory: [2],  Size: [3]">Patching files</ProgressText>
-      <ProgressText Action="ProcessComponents">Updating component registration</ProgressText>
-      <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">Registering COM+ Applications and Components</ProgressText>
-      <ProgressText Action="RegisterFonts" Template="Font: [1]">Registering fonts</ProgressText>
-      <ProgressText Action="RegisterProduct" Template="[1]">Registering product</ProgressText>
-      <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">Registering type libraries</ProgressText>
-      <ProgressText Action="RegisterUser" Template="[1]">Registering user</ProgressText>
-      <ProgressText Action="RemoveDuplicateFiles" Template="File: [1], Directory: [9]">Removing duplicated files</ProgressText>
-      <ProgressText Action="RemoveEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">Updating environment strings</ProgressText>
-      <ProgressText Action="RemoveExistingProducts" Template="Application: [1], Command line: [2]">Removing applications</ProgressText>
-      <ProgressText Action="RemoveFiles" Template="File: [1], Directory: [9]">Removing files</ProgressText>
-      <ProgressText Action="RemoveFolders" Template="Folder: [1]">Removing folders</ProgressText>
-      <ProgressText Action="RemoveIniValues" Template="File: [1],  Section: [2],  Key: [3], Value: [4]">Removing INI files entries</ProgressText>
-      <ProgressText Action="RemoveODBC">Removing ODBC components</ProgressText>
-      <ProgressText Action="RemoveRegistryValues" Template="Key: [1], Name: [2]">Removing system registry values</ProgressText>
-      <ProgressText Action="RemoveShortcuts" Template="Shortcut: [1]">Removing shortcuts</ProgressText>
-      <ProgressText Action="RMCCPSearch">Searching for qualifying products</ProgressText>
-      <ProgressText Action="SelfRegModules" Template="File: [1], Folder: [2]">Registering modules</ProgressText>
-      <ProgressText Action="SelfUnregModules" Template="File: [1], Folder: [2]">Unregistering modules</ProgressText>
-      <ProgressText Action="SetODBCFolders">Initializing ODBC directories</ProgressText>
-      <ProgressText Action="StartServices" Template="Service: [1]">Starting services</ProgressText>
-      <ProgressText Action="StopServices" Template="Service: [1]">Stopping services</ProgressText>
-      <ProgressText Action="UnpublishComponents" Template="Component ID: [1], Qualifier: [2]">Unpublishing Qualified Components</ProgressText>
-      <ProgressText Action="UnpublishFeatures" Template="Feature: [1]">Unpublishing Product Features</ProgressText>
-      <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Unregister Class servers</ProgressText>
-      <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">Unregistering COM+ Applications and Components</ProgressText>
-      <ProgressText Action="UnregisterExtensionInfo" Template="Extension: [1]">Unregistering extension servers</ProgressText>
-      <ProgressText Action="UnregisterFonts" Template="Font: [1]">Unregistering fonts</ProgressText>
-      <ProgressText Action="UnregisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">Unregistering MIME info</ProgressText>
-      <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">Unregistering program identifiers</ProgressText>
-      <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">Unregistering type libraries</ProgressText>
-      <ProgressText Action="WriteEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">Updating environment strings</ProgressText>
-      <ProgressText Action="WriteIniValues" Template="File: [1],  Section: [2],  Key: [3], Value: [4]">Writing INI files values</ProgressText>
-      <ProgressText Action="WriteRegistryValues" Template="Key: [1], Name: [2], Value: [3]">Writing system registry values</ProgressText>
-      <ProgressText Action="Advertise">Advertising application</ProgressText>
-      <ProgressText Action="GenerateScript" Template="[1]">Generating script operations for action:</ProgressText>
-      <ProgressText Action="InstallSFPCatalogFile" Template="File: [1],  Dependencies: [2]">Installing system catalog</ProgressText>
-      <ProgressText Action="MsiPublishAssemblies" Template="Application Context:[1], Assembly Name:[2]">Publishing assembly information</ProgressText>
-      <ProgressText Action="MsiUnpublishAssemblies" Template="Application Context:[1], Assembly Name:[2]">Unpublishing assembly information</ProgressText>
-      <ProgressText Action="Rollback" Template="[1]">Rolling back action:</ProgressText>
-      <ProgressText Action="RollbackCleanup" Template="File: [1]">Removing backup files</ProgressText>
-      <ProgressText Action="UnmoveFiles" Template="File: [1], Directory: [9]">Removing moved files</ProgressText>
-      <ProgressText Action="UnpublishProduct">Unpublishing product information</ProgressText>
-      <Error Id="0">{{Fatal error: }}</Error>
-      <Error Id="1">{{Error [1]. }}</Error>
-      <Error Id="2">Warning [1]. </Error>
-      <Error Id="3" />
-      <Error Id="4">Info [1]. </Error>
-      <Error Id="5">The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is [1]. {{The arguments are: [2], [3], [4]}}</Error>
-      <Error Id="6" />
-      <Error Id="7">{{Disk full: }}</Error>
-      <Error Id="8">Action [Time]: [1]. [2]</Error>
-      <Error Id="9">[ProductName]</Error>
-      <Error Id="10">{[2]}{, [3]}{, [4]}</Error>
-      <Error Id="11">Message type: [1], Argument: [2]</Error>
-      <Error Id="12">=== Logging started: [Date]  [Time] ===</Error>
-      <Error Id="13">=== Logging stopped: [Date]  [Time] ===</Error>
-      <Error Id="14">Action start [Time]: [1].</Error>
-      <Error Id="15">Action ended [Time]: [1]. Return value [2].</Error>
-      <Error Id="16">Time remaining: {[1] minutes }{[2] seconds}</Error>
-      <Error Id="17">Out of memory. Shut down other applications before retrying.</Error>
-      <Error Id="18">Installer is no longer responding.</Error>
-      <Error Id="19">Installer stopped prematurely.</Error>
-      <Error Id="20">Please wait while Windows configures [ProductName]</Error>
-      <Error Id="21">Gathering required information...</Error>
-      <Error Id="22">Removing older versions of this application...</Error>
-      <Error Id="23">Preparing to remove older versions of this application...</Error>
-      <Error Id="32">{[ProductName] }Setup completed successfully.</Error>
-      <Error Id="33">{[ProductName] }Setup failed.</Error>
-      <Error Id="1101">Error reading from file: [2]. {{ System error [3].}}  Verify that the file exists and that you can access it.</Error>
-      <Error Id="1301">Cannot create the file '[2]'. A directory with this name already exists. Cancel the install and try installing to a different location.</Error>
-      <Error Id="1302">Please insert the disk: [2]</Error>
-      <Error Id="1303">The installer has insufficient privileges to access this directory: [2]. The installation cannot continue. Log on as administrator or contact your system administrator.</Error>
-      <Error Id="1304">Error writing to file: [2]. Verify that you have access to that directory.</Error>
-      <Error Id="1305">Error reading from file [2]. {{ System error [3].}} Verify that the file exists and that you can access it.</Error>
-      <Error Id="1306">Another application has exclusive access to the file '[2]'. Please shut down all other applications, then click Retry.</Error>
-      <Error Id="1307">There is not enough disk space to install this file: [2]. Free some disk space and click Retry, or click Cancel to exit.</Error>
-      <Error Id="1308">Source file not found: [2]. Verify that the file exists and that you can access it.</Error>
-      <Error Id="1309">Error reading from file: [3]. {{ System error [2].}}  Verify that the file exists and that you can access it.</Error>
-      <Error Id="1310">Error writing to file: [3]. {{ System error [2].}}  Verify that you have access to that directory.</Error>
-      <Error Id="1311">Source file not found{{(cabinet)}}: [2]. Verify that the file exists and that you can access it.</Error>
-      <Error Id="1312">Cannot create the directory '[2]'. A file with this name already exists. Please rename or remove the file and click retry, or click Cancel to exit.</Error>
-      <Error Id="1313">The volume [2] is currently unavailable. Please select another.</Error>
-      <Error Id="1314">The specified path '[2]' is unavailable.</Error>
-      <Error Id="1315">Unable to write to the specified folder: [2].</Error>
-      <Error Id="1316">A network error occurred while attempting to read from the file: [2]</Error>
-      <Error Id="1317">An error occurred while attempting to create the directory: [2]</Error>
-      <Error Id="1318">A network error occurred while attempting to create the directory: [2]</Error>
-      <Error Id="1319">A network error occurred while attempting to open the source file cabinet: [2]</Error>
-      <Error Id="1320">The specified path is too long: [2]</Error>
-      <Error Id="1321">The Installer has insufficient privileges to modify this file: [2].</Error>
-      <Error Id="1322">A portion of the folder path '[2]' is invalid. It is either empty or exceeds the length allowed by the system.</Error>
-      <Error Id="1323">The folder path '[2]' contains words that are not valid in folder paths.</Error>
-      <Error Id="1324">The folder path '[2]' contains an invalid character.</Error>
-      <Error Id="1325">'[2]' is not a valid short file name.</Error>
-      <Error Id="1326">Error getting file security: [3] GetLastError: [2]</Error>
-      <Error Id="1327">Invalid Drive: [2]</Error>
-      <Error Id="1328">Error applying patch to file [2]. It has probably been updated by other means, and can no longer be modified by this patch. For more information contact your patch vendor. {{System Error: [3]}}</Error>
-      <Error Id="1329">A file that is required cannot be installed because the cabinet file [2] is not digitally signed. This may indicate that the cabinet file is corrupt.</Error>
-      <Error Id="1330">A file that is required cannot be installed because the cabinet file [2] has an invalid digital signature. This may indicate that the cabinet file is corrupt.{{  Error [3] was returned by WinVerifyTrust.}}</Error>
-      <Error Id="1331">Failed to correctly copy [2] file: CRC error.</Error>
-      <Error Id="1332">Failed to correctly move [2] file: CRC error.</Error>
-      <Error Id="1333">Failed to correctly patch [2] file: CRC error.</Error>
-      <Error Id="1334">The file '[2]' cannot be installed because the file cannot be found in cabinet file '[3]'. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package.</Error>
-      <Error Id="1335">The cabinet file '[2]' required for this installation is corrupt and cannot be used. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package.</Error>
-      <Error Id="1336">There was an error creating a temporary file that is needed to complete this installation.{{  Folder: [3]. System error code: [2]}}</Error>
-      <Error Id="1401">Could not create key: [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel. </Error>
-      <Error Id="1402">Could not open key: [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel. </Error>
-      <Error Id="1403">Could not delete value [2] from key [3]. {{ System error [4].}}  Verify that you have sufficient access to that key, or contact your support personnel. </Error>
-      <Error Id="1404">Could not delete key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel. </Error>
-      <Error Id="1405">Could not read value [2] from key [3]. {{ System error [4].}}  Verify that you have sufficient access to that key, or contact your support personnel. </Error>
-      <Error Id="1406">Could not write value [2] to key [3]. {{ System error [4].}}  Verify that you have sufficient access to that key, or contact your support personnel.</Error>
-      <Error Id="1407">Could not get value names for key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel.</Error>
-      <Error Id="1408">Could not get sub key names for key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel.</Error>
-      <Error Id="1409">Could not read security information for key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel.</Error>
-      <Error Id="1410">Could not increase the available registry space. [2] KB of free registry space is required for the installation of this application.</Error>
-      <Error Id="1500">Another installation is in progress. You must complete that installation before continuing this one.</Error>
-      <Error Id="1501">Error accessing secured data. Please make sure the Windows Installer is configured properly and try the install again.</Error>
-      <Error Id="1502">User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product. Your current install will now continue.</Error>
-      <Error Id="1503">User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product.</Error>
-      <Error Id="1601">Out of disk space -- Volume: '[2]'; required space: [3] KB; available space: [4] KB. Free some disk space and retry.</Error>
-      <Error Id="1602">Are you sure you want to cancel?</Error>
-      <Error Id="1603">The file [2][3] is being held in use{ by the following process: Name: [4], Id: [5], Window Title: '[6]'}. Close that application and retry.</Error>
-      <Error Id="1604">The product '[2]' is already installed, preventing the installation of this product. The two products are incompatible.</Error>
-      <Error Id="1605">There is not enough disk space on the volume '[2]' to continue the install with recovery enabled. [3] KB are required, but only [4] KB are available. Click Ignore to continue the install without saving recovery information, click Retry to check for available space again, or click Cancel to quit the installation.</Error>
-      <Error Id="1606">Could not access network location [2].</Error>
-      <Error Id="1607">The following applications should be closed before continuing the install:</Error>
-      <Error Id="1608">Could not find any previously installed compliant products on the machine for installing this product.</Error>
-      <Error Id="1609">An error occurred while applying security settings. [2] is not a valid user or group. This could be a problem with the package, or a problem connecting to a domain controller on the network. Check your network connection and click Retry, or Cancel to end the install. {{Unable to locate the user's SID, system error [3]}}</Error>
-      <Error Id="1701">The key [2] is not valid. Verify that you entered the correct key.</Error>
-      <Error Id="1702">The installer must restart your system before configuration of [2] can continue. Click Yes to restart now or No if you plan to manually restart later.</Error>
-      <Error Id="1703">You must restart your system for the configuration changes made to [2] to take effect. Click Yes to restart now or No if you plan to manually restart later.</Error>
-      <Error Id="1704">An installation for [2] is currently suspended. You must undo the changes made by that installation to continue. Do you want to undo those changes?</Error>
-      <Error Id="1705">A previous installation for this product is in progress. You must undo the changes made by that installation to continue. Do you want to undo those changes?</Error>
-      <Error Id="1706">An installation package for the product [2] cannot be found. Try the installation again using a valid copy of the installation package '[3]'.</Error>
-      <Error Id="1707">Installation completed successfully.</Error>
-      <Error Id="1708">Installation failed.</Error>
-      <Error Id="1709">Product: [2] -- [3]</Error>
-      <Error Id="1710">You may either restore your computer to its previous state or continue the install later. Would you like to restore?</Error>
-      <Error Id="1711">An error occurred while writing installation information to disk. Check to make sure enough disk space is available, and click Retry, or Cancel to end the install.</Error>
-      <Error Id="1712">One or more of the files required to restore your computer to its previous state could not be found. Restoration will not be possible.</Error>
-      <Error Id="1713">[2] cannot install one of its required products. Contact your technical support group. {{System Error: [3].}}</Error>
-      <Error Id="1714">The older version of [2] cannot be removed. Contact your technical support group. {{System Error [3].}}</Error>
-      <Error Id="1715">Installed [2]</Error>
-      <Error Id="1716">Configured [2]</Error>
-      <Error Id="1717">Removed [2]</Error>
-      <Error Id="1718">File [2] was rejected by digital signature policy.</Error>
-      <Error Id="1719">The Windows Installer Service could not be accessed. This can occur if you are running Windows in safe mode, or if the Windows Installer is not correctly installed. Contact your support personnel for assistance.</Error>
-      <Error Id="1720">There is a problem with this Windows Installer package. A script required for this install to complete could not be run. Contact your support personnel or package vendor. {{Custom action [2] script error [3], [4]: [5] Line [6], Column [7], [8] }}</Error>
-      <Error Id="1721">There is a problem with this Windows Installer package. A program required for this install to complete could not be run. Contact your support personnel or package vendor. {{Action: [2], location: [3], command: [4] }}</Error>
-      <Error Id="1722">There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor. {{Action [2], location: [3], command: [4] }}</Error>
-      <Error Id="1723">There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor. {{Action [2], entry: [3], library: [4] }}</Error>
-      <Error Id="1724">Removal completed successfully.</Error>
-      <Error Id="1725">Removal failed.</Error>
-      <Error Id="1726">Advertisement completed successfully.</Error>
-      <Error Id="1727">Advertisement failed.</Error>
-      <Error Id="1728">Configuration completed successfully.</Error>
-      <Error Id="1729">Configuration failed.</Error>
-      <Error Id="1730">You must be an Administrator to remove this application. To remove this application, you can log on as an Administrator, or contact your technical support group for assistance.</Error>
-      <Error Id="1801">The path [2] is not valid. Please specify a valid path.</Error>
-      <Error Id="1802">Out of memory. Shut down other applications before retrying.</Error>
-      <Error Id="1803">There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to go back to the previously selected volume.</Error>
-      <Error Id="1804">There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to return to the browse dialog and select a different volume.</Error>
-      <Error Id="1805">The folder [2] does not exist. Please enter a path to an existing folder.</Error>
-      <Error Id="1806">You have insufficient privileges to read this folder.</Error>
-      <Error Id="1807">A valid destination folder for the install could not be determined.</Error>
-      <Error Id="1901">Error attempting to read from the source install database: [2].</Error>
-      <Error Id="1902">Scheduling reboot operation: Renaming file [2] to [3]. Must reboot to complete operation.</Error>
-      <Error Id="1903">Scheduling reboot operation: Deleting file [2]. Must reboot to complete operation.</Error>
-      <Error Id="1904">Module [2] failed to register. HRESULT [3]. Contact your support personnel.</Error>
-      <Error Id="1905">Module [2] failed to unregister. HRESULT [3]. Contact your support personnel.</Error>
-      <Error Id="1906">Failed to cache package [2]. Error: [3]. Contact your support personnel.</Error>
-      <Error Id="1907">Could not register font [2]. Verify that you have sufficient permissions to install fonts, and that the system supports this font.</Error>
-      <Error Id="1908">Could not unregister font [2]. Verify that you that you have sufficient permissions to remove fonts.</Error>
-      <Error Id="1909">Could not create Shortcut [2]. Verify that the destination folder exists and that you can access it.</Error>
-      <Error Id="1910">Could not remove Shortcut [2]. Verify that the shortcut file exists and that you can access it.</Error>
-      <Error Id="1911">Could not register type library for file [2]. Contact your support personnel.</Error>
-      <Error Id="1912">Could not unregister type library for file [2]. Contact your support personnel.</Error>
-      <Error Id="1913">Could not update the ini file [2][3]. Verify that the file exists and that you can access it.</Error>
-      <Error Id="1914">Could not schedule file [2] to replace file [3] on reboot. Verify that you have write permissions to file [3].</Error>
-      <Error Id="1915">Error removing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.</Error>
-      <Error Id="1916">Error installing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.</Error>
-      <Error Id="1917">Error removing ODBC driver: [4], ODBC error [2]: [3]. Verify that you have sufficient privileges to remove ODBC drivers.</Error>
-      <Error Id="1918">Error installing ODBC driver: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.</Error>
-      <Error Id="1919">Error configuring ODBC data source: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.</Error>
-      <Error Id="1920">Service '[2]' ([3]) failed to start. Verify that you have sufficient privileges to start system services.</Error>
-      <Error Id="1921">Service '[2]' ([3]) could not be stopped. Verify that you have sufficient privileges to stop system services.</Error>
-      <Error Id="1922">Service '[2]' ([3]) could not be deleted. Verify that you have sufficient privileges to remove system services.</Error>
-      <Error Id="1923">Service '[2]' ([3]) could not be installed. Verify that you have sufficient privileges to install system services.</Error>
-      <Error Id="1924">Could not update environment variable '[2]'. Verify that you have sufficient privileges to modify environment variables.</Error>
-      <Error Id="1925">You do not have sufficient privileges to complete this installation for all users of the machine. Log on as administrator and then retry this installation.</Error>
-      <Error Id="1926">Could not set file security for file '[3]'. Error: [2]. Verify that you have sufficient privileges to modify the security permissions for this file.</Error>
-      <Error Id="1927">Component Services (COM+ 1.0) are not installed on this computer. This installation requires Component Services in order to complete successfully. Component Services are available on Windows 2000.</Error>
-      <Error Id="1928">Error registering COM+ Application. Contact your support personnel for more information.</Error>
-      <Error Id="1929">Error unregistering COM+ Application. Contact your support personnel for more information.</Error>
-      <Error Id="1930">The description for service '[2]' ([3]) could not be changed.</Error>
-      <Error Id="1931">The Windows Installer service cannot update the system file [2] because the file is protected by Windows. You may need to update your operating system for this program to work correctly. {{Package version: [3], OS Protected version: [4]}}</Error>
-      <Error Id="1932">The Windows Installer service cannot update the protected Windows file [2]. {{Package version: [3], OS Protected version: [4], SFP Error: [5]}}</Error>
-      <Error Id="1933">The Windows Installer service cannot update one or more protected Windows files. {{SFP Error: [2]. List of protected files:\r\n[3]}}</Error>
-      <Error Id="1934">User installations are disabled via policy on the machine.</Error>
-      <Error Id="1935">An error occured during the installation of assembly component [2]. HRESULT: [3]. {{assembly interface: [4], function: [5], assembly name: [6]}}</Error>
-
-      <AdminUISequence>
-        <Show Dialog="FatalError" OnExit="error" />
-        <Show Dialog="UserExit" OnExit="cancel" />
-        <Show Dialog="ExitDialog" OnExit="success" />
-        <Show Dialog="PrepareDlg" Before="CostInitialize"></Show>
-        <Show Dialog="AdminWelcomeDlg" After="CostFinalize" />
-        <Show Dialog="ProgressDlg" After="AdminWelcomeDlg" />
-      </AdminUISequence>
-
-      <InstallUISequence>
-        <Show Dialog="FatalError" OnExit="error" />
-        <Show Dialog="UserExit" OnExit="cancel" />
-        <Show Dialog="ExitDialog" OnExit="success" />
-        <Show Dialog="PrepareDlg" After="LaunchConditions" />
-        <Show Dialog="WelcomeDlg" After="MigrateFeatureStates">NOT Installed</Show>
-        <Show Dialog="ResumeDlg" After="WelcomeDlg">Installed AND (RESUME OR Preselected)</Show>
-        <Show Dialog="MaintenanceWelcomeDlg" After="ResumeDlg">Installed AND NOT RESUME AND NOT Preselected</Show>
-        <Show Dialog="ProgressDlg" After="MaintenanceWelcomeDlg" />
-      </InstallUISequence>
-    </UI>
-
-    <Property Id="ALLUSERS">2</Property>
-    <Property Id="ROOTDRIVE"><![CDATA[C:\]]></Property>
-    <Property Id="ButtonText_No">&amp;No</Property>
-    <Property Id="ButtonText_Install">&amp;Install</Property>
-    <Property Id="Setup">Setup</Property>
-    <Property Id="ButtonText_Browse">Br&amp;owse</Property>
-    <Property Id="CustomSetupIcon">custicon</Property>
-    <Property Id="ButtonText_Next">&amp;Next &gt;</Property>
-    <Property Id="ButtonText_Back">&lt; &amp;Back</Property>
-    <Property Id="InstallMode">Typical</Property>
-    <Property Id="Progress2">installs</Property>
-    <Property Id="IAgree">No</Property>
-    <Property Id="Wizard">Setup Wizard</Property>
-    <Property Id="RemoveIcon">removico</Property>
-    <Property Id="ExclamationIcon">exclamic</Property>
-    <Property Id="ShowUserRegistrationDlg">1</Property>
-    <Property Id="ProductID">none</Property>
-    <Property Id="ButtonText_Reset">&amp;Reset</Property>
-    <Property Id="ButtonText_Remove">&amp;Remove</Property>
-    <Property Id="CompleteSetupIcon">completi</Property>
-    <Property Id="ButtonText_Yes">&amp;Yes</Property>
-    <Property Id="ButtonText_Exit">&amp;Exit</Property>
-    <Property Id="ButtonText_Return">&amp;Return</Property>
-    <Property Id="DialogBitmap">dlgbmp</Property>
-    <Property Id="DlgTitleFont">{&amp;DlgFontBold8}</Property>
-    <Property Id="ButtonText_Ignore">&amp;Ignore</Property>
-    <Property Id="RepairIcon">repairic</Property>
-    <Property Id="ButtonText_Resume">&amp;Resume</Property>
-    <Property Id="InstallerIcon">insticon</Property>
-    <Property Id="ButtonText_Finish">&amp;Finish</Property>
-    <Property Id="PROMPTROLLBACKCOST">P</Property>
-    <Property Id="PortTemplate"><![CDATA[12345<######>@@@@@]]></Property>
-    <Property Id="Progress1">Installing</Property>
-    <Property Id="ButtonText_Cancel">Cancel</Property>
-    <Property Id="INSTALLLEVEL">3</Property>
-    <Property Id="InfoIcon">info</Property>
-    <Property Id="ButtonText_Repair">&amp;Repair</Property>
-    <Property Id="ButtonText_Retry">&amp;Retry</Property>
-    <Property Id="BannerBitmap">bannrbmp</Property>
-    <Property Id="ButtonText_OK">OK</Property>
-
-    <AdminExecuteSequence />
-
-    <InstallExecuteSequence>
-      <RemoveExistingProducts After='InstallFinalize' />
-    </InstallExecuteSequence>
-
-    <Binary Id="Up" src="Binary\Up.ico" />
-    <Binary Id="New" src="Binary\New.ico" />
-    <Binary Id="custicon" src="Binary\Custom.ico" />
-    <Binary Id="repairic" src="Binary\Repair.ico" />
-    <Binary Id="exclamic" src="Binary\Exclam.ico" />
-    <Binary Id="removico" src="Binary\Remove.ico" />
-    <Binary Id="completi" src="Binary\Complete.ico" />
-    <Binary Id="insticon" src="Binary\Typical.ico" />
-    <Binary Id="info" src="Binary\Info.ico" />
-    <Binary Id="bannrbmp" src="Binary\Banner.bmp" />
-    <Binary Id="dlgbmp" src="Binary\Dialog.bmp" />
-    <Icon Id="PassSync.exe" src="passsync.exe" />
-  </Product>
-</Wix>

+ 0 - 49
ldap/synctools/passwordsync/wix/README.txt

@@ -1,49 +0,0 @@
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-# 
-# This Program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License along with
-# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA 02111-1307 USA.
-# 
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception. 
-# 
-# 
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-1. Download Wix (http://sourceforge.net/projects/wix/) and unzip it into the Wix folder.
-   (steps 2 and 3 can be skipped if ldapserver has been built)
-2. Add the location of the Mozilla LDAP C SDK header files to your INCLUDE path.
-   The LDAP C SDK is a component of the Directory Server and is "pulled"
-   when the Directory Server is built; it can also be obtained individually from Mozilla.
-   e.x. 
-      set INCLUDE=%INCLUDE%;c:\source\dist\WINNT5.0_DBG.OBJ\ldapsdk\include
-3. Add the location of the LDAP C SDK libraries to your LIB path.
-   e.x. 
-      set LIB=%LIB%;c:\source\dist\WINNT5.0_DBG.OBJ\ldapsdk\lib
-4. Run build.bat.