839 lines
25 KiB
Plaintext
839 lines
25 KiB
Plaintext
{*******************************************************}
|
||
{ }
|
||
{ ThdBS1Agent }
|
||
{ }
|
||
{ Copyright (C) 2023 kku }
|
||
{ }
|
||
{*******************************************************}
|
||
|
||
unit ThdBS1Agent;
|
||
|
||
interface
|
||
|
||
uses
|
||
Tocsg.Thread, System.SysUtils, Winapi.Windows, Winapi.Messages,
|
||
System.Classes, IdHTTP, IdSSLOpenSSL, ThdEvent;
|
||
|
||
const
|
||
// VER_AGENT = '1.5.6.91';
|
||
VER_AGENT = '1.5.8.153';
|
||
|
||
WM_UPDATE_AGENT = WM_USER + 4902;
|
||
|
||
type
|
||
TCheckAgentInfo = record
|
||
sAgentId,
|
||
sIp, sIps, sMAC,
|
||
sHostName, // sStatusType,
|
||
sEulaCon, sLocation, sPwSet, sPwSetTermOk,
|
||
sScrnLock, sOsVer, sAvInfo,
|
||
// sAsInfo,
|
||
sFwInfo, sOsSafe, sPatchExist,
|
||
sAvSafe, sFwSafe,
|
||
sAvUptodate,
|
||
sPiSafe, // sSafeBlock,
|
||
sModeName,
|
||
sEmpNo: String;
|
||
bSafePcSHCD: Boolean; // ³ªÁß¿¡ »èÁ¦ ¿¹Á¤ 23_0313 16:19:12 kku
|
||
end;
|
||
|
||
TReqPoKind = (rpkId, rpkAll, rpkMng, rpkSelPo, npkSelPoCate, npkSelPoKey);
|
||
TAgentState = (asInit, asConnected, asDisconnected);
|
||
TBS1ModeKind = (hmkSleep, hmkSecurity, hmkVulnerability, hmkOffline, hmkException);
|
||
TThdBS1Agent = class(TTgThread)
|
||
private
|
||
HTTP_: TIdHTTP;
|
||
SSL_: TIdSSLIOHandlerSocketOpenSSL;
|
||
hRcvWnd_: HWND;
|
||
pNode_: Pointer;
|
||
sAccount_,
|
||
sLastPolModeDT_,
|
||
sIp_, sMac_,
|
||
sHead_, sEmpNo_,
|
||
sDept_, sUName_, sEMail_,
|
||
sHostName_, sAgentId_,
|
||
sSvrAddr_, sPolicyGroup_: String;
|
||
AgentInfo_: TCheckAgentInfo;
|
||
dwInterval_: DWORD;
|
||
|
||
Mode_: TBS1ModeKind;
|
||
State_: TAgentState;
|
||
dtLastPolMod_,
|
||
dtLastRcvPol_: TDateTime;
|
||
bAbleUpdateInfo_: Boolean;
|
||
|
||
ThdEvent_: TThdEvent;
|
||
protected
|
||
function GetState: TAgentState;
|
||
procedure SetState(aState: TAgentState);
|
||
function GetMode: TBS1ModeKind;
|
||
procedure SetMode(aMode: TBS1ModeKind);
|
||
procedure Execute; override;
|
||
public
|
||
Constructor Create(hRcvWnd: HWND; pNode: Pointer; sEmpNo, sHostName: String; dwInterval: DWORD = 0);
|
||
Destructor Destroy; override;
|
||
|
||
function ProcessRcvPolicy(aKind: TReqPoKind; sPoId: String = ''; sPoAddInfo: String = ''): Boolean;
|
||
|
||
procedure SendEventLog(sUri, sCode, sMsg: String);
|
||
procedure UpdateAgentInfo;
|
||
procedure SetUpdateAgentInfo(bVal: Boolean);
|
||
|
||
property AgentState: TAgentState read GetState;
|
||
property AgentMode: TBS1ModeKind read GetMode write SetMode;
|
||
property PolicyGroup: String read sPolicyGroup_;
|
||
property EmpNo: String read sEmpNo_;
|
||
property LastRcvPolDT: TDateTime read dtLastRcvPol_;
|
||
property LastPolModDT: TDateTime read dtLastPolMod_;
|
||
property SvrAddr: String read sSvrAddr_;
|
||
end;
|
||
|
||
implementation
|
||
|
||
uses
|
||
HttpUtil, Tocsg.Exception, ManagerSetting, superobject, Tocsg.Network,
|
||
Condition, CrmUtil, GlobalDefine, Tocsg.Convert, Tocsg.WinInfo;
|
||
|
||
{ TThdBS1Agent }
|
||
|
||
Constructor TThdBS1Agent.Create(hRcvWnd: HWND; pNode: Pointer; sEmpNo, sHostName: String; dwInterval: DWORD = 0);
|
||
begin
|
||
Inherited Create;
|
||
hRcvWnd_ := hRcvWnd;
|
||
pNode_ := pNode;
|
||
sIp_ := GetHostIP;
|
||
sMac_ := GetMACAddrUsing;
|
||
sHead_ := gSet.EmpNoHead;
|
||
State_ := asInit;
|
||
sEmpNo_ := sEmpNo;
|
||
sAgentId_ := sEmpNo_;
|
||
sHostName_ := sHostName;
|
||
sSvrAddr_ := gSet.SvrAddr;
|
||
if (Length(sSvrAddr_) > 0) and (sSvrAddr_[Length(sSvrAddr_)] <> '/') then
|
||
sSvrAddr_ := sSvrAddr_ + '/';
|
||
sAccount_ := GetAccount;
|
||
sPolicyGroup_ := 'Default';
|
||
sLastPolModeDT_ := '1999-01-01 01:01:01';
|
||
sDept_ := '';
|
||
sUName_ := '';
|
||
sEMail_ := '';
|
||
ZeroMemory(@AgentInfo_, SizeOf(AgentInfo_));
|
||
dtLastPolMod_ := 0;
|
||
dtLastRcvPol_ := 0;
|
||
dwInterval_ := dwInterval;
|
||
if dwInterval_ = 0 then
|
||
dwInterval_ := 4000;
|
||
HTTP_ := nil;
|
||
SSL_ := nil;
|
||
bAbleUpdateInfo_ := false;
|
||
ASSERT(CreateHttpSSL(HTTP_, SSL_, gSet.ReadTimeout, gSet.ConnectTimeout));
|
||
Mode_ := hmkSleep;
|
||
ThdEvent_ := TThdEvent.Create(sSvrAddr_);
|
||
ThdEvent_.StartThread;
|
||
|
||
// FreeOnTerminate := true;
|
||
end;
|
||
|
||
Destructor TThdBS1Agent.Destroy;
|
||
begin
|
||
FreeAndNil(ThdEvent_);
|
||
Inherited;
|
||
FreeAndNil(HTTP_);
|
||
FreeAndNil(SSL_);
|
||
end;
|
||
|
||
procedure TThdBS1Agent.SendEventLog(sUri, sCode, sMsg: String);
|
||
var
|
||
O: ISuperObject;
|
||
begin
|
||
try
|
||
O := SO;
|
||
|
||
// if bPrevent then
|
||
// O.S['TYP_MSG'] := '@(!)_IC_P'
|
||
// else
|
||
O.S['TYP_MSG'] := '@(!)_IC_M';
|
||
O.S['KEY_AGENTID'] := sAgentId_;
|
||
O.S['KEY_EMPNO'] := sEmpNo_;
|
||
O.S['KEY_ACCOUNT'] := sAccount_;
|
||
O.S['KEY_HOSTNAME'] := sHostName_;
|
||
O.S['KEY_SUBMITTIME'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
|
||
O.S['KEY_LOGCODE'] := sCode;
|
||
O.S['DETECTION_DATE'] := O.S['KEY_SUBMITTIME']; // À̺¥Æ® ¹ß»ý ½Ã°¢. REQUESTÀÇ °æ¿ì, ¿¹¿Ü ½ÅûÇÒ À̺¥Æ®ÀÇ ¹ß»ý ½Ã°¢
|
||
O.S['KEY_SUMMARY'] := sMsg;
|
||
// O.S['PARENT_LA_ID'] // »óÀ§ À̺¥Æ®
|
||
O.S['POLICY_ID'] := 'Unknown';
|
||
|
||
// 2.6
|
||
// O.S['MODEL_ID'] := sAgentId_;
|
||
// O.S['TOCSG_LA_IFNAME'] := sUri;
|
||
// O.S['TOCSG_LA_ID'] := sAgentId_;
|
||
// O.S['TOCSG_LA_EMPID'] := sEmpNo_;
|
||
// O.S['TOCSG_LA_CODE'] := sCode;
|
||
// O.S['TOCSG_LA_DATA'] := Format('[%s] ', [sHead_]) + sMsg;
|
||
// O.S['TOCSG_LA_HOSTNAME'] := sHostName_;
|
||
// O.S['TOCSG_LA_LASTCONNDATE'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
|
||
// O.S['TOCSG_LA_MACADDR'] := sIp_;
|
||
// O.S['TOCSG_LA_REMOTEIP'] := sMac_;
|
||
|
||
ThdEvent_.Push(O.AsString);
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. SendEventLog()');
|
||
end;
|
||
end;
|
||
|
||
function TThdBS1Agent.GetState: TAgentState;
|
||
begin
|
||
Lock;
|
||
try
|
||
Result := State_;
|
||
finally
|
||
Unlock;
|
||
end;
|
||
end;
|
||
|
||
procedure TThdBS1Agent.SetState(aState: TAgentState);
|
||
begin
|
||
Lock;
|
||
try
|
||
State_ := aState;
|
||
finally
|
||
Unlock;
|
||
end;
|
||
end;
|
||
|
||
function TThdBS1Agent.GetMode: TBS1ModeKind;
|
||
begin
|
||
Lock;
|
||
try
|
||
Result := Mode_;
|
||
finally
|
||
Unlock;
|
||
end;
|
||
end;
|
||
|
||
procedure TThdBS1Agent.SetMode(aMode: TBS1ModeKind);
|
||
begin
|
||
Lock;
|
||
try
|
||
Mode_ := aMode;
|
||
finally
|
||
Unlock;
|
||
end;
|
||
end;
|
||
|
||
procedure TThdBS1Agent.UpdateAgentInfo;
|
||
begin
|
||
if bAbleUpdateInfo_ and (hRcvWnd_ <> 0) then
|
||
SendMessage(hRcvWnd_, WM_UPDATE_AGENT, 0, NativeInt(pNode_));
|
||
end;
|
||
|
||
procedure TThdBS1Agent.SetUpdateAgentInfo(bVal: Boolean);
|
||
begin
|
||
bAbleUpdateInfo_ := bVal;
|
||
end;
|
||
|
||
function TThdBS1Agent.ProcessRcvPolicy(aKind: TReqPoKind; sPoId: String = ''; sPoAddInfo: String = ''): Boolean;
|
||
var
|
||
O, OP: ISuperObject;
|
||
sReqType, sRes: String;
|
||
begin
|
||
try
|
||
O := SO;
|
||
|
||
O.S['KEY_AGENTID'] := sAgentId_;
|
||
O.S['KEY_EMPNO'] := sEmpNo_;
|
||
O.S['KEY_HOSTNAME'] := sHostName_;
|
||
O.S['KEY_OSVER'] := '?';
|
||
|
||
case aKind of
|
||
rpkId : sReqType := '0';
|
||
rpkAll : sReqType := '1';
|
||
rpkMng : sReqType := '2';
|
||
rpkSelPo :
|
||
begin
|
||
sReqType := '3';
|
||
if sPoId = '' then
|
||
begin
|
||
_Trace('ProcessRcvPolicy() .. rpkSelPo .. EmptyID');
|
||
exit;
|
||
end;
|
||
O.S['KEY_POLICYID'] := sPoId;
|
||
end;
|
||
npkSelPoCate :
|
||
begin
|
||
sReqType := '4';
|
||
if sPoId = '' then
|
||
begin
|
||
_Trace('ProcessRcvPolicy() .. rpkSelPo .. EmptyID');
|
||
exit;
|
||
end;
|
||
|
||
if sPoAddInfo = '' then
|
||
begin
|
||
_Trace('ProcessRcvPolicy() .. npkSelPoCate .. EmptyCate');
|
||
exit;
|
||
end;
|
||
|
||
O.S['KEY_POLICYID'] := sPoId;
|
||
O.S['KEY_CATEGORY'] := sPoAddInfo;
|
||
end;
|
||
npkSelPoKey :
|
||
begin
|
||
sReqType := '5';
|
||
if sPoId = '' then
|
||
begin
|
||
_Trace('ProcessRcvPolicy() .. rpkSelPo .. EmptyID');
|
||
exit;
|
||
end;
|
||
|
||
if sPoAddInfo = '' then
|
||
begin
|
||
_Trace('ProcessRcvPolicy() .. npkSelPoKey .. EmptyKey');
|
||
exit;
|
||
end;
|
||
|
||
O.S['KEY_POLICYID'] := sPoId;
|
||
O.S['KEY_POLICYKEY'] := sPoAddInfo;
|
||
end;
|
||
end;
|
||
|
||
// {$IFDEF DEBUG} SaveJsonObjToFile(O, 'c:\pa.json'); {$ENDIF}
|
||
|
||
sRes := HttpPost(HTTP_, sSvrAddr_ + 'policyRequest.do', sReqType, O.AsString);
|
||
if sRes = '' then
|
||
begin
|
||
// _Trace('ProcessRcvPolicy() .. Empty .. Msg="%s", Code=%d', [gMgSvc.HttpErrorMsg, gMgSvc.HttpErrorCode]);
|
||
exit;
|
||
end else
|
||
if sRes = POST_TIMEOUT then
|
||
begin
|
||
// _Trace('ProcessRcvPolicy() .. timeout .. Msg="%s", Code=%d', [gMgSvc.HttpErrorMsg, gMgSvc.HttpErrorCode]);
|
||
exit;
|
||
end;
|
||
|
||
OP := SO(sRes);
|
||
if OP = nil then
|
||
begin
|
||
_Trace('ProcessRcvPolicy() .. Invalid policy');
|
||
exit;
|
||
end;
|
||
|
||
dtLastRcvPol_ := Now;
|
||
case aKind of
|
||
rpkId : ;
|
||
rpkAll :
|
||
begin
|
||
var sGrpName: String := OP.S['GROUP_NAME'];
|
||
if sPolicyGroup_ <> sGrpName then
|
||
begin
|
||
sPolicyGroup_ := sGrpName;
|
||
end;
|
||
|
||
// gMgSvc.PrefModel.PolicyGroup := sGrpName;
|
||
// gMgSvc.PrefModel.PolicyId := OP.S['SECUMODE'];
|
||
// gMgSvc.SleepPolicy.PolicyGroup := sGrpName;
|
||
// gMgSvc.SleepPolicy.PolicyId := OP.S['SLEEPMODE'];
|
||
// gMgSvc.VulPolicy.PolicyGroup := sGrpName;
|
||
// gMgSvc.VulPolicy.PolicyId := OP.S['VULMODE'];
|
||
// gMgSvc.OffPolicy.PolicyGroup := sGrpName;
|
||
// gMgSvc.OffPolicy.PolicyId := OP.S['OFFLINEMODE'];
|
||
// gMgSvc.ExpPolicy.PolicyGroup := sGrpName;
|
||
// gMgSvc.ExpPolicy.PolicyId := OP.S['EXCEPTMODE'];
|
||
|
||
// var nOldScreenOld: Integer := gMgSvc.ModePolicy.ScreenLogoAlpha;
|
||
//
|
||
// if OP.O['POL_SET'] <> nil then
|
||
// gMgSvc.PrefModel.SetSetPolicy(OP.O['POL_SET']);
|
||
//
|
||
// if OP.O['POL_MNG'] <> nil then
|
||
// begin
|
||
// gMgSvc.PrefModel.SetMngPolicy(OP.O['POL_MNG']);
|
||
// if gMgSvc.PrefModel.HideMainUI and gMain.Showing then
|
||
// PostMessage(gMgSvc.RcvHwnd, WM_REFRESH_VIEW, 1, 0);
|
||
// end;
|
||
//
|
||
// if (OP.S['SECUMODE'] <> '') and (OP.S['SECUMODE'].ToLower <> 'false') and
|
||
// (OP.O['POL_SEC'] <> nil) then
|
||
// gMgSvc.PrefModel.SetPolicy(OP.S['SECUMODE'], OP.O['POL_SEC']);
|
||
//
|
||
// if (OP.S['SLEEPMODE'] <> '') and (OP.S['SLEEPMODE'].ToLower <> 'false') and
|
||
// (OP.O['POL_SLP'] <> nil) then
|
||
// gMgSvc.SleepPolicy.SetPolicy(OP.S['SLEEPMODE'], OP.O['POL_SLP'])
|
||
// else
|
||
// gMgSvc.SleepPolicy.Clear(true, true);
|
||
//
|
||
// if (OP.S['VULMODE'] <> '') and (OP.S['VULMODE'].ToLower <> 'false') and
|
||
// (OP.O['POL_VUL'] <> nil) then
|
||
// gMgSvc.VulPolicy.SetPolicy(OP.S['VULMODE'], OP.O['POL_VUL'])
|
||
// else
|
||
// gMgSvc.VulPolicy.Clear(true, true);
|
||
//
|
||
// if (OP.S['OFFLINEMODE'] <> '') and (OP.S['OFFLINEMODE'].ToLower <> 'false') and
|
||
// (OP.O['POL_OFF'] <> nil) then
|
||
// gMgSvc.OffPolicy.SetPolicy(OP.S['OFFLINEMODE'], OP.O['POL_OFF'])
|
||
// else
|
||
// gMgSvc.OffPolicy.Clear(true, true);
|
||
//
|
||
// if (OP.S['EXCEPTMODE'] <> '') and (OP.S['EXCEPTMODE'].ToLower <> 'false') and
|
||
// (OP.O['POL_EXC'] <> nil) then
|
||
// gMgSvc.ExpPolicy.SetPolicy(OP.S['EXCEPTMODE'], OP.O['POL_EXC'])
|
||
// else
|
||
// gMgSvc.ExpPolicy.Clear(true, true);
|
||
//
|
||
// if nOldScreenOld <> gMgSvc.ModePolicy.ScreenLogoAlpha then
|
||
// gMgSvc.UpdateScreenLogo(true);
|
||
end;
|
||
rpkMng : ;
|
||
rpkSelPo : ;
|
||
npkSelPoCate : ;
|
||
npkSelPoKey : ;
|
||
end;
|
||
|
||
// gMgSvc.RefreshView;
|
||
|
||
// {$IFDEF DEBUG} SaveJsonObjToFile(OP, 'c:\ps.json'); {$ENDIF}
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(E, 'Fail .. ProcessRcvPolicy()');
|
||
end;
|
||
end;
|
||
|
||
procedure TThdBS1Agent.Execute;
|
||
var
|
||
bInit: Boolean;
|
||
sRes, sTemp,
|
||
sReqType,
|
||
sLastPolicy: String;
|
||
O: ISuperObject;
|
||
bConnected,
|
||
bPrevConnected: Boolean;
|
||
NewAgentInfo: TCheckAgentInfo;
|
||
bUpdate,
|
||
bChangeAgentInfo: Boolean;
|
||
|
||
function IsChangeAgentInfo: Boolean;
|
||
begin
|
||
Result := true;
|
||
|
||
with AgentInfo_ do
|
||
begin
|
||
if sAgentId <> NewAgentInfo.sAgentId then exit;
|
||
if sIp <> NewAgentInfo.sIp then exit;
|
||
if sIps <> NewAgentInfo.sIps then exit;
|
||
if sMAC <> NewAgentInfo.sMAC then exit;
|
||
if sHostName <> NewAgentInfo.sHostName then exit;
|
||
if sEulaCon <> NewAgentInfo.sEulaCon then exit;
|
||
if sLocation <> NewAgentInfo.sLocation then exit;
|
||
if sPwSet <> NewAgentInfo.sPwSet then exit;
|
||
if sPwSetTermOk <> NewAgentInfo.sPwSetTermOk then exit;
|
||
if sScrnLock <> NewAgentInfo.sScrnLock then exit;
|
||
if sOsVer <> NewAgentInfo.sOsVer then exit;
|
||
if sAvInfo <> NewAgentInfo.sAvInfo then exit;
|
||
if sFwInfo <> NewAgentInfo.sFwInfo then exit;
|
||
if sOsSafe <> NewAgentInfo.sOsSafe then exit;
|
||
if sPatchExist <> NewAgentInfo.sPatchExist then exit;
|
||
if sAvSafe <> NewAgentInfo.sAvSafe then exit;
|
||
if sAvUptodate <> NewAgentInfo.sAvUptodate then exit;
|
||
if sFwSafe <> NewAgentInfo.sFwSafe then exit;
|
||
if sPiSafe <> NewAgentInfo.sPiSafe then exit;
|
||
if sEmpNo <> NewAgentInfo.sEmpNo then exit;
|
||
if bSafePcSHCD <> NewAgentInfo.bSafePcSHCD then exit;
|
||
if sModeName <> NewAgentInfo.sModeName then exit;
|
||
end;
|
||
|
||
Result := false;
|
||
end;
|
||
|
||
Label
|
||
LB_SignalComplete;
|
||
begin
|
||
bInit := false;
|
||
sLastPolicy := '';
|
||
while not Terminated and not GetWorkStop do
|
||
begin
|
||
try
|
||
if not bInit then
|
||
begin
|
||
sPolicyGroup_ := '';
|
||
sRes := GetEmpNoInfo(sSvrAddr_, HTTP_, sEmpNo_);
|
||
if sRes = '' then
|
||
begin
|
||
Sleep(500);
|
||
continue;
|
||
end;
|
||
|
||
try
|
||
O := SO(sRes);
|
||
except
|
||
Sleep(500);
|
||
continue;
|
||
end;
|
||
|
||
if (O.S['result'] = 'false') or (O.S['deleteyn'] = 'true') then
|
||
begin
|
||
// ¿¡ÀÌÀüÆ® »ç¹ø Á¤º¸°¡ ¾ø°Å³ª »èÁ¦ »óŶó¸é ¼³Ä¡ ·Î±×¸¦ º¸³»ÁØ´Ù 23_0403 09:43:04 kku
|
||
SendEventLog(URI_CONNECT, SYSEVT_AGENT_INSTALL, 'Agent first connected');
|
||
end;
|
||
|
||
bInit := true;
|
||
|
||
// ¼¹ö¿¡¼ ¸¶Áö¸· ¸ðµå ·Î±×·Î ÇöÀç ¿¡ÀÌÀüÆ® ¸ðµå¸¦ ÆÇº°ÇÏ°Ô µÇ´Âµ¥ ÃÖÃÊ Á¤º¸°¡ ¾øÀ¸¸é ¿¡ÀÌÀüÆ® ¸ñ·Ï¿¡ º¸ÀÌÁö ¾Ê°Ô µÈ´Ù. 23_0403 13:22:43 kku
|
||
SendEventLog(URI_USER_ACTION, MODE_SECURITY_END, 'Sleep mode');
|
||
SetMode(hmkSleep);
|
||
SetState(asDisconnected);
|
||
UpdateAgentInfo;
|
||
end;
|
||
|
||
NewAgentInfo.sAgentId := sAgentId_;
|
||
NewAgentInfo.sIp := sIp_;
|
||
NewAgentInfo.sIps := sIp_;
|
||
NewAgentInfo.sMAC := sMac_;
|
||
NewAgentInfo.sHostName := sHostName_;
|
||
NewAgentInfo.sEulaCon := 'disagree';
|
||
NewAgentInfo.sLocation := 'Default';
|
||
NewAgentInfo.sPwSet := 'true';
|
||
NewAgentInfo.sPwSetTermOk := 'true';
|
||
NewAgentInfo.sScrnLock := 'true';
|
||
NewAgentInfo.sOsVer := '?';
|
||
NewAgentInfo.sAvInfo := 'Windows Defender';
|
||
NewAgentInfo.sFwInfo := 'Windows Firewall';
|
||
NewAgentInfo.sOsSafe := 'true';
|
||
NewAgentInfo.sPatchExist := 'true';
|
||
NewAgentInfo.sAvUptodate := 'true';
|
||
NewAgentInfo.sAvSafe := 'true';
|
||
NewAgentInfo.sFwSafe := 'true';
|
||
NewAgentInfo.sPiSafe := 'true';
|
||
case GetMode of
|
||
hmkSleep : NewAgentInfo.sModeName := 'Sleep';
|
||
hmkSecurity : NewAgentInfo.sModeName := 'Secu';
|
||
hmkVulnerability : NewAgentInfo.sModeName := 'Vul';
|
||
hmkOffline : NewAgentInfo.sModeName := 'Offline';
|
||
hmkException : NewAgentInfo.sModeName := 'Exption';
|
||
end;
|
||
NewAgentInfo.sEmpNo := sEmpNo_;
|
||
|
||
O := SO;
|
||
bPrevConnected := GetState = asConnected;
|
||
|
||
O.S['KEY_AGENTID'] := NewAgentInfo.sAgentId;
|
||
O.S['KEY_EMPNO'] := NewAgentInfo.sEmpNo;
|
||
O.S['KEY_HOSTNAME'] := NewAgentInfo.sHostName;
|
||
O.S['KEY_MODE'] := NewAgentInfo.sModeName;
|
||
O.S['VUL_OSVER'] := NewAgentInfo.sOsVer; // ½Ã±×³Î ÆÐŶ¿¡µµ OSÁ¤º¸ Ãß°¡ 23_1214 15:48:03 kku
|
||
O.S['KEY_LASTPOLICY'] := sLastPolModeDT_; // ºó°ªÀ» ³ÖÀ¸¸é ÀÀ´äµµ ºó°ªÀ¸·Î ¿Â´Ù... 23_0802 11:06:47 kku
|
||
|
||
bChangeAgentInfo := IsChangeAgentInfo;
|
||
if bChangeAgentInfo then
|
||
AgentInfo_ := NewAgentInfo;
|
||
|
||
sReqType := '0';
|
||
if not bPrevConnected or bChangeAgentInfo then
|
||
begin
|
||
sReqType := '1';
|
||
O.S['KEY_IP'] := NewAgentInfo.sIp;
|
||
O.S['KEY_IPS'] := NewAgentInfo.sIps;
|
||
O.S['KEY_MAC'] := NewAgentInfo.sMAC;
|
||
O.S['KEY_GROUPNAME'] := NewAgentInfo.sLocation;
|
||
O.S['KEY_AGENTTYPE'] := BooleanToStr(IsVDI, 'VDI', 'PC');
|
||
O.S['KEY_COLLASTCONN'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
|
||
O.S['KEY_COLVERSION'] := VER_AGENT;
|
||
O.S['VUL_PWDSET'] := NewAgentInfo.sPwSet;
|
||
// if NewAgentInfo.sPwSetTermOk <> 'true' then
|
||
// begin
|
||
// var nOver: Integer := DaysBetween(Now, gMgSvc.LastChangePwDT);
|
||
// if (nOver > 0) and (nOver > gMgSvc.PrefModel.PwChkTermDay) then
|
||
// begin
|
||
// O.S['VUL_PWDEXPIRED'] := 'true';
|
||
// O.S['VUL_PWDLASTDAYS'] := IntToStr(nOver - gMgSvc.PrefModel.PwChkTermDay);
|
||
// end else
|
||
// O.S['VUL_PWDEXPIRED'] := 'false';
|
||
// end else
|
||
O.S['VUL_PWDEXPIRED'] := 'false';
|
||
O.S['VUL_SCRNLOCK'] := NewAgentInfo.sScrnLock;
|
||
O.S['VUL_OSSAFEPATCH'] := NewAgentInfo.sOsSafe;
|
||
O.S['VUL_AV'] := NewAgentInfo.sAvInfo;
|
||
O.S['VUL_AVENABLE'] := NewAgentInfo.sAvSafe;
|
||
O.S['VUL_AVSAFEPATCH'] := NewAgentInfo.sAvUptodate;
|
||
O.S['VUL_FW'] := NewAgentInfo.sFwInfo;
|
||
O.S['VUL_FWENABLE'] := NewAgentInfo.sFwSafe;
|
||
O.S['VUL_PI'] := NewAgentInfo.sPiSafe;
|
||
end;
|
||
|
||
// SaveJsonObjToFile(O, 'c:\a.json');
|
||
// sRes := HttpPost(HTTP_, sSvrAddr_, '123120', O.AsString, true);
|
||
sRes := HttpPost(HTTP_, sSvrAddr_ + 'statusRequest.do', sReqType, O.AsString);
|
||
|
||
// Á¢¼Ó »óŠ󸮸¦ TimerCheckConnect()¿¡¼ ¿©±â·Î ¿Å±è 23_0324 12:04:45 kku
|
||
try
|
||
if sRes = 'true' then
|
||
_Trace('Status Response .. Empty');
|
||
|
||
bConnected := (sRes = POST_TIMEOUT) or
|
||
( (sRes <> '') and (sRes <> '404') and (sRes <> 'true') and sRes.Contains('SERVERTIME') );
|
||
|
||
if not bConnected then
|
||
begin
|
||
SetState(asDisconnected);
|
||
end else
|
||
if not bPrevConnected then
|
||
begin
|
||
if sRes = POST_TIMEOUT then
|
||
bConnected := false
|
||
else
|
||
SetState(asConnected);
|
||
end;
|
||
|
||
if bConnected then
|
||
begin
|
||
// ¿¬°á ó¸®
|
||
end;
|
||
except
|
||
_Trace('Fail .. ConnectionCheck');
|
||
end;
|
||
|
||
if not bConnected or (sRes = POST_TIMEOUT) then
|
||
goto LB_SignalComplete;
|
||
// Á¢¼Ó »óÅ ó¸® ³¡ ---------------------------------------------------------
|
||
|
||
try
|
||
O := SO(sRes);
|
||
if O = nil then
|
||
begin
|
||
_Trace('Invalid PolicyData ... 2');
|
||
exit;
|
||
end;
|
||
except
|
||
_Trace('Invalid PolicyData ... 1');
|
||
exit;
|
||
end;
|
||
|
||
bUpdate := false;
|
||
if O.S['KEY_DEPT'] <> sDept_ then
|
||
begin
|
||
sDept_ := O.S['KEY_DEPT'];
|
||
bUpdate := true;
|
||
end;
|
||
|
||
if O.S['KEY_USERNAME'] <> sUName_ then
|
||
begin
|
||
sUName_ := O.S['KEY_USERNAME'];
|
||
bUpdate := true;
|
||
end;
|
||
|
||
if O.S['KEY_USEREMAIL'] <> sEMail_ then
|
||
begin
|
||
sEMail_ := O.S['KEY_USEREMAIL'];
|
||
bUpdate := true;
|
||
end;
|
||
|
||
if bUpdate then
|
||
begin
|
||
// gMgSvc.AgentModel.Save;
|
||
// gMgSvc.UpdateAgentInfo;
|
||
end;
|
||
|
||
if (O.S['UPD_RULE'] <> '') and (O.S['UPD_RULE'].ToLower <> 'false') then
|
||
begin
|
||
// gMgSvc.MgRule.UpdateRuleEnts(O.O['UPD_RULE']);
|
||
bUpdate := true;
|
||
end;
|
||
|
||
if // not bPrevConnected or
|
||
((O.S['UPD_TYPE'] <> '') and (O.S['UPD_TYPE'].ToLower <> 'false')) or
|
||
(O.S['KEY_GROUPNAME'] <> sPolicyGroup_) then
|
||
begin
|
||
sPolicyGroup_ := O.S['KEY_GROUPNAME'];
|
||
ProcessRcvPolicy(rpkAll);
|
||
// _Trace('Á¤Ã¥ ¾÷µ¥ÀÌÆ®µÊ', 1);
|
||
// gMgSvc.RefreshView;
|
||
bUpdate := true;
|
||
end;
|
||
|
||
if (O.S['UPD_CAMPAIGN'] <> '') and (O.S['UPD_CAMPAIGN'].ToLower <> 'false') then
|
||
begin
|
||
// gMgSvc.MgCampn.UpdateCampnEnts(O.O['UPD_CAMPAIGN']);
|
||
bUpdate := true;
|
||
end;
|
||
|
||
if bUpdate then
|
||
begin
|
||
sLastPolModeDT_ := O.S['SERVERTIME']; // FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
|
||
dtLastPolMod_ := StrToDateTime(sLastPolModeDT_);
|
||
UpdateAgentInfo;
|
||
end;
|
||
|
||
LB_SignalComplete :
|
||
Sleep(dwInterval_);
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. Execute()');
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
//procedure TThdBS1Agent.Execute;
|
||
//var
|
||
// bInit: Boolean;
|
||
// sRes, sTemp,
|
||
// sStatusType,
|
||
// sLastPolicy: String;
|
||
// O: ISuperObject;
|
||
// bConnected,
|
||
// bPrevConnected: Boolean;
|
||
//Label
|
||
// LB_ProcessPolicy;
|
||
//begin
|
||
// bInit := false;
|
||
// sLastPolicy := '';
|
||
// while not Terminated and not GetWorkStop do
|
||
// begin
|
||
// try
|
||
// if not bInit then
|
||
// begin
|
||
// sRes := GetEmpNoInfo(sSvrAddr_, HTTP_, sEmpNo_);
|
||
// if sRes = '' then
|
||
// begin
|
||
// Sleep(500);
|
||
// continue;
|
||
// end;
|
||
//
|
||
// try
|
||
// O := SO(sRes);
|
||
// except
|
||
// Sleep(500);
|
||
// continue;
|
||
// end;
|
||
//
|
||
// if (O.S['result'] = 'false') or (O.S['deleteyn'] = 'true') then
|
||
// begin
|
||
// // ¿¡ÀÌÀüÆ® »ç¹ø Á¤º¸°¡ ¾ø°Å³ª »èÁ¦ »óŶó¸é ¼³Ä¡ ·Î±×¸¦ º¸³»ÁØ´Ù 23_0403 09:43:04 kku
|
||
// SendEventLog(URI_CONNECT, SYSEVT_AGENT_INSTALL, 'Agent first connected');
|
||
// end;
|
||
//
|
||
// bInit := true;
|
||
//
|
||
// // ¼¹ö¿¡¼ ¸¶Áö¸· ¸ðµå ·Î±×·Î ÇöÀç ¿¡ÀÌÀüÆ® ¸ðµå¸¦ ÆÇº°ÇÏ°Ô µÇ´Âµ¥ ÃÖÃÊ Á¤º¸°¡ ¾øÀ¸¸é ¿¡ÀÌÀüÆ® ¸ñ·Ï¿¡ º¸ÀÌÁö ¾Ê°Ô µÈ´Ù. 23_0403 13:22:43 kku
|
||
// SendEventLog(URI_USER_ACTION, MODE_SECURITY_END, 'Sleep mode');
|
||
// SetMode(hmkSleep);
|
||
// SetState(asDisconnected);
|
||
// UpdateAgentInfo;
|
||
// end;
|
||
//
|
||
// if GetMode = hmkSecurity then
|
||
// sStatusType := 'Connected'
|
||
// else
|
||
// sStatusType := 'Disconnected';
|
||
//
|
||
// O := SO;
|
||
// bPrevConnected := GetState = asConnected;
|
||
// if not bPrevConnected then
|
||
// begin
|
||
// O.S['MODEL_ID'] := sAgentId_;
|
||
// O.S['mwAKey_IP'] := sIp_;
|
||
// O.S['mwAKey_IPS'] := sIp_;
|
||
// O.S['mwAKey_MAC'] := sMac_;
|
||
// O.S['mwAKey_HOSTNAME'] := sHostName_;
|
||
// O.S['mwAKey_STATUS'] := sStatusType;
|
||
// O.S['mwAKey_COLLASTCONN'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
|
||
// O.S['mwAKey_COLVERSION'] := VER_AGENT;
|
||
// O.S['mwAKey_AGENTID'] := sAgentId_;
|
||
// O.S['mwAKey_EULACONFIRMED'] := 'disagree';
|
||
// O.S['mwAKey_LOCATION'] := sPolicyGroup_;
|
||
// O.S['mwAKey_PWDSET'] := 'true';
|
||
// O.S['mwAKey_SCRNLOCK'] := 'true';
|
||
// O.S['mwAKey_OSVER'] := '11(Test)';
|
||
// O.S['mwAKey_PATCHES'] := 'null';
|
||
// O.S['mwAKey_AVINFORM'] := 'Windows Defender';
|
||
// O.S['mwAKey_ASINFORM'] := 'Windows Defender';
|
||
// O.S['mwAKey_FIREWALLINFO'] := 'Windows Firewall';
|
||
// O.S['mwAKey_SOFTWAREINFO'] := 'null';
|
||
// O.S['mwAKey_ADDEULACONFIRM'] := 'false';
|
||
// O.S['mwAKey_OSSAFE'] := 'true';
|
||
// O.S['mwAKey_PATCHEXIST'] := 'true';
|
||
// O.S['mwAKey_AVSAFE'] := 'true';
|
||
// O.S['mwAKey_ASSAFE'] := 'true';
|
||
// O.S['mwAKey_FWSAFE'] := 'true';
|
||
// O.S['mwAKey_PISAFE'] := 'true';
|
||
// O.S['mwAKey_SAFEBLOCKSETTING'] := BooleanToStr(sStatusType = 'Connected', 'true', 'false');
|
||
// O.S['mwAKey_VPNINFO'] := sEmpNo_;
|
||
// O.S['mwAKey_EMPNO'] := sEmpNo_;
|
||
//// if NewAgentInfo.bSafePcSHCD then O.S['mwAKey_SAFEPC'] := 'true';
|
||
// end else begin
|
||
// O.S['mwAKey_LOCATION'] := sPolicyGroup_;
|
||
// O.S['mwAKey_EMPNO'] := sEmpNo_;
|
||
// O.S['mwAKey_IP'] := sIp_;
|
||
// O.S['mwAKey_HOSTNAME'] := sHostName_;
|
||
// O.S['mwAKey_MAC'] := sMac_;
|
||
// O.S['KEY_LASTPOLICY'] := sLastPolicy;
|
||
// end;
|
||
//
|
||
// // SaveJsonObjToFile(O, 'c:\a.json');
|
||
// sRes := HttpPost(HTTP_, sSvrAddr_, '123120', O.AsString, true);
|
||
//
|
||
// // Á¢¼Ó »óŠ󸮸¦ TimerCheckConnect()¿¡¼ ¿©±â·Î ¿Å±è 23_0324 12:04:45 kku
|
||
// try
|
||
// bConnected := sRes <> '';
|
||
// if not bConnected then
|
||
// begin
|
||
// SetState(asDisconnected);
|
||
// end else
|
||
// if not bPrevConnected then
|
||
// begin
|
||
// if sRes = POST_TIMEOUT then
|
||
// bConnected := false
|
||
// else
|
||
// SetState(asConnected);
|
||
// end;
|
||
//
|
||
// if bConnected then
|
||
// begin
|
||
// // ¿¬°á ó¸®
|
||
// end;
|
||
// except
|
||
// _Trace('Fail .. ConnectionCheck');
|
||
// end;
|
||
//
|
||
// if not bConnected or (sRes = POST_TIMEOUT) then
|
||
// goto LB_ProcessPolicy;
|
||
// // Á¢¼Ó »óÅ ó¸® ³¡ ---------------------------------------------------------
|
||
//
|
||
// try
|
||
// O := SO(sRes);
|
||
// if O = nil then
|
||
// begin
|
||
// _Trace('Invalid PolicyData ... 2');
|
||
// exit;
|
||
// end;
|
||
// except
|
||
// _Trace('Invalid PolicyData ... 1');
|
||
// exit;
|
||
// end;
|
||
//
|
||
// sTemp := O.S['mwPKey_LOCNAME'];
|
||
// if sTemp = '' then
|
||
// goto LB_ProcessPolicy;
|
||
//
|
||
// if sPolicyGroup_ <> sTemp then
|
||
// sPolicyGroup_ := sTemp;
|
||
//
|
||
// sTemp := O.S['KEY_LASTPOLICY'];
|
||
// if (sTemp <> '') and (sLastPolicy <> sTemp) then
|
||
// begin
|
||
// sLastPolicy := O.S['KEY_LASTPOLICY'];
|
||
// dtLastRcvPol_ := StrToDateTime(sLastPolicy);
|
||
// end;
|
||
// UpdateAgentInfo;
|
||
//
|
||
// LB_ProcessPolicy :
|
||
// Sleep(4000);
|
||
// except
|
||
// on E: Exception do
|
||
// ETgException.TraceException(Self, E, 'Fail .. Execute()');
|
||
// end;
|
||
// end;
|
||
//end;
|
||
|
||
end.
|