Raise connection error when local SSH port for plink is already in use. See http://www.heidisql.com/forum.php?t=18395

This commit is contained in:
Ansgar Becker
2015-05-11 17:51:12 +00:00
parent 9228488032
commit e206d95c42
3 changed files with 34 additions and 2 deletions

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: HeidiSQL\n" "Project-Id-Version: HeidiSQL\n"
"POT-Creation-Date: 2012-11-05 21:40\n" "POT-Creation-Date: 2012-11-05 21:40\n"
"PO-Revision-Date: 2015-04-26 15:27+0100\n" "PO-Revision-Date: 2015-05-11 19:49+0100\n"
"Last-Translator: Ansgar Becker <anse@heidisql.com>\n" "Last-Translator: Ansgar Becker <anse@heidisql.com>\n"
"Language-Team: English (http://www.transifex.com/projects/p/heidisql/" "Language-Team: English (http://www.transifex.com/projects/p/heidisql/"
"language/en/)\n" "language/en/)\n"
@ -3962,6 +3962,10 @@ msgstr "PLink exited unexpected. Command line was: %s"
msgid "Could not execute PLink: %s" msgid "Could not execute PLink: %s"
msgstr "Could not execute PLink: %s" msgstr "Could not execute PLink: %s"
#. Plink connection
msgid "Could not execute PLink: Port %d already in use."
msgstr "Could not execute PLink: Port %d already in use."
msgid "" msgid ""
"Connection closed immediately after it was established. This is mostly " "Connection closed immediately after it was established. This is mostly "
"caused by an \"%s\" server variable which has errors in itself, or your user " "caused by an \"%s\" server variable which has errors in itself, or your user "

View File

@ -818,6 +818,10 @@ var
ExitCode: LongWord; ExitCode: LongWord;
Waited, ReturnedSomethingAt: Integer; Waited, ReturnedSomethingAt: Integer;
begin begin
// Check if local port is open
if not PortOpen(FConnection.Parameters.SSHLocalPort) then
raise EDatabaseError.CreateFmt(_('Could not execute PLink: Port %d already in use.'), [FConnection.Parameters.SSHLocalPort]);
// Build plink.exe command line // Build plink.exe command line
// plink bob@domain.com -pw myPassw0rd1 -P 22 -i "keyfile.pem" -L 55555:localhost:3306 // plink bob@domain.com -pw myPassw0rd1 -P 22 -i "keyfile.pem" -L 55555:localhost:3306
PlinkParameters := '-ssh '; PlinkParameters := '-ssh ';

View File

@ -13,7 +13,7 @@ uses
Windows, ShlObj, ActiveX, VirtualTrees, SynRegExpr, Messages, Math, Windows, ShlObj, ActiveX, VirtualTrees, SynRegExpr, Messages, Math,
Registry, DateUtils, Generics.Collections, StrUtils, AnsiStrings, TlHelp32, Types, Registry, DateUtils, Generics.Collections, StrUtils, AnsiStrings, TlHelp32, Types,
dbconnection, mysql_structures, SynMemo, Menus, WinInet, gnugettext, Themes, dbconnection, mysql_structures, SynMemo, Menus, WinInet, gnugettext, Themes,
Character, ImgList, System.UITypes, ActnList; Character, ImgList, System.UITypes, ActnList, WinSock;
type type
@ -325,6 +325,7 @@ type
function GetSystemImageIndex(Filename: String): Integer; function GetSystemImageIndex(Filename: String): Integer;
function GetExecutableBits: Byte; function GetExecutableBits: Byte;
procedure Help(Sender: TObject; Anchor: String); procedure Help(Sender: TObject; Anchor: String);
function PortOpen(Port: Word): Boolean;
var var
@ -2690,6 +2691,29 @@ begin
end; end;
function PortOpen(Port: Word): Boolean;
var
client: sockaddr_in;
sock: Integer;
ret: Integer;
wsdata: WSAData;
begin
Result := True;
ret := WSAStartup($0002, wsdata);
if ret<>0 then
Exit;
try
client.sin_family := AF_INET;
client.sin_port := htons(Port);
client.sin_addr.s_addr := inet_addr(PAnsiChar('127.0.0.1'));
sock := socket(AF_INET, SOCK_STREAM, 0);
Result := connect(sock, client, SizeOf(client)) <> 0;
finally
WSACleanup;
end;
end;
{ Threading stuff } { Threading stuff }