From 9a574f5300cadc7bf9aec0aa0092c595ac35f532 Mon Sep 17 00:00:00 2001 From: ELIN Date: Sat, 8 Feb 2014 06:33:39 +0000 Subject: /hostname and /password --- src/Cedar/CM.c | 73 +++++++++++++++++++++++++++++++++++++---------------- src/Cedar/CMInner.h | 1 + 2 files changed, 52 insertions(+), 22 deletions(-) diff --git a/src/Cedar/CM.c b/src/Cedar/CM.c index 43a3c93a..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) { @@ -11801,40 +11801,69 @@ void MainCM() // If there is /remote in the argument, show the screen of the remote connection TOKEN_LIST *cmdline = GetCommandLineToken(); - if (cmdline->NumTokens >= 1) + 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[0], "/remote") == 0) + if (StrCmpi(cmdline->Token[i], "/remote") == 0) { - if (cmdline->NumTokens >= 2) + isRemote = true; + } + else if (StrCmpi(cmdline->Token[i], "/hostname") == 0 && i + 1 < cmdline->NumTokens) + { + isRemote = true; + if (cm->server_name != NULL) { - cm->server_name = CopyStr(cmdline->Token[1]); + Free(cm->server_name); } - else + cm->server_name = CopyStr(cmdline->Token[++i]); + } + else if (StrCmpi(cmdline->Token[i], "/password") == 0 && i + 1 < cmdline->NumTokens) + { + if (cm->password != NULL) { - char *hostname = RemoteDlg(NULL, CM_REG_KEY, ICO_VPN, _UU("CM_TITLE"), _UU("CM_REMOTE_TITLE"), NULL); - if (hostname == NULL) - { - return; - } - if (cm->server_name != NULL) - { - Free(cm->server_name); - } - cm->server_name = NULL; - if (StrCmpi(hostname, "localhost") != 0 && StrCmpi(hostname, "127.0.0.1") != 0 ) - { - cm->server_name = hostname; - } + Free(cm->password); } + cm->password = CopyStr(cmdline->Token[++i]); } - - if (StrCmpi(cmdline->Token[0], "/startup") == 0) + 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) + { + return; + } + if (cm->server_name != NULL) + { + Free(cm->server_name); + } + cm->server_name = NULL; + if (StrCmpi(hostname, "localhost") != 0 && StrCmpi(hostname, "127.0.0.1") != 0 ) + { + cm->server_name = hostname; + } + } + 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; -- cgit v1.2.3