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; }
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; } }
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 }
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; }