Пример #1
0
BOOL CCapDownload::launch()
{
	CExecCommand cmProcess;
	CString csCmd;

	if (m_csDownloadOn == _T("0"))
	{
		m_pLogger->log(LOG_PRIORITY_DEBUG, _T("DOWNLOAD => Download disabled by server"));
		return TRUE;
	}
	// Launch download tool with agent provided command line args
	csCmd.Format(_T("\"%s\\download.exe\" %s"), getInstallFolder(), AfxGetApp()->m_lpCmdLine);
	if (cmProcess.execNoWait(csCmd, getDataFolder()) != EXEC_SUCCESSFULL)
	{
		m_pLogger->log(LOG_PRIORITY_ERROR, _T("DOWNLOAD => Can't create OCS Inventory NG Download process (%s)"), cmProcess.getOutput());
		return FALSE;
	}
	m_pLogger->log(LOG_PRIORITY_NOTICE, _T("DOWNLOAD => Download and setup tool successfully started"));
	return TRUE;
}
Пример #2
0
int CPlugins::Load( LPCTSTR lpstrPath)
{
	CString	csPath;
	int		nPlugin = 0,
			nCount = 0;
	BOOL	bFoundPlugins = FALSE,
			bValidPlugin;

	try
	{
		CFileFind			cFinder;

		// plugin struct array initialization
		for (int i=0; i<MAX_PLUGINS; i++ )
		{
			m_plugin[i].hDll		= NULL;
			m_plugin[i].pInventory	= NULL;
			m_plugin[i].pPrologResp	= NULL;
			m_plugin[i].pPrologWrite= NULL;
			m_plugin[i].pStart		= NULL;
			m_plugin[i].pEnd		= NULL;
			m_plugin[i].pClean		= NULL;
		}
		if ((lpstrPath == NULL) || (_tcslen( lpstrPath) == 0))
			// Use standard install path
			csPath.Format( _T( "%s\\plugins"), getInstallFolder());
		else
			// Use provided path to search for plugins
			csPath = lpstrPath;
		// Search for DLL into path
		m_pLogger->log( LOG_PRIORITY_DEBUG,  _T( "DLL PLUGIN => Searching for Plug-in DLL(s) in folder <%s>"), csPath);
		csPath +=  _T( "\\*.dll");
		bFoundPlugins = cFinder.FindFile( csPath);
		while (bFoundPlugins)
		{
			bValidPlugin = FALSE;
			// One DLL found, try to load it
			bFoundPlugins = cFinder.FindNextFile();
			m_pLogger->log(LOG_PRIORITY_DEBUG,  _T( "DLL PLUGIN => Trying to validate DLL <%s> as a Plug-in"), cFinder.GetFileName());
			if( (m_plugin[nPlugin].hDll = LoadLibrary( cFinder.GetFilePath())) == NULL )
			{
				m_pLogger->log( LOG_PRIORITY_WARNING,  _T( "DLL PLUGIN => Failed loading Plug-in DLL <%s>, %s"), cFinder.GetFileName(), LookupError( GetLastError()));
				continue;
			}
			// Get name
			m_plugin[nPlugin].csName = cFinder.GetFileTitle();
			// Try to load each API entry
			if( (m_plugin[nPlugin].pEnd = (HOOK_END)GetProcAddress( m_plugin[nPlugin].hDll, "OCS_CALL_END_EXPORTED")) == NULL)
			{
				m_pLogger->log( LOG_PRIORITY_WARNING,  _T( "DLL PLUGIN => No End hook for Plug-in <%s>, %s"), cFinder.GetFileTitle(), LookupError( GetLastError()));
			}
			else
				// Hook available, so valid plugin
				bValidPlugin = TRUE;
			if( (m_plugin[nPlugin].pStart = (HOOK_START)GetProcAddress( m_plugin[nPlugin].hDll, "OCS_CALL_START_EXPORTED")) == NULL)
			{
				m_pLogger->log( LOG_PRIORITY_WARNING,  _T( "DLL PLUGIN => No Start hook for Plug-in <%s>, %s"), cFinder.GetFileTitle(), LookupError( GetLastError()));
			}
			else
				// Hook available, so valid plugin
				bValidPlugin = TRUE;
			if( (m_plugin[nPlugin].pClean = (HOOK_CLEAN)GetProcAddress( m_plugin[nPlugin].hDll, "OCS_CALL_CLEAN_EXPORTED")) == NULL)
			{
				m_pLogger->log( LOG_PRIORITY_WARNING,  _T( "DLL PLUGIN => No Clean hook for Plug-in <%s>, %s"), cFinder.GetFileTitle(), LookupError( GetLastError()));
			}
			else
				// Hook available, so valid plugin
				bValidPlugin = TRUE;
			if( (m_plugin[nPlugin].pInventory = (HOOK_INVENTORY)GetProcAddress( m_plugin[nPlugin].hDll, "OCS_CALL_INVENTORY_EXPORTED")) == NULL)
			{
				m_pLogger->log( LOG_PRIORITY_WARNING,  _T( "DLL PLUGIN => No Inventory hook for Plug-in <%s>, %s"), cFinder.GetFileTitle(), LookupError( GetLastError()));
			}
			else
				// Hook available, so valid plugin
				bValidPlugin = TRUE;
			if( (m_plugin[nPlugin].pPrologWrite = (HOOK_PROLOG_WRITE)GetProcAddress( m_plugin[nPlugin].hDll, "OCS_CALL_PROLOGWRITE_EXPORTED")) == NULL)
			{
				m_pLogger->log( LOG_PRIORITY_WARNING,  _T( "DLL PLUGIN => No Prolog Read hook for Plug-in <%s>, %s"), cFinder.GetFileTitle(), LookupError( GetLastError()));
			}
			else
				// Hook available, so valid plugin
				bValidPlugin = TRUE;
			if( (m_plugin[nPlugin].pPrologResp = (HOOK_PROLOG_RESP)GetProcAddress( m_plugin[nPlugin].hDll, "OCS_CALL_PROLOGRESP_EXPORTED")) == NULL)
			{
				m_pLogger->log( LOG_PRIORITY_WARNING,  _T( "DLL PLUGIN => No Prolog response hook for Plug-in <%s>, %s"), cFinder.GetFileTitle(), LookupError( GetLastError()));
			}
			else
				// Hook available, so valid plugin
				bValidPlugin = TRUE;
			if (bValidPlugin)
			{
				// At least one hook available and plugin valid
				m_pLogger->log( LOG_PRIORITY_NOTICE,  _T( "DLL PLUGIN => Plug-in <%s> loaded"), m_plugin[nPlugin].csName);
				// Store and increase plugin number
				nPlugin++;
			}
			else
			{
				// Do not store DLL as a plugin
				m_pLogger->log(LOG_PRIORITY_DEBUG,  _T( "DLL PLUGIN => DLL <%s> is not a valid Plug-in"), cFinder.GetFileName());
				FreeLibrary( m_plugin[nPlugin].hDll );
			}
			nCount++;
		}
		cFinder.Close();
		m_pLogger->log(LOG_PRIORITY_DEBUG,  _T( "DLL PLUGIN => %d DLL Plug-in(s) succesfully loaded on %d DLL(s) found"), nPlugin, nCount);
		return nPlugin;
	}
	catch (CException *pEx)
	{
		m_pLogger->log( LOG_PRIORITY_WARNING,  _T( "DLL PLUGIN => Error while parsing Plug-in directory <%s>"), LookupError( pEx));
		pEx->Delete();
		return -1;
	}
}
Пример #3
0
BOOL COcsSystrayDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// Set link to OCS Web site
	m_HLink.SetLinkUrl( _T( "http://www.ocsinventory-ng.org"));
	// Set agent version
	CFileVersion fileVer;
	CString csMessage;

	// Service version
	csMessage.Format( _T( "%s\\ocsservice.exe"), getInstallFolder());
	if (fileVer.Open( csMessage))
	{
		csMessage.Format( _T( "%s version %s"), fileVer.GetFileDescription(), fileVer.GetFixedFileVersion());
		fileVer.Close();
	}
	else
		csMessage = _T( "Service version unknown");
	SetDlgItemText( IDC_VERSION_SERVICE, csMessage);
	// Agent version
	csMessage.Format( _T( "%s\\ocsinventory.exe"), getInstallFolder());
	if (fileVer.Open( csMessage))
	{
		csMessage.Format( _T( "%s version %s"), fileVer.GetFileDescription(), fileVer.GetFixedFileVersion());
		fileVer.Close();
	}
	else
		csMessage = _T( "Agent version unknown");
	SetDlgItemText( IDC_VERSION_AGENT, csMessage);
	// Download version
	csMessage.Format( _T( "%s\\download.exe"), getInstallFolder());
	if (fileVer.Open( csMessage))
	{
		csMessage.Format( _T( "%s version %s"), fileVer.GetFileDescription(), fileVer.GetFixedFileVersion());
		fileVer.Close();
	}
	else
		csMessage = _T( "Package Download and Setup Tool version unknown");
	SetDlgItemText( IDC_VERSION_DOWNLOAD, csMessage);
	// Framework version
	csMessage.Format( _T( "%s\\OCSInventory Front.dll"), getInstallFolder());
	if (fileVer.Open( csMessage))
	{
		csMessage.Format( _T( "%s version %s"), fileVer.GetFileDescription(), fileVer.GetFixedFileVersion());
		fileVer.Close();
	}
	else
		csMessage = _T( "Framework Provider version unknown");
	SetDlgItemText( IDC_VERSION_FRAMEWORK, csMessage);
	// Sysinfo version
	csMessage.Format( _T( "%s\\sysinfo.dll"), getInstallFolder());
	if (fileVer.Open( csMessage))
	{
		csMessage.Format( _T( "%s version %s"), fileVer.GetFileDescription(), fileVer.GetFixedFileVersion());
		fileVer.Close();
	}
	else
		csMessage = _T( "System Provider version unknown");
	SetDlgItemText( IDC_VERSION_SYSINFO, csMessage);
	// WMI version
	csMessage.Format( _T( "%s\\ocswmi.dll"), getInstallFolder());
	if (fileVer.Open( csMessage))
	{
		csMessage.Format( _T( "%s version %s"), fileVer.GetFileDescription(), fileVer.GetFixedFileVersion());
		fileVer.Close();
	}
	else
		csMessage = _T( "WMI Provider version unknown");
	SetDlgItemText( IDC_VERSION_WMI, csMessage);
	// Com Provider version
	csMessage.Format( _T( "%s\\%s"), getInstallFolder(), OCS_DEFAULT_PROVIDER);
	if (fileVer.Open( csMessage))
	{
		csMessage.Format( _T( "%s version %s"), fileVer.GetFileDescription(), fileVer.GetFixedFileVersion());
		fileVer.Close();
	}
	else
		csMessage = _T( "Communication Provider version unknown");
	SetDlgItemText( IDC_VERSION_COM_PROVIDER, csMessage);
	// Notification Provider version
	csMessage.Format( _T( "%s\\OcsNotifyUser.exe"), getInstallFolder());
	if (fileVer.Open( csMessage))
	{
		csMessage.Format( _T( "%s version %s"), fileVer.GetFileDescription(), fileVer.GetFixedFileVersion());
		fileVer.Close();
	}
	else
		csMessage = _T( "User Notification Provider version unknown");
	SetDlgItemText( IDC_VERSION_NOTIFICATION, csMessage);
	// Get service status
	IsServiceRunning( csMessage);
	SetDlgItemText( IDC_SERVICE_STATUS, csMessage);
	// Set tray icon
	csMessage.LoadString( AFX_IDS_APP_TITLE);
	m_iconTray.Create( NULL, WM_SYSTRAY_ICON_NOTIFY, csMessage, m_hIcon, IDR_MAINFRAME, FALSE);
	m_iconTray.SetCallbackMessage( IDC_SYSTRAY_DISPLAY);
	CSystemTray::MinimiseToTray( this);
	// Start timer to refresh service status
	SetTimer( ID_SYSTRAY_ICON, 5000, NULL);
	return TRUE;  // return TRUE  unless you set the focus to a control
}
Пример #4
0
BOOL CPackage::load( LPCTSTR lpstrFile)
{
	CString csBuffer;
	CMarkup myXml;
	TCHAR	cPath[_MAX_PATH], 
			cCommand[255];

	try
	{
		// Load "info" file content
		if (!myXml.LoadFile( lpstrFile))
			return FALSE;
		myXml.ResetPos();
		if (!myXml.FindFirstElem( _T( "DOWNLOAD")))
			return FALSE;
		m_csID = myXml.GetAttrib( _T( "ID"));
		csBuffer = myXml.GetAttrib( _T( "PRI"));
		if (csBuffer.IsEmpty())
			return FALSE;
		m_uPriority = _ttoi( csBuffer);
		m_csAction = myXml.GetAttrib( _T( "ACT"));
		m_csName = myXml.GetAttrib( _T( "NAME"));
		m_csDigest = myXml.GetAttrib( _T( "DIGEST"));
		m_csLocation = myXml.GetAttrib( _T( "LOC"));
		m_csProtocol = myXml.GetAttrib( _T( "PROTO"));
		csBuffer = myXml.GetAttrib( _T( "FRAGS"));
		if (csBuffer.IsEmpty())
			return FALSE;
		m_uFrags = _ttoi( csBuffer);
		m_csDigestAlgo = myXml.GetAttrib( _T( "DIGEST_ALGO"));
		m_csDigestAlgo.MakeLower();
		m_csDigestEncode = myXml.GetAttrib( _T( "DIGEST_ENCODE"));
		m_csDigestEncode.MakeLower();

		if (m_csAction == OCS_DOWNLOAD_ACTION_STORE)
		{
			// Store only action, get path where to store data
			if( !ExpandEnvironmentStrings( myXml.GetAttrib( _T( "PATH")), cPath, _MAX_PATH ))
			{
				return FALSE;
			}
			else
			{
				m_csPath = cPath;
				m_csPath.Replace( _T( "/"), _T( "\\"));
				m_csPath.Replace( _T( "INSTALL_PATH"), getInstallFolder());
			}
		}
		else
		{
			// Put into path tmp folder to unzip package
			if (GetTempPath( _MAX_PATH, m_csPath.GetBufferSetLength( _MAX_PATH+1)) == 0)
				return FALSE;
			m_csPath.ReleaseBuffer();
			m_csPath.AppendFormat( _T( "\\%s.OCS"), m_csID);
		}

		if (m_csAction == OCS_DOWNLOAD_ACTION_LAUNCH)
		{
			// In LAUNCH, command is in the NAME atribute
			if( !ExpandEnvironmentStrings( m_csName, cCommand, 255 ))
			{
				return FALSE;
			}
			else
			{
				m_csCommand = cCommand;
				m_csCommand.Replace( _T( "INSTALL_PATH"), getInstallFolder());
			}
		}
		else
		{
			// In Store or Execute mode, command is in the COMMAND attribute
			if( !ExpandEnvironmentStrings( myXml.GetAttrib( _T( "COMMAND")), cCommand, 255 ))
			{
				return FALSE;
			}
			else
			{
				m_csCommand = cCommand;
				m_csCommand.Replace( _T( "INSTALL_PATH"), getInstallFolder());
			}
		}
		m_csGardeFou = myXml.GetAttrib( _T( "GARDEFOU"));
		
		/* User notification */
		csBuffer = myXml.GetAttrib( _T( "NOTIFY_USER"));
		// Ensure non empty value
		if (!csBuffer.IsEmpty())
			m_bNotifyUser = (_ttoi( csBuffer) != 0);
		else
			m_bNotifyUser = FALSE;
		if (m_bNotifyUser)
		{
			csBuffer = myXml.GetAttrib( _T( "NOTIFY_COUNTDOWN"));
			// Ensure non empty value
			if (csBuffer.IsEmpty())
				csBuffer = COMMAND_TIMEOUT_DEFAULT;
			m_uNotifyCountdown = _ttoi( csBuffer);
			m_csNotifyText = myXml.GetAttrib( _T( "NOTIFY_TEXT"));
			if (myXml.GetAttrib( _T( "NOTIFY_CAN_ABORT")))
				m_bNotifyCanAbort = ( _ttoi( myXml.GetAttrib( _T( "NOTIFY_CAN_ABORT"))) != 0);
			else
				m_bNotifyCanAbort = FALSE;
			if (myXml.GetAttrib( _T( "NOTIFY_CAN_DELAY")))
				m_bNotifyCanDelay = ( _ttoi( myXml.GetAttrib( _T( "NOTIFY_CAN_DELAY"))) != 0);
			else
				m_bNotifyCanDelay = FALSE;
		}
		csBuffer = myXml.GetAttrib( _T( "NEED_DONE_ACTION"));
		// Ensure non empty value
		if (!csBuffer.IsEmpty())
			m_bNeedDoneAction = (_ttoi( csBuffer) != 0);
		else
			m_bNeedDoneAction = FALSE;
		if (m_bNeedDoneAction)
		{
			m_csNeedDoneActionText = myXml.GetAttrib( _T( "NEED_DONE_ACTION_TEXT"));
		}
		m_csSchedule = myXml.GetAttrib( _T( "SCHEDULE"));
		m_csPostCmd = myXml.GetAttrib( _T( "POSTCMD"));
	}
	catch( CException *pEx)
	{
		pEx->Delete();
		return FALSE;
	}
	return TRUE;
}