summaryrefslogtreecommitdiffstats
path: root/ldap/synctools/passwordsync/passsync/service.cpp
diff options
context:
space:
mode:
authorDavid Boreham <dboreham@redhat.com>2005-03-11 02:44:17 +0000
committerDavid Boreham <dboreham@redhat.com>2005-03-11 02:44:17 +0000
commita957eeb8962ee1611b2546fda2bb11a5c909e59b (patch)
treea954c178f40f3531a52b01227c48e7a2df8d8894 /ldap/synctools/passwordsync/passsync/service.cpp
parent9a7d1e1fd10a644ed17952acd18f755470d4744a (diff)
downloadds-a957eeb8962ee1611b2546fda2bb11a5c909e59b.tar.gz
ds-a957eeb8962ee1611b2546fda2bb11a5c909e59b.tar.xz
ds-a957eeb8962ee1611b2546fda2bb11a5c909e59b.zip
Merge over new code: fractional replication, wan replication and windows sync plus associated UI
Diffstat (limited to 'ldap/synctools/passwordsync/passsync/service.cpp')
-rw-r--r--ldap/synctools/passwordsync/passsync/service.cpp295
1 files changed, 295 insertions, 0 deletions
diff --git a/ldap/synctools/passwordsync/passsync/service.cpp b/ldap/synctools/passwordsync/passsync/service.cpp
new file mode 100644
index 00000000..09e0ce68
--- /dev/null
+++ b/ldap/synctools/passwordsync/passsync/service.cpp
@@ -0,0 +1,295 @@
+// Created: 2-8-2005
+// Author(s): Scott Bridges
+
+#include <windows.h>
+#include <iostream.h>
+#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;
+}