/*
* Copyright 2000, International Business Machines Corporation and others.
* All Rights Reserved.
- *
+ *
* This software has been released under the terms of the IBM Public
* License. For details, see the LICENSE file in the top-level source
* directory or online at http://www.openafs.org/dl/license10.html
*/
+#include <winsock2.h>
+#include <ws2tcpip.h>
+
extern "C" {
+#include <afsconfig.h>
#include <afs/param.h>
+#include <roken.h>
#include <afs/stds.h>
#include <osilog.h>
#include <afs/fs_utils.h>
+#include <rx\rxkad.h>
+#include <afs/afskfw.h>
+#include "ipaddrchg.h"
}
#include "afscreds.h"
-#include "..\afsreg\afsreg.h" // So we can see if the server's installed
+#include <WINNT\afsreg.h> // So we can see if the server's installed
#include "drivemap.h"
#include <stdlib.h>
#include <stdio.h>
-#include "rxkad.h"
/*
* DEFINITIONS ________________________________________________________________
BOOL InitApp (LPSTR pszCmdLineA);
void ExitApp (void);
+void Quit (void);
void PumpMessage (MSG *pmsg);
BOOL IsServerInstalled (void);
osi_LogEvent0("AFSCreds Main command line",pCmdLine);
fs_utils_InitMountRoot();
+
if (InitApp (pCmdLine))
{
MSG msg;
return 0;
}
-#define ISHIGHSECURITY(v) ( ((v) & LOGON_OPTION_HIGHSECURITY)==LOGON_OPTION_HIGHSECURITY)
#define REG_CLIENT_PROVIDER_KEY "SYSTEM\\CurrentControlSet\\Services\\TransarcAFSDaemon\\NetworkProvider"
BOOL InitApp (LPSTR pszCmdLineA)
BOOL fExit = FALSE;
BOOL fInstall = FALSE;
BOOL fUninstall = FALSE;
+ BOOL fAutoInit = FALSE;
+ BOOL fNetDetect = FALSE;
+ BOOL fRenewMaps = FALSE;
+
+ // Initialize our global variables and window classes
+ //
+ memset (&g, 0x00, sizeof(g));
+ g.fStartup = TRUE;
// Parse the command-line
//
switch (*(++pszCmdLineA))
{
+ case 'a':
+ case 'A':
+ fAutoInit = TRUE;
+ break;
+
+ case 'm':
+ case 'M':
+ fRenewMaps = TRUE;
+ break;
+
+ case 'n':
+ case 'N':
+ fNetDetect = TRUE;
+ break;
+
case 's':
case 'S':
fShow = TRUE;
case 'U':
fUninstall = TRUE;
break;
- case ':':
- MapShareName(pszCmdLineA);
- break;
+
+ case ':':
+ CopyAnsiToString(g.SmbName,pszCmdLineA);
+ MapShareName(pszCmdLineA);
+ break;
+
+ case 'z':
+ case 'Z':
+ DoUnMapShare(TRUE);
+ return(0);
+
case 'x':
case 'X':
TestAndDoMapShare(SERVICE_START_PENDING);
TestAndDoMapShare(SERVICE_RUNNING);
- return 0;
+ return 0;
}
while (*pszCmdLineA && (*pszCmdLineA != ' '))
else if (fUninstall)
Shortcut_FixStartup (cszSHORTCUT_NAME, g.fStartup = FALSE);
- if (fInstall)
+ if (fInstall || fUninstall)
{
HKEY hk;
- if (RegCreateKey (HKEY_LOCAL_MACHINE, TEXT("System\\CurrentControlSet\\Services\\TransarcAFSDaemon\\Parameters"), &hk) == 0)
+ if (RegCreateKeyEx (HKEY_CURRENT_USER, AFSREG_USER_OPENAFS_SUBKEY, 0, NULL, 0,
+ (IsWow64()?KEY_WOW64_64KEY:0)|KEY_WRITE, NULL, &hk, NULL) == 0)
{
DWORD dwSize = sizeof(g.fStartup);
DWORD dwType = REG_DWORD;
if (fExit || fUninstall || fInstall)
return FALSE;
- // Initialize our global variables and window classes
- //
- memset (&g, 0x00, sizeof(g));
- g.fStartup = TRUE;
-
HKEY hk;
- if (RegOpenKey (HKEY_LOCAL_MACHINE, TEXT("System\\CurrentControlSet\\Services\\TransarcAFSDaemon\\Parameters"), &hk) == 0)
+ if (RegOpenKeyEx (HKEY_CURRENT_USER, AFSREG_USER_OPENAFS_SUBKEY, 0,
+ (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &hk) == 0)
+ {
+ DWORD dwSize = sizeof(g.fStartup);
+ DWORD dwType = REG_DWORD;
+ RegQueryValueEx (hk, TEXT("ShowTrayIcon"), NULL, &dwType, (PBYTE)&g.fStartup, &dwSize);
+ RegCloseKey (hk);
+ }
+ else if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, AFSREG_CLT_OPENAFS_SUBKEY, 0,
+ (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &hk) == 0)
{
DWORD dwSize = sizeof(g.fStartup);
DWORD dwType = REG_DWORD;
InitCommonControls();
RegisterCheckListClass();
osi_Init();
- lock_InitializeMutex(&g.expirationCheckLock, "expiration check lock");
- lock_InitializeMutex(&g.credsLock, "global creds lock");
+ lock_InitializeMutex(&g.expirationCheckLock, "expiration check lock", 0);
+ lock_InitializeMutex(&g.credsLock, "global creds lock", 0);
+
+ KFW_AFS_wait_for_service_start();
if ( IsDebuggerPresent() ) {
if ( !g.fIsWinNT )
OutputDebugString("AFSD Service stopped\n");
if ( !IsServiceConfigured() )
OutputDebugString("AFSD Service not configured\n");
- }
+ else if ( fAutoInit )
+ OutputDebugString("AFSD Service will be started\n");
+ }
}
}
+ // If the service isn't started yet, and autoInit start the service
+ if ( g.fIsWinNT && !IsServiceRunning() && IsServiceConfigured() && fAutoInit ) {
+ SC_HANDLE hManager;
+
+ if ((hManager = OpenSCManager( NULL, NULL,
+ SC_MANAGER_CONNECT |
+ SC_MANAGER_ENUMERATE_SERVICE |
+ SC_MANAGER_QUERY_LOCK_STATUS)) != NULL )
+ {
+ SC_HANDLE hService;
+ if ((hService = OpenService( hManager, TEXT("TransarcAFSDaemon"),
+ SERVICE_QUERY_STATUS | SERVICE_START) ) != NULL)
+ {
+ if (StartService(hService, 0, 0)) {
+ if ( IsDebuggerPresent() )
+ OutputDebugString("AFSD Service start successful\n");
+ fRenewMaps = TRUE;
+ } else if ( IsDebuggerPresent() )
+ OutputDebugString("AFSD Service start failed\n");
+
+ CloseServiceHandle (hService);
+ }
+
+ CloseServiceHandle (hManager);
+ }
+ KFW_AFS_wait_for_service_start();
+ }
+
+ KFW_initialize();
+
// Create a main window. All further initialization will be done during
// processing of WM_INITDIALOG.
//
else if (!IsServerInstalled())
Message (MB_ICONHAND, IDS_UNCONFIG_TITLE, IDS_UNCONFIG_DESC);
}
- if (IsServiceRunning()) {
+ if (IsServiceRunning()) {
+ if ( fRenewMaps )
+ {
+ if ( IsDebuggerPresent() )
+ OutputDebugString("Renewing Drive Maps\n");
+ DoMapShareChange(FALSE);
+ }
if (fShow)
{
if ( IsDebuggerPresent() )
OutputDebugString("Displaying Main window\n");
Main_Show (TRUE);
}
+ // If the root cell is reachable and we have no tokens
+ // display the Obtain Tokens dialog to the user
+ if ( fAutoInit ) {
+ if ( IsDebuggerPresent() )
+ OutputDebugString("Obtaining Tokens (if needed)\n");
+ ObtainTokensFromUserIfNeeded(g.hMain);
+ }
} else if ( IsDebuggerPresent() )
- OutputDebugString("Displaying Main window\n");
+ OutputDebugString("AFSD Service Stopped\n");
+
+ if ( fNetDetect ) {
+ // Start IP Address Change Monitor
+ if ( IsDebuggerPresent() )
+ OutputDebugString("Activating Network Change Monitor\n");
+ IpAddrChangeMonitorInit(g.hMain);
+ }
+ Main_EnableRemindTimer(TRUE);
return TRUE;
}
void ExitApp (void)
{
+ KFW_cleanup();
g.hMain = NULL;
}
BOOL IsServerInstalled (void)
{
BOOL fInstalled = FALSE;
-
- TCHAR szKey[] = AFSREG_SVR_SVC_KEY;
- LPCTSTR pch = lstrchr (szKey, TEXT('\\'));
-
HKEY hk;
- if (RegOpenKey (HKEY_LOCAL_MACHINE, &pch[1], &hk) == 0)
+
+ if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, AFSREG_SVR_SVC_SUBKEY, 0,
+ (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &hk) == 0)
{
fInstalled = TRUE;
RegCloseKey (hk);