diff --git a/src/Cedar/CM.c b/src/Cedar/CM.c index cef8113a..7d8194fb 100644 --- a/src/Cedar/CM.c +++ b/src/Cedar/CM.c @@ -11743,7 +11743,7 @@ RETRY: // Attempt to connect if ((cm->Client = CcConnectRpc( cm->server_name == NULL ? "localhost" : cm->server_name, - "", &bad_pass, &no_remote, cm->StartupMode == false ? 0 : 60000)) == NULL) + cm->password == NULL ? "" : cm->password, &bad_pass, &no_remote, cm->StartupMode == false ? 0 : 60000)) == NULL) { if (no_remote) { @@ -11799,9 +11799,54 @@ RETRY: void MainCM() { // If there is /remote in the argument, show the screen of the remote connection - char *cmdline = GetCommandLineStr(); + TOKEN_LIST *cmdline = GetCommandLineToken(); - if (StrCmpi(cmdline, "/remote") == 0) + UINT i = 0; + bool isRemote = false; + + if (cm->server_name != NULL) + { + Free(cm->server_name); + } + cm->server_name = NULL; + + if (cm->password != NULL) + { + Free(cm->password); + } + cm->password = NULL; + + for(i = 0; i < cmdline->NumTokens; ++i) + { + if (StrCmpi(cmdline->Token[i], "/remote") == 0) + { + isRemote = true; + } + else if (StrCmpi(cmdline->Token[i], "/hostname") == 0 && i + 1 < cmdline->NumTokens) + { + isRemote = true; + if (cm->server_name != NULL) + { + Free(cm->server_name); + } + cm->server_name = CopyStr(cmdline->Token[++i]); + } + else if (StrCmpi(cmdline->Token[i], "/password") == 0 && i + 1 < cmdline->NumTokens) + { + if (cm->password != NULL) + { + Free(cm->password); + } + cm->password = CopyStr(cmdline->Token[++i]); + } + else if (StrCmpi(cmdline->Token[i], "/startup") == 0) + { + // Startup mode + cm->StartupMode = true; + } + } + + if (isRemote && cm->server_name == NULL) { char *hostname = RemoteDlg(NULL, CM_REG_KEY, ICO_VPN, _UU("CM_TITLE"), _UU("CM_REMOTE_TITLE"), NULL); if (hostname == NULL) @@ -11819,13 +11864,7 @@ void MainCM() } } - if (StrCmpi(cmdline, "/startup") == 0) - { - // Startup mode - cm->StartupMode = true; - } - - Free(cmdline); + FreeToken(cmdline); if (IsZero(cm->ShortcutKey, SHA1_SIZE) == false) { diff --git a/src/Cedar/CMInner.h b/src/Cedar/CMInner.h index 21472e38..82d9365c 100644 --- a/src/Cedar/CMInner.h +++ b/src/Cedar/CMInner.h @@ -136,6 +136,7 @@ typedef struct CM HWND hStatusBar; REMOTE_CLIENT *Client; char *server_name; + char *password; wchar_t *import_file_name; bool HideStatusBar; bool HideTrayIcon;