104 lines
3.0 KiB
Plaintext
104 lines
3.0 KiB
Plaintext
|
{
|
||
|
$Project$
|
||
|
$Workfile$
|
||
|
$Revision$
|
||
|
$DateUTC$
|
||
|
$Id$
|
||
|
|
||
|
This file is part of the Indy (Internet Direct) project, and is offered
|
||
|
under the dual-licensing agreement described on the Indy website.
|
||
|
(http://www.indyproject.org/)
|
||
|
|
||
|
Copyright:
|
||
|
(c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
|
||
|
}
|
||
|
{
|
||
|
$Log$
|
||
|
}
|
||
|
{
|
||
|
Rev 1.2 1/21/2004 3:27:22 PM JPMugaas
|
||
|
InitComponent
|
||
|
|
||
|
Rev 1.1 1/31/2003 02:32:14 PM JPMugaas
|
||
|
Should now compile.
|
||
|
|
||
|
Rev 1.0 11/13/2002 08:00:02 AM JPMugaas
|
||
|
}
|
||
|
|
||
|
unit IdRSHServer;
|
||
|
|
||
|
{
|
||
|
based on
|
||
|
http://www.private.org.il/mini-tcpip.faq.html
|
||
|
|
||
|
2001, Feb 17 - J. Peter Mugaas
|
||
|
based this unit on the simplied IdRexec unit with extremely
|
||
|
minor modifications (the parameters for our event had to be modified
|
||
|
to better represent what they are in this protocol. The only difference
|
||
|
between this protocol and Rexec is that the server handles authoriation
|
||
|
differently and the port is different. In RSH, authentication is usually
|
||
|
done by refusing connections from ports which are NOT reserved, and from
|
||
|
.rhosts files in Unix.
|
||
|
|
||
|
WARNING:
|
||
|
RSH should ONLY be considered for computer systems behind a firewall as there
|
||
|
are no passwords and it is easy to falsify user names (you even have to evesdrop
|
||
|
on network traffic to do it. Even then, you should consider other protocols.
|
||
|
|
||
|
You assume any and all risks involved with RSH.
|
||
|
|
||
|
!!!YOU HAVE BEEN WANRED!!!
|
||
|
|
||
|
The only reason we provide this component is to complement the RSH client
|
||
|
and it does have one merit (CVS is partly based on it). I personally have
|
||
|
agonized over writing this component at all due to these risks.
|
||
|
}
|
||
|
|
||
|
interface
|
||
|
{$i IdCompilerDefines.inc}
|
||
|
|
||
|
uses
|
||
|
IdAssignedNumbers, IdContext, IdRemoteCMDServer, IdTCPClient, IdTCPServer;
|
||
|
|
||
|
const
|
||
|
RSH_FORCEPORTSINRANGE = True;
|
||
|
|
||
|
type
|
||
|
TIdRSHCommandEvent = procedure (AThread: TIdContext;
|
||
|
AStdError : TIdTCPClient; AClientUserName, AHostUserName, ACommand : String) of object;
|
||
|
|
||
|
TIdRSHServer = class(TIdRemoteCMDServer)
|
||
|
protected
|
||
|
FOnCommand : TIdRSHCommandEvent;
|
||
|
//
|
||
|
procedure DoCMD(AThread: TIdContext;
|
||
|
AStdError : TIdTCPClient; AParam1, AParam2, ACommand : String); override;
|
||
|
procedure InitComponent; override;
|
||
|
published
|
||
|
property OnCommand : TIdRSHCommandEvent read FOnCommand write FOnCommand;
|
||
|
property DefaultPort default IdPORT_cmd;
|
||
|
property ForcePortsInRange : Boolean read FForcePortsInRange write FForcePortsInRange default RSH_FORCEPORTSINRANGE;
|
||
|
end;
|
||
|
|
||
|
implementation
|
||
|
|
||
|
{ TIdRSHServer }
|
||
|
|
||
|
procedure TIdRSHServer.InitComponent;
|
||
|
begin
|
||
|
inherited;
|
||
|
DefaultPort := IdPORT_cmd;
|
||
|
FForcePortsInRange := RSH_FORCEPORTSINRANGE;
|
||
|
FStdErrorPortsInRange := True;
|
||
|
end;
|
||
|
|
||
|
procedure TIdRSHServer.DoCMD(AThread: TIdContext;
|
||
|
AStdError: TIdTCPClient; AParam1, AParam2, ACommand: String);
|
||
|
begin
|
||
|
if Assigned(FOnCommand) then begin
|
||
|
FOnCommand(AThread,AStdError,AParam1,AParam2,ACommand);
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
end.
|