2006-06-20 19:05:19 +02:00
|
|
|
/* Pandora agents service for Win32.
|
|
|
|
|
|
|
|
Copyright (C) 2006 Artica ST.
|
2008-04-09 Esteban Sanchez <estebans@artica.es>
* modules/pandora_data.[cc,h]: Added to repository. Implements a
Pandora_Data object, which holds a value and the timestamp when it
was created.
* modules/pandora_module.[cc,h]: It holds now a list of Pandora_Data
objects. The XML is generated based on the size of this list. Output
property has became obsolete and child modules must use setOutput().
* modules/pandora_module_cpuusage.cc,
modules/pandora_module_exec.cc,
modules/pandora_module_freedisk.cc,
modules/pandora_module_freememory.cc,
modules/pandora_module_odbc.cc, modules/pandora_module_proc.cc,
modules/pandora_module_service.cc: Updated to new Pandora_Module
parent class.
* modules/pandora_module_list.cc: Deleted debug output.
* pandora.cc: Now uses SYSTEMTIME instead of old time_t.
* pandora_windows_service.[cc,h]: Added Ramon Novoa to authors. Added
a new configuration token transfer_interval which sets the interval
where the data file will be sent to the server. If the current
interval token is lower than this transfer interval, the data will be
added into a data_list XML tag.
* PandoraAgent.dev: Added new files.
* bin/PandoraAgent.exe: Updated to last commit.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@803 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2008-04-09 17:48:06 +02:00
|
|
|
Written by Esteban Sanchez, Ramon Novoa.
|
2006-06-20 19:05:19 +02:00
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 2, or (at your option)
|
|
|
|
any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
|
|
with this program; if not, write to the Free Software Foundation,
|
|
|
|
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "pandora_windows_service.h"
|
|
|
|
#include "pandora.h"
|
2006-07-04 16:07:08 +02:00
|
|
|
#include "pandora_strutils.h"
|
2006-06-20 19:05:19 +02:00
|
|
|
#include "windows_service.h"
|
|
|
|
#include "modules/pandora_module_factory.h"
|
2006-07-04 16:07:08 +02:00
|
|
|
#include "ssh/pandora_ssh_client.h"
|
2007-08-07 16:28:14 +02:00
|
|
|
#include "ftp/pandora_ftp_client.h"
|
2006-07-04 16:07:08 +02:00
|
|
|
#include "misc/pandora_file.h"
|
|
|
|
#include "windows/pandora_windows_info.h"
|
2008-12-11 11:20:07 +01:00
|
|
|
#include "udp_server/udp_server.h"
|
2006-06-20 19:05:19 +02:00
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
#include <cstdlib>
|
|
|
|
#include <ctime>
|
2008-06-10 11:50:29 +02:00
|
|
|
#include <direct.h>
|
2010-07-21 12:03:20 +02:00
|
|
|
#include <sys/types.h>
|
|
|
|
#include <dirent.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <pandora_agent_conf.h>
|
2011-07-11 17:49:29 +02:00
|
|
|
#include <fstream>
|
2011-07-28 19:34:51 +02:00
|
|
|
#include <unistd.h>
|
2006-06-20 19:05:19 +02:00
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
using namespace Pandora;
|
|
|
|
using namespace Pandora_Modules;
|
2006-07-04 16:07:08 +02:00
|
|
|
using namespace Pandora_Strutils;
|
2008-12-11 11:20:07 +01:00
|
|
|
|
2008-11-28 11:51:03 +01:00
|
|
|
Pandora_Windows_Service::Pandora_Windows_Service ()
|
2008-12-11 11:20:07 +01:00
|
|
|
: Windows_Service (NULL, NULL, NULL) {
|
2008-11-28 11:51:03 +01:00
|
|
|
this->setInitFunction ((void (Windows_Service::*) ())
|
|
|
|
&Pandora_Windows_Service::pandora_init);
|
|
|
|
this->setRunFunction ((void (Windows_Service::*) ())
|
2008-12-11 11:20:07 +01:00
|
|
|
&Pandora_Windows_Service::pandora_run);
|
|
|
|
this->started = false;
|
|
|
|
}
|
2006-07-05 16:02:05 +02:00
|
|
|
|
2006-08-15 Esteban Sanchez <estebans@artica.es>
* autogen.sh, configure.in, Makefile.am, Doxyfile.in: Added to
repository. They are used to generate documentation, not to compile.
* main.cc: Added some comments. Style correction.
* pandora.[cc,h]: Added documentation comments. Changed visibility of
some attributes.
* pandora_agent_conf.[cc,h]: Added to Pandora namespace. Added
documentation comments.
* pandora_windows_service.[cc,h], pandora_strutils.[cc,h],
windows/pandora_windows_infp.[cc,h], ssh/pandora_ssh_test.[cc,h]:
Added documentation comments.
* ssh/pandora_ssh_client.[cc,h]:Added documentation comments. Removed
old method to connect with user and password. Style correction.
* misc/pandora_file.[cc,h]: Added documentation comments. Renamed some
parameters.
* modules/pandora_module.[cc,h]: Added documentation comments. Put a
name to the enumerators. Added a new class to agroupate all exceptions
produced by Pandora_Module child class objects. Changed visibility of
some attributes. Added some new methods and renamed others.
* modules/pandora_module_cpuusage.[cc,h],
modules/pandora_module_exec.[cc,h],
modules/pandora_module_freememory.[cc,h],
modules/pandora_module_freedisk.[cc,h], modules/pandora_module_proc.[cc,h],
modules/pandora_module_service.[cc,h]: Added documentation comments.
Some changes to adapt the objects to the Pandora_Module changes.
* modules/pandora_module_list.[cc,h]: Added documentation comments.
Some changes to adapt the objects to the Pandora_Module changes. Added
to Pandora_Modules namespace.
* windows/pandora_windows_wmi.[cc,h]: Added documentation comments.
Renamed Pandora_Wmi_Error to Pandora_Wmi_Exception.
* windows_service.[cc,h]: Added documentation comments. Changed
visibility of some attributes. Style correction.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@150 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2006-08-25 15:02:03 +02:00
|
|
|
/**
|
2008-11-28 11:51:03 +01:00
|
|
|
* Set Pandora service Windows properties.
|
2006-08-15 Esteban Sanchez <estebans@artica.es>
* autogen.sh, configure.in, Makefile.am, Doxyfile.in: Added to
repository. They are used to generate documentation, not to compile.
* main.cc: Added some comments. Style correction.
* pandora.[cc,h]: Added documentation comments. Changed visibility of
some attributes.
* pandora_agent_conf.[cc,h]: Added to Pandora namespace. Added
documentation comments.
* pandora_windows_service.[cc,h], pandora_strutils.[cc,h],
windows/pandora_windows_infp.[cc,h], ssh/pandora_ssh_test.[cc,h]:
Added documentation comments.
* ssh/pandora_ssh_client.[cc,h]:Added documentation comments. Removed
old method to connect with user and password. Style correction.
* misc/pandora_file.[cc,h]: Added documentation comments. Renamed some
parameters.
* modules/pandora_module.[cc,h]: Added documentation comments. Put a
name to the enumerators. Added a new class to agroupate all exceptions
produced by Pandora_Module child class objects. Changed visibility of
some attributes. Added some new methods and renamed others.
* modules/pandora_module_cpuusage.[cc,h],
modules/pandora_module_exec.[cc,h],
modules/pandora_module_freememory.[cc,h],
modules/pandora_module_freedisk.[cc,h], modules/pandora_module_proc.[cc,h],
modules/pandora_module_service.[cc,h]: Added documentation comments.
Some changes to adapt the objects to the Pandora_Module changes.
* modules/pandora_module_list.[cc,h]: Added documentation comments.
Some changes to adapt the objects to the Pandora_Module changes. Added
to Pandora_Modules namespace.
* windows/pandora_windows_wmi.[cc,h]: Added documentation comments.
Renamed Pandora_Wmi_Error to Pandora_Wmi_Exception.
* windows_service.[cc,h]: Added documentation comments. Changed
visibility of some attributes. Style correction.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@150 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2006-08-25 15:02:03 +02:00
|
|
|
*
|
|
|
|
* @param svc_name Internal service name
|
|
|
|
* @param svc_display_name Service name that will appear in the
|
|
|
|
* Windows service administration tool.
|
|
|
|
* @param svc_description Long description of the service.
|
2008-12-11 11:20:07 +01:00
|
|
|
*/
|
2008-11-28 11:51:03 +01:00
|
|
|
void
|
|
|
|
Pandora_Windows_Service::setValues (const char * svc_name,
|
|
|
|
const char * svc_display_name,
|
|
|
|
const char * svc_description) {
|
|
|
|
this->service_name = (char *) svc_name;
|
|
|
|
this->service_display_name = (char *) svc_display_name;
|
|
|
|
this->service_description = (char *) svc_description;
|
2008-07-09 14:46:22 +02:00
|
|
|
execution_number = 0;
|
|
|
|
this->modules = NULL;
|
|
|
|
this->conf = NULL;
|
2008-04-09 Esteban Sanchez <estebans@artica.es>
* modules/pandora_data.[cc,h]: Added to repository. Implements a
Pandora_Data object, which holds a value and the timestamp when it
was created.
* modules/pandora_module.[cc,h]: It holds now a list of Pandora_Data
objects. The XML is generated based on the size of this list. Output
property has became obsolete and child modules must use setOutput().
* modules/pandora_module_cpuusage.cc,
modules/pandora_module_exec.cc,
modules/pandora_module_freedisk.cc,
modules/pandora_module_freememory.cc,
modules/pandora_module_odbc.cc, modules/pandora_module_proc.cc,
modules/pandora_module_service.cc: Updated to new Pandora_Module
parent class.
* modules/pandora_module_list.cc: Deleted debug output.
* pandora.cc: Now uses SYSTEMTIME instead of old time_t.
* pandora_windows_service.[cc,h]: Added Ramon Novoa to authors. Added
a new configuration token transfer_interval which sets the interval
where the data file will be sent to the server. If the current
interval token is lower than this transfer interval, the data will be
added into a data_list XML tag.
* PandoraAgent.dev: Added new files.
* bin/PandoraAgent.exe: Updated to last commit.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@803 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2008-04-09 17:48:06 +02:00
|
|
|
this->interval = 60000;
|
|
|
|
this->transfer_interval = this->interval;
|
|
|
|
this->elapsed_transfer_time = 0;
|
2009-09-22 Ramon Novoa <rnovoa@artica.es>
* debug_new.h, fast_mutex.h,
debug_new.cpp, static_assert.h: Added to repository. Wu Yongwei's
memory leak detection tool (part of Nvwa). Only compiled when
debugging is enabled.
* bin/util/tentacle_client.exe: Added to repository. Tentacle client
needed to build the installer.
* installer/pandora_2.0.mpi: moved to installer/pandora.mpi. Updated.
The installer can now be built directly from the installer
subdirectory.
* configure.in, Makefile.am, autogen.sh: Created a proper
configure.in and Makefile.am. The agent can now be cross-compiled
from Linux :-D
* bin/pandora_agent.conf: Fixed. A local configuration had been
uploaded.
* pandora_windows_service.h,pandora_windows_service.cc,
udp_server/udp_server.cc, udp_server/udp_server.h: Properly shutdown
the UDP server.
* modules/pandora_module_regexp.cc,
modules/pandora_module_inventory.cc,
modules/pandora_module_factory.cc,
modules/pandora_module.cc, pandora_strutils.cc,
pandora.h, pandora.cc: Fixed a couple of memory leaks. Small changes
to avoid compile warnings when cross-compiling from Linux.
* windows_service.cc: Removed the interactive service flag to avoid
'black windows'.
* main.cc: Include the memory leak detection tool if debugging is
enabled.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1966 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-09-22 13:48:25 +02:00
|
|
|
this->udp_server = NULL;
|
2006-06-20 19:05:19 +02:00
|
|
|
}
|
|
|
|
|
2006-08-15 Esteban Sanchez <estebans@artica.es>
* autogen.sh, configure.in, Makefile.am, Doxyfile.in: Added to
repository. They are used to generate documentation, not to compile.
* main.cc: Added some comments. Style correction.
* pandora.[cc,h]: Added documentation comments. Changed visibility of
some attributes.
* pandora_agent_conf.[cc,h]: Added to Pandora namespace. Added
documentation comments.
* pandora_windows_service.[cc,h], pandora_strutils.[cc,h],
windows/pandora_windows_infp.[cc,h], ssh/pandora_ssh_test.[cc,h]:
Added documentation comments.
* ssh/pandora_ssh_client.[cc,h]:Added documentation comments. Removed
old method to connect with user and password. Style correction.
* misc/pandora_file.[cc,h]: Added documentation comments. Renamed some
parameters.
* modules/pandora_module.[cc,h]: Added documentation comments. Put a
name to the enumerators. Added a new class to agroupate all exceptions
produced by Pandora_Module child class objects. Changed visibility of
some attributes. Added some new methods and renamed others.
* modules/pandora_module_cpuusage.[cc,h],
modules/pandora_module_exec.[cc,h],
modules/pandora_module_freememory.[cc,h],
modules/pandora_module_freedisk.[cc,h], modules/pandora_module_proc.[cc,h],
modules/pandora_module_service.[cc,h]: Added documentation comments.
Some changes to adapt the objects to the Pandora_Module changes.
* modules/pandora_module_list.[cc,h]: Added documentation comments.
Some changes to adapt the objects to the Pandora_Module changes. Added
to Pandora_Modules namespace.
* windows/pandora_windows_wmi.[cc,h]: Added documentation comments.
Renamed Pandora_Wmi_Error to Pandora_Wmi_Exception.
* windows_service.[cc,h]: Added documentation comments. Changed
visibility of some attributes. Style correction.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@150 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2006-08-25 15:02:03 +02:00
|
|
|
/**
|
|
|
|
* Destroys a Pandora_Windows_Service object.
|
|
|
|
*/
|
2006-06-20 19:05:19 +02:00
|
|
|
Pandora_Windows_Service::~Pandora_Windows_Service () {
|
2011-07-28 19:34:51 +02:00
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
if (this->conf != NULL) {
|
2011-08-19 13:58:22 +02:00
|
|
|
if(conf->getValue("proxy_mode") != "") {
|
|
|
|
killTentacleProxy();
|
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
delete this->conf;
|
|
|
|
}
|
2006-07-05 16:02:05 +02:00
|
|
|
|
2009-09-22 Ramon Novoa <rnovoa@artica.es>
* debug_new.h, fast_mutex.h,
debug_new.cpp, static_assert.h: Added to repository. Wu Yongwei's
memory leak detection tool (part of Nvwa). Only compiled when
debugging is enabled.
* bin/util/tentacle_client.exe: Added to repository. Tentacle client
needed to build the installer.
* installer/pandora_2.0.mpi: moved to installer/pandora.mpi. Updated.
The installer can now be built directly from the installer
subdirectory.
* configure.in, Makefile.am, autogen.sh: Created a proper
configure.in and Makefile.am. The agent can now be cross-compiled
from Linux :-D
* bin/pandora_agent.conf: Fixed. A local configuration had been
uploaded.
* pandora_windows_service.h,pandora_windows_service.cc,
udp_server/udp_server.cc, udp_server/udp_server.h: Properly shutdown
the UDP server.
* modules/pandora_module_regexp.cc,
modules/pandora_module_inventory.cc,
modules/pandora_module_factory.cc,
modules/pandora_module.cc, pandora_strutils.cc,
pandora.h, pandora.cc: Fixed a couple of memory leaks. Small changes
to avoid compile warnings when cross-compiling from Linux.
* windows_service.cc: Removed the interactive service flag to avoid
'black windows'.
* main.cc: Include the memory leak detection tool if debugging is
enabled.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1966 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-09-22 13:48:25 +02:00
|
|
|
if (this->udp_server != NULL) {
|
|
|
|
((UDP_Server *)udp_server)->stop ();
|
|
|
|
delete (UDP_Server *)udp_server;
|
|
|
|
}
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
if (this->modules != NULL) {
|
|
|
|
delete this->modules;
|
|
|
|
}
|
2008-04-09 Esteban Sanchez <estebans@artica.es>
* modules/pandora_data.[cc,h]: Added to repository. Implements a
Pandora_Data object, which holds a value and the timestamp when it
was created.
* modules/pandora_module.[cc,h]: It holds now a list of Pandora_Data
objects. The XML is generated based on the size of this list. Output
property has became obsolete and child modules must use setOutput().
* modules/pandora_module_cpuusage.cc,
modules/pandora_module_exec.cc,
modules/pandora_module_freedisk.cc,
modules/pandora_module_freememory.cc,
modules/pandora_module_odbc.cc, modules/pandora_module_proc.cc,
modules/pandora_module_service.cc: Updated to new Pandora_Module
parent class.
* modules/pandora_module_list.cc: Deleted debug output.
* pandora.cc: Now uses SYSTEMTIME instead of old time_t.
* pandora_windows_service.[cc,h]: Added Ramon Novoa to authors. Added
a new configuration token transfer_interval which sets the interval
where the data file will be sent to the server. If the current
interval token is lower than this transfer interval, the data will be
added into a data_list XML tag.
* PandoraAgent.dev: Added new files.
* bin/PandoraAgent.exe: Updated to last commit.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@803 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2008-04-09 17:48:06 +02:00
|
|
|
pandoraLog ("Pandora agent stopped");
|
2006-06-20 19:05:19 +02:00
|
|
|
}
|
2008-12-11 11:20:07 +01:00
|
|
|
|
|
|
|
Pandora_Windows_Service *
|
|
|
|
Pandora_Windows_Service::getInstance () {
|
|
|
|
static Pandora_Windows_Service *service = NULL;
|
|
|
|
|
|
|
|
if (service != NULL)
|
|
|
|
return service;
|
|
|
|
|
|
|
|
service = new Pandora_Windows_Service ();
|
|
|
|
|
|
|
|
return service;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
Pandora_Windows_Service::start () {
|
|
|
|
this->started = true;
|
2006-07-05 16:02:05 +02:00
|
|
|
}
|
|
|
|
|
2011-07-11 17:49:29 +02:00
|
|
|
void
|
|
|
|
Pandora_Windows_Service::pandora_init_broker (string file_conf) {
|
2011-07-14 10:58:18 +02:00
|
|
|
string interval, debug, transfer_interval, util_dir, path, env, name_agent;
|
2011-07-11 17:49:29 +02:00
|
|
|
string udp_server_enabled, udp_server_port, udp_server_addr, udp_server_auth_addr;
|
|
|
|
int pos;
|
|
|
|
|
|
|
|
/*setPandoraDebug (true);*/
|
|
|
|
|
|
|
|
// Add the util subdirectory to the PATH
|
|
|
|
util_dir = Pandora::getPandoraInstallDir ();
|
|
|
|
util_dir += "util";
|
|
|
|
path = getenv ("PATH");
|
|
|
|
env = "PATH=" + path + ";" + util_dir;
|
|
|
|
putenv (env.c_str ());
|
2011-07-14 10:58:18 +02:00
|
|
|
|
|
|
|
name_agent = "PANDORA_AGENT=" + checkAgentName(file_conf);
|
|
|
|
putenv(name_agent.c_str());
|
2011-07-11 17:49:29 +02:00
|
|
|
|
|
|
|
this->conf = Pandora::Pandora_Agent_Conf::getInstance ();
|
|
|
|
this->conf->setFile (file_conf);
|
|
|
|
this->modules = new Pandora_Module_List (file_conf);
|
|
|
|
|
|
|
|
pandoraLog ("Pandora agent started");
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
Pandora_Windows_Service::count_broker_agents(){
|
|
|
|
string buffer;
|
|
|
|
string filename;
|
|
|
|
unsigned int pos;
|
|
|
|
int num = 0;
|
|
|
|
|
|
|
|
filename = Pandora::getPandoraInstallDir ();
|
|
|
|
filename += "pandora_agent.conf";
|
|
|
|
ifstream file (filename.c_str ());
|
|
|
|
|
|
|
|
/* Read and set the file */
|
|
|
|
while (!file.eof ()) {
|
|
|
|
/* Set the value from each line */
|
|
|
|
getline (file, buffer);
|
|
|
|
|
|
|
|
/* Ignore blank or commented lines */
|
|
|
|
if (buffer[0] != '#' && buffer[0] != '\n' && buffer[0] != '\0') {
|
|
|
|
/*Check if is a broker_agent*/
|
|
|
|
pos = buffer.find("broker_agent");
|
|
|
|
if (pos != string::npos){
|
|
|
|
num += 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
file.close ();
|
|
|
|
return num;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
Pandora_Windows_Service::check_broker_agents(string *all_conf){
|
|
|
|
string buffer, filename;
|
|
|
|
unsigned int pos;
|
|
|
|
int pos_file = 0;
|
|
|
|
|
|
|
|
filename = Pandora::getPandoraInstallDir ();
|
|
|
|
filename += "pandora_agent.conf";
|
|
|
|
|
|
|
|
ifstream file (filename.c_str ());
|
|
|
|
|
|
|
|
while (!file.eof ()) {
|
|
|
|
/* Set the value from each line */
|
|
|
|
getline (file, buffer);
|
|
|
|
|
|
|
|
/* Ignore blank or commented lines */
|
|
|
|
if (buffer[0] != '#' && buffer[0] != '\n' && buffer[0] != '\0') {
|
|
|
|
/*Check if is a broker_agent*/
|
|
|
|
pos = buffer.find("broker_agent");
|
|
|
|
if (pos != string::npos){
|
|
|
|
string name_broker, path_broker;
|
|
|
|
|
|
|
|
name_broker = buffer.substr(pos+13);
|
|
|
|
path_broker = Pandora::getPandoraInstallDir () + name_broker + ".conf";
|
|
|
|
all_conf[pos_file] = path_broker;
|
|
|
|
pos_file += 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
file.close();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-06-20 19:05:19 +02:00
|
|
|
void
|
|
|
|
Pandora_Windows_Service::pandora_init () {
|
2009-11-26 18:15:06 +01:00
|
|
|
string conf_file, interval, debug, transfer_interval, util_dir, path, env;
|
2008-12-11 11:20:07 +01:00
|
|
|
string udp_server_enabled, udp_server_port, udp_server_addr, udp_server_auth_addr;
|
2011-07-14 10:58:18 +02:00
|
|
|
string name_agent, name;
|
2011-07-28 19:34:51 +02:00
|
|
|
string proxy_mode, server_ip;
|
2011-07-11 17:49:29 +02:00
|
|
|
int pos, num;
|
2011-07-14 10:58:18 +02:00
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
setPandoraDebug (true);
|
2011-07-11 17:49:29 +02:00
|
|
|
|
2009-11-26 18:15:06 +01:00
|
|
|
// Add the util subdirectory to the PATH
|
|
|
|
util_dir = Pandora::getPandoraInstallDir ();
|
|
|
|
util_dir += "util";
|
|
|
|
path = getenv ("PATH");
|
|
|
|
env = "PATH=" + path + ";" + util_dir;
|
|
|
|
putenv (env.c_str ());
|
2011-07-14 10:58:18 +02:00
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
conf_file = Pandora::getPandoraInstallDir ();
|
|
|
|
conf_file += "pandora_agent.conf";
|
2011-07-14 10:58:18 +02:00
|
|
|
|
2011-07-11 17:49:29 +02:00
|
|
|
num = count_broker_agents();
|
|
|
|
string all_conf[num];
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
this->conf = Pandora::Pandora_Agent_Conf::getInstance ();
|
2011-07-11 17:49:29 +02:00
|
|
|
this->conf->setFile (all_conf);
|
2008-07-09 14:46:22 +02:00
|
|
|
this->modules = new Pandora_Module_List (conf_file);
|
2011-07-11 17:49:29 +02:00
|
|
|
|
2011-07-14 10:58:18 +02:00
|
|
|
name = checkAgentName(conf_file);
|
|
|
|
if (name.empty ()) {
|
|
|
|
name = Pandora_Windows_Info::getSystemName ();
|
|
|
|
}
|
|
|
|
name_agent = "PANDORA_AGENT=" + name;
|
|
|
|
putenv(name_agent.c_str());
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
/* Get the interval value (in seconds) and set it to the service */
|
|
|
|
interval = conf->getValue ("interval");
|
2008-04-09 Esteban Sanchez <estebans@artica.es>
* modules/pandora_data.[cc,h]: Added to repository. Implements a
Pandora_Data object, which holds a value and the timestamp when it
was created.
* modules/pandora_module.[cc,h]: It holds now a list of Pandora_Data
objects. The XML is generated based on the size of this list. Output
property has became obsolete and child modules must use setOutput().
* modules/pandora_module_cpuusage.cc,
modules/pandora_module_exec.cc,
modules/pandora_module_freedisk.cc,
modules/pandora_module_freememory.cc,
modules/pandora_module_odbc.cc, modules/pandora_module_proc.cc,
modules/pandora_module_service.cc: Updated to new Pandora_Module
parent class.
* modules/pandora_module_list.cc: Deleted debug output.
* pandora.cc: Now uses SYSTEMTIME instead of old time_t.
* pandora_windows_service.[cc,h]: Added Ramon Novoa to authors. Added
a new configuration token transfer_interval which sets the interval
where the data file will be sent to the server. If the current
interval token is lower than this transfer interval, the data will be
added into a data_list XML tag.
* PandoraAgent.dev: Added new files.
* bin/PandoraAgent.exe: Updated to last commit.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@803 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2008-04-09 17:48:06 +02:00
|
|
|
transfer_interval = conf->getValue ("transfer_interval");
|
|
|
|
|
2006-11-21 12:32:03 +01:00
|
|
|
debug = conf->getValue ("debug");
|
2008-07-09 14:46:22 +02:00
|
|
|
setPandoraDebug (is_enabled (debug));
|
2006-07-05 16:02:05 +02:00
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
if (interval != "") {
|
2006-07-05 10:46:51 +02:00
|
|
|
try {
|
2007-08-23 18:22:56 +02:00
|
|
|
/* miliseconds */
|
2008-04-09 Esteban Sanchez <estebans@artica.es>
* modules/pandora_data.[cc,h]: Added to repository. Implements a
Pandora_Data object, which holds a value and the timestamp when it
was created.
* modules/pandora_module.[cc,h]: It holds now a list of Pandora_Data
objects. The XML is generated based on the size of this list. Output
property has became obsolete and child modules must use setOutput().
* modules/pandora_module_cpuusage.cc,
modules/pandora_module_exec.cc,
modules/pandora_module_freedisk.cc,
modules/pandora_module_freememory.cc,
modules/pandora_module_odbc.cc, modules/pandora_module_proc.cc,
modules/pandora_module_service.cc: Updated to new Pandora_Module
parent class.
* modules/pandora_module_list.cc: Deleted debug output.
* pandora.cc: Now uses SYSTEMTIME instead of old time_t.
* pandora_windows_service.[cc,h]: Added Ramon Novoa to authors. Added
a new configuration token transfer_interval which sets the interval
where the data file will be sent to the server. If the current
interval token is lower than this transfer interval, the data will be
added into a data_list XML tag.
* PandoraAgent.dev: Added new files.
* bin/PandoraAgent.exe: Updated to last commit.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@803 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2008-04-09 17:48:06 +02:00
|
|
|
this->interval = strtoint (interval) * 1000;
|
2006-07-05 10:46:51 +02:00
|
|
|
} catch (Invalid_Conversion e) {
|
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
}
|
2006-07-05 10:46:51 +02:00
|
|
|
|
2008-04-09 Esteban Sanchez <estebans@artica.es>
* modules/pandora_data.[cc,h]: Added to repository. Implements a
Pandora_Data object, which holds a value and the timestamp when it
was created.
* modules/pandora_module.[cc,h]: It holds now a list of Pandora_Data
objects. The XML is generated based on the size of this list. Output
property has became obsolete and child modules must use setOutput().
* modules/pandora_module_cpuusage.cc,
modules/pandora_module_exec.cc,
modules/pandora_module_freedisk.cc,
modules/pandora_module_freememory.cc,
modules/pandora_module_odbc.cc, modules/pandora_module_proc.cc,
modules/pandora_module_service.cc: Updated to new Pandora_Module
parent class.
* modules/pandora_module_list.cc: Deleted debug output.
* pandora.cc: Now uses SYSTEMTIME instead of old time_t.
* pandora_windows_service.[cc,h]: Added Ramon Novoa to authors. Added
a new configuration token transfer_interval which sets the interval
where the data file will be sent to the server. If the current
interval token is lower than this transfer interval, the data will be
added into a data_list XML tag.
* PandoraAgent.dev: Added new files.
* bin/PandoraAgent.exe: Updated to last commit.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@803 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2008-04-09 17:48:06 +02:00
|
|
|
if (transfer_interval == "") {
|
|
|
|
this->transfer_interval = this->interval;
|
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
/* miliseconds */
|
|
|
|
this->transfer_interval = strtoint (transfer_interval) * 1000;
|
|
|
|
} catch (Invalid_Conversion e) {
|
|
|
|
this->transfer_interval = this->interval;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
srand ((unsigned) time (0));
|
|
|
|
this->setSleepTime (this->interval);
|
2011-07-28 19:34:51 +02:00
|
|
|
|
|
|
|
/*Check if proxy mode is set*/
|
|
|
|
proxy_mode = conf->getValue ("proxy_mode");
|
|
|
|
|
|
|
|
if (proxy_mode != "") {
|
|
|
|
lauchTentacleProxy();
|
|
|
|
}
|
2009-10-06 12:55:59 +02:00
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
pandoraLog ("Pandora agent started");
|
2008-12-11 11:20:07 +01:00
|
|
|
|
|
|
|
/* Launch UDP Server */
|
|
|
|
udp_server_enabled = conf->getValue ("udp_server");
|
2009-09-22 Ramon Novoa <rnovoa@artica.es>
* debug_new.h, fast_mutex.h,
debug_new.cpp, static_assert.h: Added to repository. Wu Yongwei's
memory leak detection tool (part of Nvwa). Only compiled when
debugging is enabled.
* bin/util/tentacle_client.exe: Added to repository. Tentacle client
needed to build the installer.
* installer/pandora_2.0.mpi: moved to installer/pandora.mpi. Updated.
The installer can now be built directly from the installer
subdirectory.
* configure.in, Makefile.am, autogen.sh: Created a proper
configure.in and Makefile.am. The agent can now be cross-compiled
from Linux :-D
* bin/pandora_agent.conf: Fixed. A local configuration had been
uploaded.
* pandora_windows_service.h,pandora_windows_service.cc,
udp_server/udp_server.cc, udp_server/udp_server.h: Properly shutdown
the UDP server.
* modules/pandora_module_regexp.cc,
modules/pandora_module_inventory.cc,
modules/pandora_module_factory.cc,
modules/pandora_module.cc, pandora_strutils.cc,
pandora.h, pandora.cc: Fixed a couple of memory leaks. Small changes
to avoid compile warnings when cross-compiling from Linux.
* windows_service.cc: Removed the interactive service flag to avoid
'black windows'.
* main.cc: Include the memory leak detection tool if debugging is
enabled.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1966 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-09-22 13:48:25 +02:00
|
|
|
if (udp_server_enabled.compare ("1") == 0 && this->udp_server == NULL) {
|
2008-12-11 11:20:07 +01:00
|
|
|
udp_server_port = conf->getValue ("udp_server_port");
|
|
|
|
udp_server_addr = conf->getValue ("udp_server_address");
|
|
|
|
udp_server_auth_addr = conf->getValue ("udp_server_auth_address");
|
2009-09-22 Ramon Novoa <rnovoa@artica.es>
* debug_new.h, fast_mutex.h,
debug_new.cpp, static_assert.h: Added to repository. Wu Yongwei's
memory leak detection tool (part of Nvwa). Only compiled when
debugging is enabled.
* bin/util/tentacle_client.exe: Added to repository. Tentacle client
needed to build the installer.
* installer/pandora_2.0.mpi: moved to installer/pandora.mpi. Updated.
The installer can now be built directly from the installer
subdirectory.
* configure.in, Makefile.am, autogen.sh: Created a proper
configure.in and Makefile.am. The agent can now be cross-compiled
from Linux :-D
* bin/pandora_agent.conf: Fixed. A local configuration had been
uploaded.
* pandora_windows_service.h,pandora_windows_service.cc,
udp_server/udp_server.cc, udp_server/udp_server.h: Properly shutdown
the UDP server.
* modules/pandora_module_regexp.cc,
modules/pandora_module_inventory.cc,
modules/pandora_module_factory.cc,
modules/pandora_module.cc, pandora_strutils.cc,
pandora.h, pandora.cc: Fixed a couple of memory leaks. Small changes
to avoid compile warnings when cross-compiling from Linux.
* windows_service.cc: Removed the interactive service flag to avoid
'black windows'.
* main.cc: Include the memory leak detection tool if debugging is
enabled.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1966 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-09-22 13:48:25 +02:00
|
|
|
this->udp_server = new UDP_Server (this, udp_server_addr, udp_server_auth_addr, atoi (udp_server_port.c_str ()));
|
|
|
|
((UDP_Server *)this->udp_server)->start ();
|
2008-12-11 11:20:07 +01:00
|
|
|
}
|
2006-06-20 19:05:19 +02:00
|
|
|
}
|
|
|
|
|
2011-07-28 19:34:51 +02:00
|
|
|
int
|
|
|
|
Pandora_Windows_Service::killTentacleProxy() {
|
|
|
|
PROCESS_INFORMATION pi;
|
|
|
|
STARTUPINFO si;
|
|
|
|
string kill_cmd;
|
|
|
|
|
|
|
|
kill_cmd = "taskkill.exe /F /IM tentacle_server.exe";
|
|
|
|
|
|
|
|
ZeroMemory (&si, sizeof (si));
|
|
|
|
ZeroMemory (&pi, sizeof (pi));
|
|
|
|
if (CreateProcess (NULL , (CHAR *)kill_cmd.c_str (), NULL, NULL, FALSE,
|
|
|
|
CREATE_NO_WINDOW, NULL, NULL, &si, &pi) == 0) {
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
Pandora_Windows_Service::lauchTentacleProxy() {
|
|
|
|
string server_ip, server_port, proxy_max_connections, proxy_timeout;
|
|
|
|
string proxy_cmd;
|
|
|
|
PROCESS_INFORMATION pi;
|
|
|
|
STARTUPINFO si;
|
|
|
|
|
|
|
|
/*Check if server proxy is localhost*/
|
|
|
|
server_ip = conf->getValue("server_ip");
|
|
|
|
|
|
|
|
if (server_ip != "localhost") {
|
|
|
|
proxy_max_connections = conf->getValue("proxy_max_connection");
|
|
|
|
|
|
|
|
if (proxy_max_connections == "") {
|
|
|
|
proxy_max_connections = "10";
|
|
|
|
}
|
|
|
|
|
|
|
|
proxy_timeout = conf->getValue("proxy_timeout");
|
|
|
|
|
|
|
|
if (proxy_timeout == "") {
|
|
|
|
proxy_timeout = "1";
|
|
|
|
}
|
|
|
|
|
|
|
|
server_port = conf->getValue("server_port");
|
|
|
|
|
|
|
|
if (server_port == "") {
|
|
|
|
server_port = "41121";
|
|
|
|
}
|
|
|
|
|
2011-07-29 11:19:50 +02:00
|
|
|
proxy_cmd = "tentacle_server.exe -b " + server_ip + " -g " + server_port + " -c " + proxy_max_connections + " -t " + proxy_timeout;
|
2011-07-28 19:34:51 +02:00
|
|
|
|
|
|
|
ZeroMemory (&si, sizeof (si));
|
|
|
|
ZeroMemory (&pi, sizeof (pi));
|
|
|
|
if (CreateProcess (NULL , (CHAR *)proxy_cmd.c_str (), NULL, NULL, FALSE,
|
|
|
|
CREATE_NO_WINDOW, NULL, NULL, &si, &pi) == 0) {
|
2011-07-29 11:19:50 +02:00
|
|
|
pandoraLog("There was a problem lauching Tentacle Proxy");
|
2011-07-28 19:34:51 +02:00
|
|
|
return -1;
|
|
|
|
}
|
2011-07-29 11:19:50 +02:00
|
|
|
|
|
|
|
pandoraLog("Proxy mode enabled");
|
2011-07-28 19:34:51 +02:00
|
|
|
} else {
|
|
|
|
pandoraLog ("[error] You can not proxy to localhost");
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
string
|
2006-07-04 16:07:08 +02:00
|
|
|
Pandora_Windows_Service::getXmlHeader () {
|
2008-07-09 14:46:22 +02:00
|
|
|
char timestamp[20];
|
2011-09-01 16:37:57 +02:00
|
|
|
string agent_name, os_name, os_version, encoding, value, xml, address, parent_agent_name;
|
2008-07-31 12:31:58 +02:00
|
|
|
time_t ctime;
|
|
|
|
struct tm *ctime_tm = NULL;
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
// Get agent name
|
|
|
|
agent_name = conf->getValue ("agent_name");
|
|
|
|
if (agent_name == "") {
|
|
|
|
agent_name = Pandora_Windows_Info::getSystemName ();
|
2008-07-09 14:46:22 +02:00
|
|
|
}
|
2011-09-01 16:37:57 +02:00
|
|
|
|
|
|
|
// Get parent agent name
|
|
|
|
parent_agent_name = conf->getValue ("parent_agent_name");
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
// Get timestamp
|
2008-07-31 12:31:58 +02:00
|
|
|
ctime = time(0);
|
2008-11-28 11:51:03 +01:00
|
|
|
ctime_tm = localtime(&ctime);
|
2009-10-15 16:30:38 +02:00
|
|
|
value = conf->getValue ("autotime");
|
2010-07-06 13:47:43 +02:00
|
|
|
timestamp[0] = '\0';
|
2009-10-15 16:30:38 +02:00
|
|
|
if (value != "1") {
|
|
|
|
sprintf (timestamp, "%d-%02d-%02d %02d:%02d:%02d", ctime_tm->tm_year + 1900,
|
|
|
|
ctime_tm->tm_mon + 1, ctime_tm->tm_mday, ctime_tm->tm_hour,
|
|
|
|
ctime_tm->tm_min, ctime_tm->tm_sec);
|
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
// Get OS name and version
|
|
|
|
os_name = Pandora_Windows_Info::getOSName ();
|
|
|
|
os_version = os_name + Pandora_Windows_Info::getOSVersion ();
|
2009-10-15 16:30:38 +02:00
|
|
|
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
// Get encoding
|
|
|
|
encoding = conf->getValue ("encoding");
|
|
|
|
if (encoding == "") {
|
|
|
|
encoding = "ISO-8859-1";
|
|
|
|
}
|
|
|
|
|
2010-07-06 13:47:43 +02:00
|
|
|
xml = "<?xml version=\"1.0\" encoding=\"" + encoding + "\" ?>\n" +
|
|
|
|
"<agent_data agent_name=\"" + agent_name +
|
|
|
|
"\" description=\"" + conf->getValue ("description") +
|
|
|
|
"\" version=\"" + getPandoraAgentVersion ();
|
|
|
|
|
|
|
|
/* Skip the timestamp if autotime was enabled */
|
|
|
|
if (timestamp[0] != '\0') {
|
|
|
|
xml += "\" timestamp=\"";
|
|
|
|
xml += timestamp;
|
|
|
|
}
|
2011-08-18 11:41:37 +02:00
|
|
|
|
|
|
|
// Get agent address
|
|
|
|
address = conf->getValue ("address");
|
|
|
|
if (address != "") {
|
|
|
|
if(address == "auto") {
|
|
|
|
address = Pandora_Windows_Info::getSystemAddress ();
|
|
|
|
}
|
|
|
|
|
|
|
|
if(address != "") {
|
|
|
|
xml += "\" address=\"";
|
|
|
|
xml += address;
|
|
|
|
}
|
|
|
|
}
|
2010-07-06 13:47:43 +02:00
|
|
|
|
|
|
|
xml += "\" interval=\"" + conf->getValue ("interval") +
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
"\" os_name=\"" + os_name +
|
|
|
|
"\" os_version=\"" + os_version +
|
2011-09-01 16:37:57 +02:00
|
|
|
"\" group=\"" + conf->getValue ("group") +
|
|
|
|
"\" parent_agent_name=\"" + conf->getValue ("parent_agent_name") + "\">\n";
|
2010-07-06 13:47:43 +02:00
|
|
|
return xml;
|
2006-06-20 19:05:19 +02:00
|
|
|
}
|
|
|
|
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
int
|
2008-03-14 14:41:31 +01:00
|
|
|
Pandora_Windows_Service::copyTentacleDataFile (string host,
|
2008-12-11 12:57:03 +01:00
|
|
|
string filename,
|
|
|
|
string port,
|
|
|
|
string ssl,
|
|
|
|
string pass,
|
|
|
|
string opts)
|
2008-03-14 14:41:31 +01:00
|
|
|
{
|
2010-05-13 17:39:52 +02:00
|
|
|
DWORD rc;
|
2008-04-09 Esteban Sanchez <estebans@artica.es>
* modules/pandora_data.[cc,h]: Added to repository. Implements a
Pandora_Data object, which holds a value and the timestamp when it
was created.
* modules/pandora_module.[cc,h]: It holds now a list of Pandora_Data
objects. The XML is generated based on the size of this list. Output
property has became obsolete and child modules must use setOutput().
* modules/pandora_module_cpuusage.cc,
modules/pandora_module_exec.cc,
modules/pandora_module_freedisk.cc,
modules/pandora_module_freememory.cc,
modules/pandora_module_odbc.cc, modules/pandora_module_proc.cc,
modules/pandora_module_service.cc: Updated to new Pandora_Module
parent class.
* modules/pandora_module_list.cc: Deleted debug output.
* pandora.cc: Now uses SYSTEMTIME instead of old time_t.
* pandora_windows_service.[cc,h]: Added Ramon Novoa to authors. Added
a new configuration token transfer_interval which sets the interval
where the data file will be sent to the server. If the current
interval token is lower than this transfer interval, the data will be
added into a data_list XML tag.
* PandoraAgent.dev: Added new files.
* bin/PandoraAgent.exe: Updated to last commit.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@803 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2008-04-09 17:48:06 +02:00
|
|
|
string var, filepath;
|
2009-02-24 19:50:16 +01:00
|
|
|
string tentacle_cmd, working_dir;
|
|
|
|
PROCESS_INFORMATION pi;
|
|
|
|
STARTUPINFO si;
|
|
|
|
|
2008-03-14 14:41:31 +01:00
|
|
|
var = conf->getValue ("temporal");
|
|
|
|
if (var[var.length () - 1] != '\\') {
|
|
|
|
var += "\\";
|
|
|
|
}
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
filepath = var + filename;
|
|
|
|
|
2008-03-14 14:41:31 +01:00
|
|
|
/* Build the command to launch the Tentacle client */
|
|
|
|
tentacle_cmd = "tentacle_client.exe -a " + host;
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-12-11 12:57:03 +01:00
|
|
|
if (port != "") {
|
|
|
|
tentacle_cmd += " -p " + port;
|
2008-03-14 14:41:31 +01:00
|
|
|
}
|
|
|
|
|
2008-12-11 12:57:03 +01:00
|
|
|
if (ssl == "1") {
|
2008-03-14 14:41:31 +01:00
|
|
|
tentacle_cmd += " -c";
|
|
|
|
}
|
|
|
|
|
2008-12-11 12:57:03 +01:00
|
|
|
if (pass != "") {
|
|
|
|
tentacle_cmd += " -x " + pass;
|
2008-03-14 14:41:31 +01:00
|
|
|
}
|
|
|
|
|
2008-12-11 12:57:03 +01:00
|
|
|
if (opts != "") {
|
|
|
|
tentacle_cmd += " " + opts;
|
2008-03-14 14:41:31 +01:00
|
|
|
}
|
|
|
|
|
2009-09-24 18:29:25 +02:00
|
|
|
tentacle_cmd += " \"" + filepath + "\"";
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-03-14 14:41:31 +01:00
|
|
|
/* Copy the file */
|
|
|
|
pandoraDebug ("Remote copying XML %s on server %s",
|
2008-07-09 14:46:22 +02:00
|
|
|
filepath.c_str (), host.c_str ());
|
2008-03-14 14:41:31 +01:00
|
|
|
pandoraDebug ("Command %s", tentacle_cmd.c_str());
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2009-02-24 19:50:16 +01:00
|
|
|
ZeroMemory (&si, sizeof (si));
|
|
|
|
ZeroMemory (&pi, sizeof (pi));
|
2010-05-13 17:39:52 +02:00
|
|
|
if (CreateProcess (NULL , (CHAR *)tentacle_cmd.c_str (), NULL, NULL, FALSE,
|
|
|
|
CREATE_NO_WINDOW, NULL, NULL, &si, &pi) == 0) {
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Get the return code of the tentacle client*/
|
2009-02-24 19:50:16 +01:00
|
|
|
WaitForSingleObject(pi.hProcess, INFINITE);
|
2010-05-13 17:39:52 +02:00
|
|
|
GetExitCodeProcess (pi.hProcess, &rc);
|
|
|
|
if (rc != 0) {
|
2010-07-02 16:25:53 +02:00
|
|
|
CloseHandle (pi.hProcess);
|
2010-05-13 17:39:52 +02:00
|
|
|
return -1;
|
2009-02-09 18:47:24 +01:00
|
|
|
}
|
2009-02-24 19:50:16 +01:00
|
|
|
|
2010-07-02 16:25:53 +02:00
|
|
|
CloseHandle (pi.hProcess);
|
2010-05-13 17:39:52 +02:00
|
|
|
return 0;
|
2008-03-14 14:41:31 +01:00
|
|
|
}
|
|
|
|
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
int
|
2007-08-07 16:28:14 +02:00
|
|
|
Pandora_Windows_Service::copyScpDataFile (string host,
|
|
|
|
string remote_path,
|
|
|
|
string filename)
|
2006-12-01 17:29:27 +01:00
|
|
|
{
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
int rc = 0;
|
2007-08-07 16:28:14 +02:00
|
|
|
SSH::Pandora_Ssh_Client ssh_client;
|
2010-07-07 17:14:18 +02:00
|
|
|
string tmp_dir, filepath,port_str;
|
2007-08-07 16:28:14 +02:00
|
|
|
string pubkey_file, privkey_file;
|
2010-07-07 17:14:18 +02:00
|
|
|
int port;
|
2006-07-04 16:07:08 +02:00
|
|
|
|
2006-12-01 17:29:27 +01:00
|
|
|
tmp_dir = conf->getValue ("temporal");
|
2008-07-09 14:46:22 +02:00
|
|
|
if (tmp_dir[tmp_dir.length () - 1] != '\\') {
|
|
|
|
tmp_dir += "\\";
|
|
|
|
}
|
|
|
|
filepath = tmp_dir + filename;
|
|
|
|
|
2007-08-07 16:28:14 +02:00
|
|
|
pandoraDebug ("Connecting with %s", host.c_str ());
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
pubkey_file = Pandora::getPandoraInstallDir ();
|
|
|
|
pubkey_file += "key\\id_dsa.pub";
|
|
|
|
privkey_file = Pandora::getPandoraInstallDir ();
|
|
|
|
privkey_file += "key\\id_dsa";
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2010-07-07 17:14:18 +02:00
|
|
|
port_str = conf->getValue ("server_port");
|
|
|
|
if (port_str.length () == 0) {
|
|
|
|
port = SSH_DEFAULT_PORT;
|
|
|
|
} else {
|
|
|
|
port = strtoint(port_str);
|
|
|
|
}
|
|
|
|
|
|
|
|
rc = ssh_client.connectWithPublicKey (host.c_str (), port, "pandora",
|
2007-08-07 16:28:14 +02:00
|
|
|
pubkey_file, privkey_file, "");
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
if (rc == AUTHENTICATION_FAILED) {
|
2008-07-09 14:46:22 +02:00
|
|
|
pandoraLog ("Pandora Agent: Authentication Failed "
|
2007-08-07 16:28:14 +02:00
|
|
|
"when connecting to %s",
|
2008-07-09 14:46:22 +02:00
|
|
|
host.c_str ());
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
return rc;
|
|
|
|
} else if (rc == PANDORA_EXCEPTION) {
|
2008-07-09 14:46:22 +02:00
|
|
|
pandoraLog ("Pandora Agent: Failed when copying to %s",
|
|
|
|
host.c_str ());
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
return rc;
|
2008-07-09 14:46:22 +02:00
|
|
|
}
|
2007-08-07 16:28:14 +02:00
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
pandoraDebug ("Remote copying XML %s on server %s at %s%s",
|
|
|
|
filepath.c_str (), host.c_str (),
|
|
|
|
remote_path.c_str (), filename.c_str ());
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
|
|
|
|
rc = ssh_client.scpFileFilename (remote_path + filename,
|
2008-07-09 14:46:22 +02:00
|
|
|
filepath);
|
2010-11-17 20:22:04 +01:00
|
|
|
if (rc == PANDORA_EXCEPTION) {
|
2008-07-09 14:46:22 +02:00
|
|
|
pandoraLog ("Unable to copy at %s%s", remote_path.c_str (),
|
|
|
|
filename.c_str ());
|
|
|
|
ssh_client.disconnect();
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
return rc;
|
2008-07-09 14:46:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
ssh_client.disconnect();
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
return rc;
|
2007-08-07 16:28:14 +02:00
|
|
|
}
|
|
|
|
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
int
|
2007-08-07 16:28:14 +02:00
|
|
|
Pandora_Windows_Service::copyFtpDataFile (string host,
|
|
|
|
string remote_path,
|
2008-12-11 12:57:03 +01:00
|
|
|
string filename,
|
|
|
|
string password)
|
2007-08-07 16:28:14 +02:00
|
|
|
{
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
int rc = 0;
|
2007-08-07 16:28:14 +02:00
|
|
|
FTP::Pandora_Ftp_Client ftp_client;
|
2010-07-07 17:14:18 +02:00
|
|
|
string filepath, port_str;
|
|
|
|
int port;
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2007-08-07 16:28:14 +02:00
|
|
|
filepath = conf->getValue ("temporal");
|
2008-07-09 14:46:22 +02:00
|
|
|
if (filepath[filepath.length () - 1] != '\\') {
|
|
|
|
filepath += "\\";
|
|
|
|
}
|
|
|
|
filepath += filename;
|
2007-08-07 16:28:14 +02:00
|
|
|
|
2010-07-07 17:14:18 +02:00
|
|
|
port_str = conf->getValue ("server_port");
|
|
|
|
if (port_str.length () == 0) {
|
|
|
|
port = FTP_DEFAULT_PORT;
|
|
|
|
} else {
|
|
|
|
port = strtoint(port_str);
|
|
|
|
}
|
|
|
|
|
2007-08-07 16:28:14 +02:00
|
|
|
ftp_client.connect (host,
|
2010-07-07 17:14:18 +02:00
|
|
|
port,
|
2007-08-07 16:28:14 +02:00
|
|
|
"pandora",
|
|
|
|
password);
|
|
|
|
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
rc = ftp_client.ftpFileFilename (remote_path + filename,
|
2007-08-07 16:28:14 +02:00
|
|
|
filepath);
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
if (rc == UNKNOWN_HOST) {
|
2007-08-29 16:30:09 +02:00
|
|
|
pandoraLog ("Pandora Agent: Failed when copying to %s (%s)",
|
|
|
|
host.c_str (), ftp_client.getError ().c_str ());
|
|
|
|
ftp_client.disconnect ();
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
return rc;
|
|
|
|
} else if (rc == AUTHENTICATION_FAILED) {
|
2007-08-07 16:28:14 +02:00
|
|
|
pandoraLog ("Pandora Agent: Authentication Failed "
|
|
|
|
"when connecting to %s (%s)",
|
2008-07-09 14:46:22 +02:00
|
|
|
host.c_str (), ftp_client.getError ().c_str ());
|
2007-08-29 16:30:09 +02:00
|
|
|
ftp_client.disconnect ();
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
return rc;
|
|
|
|
} else if (rc == FTP_EXCEPTION) {
|
2007-08-07 16:28:14 +02:00
|
|
|
pandoraLog ("Pandora Agent: Failed when copying to %s (%s)",
|
2008-07-09 14:46:22 +02:00
|
|
|
host.c_str (), ftp_client.getError ().c_str ());
|
2007-08-29 16:30:09 +02:00
|
|
|
ftp_client.disconnect ();
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
return rc;
|
2007-08-07 16:28:14 +02:00
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2007-08-07 16:28:14 +02:00
|
|
|
ftp_client.disconnect ();
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
return rc;
|
2007-08-07 16:28:14 +02:00
|
|
|
}
|
|
|
|
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
int
|
2007-08-07 16:28:14 +02:00
|
|
|
Pandora_Windows_Service::copyDataFile (string filename)
|
|
|
|
{
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
int rc = 0;
|
2008-12-11 12:57:03 +01:00
|
|
|
unsigned char copy_to_secondary = 0;
|
2007-08-07 16:28:14 +02:00
|
|
|
string mode, host, remote_path;
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2007-08-07 16:28:14 +02:00
|
|
|
mode = conf->getValue ("transfer_mode");
|
|
|
|
host = conf->getValue ("server_ip");
|
|
|
|
remote_path = conf->getValue ("server_path");
|
2008-12-24 14:57:45 +01:00
|
|
|
// Fix remote path
|
|
|
|
if (mode != "local" && remote_path[remote_path.length () - 1] != '/') {
|
2008-07-09 14:46:22 +02:00
|
|
|
remote_path += "/";
|
2008-12-24 14:57:45 +01:00
|
|
|
} else if (mode == "local" && remote_path[remote_path.length () - 1] != '\\') {
|
|
|
|
remote_path += "\\";
|
2008-07-09 14:46:22 +02:00
|
|
|
}
|
|
|
|
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
if (mode == "ftp") {
|
|
|
|
rc = copyFtpDataFile (host, remote_path, filename, conf->getValue ("server_pwd"));
|
|
|
|
} else if (mode == "tentacle" || mode == "") {
|
|
|
|
rc = copyTentacleDataFile (host, filename, conf->getValue ("server_port"),
|
2008-12-11 12:57:03 +01:00
|
|
|
conf->getValue ("server_ssl"), conf->getValue ("server_pwd"),
|
|
|
|
conf->getValue ("server_opts"));
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
} else if (mode == "ssh") {
|
|
|
|
rc =copyScpDataFile (host, remote_path, filename);
|
|
|
|
} else if (mode == "local") {
|
|
|
|
rc = copyLocalDataFile (remote_path, filename);
|
|
|
|
} else {
|
|
|
|
rc = PANDORA_EXCEPTION;
|
|
|
|
pandoraLog ("Invalid transfer mode: %s."
|
|
|
|
"Please recheck transfer_mode option "
|
|
|
|
"in configuration file.");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (rc == 0) {
|
2007-08-23 18:22:56 +02:00
|
|
|
pandoraDebug ("Successfuly copied XML file to server.");
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
} else if (conf->getValue ("secondary_mode") == "on_error") {
|
|
|
|
copy_to_secondary = 1;
|
2008-12-11 12:57:03 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (conf->getValue ("secondary_mode") == "always") {
|
|
|
|
copy_to_secondary = 1;
|
|
|
|
}
|
|
|
|
|
2010-11-05 15:07:42 +01:00
|
|
|
// Exit unless we have to send the file to a secondary server
|
2008-12-11 12:57:03 +01:00
|
|
|
if (copy_to_secondary == 0) {
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
return rc;
|
2008-12-11 12:57:03 +01:00
|
|
|
}
|
|
|
|
|
2010-11-05 15:07:42 +01:00
|
|
|
// Read secondary server configuration
|
|
|
|
mode = conf->getValue ("secondary_transfer_mode");
|
|
|
|
host = conf->getValue ("secondary_server_ip");
|
|
|
|
remote_path = conf->getValue ("secondary_server_path");
|
|
|
|
|
|
|
|
// Fix remote path
|
|
|
|
if (mode != "local" && remote_path[remote_path.length () - 1] != '/') {
|
|
|
|
remote_path += "/";
|
|
|
|
} else if (mode == "local" && remote_path[remote_path.length () - 1] != '\\') {
|
|
|
|
remote_path += "\\";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Send the file to the secondary server
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
if (mode == "ftp") {
|
|
|
|
rc = copyFtpDataFile (host, remote_path, filename, conf->getValue ("secondary_server_pwd"));
|
|
|
|
} else if (mode == "tentacle" || mode == "") {
|
|
|
|
rc = copyTentacleDataFile (host, filename, conf->getValue ("secondary_server_port"),
|
2008-12-11 12:57:03 +01:00
|
|
|
conf->getValue ("secondary_server_ssl"), conf->getValue ("secondary_server_pwd"),
|
|
|
|
conf->getValue ("secondary_server_opts"));
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
} else if (mode == "ssh") {
|
|
|
|
rc = copyScpDataFile (host, remote_path, filename);
|
|
|
|
} else {
|
|
|
|
rc = PANDORA_EXCEPTION;
|
|
|
|
pandoraLog ("Invalid transfer mode: %s."
|
|
|
|
"Please recheck transfer_mode option "
|
|
|
|
"in configuration file.");
|
|
|
|
}
|
2008-12-11 12:57:03 +01:00
|
|
|
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
if (rc == 0) {
|
2008-12-11 12:57:03 +01:00
|
|
|
pandoraDebug ("Successfuly copied XML file to secondary server.");
|
2007-08-07 16:28:14 +02:00
|
|
|
}
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
|
|
|
|
return rc;
|
2006-12-01 17:29:27 +01:00
|
|
|
}
|
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
void
|
|
|
|
Pandora_Windows_Service::recvTentacleDataFile (string host,
|
2008-07-09 14:46:22 +02:00
|
|
|
string filename)
|
2008-06-10 11:50:29 +02:00
|
|
|
{
|
|
|
|
int rc;
|
|
|
|
string var;
|
|
|
|
string tentacle_cmd;
|
|
|
|
|
|
|
|
/* Change directory to "temporal" */
|
|
|
|
var = conf->getValue ("temporal");
|
|
|
|
if (_chdir(var.c_str()) != 0) {
|
|
|
|
pandoraDebug ("Error changing directory to %s", var.c_str());
|
|
|
|
throw Pandora_Exception ();
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Build the command to launch the Tentacle client */
|
|
|
|
tentacle_cmd = "tentacle_client.exe -g -a " + host;
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
var = conf->getValue ("server_port");
|
|
|
|
if (var != "") {
|
|
|
|
tentacle_cmd += " -p " + var;
|
|
|
|
}
|
|
|
|
|
|
|
|
var = conf->getValue ("server_ssl");
|
|
|
|
if (var == "1") {
|
|
|
|
tentacle_cmd += " -c";
|
|
|
|
}
|
|
|
|
|
|
|
|
var = conf->getValue ("server_pwd");
|
|
|
|
if (var != "") {
|
|
|
|
tentacle_cmd += " -x " + var;
|
|
|
|
}
|
|
|
|
|
|
|
|
var = conf->getValue ("server_opts");
|
|
|
|
if (var != "") {
|
|
|
|
tentacle_cmd += " " + var;
|
|
|
|
}
|
|
|
|
|
|
|
|
tentacle_cmd += " " + filename;
|
|
|
|
|
|
|
|
/* Copy the file */
|
|
|
|
pandoraDebug ("Requesting file %s from server %s",
|
2008-07-09 14:46:22 +02:00
|
|
|
filename.c_str (), host.c_str ());
|
2008-06-10 11:50:29 +02:00
|
|
|
pandoraDebug ("Command %s", tentacle_cmd.c_str());
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
rc = system (tentacle_cmd.c_str());
|
|
|
|
switch (rc) {
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
/* system() error */
|
2008-07-09 14:46:22 +02:00
|
|
|
case -1:
|
|
|
|
pandoraLog ("Unable to receive file %s", filename.c_str ());
|
|
|
|
throw Pandora_Exception ();
|
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
/* tentacle_client.exe returned OK */
|
2008-07-09 14:46:22 +02:00
|
|
|
case 0:
|
|
|
|
break;
|
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
/* tentacle_client.exe error */
|
2008-07-09 14:46:22 +02:00
|
|
|
default:
|
|
|
|
pandoraDebug ("Tentacle client was unable to receive file %s",
|
|
|
|
filename.c_str ());
|
|
|
|
throw Pandora_Exception ();
|
2008-06-10 11:50:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
Pandora_Windows_Service::recvDataFile (string filename) {
|
|
|
|
string mode, host, remote_path;
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
mode = conf->getValue ("transfer_mode");
|
|
|
|
host = conf->getValue ("server_ip");
|
|
|
|
remote_path = conf->getValue ("server_path");
|
|
|
|
if (remote_path[remote_path.length () - 1] != '/') {
|
|
|
|
remote_path += "/";
|
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
try {
|
|
|
|
if (mode == "tentacle") {
|
|
|
|
recvTentacleDataFile (host, filename);
|
|
|
|
} else {
|
2010-07-07 17:14:18 +02:00
|
|
|
pandoraLog ("Transfer mode %s does not support file retrieval.", mode.c_str () );
|
2008-06-10 11:50:29 +02:00
|
|
|
throw Pandora_Exception ();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Pandora_Exception e) {
|
|
|
|
throw e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
int
|
2008-12-24 14:57:45 +01:00
|
|
|
Pandora_Windows_Service::copyLocalDataFile (string remote_path,
|
|
|
|
string filename)
|
|
|
|
{
|
|
|
|
string local_path, local_file, remote_file;
|
|
|
|
local_path = conf->getValue ("temporal");
|
|
|
|
if (local_path[local_path.length () - 1] != '\\') {
|
|
|
|
local_path += "\\";
|
|
|
|
}
|
|
|
|
|
|
|
|
local_file = local_path + filename;
|
|
|
|
remote_file = remote_path + filename;
|
|
|
|
if (!CopyFile (local_file.c_str (), remote_file.c_str (), TRUE)) {
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
return PANDORA_EXCEPTION;
|
2008-12-24 14:57:45 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-07-16 13:43:07 +02:00
|
|
|
int
|
|
|
|
Pandora_Windows_Service::unzipCollection(string zip_path, string dest_dir) {
|
|
|
|
string unzip_cmd, dest_cmd;
|
|
|
|
PROCESS_INFORMATION pi;
|
|
|
|
STARTUPINFO si;
|
|
|
|
mode_t mode;
|
|
|
|
DWORD rc;
|
|
|
|
|
|
|
|
/*Delete dest directory*/
|
|
|
|
Pandora_File::removeDir(dest_dir);
|
|
|
|
|
|
|
|
/* Build the command to create destination diectory*/
|
|
|
|
rc = mkdir (dest_dir.c_str());
|
|
|
|
|
|
|
|
if (rc != 0) {
|
|
|
|
pandoraLog ("Pandora_Windows_Service::unzipCollection: Can not create dir %s", dest_dir.c_str());
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Build the command to launch the Tentacle client */
|
|
|
|
unzip_cmd = "unzip.exe \"" + zip_path + "\" -d \"" + dest_dir + "\"";
|
|
|
|
|
|
|
|
ZeroMemory (&si, sizeof (si));
|
|
|
|
ZeroMemory (&pi, sizeof (pi));
|
|
|
|
if (CreateProcess (NULL , (CHAR *)unzip_cmd.c_str (), NULL, NULL, FALSE,
|
|
|
|
CREATE_NO_WINDOW, NULL, NULL, &si, &pi) == 0) {
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Get the return code of the tentacle client*/
|
|
|
|
WaitForSingleObject(pi.hProcess, INFINITE);
|
|
|
|
GetExitCodeProcess (pi.hProcess, &rc);
|
|
|
|
|
|
|
|
if (rc != 0) {
|
|
|
|
CloseHandle (pi.hProcess);
|
|
|
|
pandoraLog ("Pandora_Windows_Service::unzipCollection: Can not unzip file %s", zip_path.c_str());
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
CloseHandle (pi.hProcess);
|
|
|
|
return 0;
|
|
|
|
}
|
2010-07-21 12:03:20 +02:00
|
|
|
/*
|
|
|
|
* Check the disk for collections installed
|
|
|
|
*/
|
|
|
|
|
|
|
|
void
|
|
|
|
Pandora_Windows_Service::purgeDiskCollections () {
|
|
|
|
|
|
|
|
DIR *dir;
|
|
|
|
struct dirent *dir_content;
|
|
|
|
struct stat file;
|
|
|
|
string tmp, filepath;
|
|
|
|
|
|
|
|
filepath = Pandora::getPandoraInstallDir() +"collections\\";
|
|
|
|
/*Open the directory*/
|
|
|
|
dir = opendir (filepath.c_str ());
|
|
|
|
|
|
|
|
/*Read the directory looking for files and folders*/
|
|
|
|
dir_content = readdir(dir);
|
|
|
|
|
|
|
|
while (dir_content != NULL) {
|
|
|
|
|
|
|
|
stat(tmp.c_str(),&file);
|
|
|
|
|
|
|
|
/*If is a folder, check for . and .. */
|
|
|
|
if ( (strcmp(dir_content->d_name,".") != 0) && (strcmp(dir_content->d_name,"..") != 0) ) {
|
|
|
|
/*If the file is not in collection list, delete the file*/
|
|
|
|
if(! conf->isInCollectionList(dir_content->d_name) ) {
|
|
|
|
tmp = filepath+dir_content->d_name;
|
|
|
|
Pandora_File::removeDir(tmp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*Next item*/
|
|
|
|
dir_content = readdir(dir);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*Close dir oppened*/
|
|
|
|
closedir(dir);
|
|
|
|
}
|
2010-07-16 13:43:07 +02:00
|
|
|
|
2010-07-21 12:03:20 +02:00
|
|
|
/*
|
|
|
|
* Check collections to sync it between server and agent
|
|
|
|
*/
|
2010-07-16 13:43:07 +02:00
|
|
|
void
|
|
|
|
Pandora_Windows_Service::checkCollections () {
|
|
|
|
|
|
|
|
int flag, i;
|
|
|
|
char *coll_md5 = NULL, *server_coll_md5 = NULL;
|
|
|
|
string collection_name, collections_dir, collection_md5, tmp;
|
|
|
|
string collection_zip, install_dir, temp_dir, dest_dir, path, env;
|
|
|
|
|
|
|
|
/*Get collections directory*/
|
|
|
|
install_dir = Pandora::getPandoraInstallDir ();
|
|
|
|
collections_dir = install_dir+"collections\\";
|
|
|
|
|
|
|
|
/* Get temporal directory */
|
|
|
|
temp_dir = conf->getValue ("temporal");
|
|
|
|
if (temp_dir[temp_dir.length () - 1] != '\\') {
|
|
|
|
temp_dir += "\\";
|
|
|
|
}
|
|
|
|
|
|
|
|
/*Set iterator in the firs collection*/
|
|
|
|
conf->goFirstCollection();
|
2010-07-20 18:38:29 +02:00
|
|
|
|
2010-07-16 13:43:07 +02:00
|
|
|
while (! conf->isLastCollection()) {
|
|
|
|
|
2010-07-20 18:38:29 +02:00
|
|
|
collection_name = conf->getCurrentCollectionName();
|
|
|
|
|
|
|
|
if(! conf->getCurrentCollectionVerify() ) {
|
|
|
|
/*Add the collection directory to the path*/
|
|
|
|
tmp = collections_dir + collection_name;
|
|
|
|
path = getenv ("PATH");
|
|
|
|
env = "PATH=" + path + ";" + tmp;
|
|
|
|
putenv (env.c_str ());
|
|
|
|
conf->setCurrentCollectionVerify();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2010-07-16 13:43:07 +02:00
|
|
|
collection_zip = collection_name+".zip";
|
|
|
|
collection_md5 = collection_name + ".md5";
|
|
|
|
tmp = collections_dir+collection_md5;
|
|
|
|
|
|
|
|
/*Reading local collection md5*/
|
|
|
|
try {
|
|
|
|
if (Pandora_File::readBinFile (tmp, &coll_md5) < 32) {
|
2010-07-20 18:38:29 +02:00
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkCollection: Invalid local md5", tmp.c_str());
|
2010-07-16 13:43:07 +02:00
|
|
|
if (coll_md5 != NULL) {
|
|
|
|
delete[] coll_md5;
|
|
|
|
}
|
2010-07-20 18:38:29 +02:00
|
|
|
/*Go to next collection*/
|
|
|
|
conf->goNextCollection();
|
|
|
|
continue;
|
2010-07-16 13:43:07 +02:00
|
|
|
}
|
|
|
|
} catch (...) {
|
|
|
|
/*Getting new md5*/
|
|
|
|
try {
|
|
|
|
/*Downloading md5 file*/
|
|
|
|
recvDataFile (collection_md5);
|
|
|
|
|
|
|
|
/*Reading new md5 file*/
|
|
|
|
tmp = temp_dir + collection_md5;
|
|
|
|
|
|
|
|
if (Pandora_File::readBinFile (tmp, &coll_md5) < 32) {
|
2010-07-20 18:38:29 +02:00
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkCollection: Invalid remote md5", tmp.c_str());
|
2010-07-16 13:43:07 +02:00
|
|
|
if (coll_md5 != NULL) {
|
|
|
|
delete[] coll_md5;
|
2010-07-20 18:38:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
Pandora_File::removeFile (tmp);
|
|
|
|
/*Go to next collection*/
|
|
|
|
conf->goNextCollection();
|
|
|
|
continue;
|
2010-07-16 13:43:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
Pandora_File::removeFile (tmp);
|
|
|
|
|
|
|
|
/* Save new md5 file */
|
|
|
|
tmp = collections_dir + collection_md5;
|
|
|
|
Pandora_File::writeBinFile (tmp, coll_md5, 32);
|
|
|
|
|
|
|
|
} catch(...) {
|
2010-07-20 18:38:29 +02:00
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkCollection: Can not download %s", collection_md5.c_str());
|
|
|
|
/*Go to next collection*/
|
|
|
|
conf->goNextCollection();
|
|
|
|
continue;
|
2010-07-16 13:43:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*Getting new zipped collection*/
|
|
|
|
try {
|
|
|
|
/*Downloading zipped collection*/
|
|
|
|
recvDataFile (collection_zip);
|
|
|
|
|
|
|
|
/*Uncompress zipped collection*/
|
|
|
|
tmp = temp_dir + collection_zip;
|
|
|
|
dest_dir = collections_dir + collection_name;
|
|
|
|
|
2010-07-20 18:38:29 +02:00
|
|
|
try {
|
|
|
|
unzipCollection(tmp,dest_dir);
|
|
|
|
} catch (...) {
|
|
|
|
Pandora_File::removeFile (tmp);
|
|
|
|
/*Go to next collection*/
|
|
|
|
conf->goNextCollection();
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
Pandora_File::removeFile (tmp);
|
2010-07-16 13:43:07 +02:00
|
|
|
} catch (...) {
|
2010-07-20 18:38:29 +02:00
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkCollection: Can not download %s", collection_zip.c_str());
|
|
|
|
|
|
|
|
/*Go to next collection*/
|
|
|
|
conf->goNextCollection();
|
|
|
|
continue;
|
2010-07-16 13:43:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
conf->goNextCollection();
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*Reading server collection md5*/
|
|
|
|
try {
|
|
|
|
|
|
|
|
recvDataFile(collection_md5);
|
|
|
|
tmp = temp_dir+collection_md5;
|
|
|
|
if (Pandora_File::readBinFile (tmp, &server_coll_md5) < 32) {
|
2010-07-20 18:38:29 +02:00
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkCollection: Invalid remote md5", tmp.c_str());
|
2010-07-16 13:43:07 +02:00
|
|
|
if (server_coll_md5 != NULL) {
|
|
|
|
delete[] server_coll_md5;
|
|
|
|
}
|
2010-07-20 18:38:29 +02:00
|
|
|
Pandora_File::removeFile (tmp);
|
|
|
|
/*Go to next collection*/
|
|
|
|
conf->goNextCollection();
|
|
|
|
continue;
|
2010-07-16 13:43:07 +02:00
|
|
|
}
|
|
|
|
Pandora_File::removeFile (tmp);
|
|
|
|
|
|
|
|
} catch (...) {
|
2010-07-20 18:38:29 +02:00
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkCollection: Can not download %s", collection_md5.c_str());
|
|
|
|
/*Go to next collection*/
|
|
|
|
conf->goNextCollection();
|
|
|
|
continue;
|
2010-07-16 13:43:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*Check both md5*/
|
|
|
|
flag = 0;
|
|
|
|
for (i = 0; i < 32; i++) {
|
|
|
|
if (coll_md5[i] != server_coll_md5[i]) {
|
|
|
|
flag = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*If the two md5 are equals, exit*/
|
|
|
|
if (flag == 0) {
|
2010-07-20 18:38:29 +02:00
|
|
|
/*Go to next collection*/
|
|
|
|
conf->goNextCollection();
|
|
|
|
continue;
|
2010-07-16 13:43:07 +02:00
|
|
|
}
|
|
|
|
|
2010-07-20 18:38:29 +02:00
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkCollections: Collection %s has changed", collection_md5.c_str ());
|
2010-07-16 13:43:07 +02:00
|
|
|
|
|
|
|
/*Getting new zipped collection*/
|
|
|
|
try {
|
|
|
|
/*Downloading zipped collection*/
|
|
|
|
recvDataFile (collection_zip);
|
|
|
|
|
|
|
|
/*Uncompress zipped collection*/
|
|
|
|
tmp = temp_dir + collection_zip;
|
|
|
|
dest_dir = collections_dir + collection_name;
|
2010-07-14 19:16:08 +02:00
|
|
|
|
|
|
|
try {
|
2010-07-20 18:38:29 +02:00
|
|
|
unzipCollection(tmp,dest_dir);
|
2010-07-14 19:16:08 +02:00
|
|
|
} catch (...) {
|
2010-07-20 18:38:29 +02:00
|
|
|
Pandora_File::removeFile (tmp);
|
|
|
|
/*Go to next collection*/
|
|
|
|
conf->goNextCollection();
|
|
|
|
continue;
|
2010-07-14 19:16:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
Pandora_File::removeFile (tmp);
|
2010-07-20 18:38:29 +02:00
|
|
|
|
2010-07-14 19:16:08 +02:00
|
|
|
} catch (...) {
|
2010-07-20 18:38:29 +02:00
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkCollection: Can not download %s", collection_zip.c_str());
|
2010-07-14 19:16:08 +02:00
|
|
|
|
2010-07-20 18:38:29 +02:00
|
|
|
/*Go to next collection*/
|
|
|
|
conf->goNextCollection();
|
|
|
|
continue;
|
2010-07-14 19:16:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Save new md5 file */
|
2010-07-20 18:38:29 +02:00
|
|
|
tmp = collections_dir + collection_md5;
|
2010-07-14 19:16:08 +02:00
|
|
|
Pandora_File::writeBinFile (tmp, server_coll_md5, 32);
|
|
|
|
|
|
|
|
/*Free coll_md5*/
|
|
|
|
if (coll_md5 != NULL) {
|
|
|
|
delete[] coll_md5;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*Free server_coll_md5*/
|
|
|
|
if (server_coll_md5 != NULL) {
|
|
|
|
delete[] server_coll_md5;
|
|
|
|
}
|
2010-07-20 18:38:29 +02:00
|
|
|
|
|
|
|
/*Go to next collection*/
|
2010-07-14 19:16:08 +02:00
|
|
|
conf->goNextCollection();
|
|
|
|
}
|
2010-07-21 12:03:20 +02:00
|
|
|
purgeDiskCollections ();
|
2010-07-14 19:16:08 +02:00
|
|
|
}
|
|
|
|
|
2011-07-14 10:58:18 +02:00
|
|
|
string
|
|
|
|
Pandora_Windows_Service::checkAgentName(string filename){
|
|
|
|
string name_agent = "";
|
|
|
|
string buffer;
|
|
|
|
unsigned int pos;
|
|
|
|
ifstream file (filename.c_str ());
|
|
|
|
|
|
|
|
while (!file.eof ()) {
|
|
|
|
getline (file, buffer);
|
|
|
|
/* Ignore blank or commented lines */
|
|
|
|
if (buffer[0] != '#' && buffer[0] != '\n' && buffer[0] != '\0') {
|
|
|
|
/*Check agent_name*/
|
|
|
|
pos = buffer.find("agent_name");
|
|
|
|
if (pos != string::npos){
|
|
|
|
name_agent = buffer.substr(pos+11);
|
|
|
|
return name_agent;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
file.close();
|
|
|
|
return name_agent;
|
|
|
|
}
|
2008-06-10 11:50:29 +02:00
|
|
|
void
|
2011-07-11 17:49:29 +02:00
|
|
|
Pandora_Windows_Service::checkConfig (string file) {
|
2008-06-10 11:50:29 +02:00
|
|
|
int i, conf_size;
|
|
|
|
char *conf_str = NULL, *remote_conf_str = NULL, *remote_conf_md5 = NULL;
|
2008-07-09 14:46:22 +02:00
|
|
|
char agent_md5[33], conf_md5[33], flag;
|
2011-07-11 17:49:29 +02:00
|
|
|
string agent_name, conf_tmp_file, md5_tmp_file, temp_dir, tmp;
|
2008-06-10 11:50:29 +02:00
|
|
|
|
|
|
|
tmp = conf->getValue ("remote_config");
|
|
|
|
if (tmp != "1") {
|
2008-07-09 14:46:22 +02:00
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkConfig: Remote configuration disabled");
|
2008-06-10 11:50:29 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Get temporal directory */
|
|
|
|
temp_dir = conf->getValue ("temporal");
|
|
|
|
if (temp_dir[temp_dir.length () - 1] != '\\') {
|
|
|
|
temp_dir += "\\";
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Get agent name */
|
2011-07-14 10:58:18 +02:00
|
|
|
tmp = checkAgentName(file);
|
2010-06-30 17:40:25 +02:00
|
|
|
if (tmp.empty ()) {
|
2008-06-10 11:50:29 +02:00
|
|
|
tmp = Pandora_Windows_Info::getSystemName ();
|
|
|
|
}
|
2011-07-14 10:58:18 +02:00
|
|
|
agent_name = tmp;
|
|
|
|
|
2010-06-30 17:40:25 +02:00
|
|
|
/* Error getting agent name */
|
|
|
|
if (tmp.empty ()) {
|
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkConfig: Error getting agent name");
|
|
|
|
return;
|
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
Pandora_File::md5 (tmp.c_str(), tmp.size(), agent_md5);
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
/* Calculate md5 hashes */
|
2008-06-10 11:50:29 +02:00
|
|
|
try {
|
2011-07-11 17:49:29 +02:00
|
|
|
conf_size = Pandora_File::readBinFile (file, &conf_str);
|
2008-06-10 11:50:29 +02:00
|
|
|
Pandora_File::md5 (conf_str, conf_size, conf_md5);
|
|
|
|
} catch (...) {
|
2008-07-09 14:46:22 +02:00
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkConfig: Error calculating configuration md5");
|
|
|
|
if (conf_str != NULL) {
|
|
|
|
delete[] conf_str;
|
|
|
|
}
|
2008-06-10 11:50:29 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Compose file names from the agent name hash */
|
2008-07-09 14:46:22 +02:00
|
|
|
conf_tmp_file = agent_md5;
|
|
|
|
conf_tmp_file += ".conf";
|
|
|
|
md5_tmp_file = agent_md5;
|
|
|
|
md5_tmp_file += ".md5";
|
2008-06-10 11:50:29 +02:00
|
|
|
|
|
|
|
/* Get md5 file from server */
|
|
|
|
try {
|
|
|
|
recvDataFile (md5_tmp_file);
|
|
|
|
} catch (...) {
|
|
|
|
/* Not found, upload the configuration */
|
|
|
|
try {
|
|
|
|
tmp = temp_dir;
|
|
|
|
tmp += conf_tmp_file;
|
|
|
|
Pandora_File::writeBinFile (tmp, conf_str, conf_size);
|
|
|
|
copyDataFile (conf_tmp_file);
|
|
|
|
Pandora_File::removeFile (tmp);
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
tmp = temp_dir;
|
|
|
|
tmp += md5_tmp_file;
|
|
|
|
Pandora_File::writeBinFile (tmp, conf_md5, 32);
|
|
|
|
copyDataFile (md5_tmp_file);
|
|
|
|
Pandora_File::removeFile (tmp);
|
|
|
|
} catch (...) {
|
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkConfig: Error uploading configuration to server");
|
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
delete[] conf_str;
|
|
|
|
return;
|
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
delete[] conf_str;
|
|
|
|
conf_str = NULL;
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
/* Read remote configuration file md5 */
|
|
|
|
try {
|
|
|
|
tmp = temp_dir;
|
|
|
|
tmp += md5_tmp_file;
|
|
|
|
if (Pandora_File::readBinFile (tmp, &remote_conf_md5) < 32) {
|
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkConfig: Invalid remote md5", tmp.c_str());
|
2008-07-09 14:46:22 +02:00
|
|
|
if (remote_conf_md5 != NULL) {
|
|
|
|
delete[] remote_conf_md5;
|
|
|
|
}
|
2008-06-10 11:50:29 +02:00
|
|
|
return;
|
2008-07-09 14:46:22 +02:00
|
|
|
}
|
2008-06-10 11:50:29 +02:00
|
|
|
Pandora_File::removeFile (tmp);
|
|
|
|
} catch (...) {
|
2008-07-09 14:46:22 +02:00
|
|
|
pandoraDebug ("Pandora_Windows_Service::checkConfig: Error checking remote configuration md5", tmp.c_str());
|
2008-06-10 11:50:29 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Check for configuration changes */
|
|
|
|
flag = 0;
|
|
|
|
for (i = 0; i < 32; i++) {
|
2008-07-09 14:46:22 +02:00
|
|
|
if (remote_conf_md5[i] != conf_md5[i]) {
|
|
|
|
flag = 1;
|
|
|
|
break;
|
|
|
|
}
|
2008-06-10 11:50:29 +02:00
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
delete[] remote_conf_md5;
|
|
|
|
|
|
|
|
/* Configuration has not changed */
|
|
|
|
if (flag == 0) {
|
|
|
|
return;
|
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2010-06-30 17:40:25 +02:00
|
|
|
pandoraLog("Pandora_Windows_Service::checkConfig: Configuration for agent %s has changed", agent_name.c_str ());
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
/* Get configuration file from server */
|
|
|
|
try {
|
|
|
|
recvDataFile (conf_tmp_file);
|
|
|
|
tmp = temp_dir;
|
|
|
|
tmp += conf_tmp_file;
|
|
|
|
conf_size = Pandora_File::readBinFile (tmp, &conf_str);
|
|
|
|
Pandora_File::removeFile (tmp);
|
|
|
|
/* Save new configuration */
|
2011-07-11 17:49:29 +02:00
|
|
|
Pandora_File::writeBinFile (file, conf_str, conf_size);
|
2008-11-28 11:51:03 +01:00
|
|
|
} catch (...) {
|
2008-06-10 11:50:29 +02:00
|
|
|
pandoraDebug("Pandora_Windows_Service::checkConfig: Error retrieving configuration file from server");
|
2008-07-09 14:46:22 +02:00
|
|
|
if (conf_str != NULL) {
|
|
|
|
delete[] conf_str;
|
|
|
|
}
|
2008-06-10 11:50:29 +02:00
|
|
|
return;
|
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
delete[] conf_str;
|
|
|
|
|
|
|
|
/* Reload configuration */
|
|
|
|
this->pandora_init ();
|
|
|
|
}
|
2008-12-11 11:20:07 +01:00
|
|
|
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
int
|
2008-11-28 11:51:03 +01:00
|
|
|
Pandora_Windows_Service::sendXml (Pandora_Module_List *modules) {
|
2009-11-19 01:40:26 +01:00
|
|
|
int rc = 0, xml_buffer;
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
string data_xml;
|
2008-11-28 11:51:03 +01:00
|
|
|
string xml_filename, random_integer;
|
|
|
|
string tmp_filename, tmp_filepath;
|
|
|
|
string encoding;
|
2008-12-11 11:20:07 +01:00
|
|
|
static HANDLE mutex = 0;
|
2009-05-25 Ramon Novoa <rnovoa@artica.es>
* windows/pandora_wmi.cc, windows/pandora_wmi.h: Added functions for the
new modules. Removed old logevent functions.
* pandora_windows_service.h, pandora_windows_service.cc: Added support
for data file buffering and startup delay.
* modules/pandora_module_logevent.cc, modules/pandora_module_logevent.h:
Rewritten to retrieve event log data using the PDH interface instead
of WMI (was too slow).
* modules/pandora_module_tcpcheck.cc, modules/pandora_module_tcpcheck.h,
modules/pandora_module_regexp.cc, modules/pandora_module_regexp.h,
modules/pandora_module_perfcounter.cc,
modules/pandora_module_perfcounter.h,
modules/pandora_module_freedisk_percent.cc,
modules/pandora_module_freedisk_percent.h,
modules/pandora_module_freememory_percent.cc,
modules/pandora_module_freememory_percent.h: Added to repository.
New modules, see http://openideas.info/wiki/.
* modules/pandora_module.h, modules/pandora_module.cc,
modules/pandora_module_factory.cc, modules/pandora_module_list.cc:
Added support for the new modules.
* bin/pandora_agent.conf: Included configuration examples for the new
modules.
* PandoraAgent.dev: Updated to compile the new modules.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1707 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-05-25 19:50:27 +02:00
|
|
|
ULARGE_INTEGER free_bytes;
|
|
|
|
double min_free_bytes = 0;
|
|
|
|
Pandora_Agent_Conf *conf = NULL;
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
FILE *conf_fh = NULL;
|
2009-05-25 Ramon Novoa <rnovoa@artica.es>
* windows/pandora_wmi.cc, windows/pandora_wmi.h: Added functions for the
new modules. Removed old logevent functions.
* pandora_windows_service.h, pandora_windows_service.cc: Added support
for data file buffering and startup delay.
* modules/pandora_module_logevent.cc, modules/pandora_module_logevent.h:
Rewritten to retrieve event log data using the PDH interface instead
of WMI (was too slow).
* modules/pandora_module_tcpcheck.cc, modules/pandora_module_tcpcheck.h,
modules/pandora_module_regexp.cc, modules/pandora_module_regexp.h,
modules/pandora_module_perfcounter.cc,
modules/pandora_module_perfcounter.h,
modules/pandora_module_freedisk_percent.cc,
modules/pandora_module_freedisk_percent.h,
modules/pandora_module_freememory_percent.cc,
modules/pandora_module_freememory_percent.h: Added to repository.
New modules, see http://openideas.info/wiki/.
* modules/pandora_module.h, modules/pandora_module.cc,
modules/pandora_module_factory.cc, modules/pandora_module_list.cc:
Added support for the new modules.
* bin/pandora_agent.conf: Included configuration examples for the new
modules.
* PandoraAgent.dev: Updated to compile the new modules.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1707 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-05-25 19:50:27 +02:00
|
|
|
|
|
|
|
conf = this->getConf ();
|
|
|
|
min_free_bytes = 1024 * atoi (conf->getValue ("temporal_min_size").c_str ());
|
2009-11-19 01:40:26 +01:00
|
|
|
xml_buffer = atoi (conf->getValue ("xml_buffer").c_str ());
|
2008-12-11 11:20:07 +01:00
|
|
|
|
|
|
|
if (mutex == 0) {
|
|
|
|
mutex = CreateMutex (NULL, FALSE, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Wait for the mutex to be opened */
|
|
|
|
WaitForSingleObject (mutex, INFINITE);
|
|
|
|
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
data_xml = getXmlHeader ();
|
2008-11-28 11:51:03 +01:00
|
|
|
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
/* Write module data */
|
2008-11-28 11:51:03 +01:00
|
|
|
if (modules != NULL) {
|
|
|
|
modules->goFirst ();
|
|
|
|
|
|
|
|
while (! modules->isLast ()) {
|
|
|
|
Pandora_Module *module;
|
|
|
|
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
module = modules->getCurrentValue ();
|
|
|
|
data_xml += module->getXml ();
|
2008-11-28 11:51:03 +01:00
|
|
|
modules->goNext ();
|
|
|
|
}
|
2008-12-11 11:20:07 +01:00
|
|
|
}
|
2008-11-28 11:51:03 +01:00
|
|
|
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
/* Close the XML header */
|
|
|
|
data_xml += "</agent_data>";
|
|
|
|
|
2008-11-28 11:51:03 +01:00
|
|
|
/* Generate temporal filename */
|
|
|
|
random_integer = inttostr (rand());
|
|
|
|
tmp_filename = conf->getValue ("agent_name");
|
|
|
|
if (tmp_filename == "") {
|
|
|
|
tmp_filename = Pandora_Windows_Info::getSystemName ();
|
|
|
|
}
|
|
|
|
tmp_filename += "." + random_integer + ".data";
|
|
|
|
|
|
|
|
xml_filename = conf->getValue ("temporal");
|
|
|
|
if (xml_filename[xml_filename.length () - 1] != '\\') {
|
|
|
|
xml_filename += "\\";
|
|
|
|
}
|
|
|
|
tmp_filepath = xml_filename + tmp_filename;
|
|
|
|
|
|
|
|
/* Copy the XML to temporal file */
|
|
|
|
pandoraDebug ("Copying XML on %s", tmp_filepath.c_str ());
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
conf_fh = fopen (tmp_filepath.c_str (), "w");
|
|
|
|
if (conf_fh == NULL) {
|
2008-11-28 11:51:03 +01:00
|
|
|
pandoraLog ("Error when saving the XML in %s",
|
2008-12-11 11:20:07 +01:00
|
|
|
tmp_filepath.c_str ());
|
2008-12-01 14:40:19 +01:00
|
|
|
ReleaseMutex (mutex);
|
2009-01-20 Ramon Novoa <rnovoa@artica.es>
* win32/ftp/pandora_ftp_client.cc,
win32/ftp/pandora_ftp_client.h,
win32/windows/pandora_wmi.cc,
win32/pandora_windows_service.h,
win32/pandora.h,
win32/udp_server/udp_server.cc,
win32/misc/pandora_file.cc,
win32/misc/pandora_file.h,
win32/ssh/pandora_ssh_client.cc,
win32/ssh/pandora_ssh_client.h,
win32/pandora_windows_service.cc: Removed some exceptions that made
the agent crash when the watchdog thread was running.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1371 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-01-20 23:21:31 +01:00
|
|
|
return PANDORA_EXCEPTION;
|
2008-11-28 11:51:03 +01:00
|
|
|
}
|
2010-04-21 Ramon Novoa <rnovoa@artica.es>
* main.cc: Updated headers after tinyxml removal.
* modules/pandora_module_list.cc,
modules/pandora_module_factory.cc: Added support for plugin modules.
* modules/pandora_module_exec.cc, modules/pandora_module.h,
modules/pandora_module.cc: Added the module_timeout configuration
token and replaced tinyxml related code.
* bin/pandora_agent.conf: Added a sample plugin module. Added the
group configuration token (was missing).
* modules/pandora_module_plugin.cc,
modules/pandora_module_plugin.h: Added to repository. Plugin module.
* bin/util/df.vbs, bin/util/ps.vbs: Added to repository. Sample
VBScript plugins.
* pandora_windows_service.cc, pandora_windows_service.h,
modules/pandora_module_inventory.cc, ssh/pandora_ssh_test.cc,
ftp/pandora_ftp_test.cc, modules/pandora_module_inventory.h: Replaced
tinyxml related code.
* tinyxml, tinyxml/tinyxmlerror.cpp, tinyxml/tinystr.h,
tinyxml/tinyxmlparser.cpp, tinyxml/tinyxml.cpp,
tinyxml/tinyxml.h, tinyxml/tinystr.cpp: Removed from repository. No
longer used.
* installer/pandora.mpi, pandora.cc: Updated build to RC1.
* Makefile.am: Updated sources. Removed tinyxml and added the plugin
module.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2584 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2010-04-21 22:00:31 +02:00
|
|
|
fprintf (conf_fh, "%s", data_xml.c_str ());
|
|
|
|
fclose (conf_fh);
|
2008-11-28 11:51:03 +01:00
|
|
|
|
|
|
|
/* Only send if debug is not activated */
|
|
|
|
if (getPandoraDebug () == false) {
|
2009-05-25 Ramon Novoa <rnovoa@artica.es>
* windows/pandora_wmi.cc, windows/pandora_wmi.h: Added functions for the
new modules. Removed old logevent functions.
* pandora_windows_service.h, pandora_windows_service.cc: Added support
for data file buffering and startup delay.
* modules/pandora_module_logevent.cc, modules/pandora_module_logevent.h:
Rewritten to retrieve event log data using the PDH interface instead
of WMI (was too slow).
* modules/pandora_module_tcpcheck.cc, modules/pandora_module_tcpcheck.h,
modules/pandora_module_regexp.cc, modules/pandora_module_regexp.h,
modules/pandora_module_perfcounter.cc,
modules/pandora_module_perfcounter.h,
modules/pandora_module_freedisk_percent.cc,
modules/pandora_module_freedisk_percent.h,
modules/pandora_module_freememory_percent.cc,
modules/pandora_module_freememory_percent.h: Added to repository.
New modules, see http://openideas.info/wiki/.
* modules/pandora_module.h, modules/pandora_module.cc,
modules/pandora_module_factory.cc, modules/pandora_module_list.cc:
Added support for the new modules.
* bin/pandora_agent.conf: Included configuration examples for the new
modules.
* PandoraAgent.dev: Updated to compile the new modules.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1707 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-05-25 19:50:27 +02:00
|
|
|
rc = this->copyDataFile (tmp_filename);
|
|
|
|
|
2009-11-19 01:40:26 +01:00
|
|
|
/* Delete the file if successfully copied, buffer disabled or not enough space available */
|
|
|
|
if (rc == 0 || xml_buffer == 0 || (GetDiskFreeSpaceEx (tmp_filepath.c_str (), &free_bytes, NULL, NULL) != 0 && free_bytes.QuadPart < min_free_bytes)) {
|
|
|
|
Pandora_File::removeFile (tmp_filepath);
|
|
|
|
}
|
2009-05-25 Ramon Novoa <rnovoa@artica.es>
* windows/pandora_wmi.cc, windows/pandora_wmi.h: Added functions for the
new modules. Removed old logevent functions.
* pandora_windows_service.h, pandora_windows_service.cc: Added support
for data file buffering and startup delay.
* modules/pandora_module_logevent.cc, modules/pandora_module_logevent.h:
Rewritten to retrieve event log data using the PDH interface instead
of WMI (was too slow).
* modules/pandora_module_tcpcheck.cc, modules/pandora_module_tcpcheck.h,
modules/pandora_module_regexp.cc, modules/pandora_module_regexp.h,
modules/pandora_module_perfcounter.cc,
modules/pandora_module_perfcounter.h,
modules/pandora_module_freedisk_percent.cc,
modules/pandora_module_freedisk_percent.h,
modules/pandora_module_freememory_percent.cc,
modules/pandora_module_freememory_percent.h: Added to repository.
New modules, see http://openideas.info/wiki/.
* modules/pandora_module.h, modules/pandora_module.cc,
modules/pandora_module_factory.cc, modules/pandora_module_list.cc:
Added support for the new modules.
* bin/pandora_agent.conf: Included configuration examples for the new
modules.
* PandoraAgent.dev: Updated to compile the new modules.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1707 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-05-25 19:50:27 +02:00
|
|
|
|
2009-11-19 01:40:26 +01:00
|
|
|
/* Send any buffered data files */
|
|
|
|
if (xml_buffer == 1) {
|
|
|
|
this->sendBufferedXml (conf->getValue ("temporal"));
|
|
|
|
}
|
2008-12-11 11:20:07 +01:00
|
|
|
}
|
2009-05-25 Ramon Novoa <rnovoa@artica.es>
* windows/pandora_wmi.cc, windows/pandora_wmi.h: Added functions for the
new modules. Removed old logevent functions.
* pandora_windows_service.h, pandora_windows_service.cc: Added support
for data file buffering and startup delay.
* modules/pandora_module_logevent.cc, modules/pandora_module_logevent.h:
Rewritten to retrieve event log data using the PDH interface instead
of WMI (was too slow).
* modules/pandora_module_tcpcheck.cc, modules/pandora_module_tcpcheck.h,
modules/pandora_module_regexp.cc, modules/pandora_module_regexp.h,
modules/pandora_module_perfcounter.cc,
modules/pandora_module_perfcounter.h,
modules/pandora_module_freedisk_percent.cc,
modules/pandora_module_freedisk_percent.h,
modules/pandora_module_freememory_percent.cc,
modules/pandora_module_freememory_percent.h: Added to repository.
New modules, see http://openideas.info/wiki/.
* modules/pandora_module.h, modules/pandora_module.cc,
modules/pandora_module_factory.cc, modules/pandora_module_list.cc:
Added support for the new modules.
* bin/pandora_agent.conf: Included configuration examples for the new
modules.
* PandoraAgent.dev: Updated to compile the new modules.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1707 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-05-25 19:50:27 +02:00
|
|
|
|
2008-12-11 11:20:07 +01:00
|
|
|
ReleaseMutex (mutex);
|
|
|
|
}
|
2008-06-10 11:50:29 +02:00
|
|
|
|
2009-05-25 Ramon Novoa <rnovoa@artica.es>
* windows/pandora_wmi.cc, windows/pandora_wmi.h: Added functions for the
new modules. Removed old logevent functions.
* pandora_windows_service.h, pandora_windows_service.cc: Added support
for data file buffering and startup delay.
* modules/pandora_module_logevent.cc, modules/pandora_module_logevent.h:
Rewritten to retrieve event log data using the PDH interface instead
of WMI (was too slow).
* modules/pandora_module_tcpcheck.cc, modules/pandora_module_tcpcheck.h,
modules/pandora_module_regexp.cc, modules/pandora_module_regexp.h,
modules/pandora_module_perfcounter.cc,
modules/pandora_module_perfcounter.h,
modules/pandora_module_freedisk_percent.cc,
modules/pandora_module_freedisk_percent.h,
modules/pandora_module_freememory_percent.cc,
modules/pandora_module_freememory_percent.h: Added to repository.
New modules, see http://openideas.info/wiki/.
* modules/pandora_module.h, modules/pandora_module.cc,
modules/pandora_module_factory.cc, modules/pandora_module_list.cc:
Added support for the new modules.
* bin/pandora_agent.conf: Included configuration examples for the new
modules.
* PandoraAgent.dev: Updated to compile the new modules.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1707 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-05-25 19:50:27 +02:00
|
|
|
void
|
|
|
|
Pandora_Windows_Service::sendBufferedXml (string path) {
|
|
|
|
string base_path = path, file_path;
|
|
|
|
WIN32_FIND_DATA file_data;
|
|
|
|
HANDLE find;
|
|
|
|
|
|
|
|
if (base_path[base_path.length () - 1] != '\\') {
|
|
|
|
base_path += "\\";
|
|
|
|
}
|
|
|
|
file_path = base_path + "*.data";
|
|
|
|
|
|
|
|
/* Search for buffered data files */
|
|
|
|
find = FindFirstFile(file_path.c_str (), &file_data);
|
|
|
|
if (find == INVALID_HANDLE_VALUE) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Send data files as long as there are no errors */
|
|
|
|
if (this->copyDataFile (file_data.cFileName) != 0) {
|
|
|
|
FindClose(find);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
Pandora_File::removeFile (base_path + file_data.cFileName);
|
|
|
|
|
|
|
|
while (FindNextFile(find, &file_data) != 0) {
|
|
|
|
if (this->copyDataFile (file_data.cFileName) != 0) {
|
|
|
|
FindClose(find);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
Pandora_File::removeFile (base_path + file_data.cFileName);
|
|
|
|
}
|
|
|
|
|
|
|
|
FindClose(find);
|
|
|
|
}
|
|
|
|
|
2006-12-01 17:29:27 +01:00
|
|
|
void
|
2011-07-11 17:49:29 +02:00
|
|
|
Pandora_Windows_Service::pandora_run_broker (string config) {
|
2008-12-24 13:33:41 +01:00
|
|
|
Pandora_Agent_Conf *conf = NULL;
|
|
|
|
string server_addr;
|
2011-07-11 17:49:29 +02:00
|
|
|
int startup_delay = 0;
|
|
|
|
static unsigned char delayed = 0;
|
|
|
|
int exe = 1;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
pandoraDebug ("Run begin");
|
|
|
|
|
|
|
|
conf = this->getConf ();
|
|
|
|
|
|
|
|
/* Sleep if a startup delay was specified */
|
2011-07-14 10:58:18 +02:00
|
|
|
startup_delay = atoi (conf->getValue ("startup_delay").c_str ()) * 1000;
|
2011-07-11 17:49:29 +02:00
|
|
|
if (startup_delay > 0 && delayed == 0) {
|
|
|
|
delayed = 1;
|
|
|
|
pandoraLog ("Delaying startup %d miliseconds", startup_delay);
|
|
|
|
Sleep (startup_delay);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Check for configuration changes */
|
|
|
|
if (getPandoraDebug () == false) {
|
|
|
|
this->checkConfig (config);
|
|
|
|
this->checkCollections ();
|
|
|
|
}
|
|
|
|
|
|
|
|
server_addr = conf->getValue ("server_ip");
|
|
|
|
|
|
|
|
execution_number++;
|
|
|
|
|
|
|
|
if (this->modules != NULL) {
|
|
|
|
this->modules->goFirst ();
|
|
|
|
|
|
|
|
while (! this->modules->isLast ()) {
|
|
|
|
Pandora_Module *module;
|
|
|
|
|
|
|
|
module = this->modules->getCurrentValue ();
|
|
|
|
|
|
|
|
exe = module->evaluatePreconditions ();
|
|
|
|
|
|
|
|
if (exe == 0) return;
|
|
|
|
|
|
|
|
pandoraDebug ("Run %s", module->getName ().c_str ());
|
|
|
|
if (module->checkCron () == 1) {
|
|
|
|
module->run ();
|
|
|
|
Sleep(10);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Save module data to an environment variable */
|
|
|
|
if (!module->getSave().empty ()) {
|
|
|
|
module->exportDataOutput ();
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Evaluate module conditions */
|
|
|
|
module->evaluateConditions ();
|
|
|
|
|
|
|
|
this->modules->goNext ();
|
|
|
|
}
|
|
|
|
}
|
2011-09-15 17:30:13 +02:00
|
|
|
|
|
|
|
this->elapsed_transfer_time += this->interval;
|
|
|
|
|
|
|
|
if (this->elapsed_transfer_time >= this->transfer_interval) {
|
|
|
|
this->elapsed_transfer_time = 0;
|
|
|
|
if (!server_addr.empty ()) {
|
|
|
|
this->sendXml (this->modules);
|
|
|
|
}
|
|
|
|
}
|
2011-07-11 17:49:29 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
Pandora_Windows_Service::pandora_run () {
|
|
|
|
Pandora_Agent_Conf *conf = NULL;
|
|
|
|
string server_addr, conf_file;
|
2011-07-14 10:58:18 +02:00
|
|
|
int startup_delay = 0;
|
|
|
|
static unsigned char delayed = 0;
|
|
|
|
int exe = 1;
|
|
|
|
int i, num;
|
2008-12-24 13:33:41 +01:00
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
pandoraDebug ("Run begin");
|
2011-07-11 17:49:29 +02:00
|
|
|
|
2009-05-25 Ramon Novoa <rnovoa@artica.es>
* windows/pandora_wmi.cc, windows/pandora_wmi.h: Added functions for the
new modules. Removed old logevent functions.
* pandora_windows_service.h, pandora_windows_service.cc: Added support
for data file buffering and startup delay.
* modules/pandora_module_logevent.cc, modules/pandora_module_logevent.h:
Rewritten to retrieve event log data using the PDH interface instead
of WMI (was too slow).
* modules/pandora_module_tcpcheck.cc, modules/pandora_module_tcpcheck.h,
modules/pandora_module_regexp.cc, modules/pandora_module_regexp.h,
modules/pandora_module_perfcounter.cc,
modules/pandora_module_perfcounter.h,
modules/pandora_module_freedisk_percent.cc,
modules/pandora_module_freedisk_percent.h,
modules/pandora_module_freememory_percent.cc,
modules/pandora_module_freememory_percent.h: Added to repository.
New modules, see http://openideas.info/wiki/.
* modules/pandora_module.h, modules/pandora_module.cc,
modules/pandora_module_factory.cc, modules/pandora_module_list.cc:
Added support for the new modules.
* bin/pandora_agent.conf: Included configuration examples for the new
modules.
* PandoraAgent.dev: Updated to compile the new modules.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1707 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2009-05-25 19:50:27 +02:00
|
|
|
conf = this->getConf ();
|
2010-07-20 18:38:29 +02:00
|
|
|
|
2010-11-05 15:07:42 +01:00
|
|
|
/* Sleep if a startup delay was specified */
|
|
|
|
startup_delay = atoi (conf->getValue ("startup_delay").c_str ()) * 1000;
|
|
|
|
if (startup_delay > 0 && delayed == 0) {
|
|
|
|
delayed = 1;
|
|
|
|
pandoraLog ("Delaying startup %d miliseconds", startup_delay);
|
|
|
|
Sleep (startup_delay);
|
|
|
|
}
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
/* Check for configuration changes */
|
2009-11-26 18:15:06 +01:00
|
|
|
if (getPandoraDebug () == false) {
|
2011-07-11 17:49:29 +02:00
|
|
|
conf_file = Pandora::getPandoraInstallDir ();
|
|
|
|
conf_file += "pandora_agent.conf";
|
2011-07-14 10:58:18 +02:00
|
|
|
|
2011-07-11 17:49:29 +02:00
|
|
|
this->checkConfig (conf_file);
|
2010-07-14 19:16:08 +02:00
|
|
|
this->checkCollections ();
|
2009-11-19 01:40:26 +01:00
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2008-12-24 13:33:41 +01:00
|
|
|
server_addr = conf->getValue ("server_ip");
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
execution_number++;
|
|
|
|
|
|
|
|
if (this->modules != NULL) {
|
|
|
|
this->modules->goFirst ();
|
|
|
|
|
|
|
|
while (! this->modules->isLast ()) {
|
|
|
|
Pandora_Module *module;
|
|
|
|
|
|
|
|
module = this->modules->getCurrentValue ();
|
2011-06-21 13:06:47 +02:00
|
|
|
|
|
|
|
exe = module->evaluatePreconditions ();
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2011-06-21 13:06:47 +02:00
|
|
|
if (exe == 0) return;
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
pandoraDebug ("Run %s", module->getName ().c_str ());
|
2010-07-12 18:31:07 +02:00
|
|
|
if (module->checkCron () == 1) {
|
|
|
|
module->run ();
|
2011-05-05 16:05:25 +02:00
|
|
|
Sleep(10);
|
2010-07-12 18:31:07 +02:00
|
|
|
}
|
2010-06-30 17:40:25 +02:00
|
|
|
|
|
|
|
/* Save module data to an environment variable */
|
|
|
|
if (!module->getSave().empty ()) {
|
|
|
|
module->exportDataOutput ();
|
|
|
|
}
|
|
|
|
|
2010-07-02 16:25:53 +02:00
|
|
|
/* Evaluate module conditions */
|
|
|
|
module->evaluateConditions ();
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
this->modules->goNext ();
|
|
|
|
}
|
|
|
|
}
|
2008-04-09 Esteban Sanchez <estebans@artica.es>
* modules/pandora_data.[cc,h]: Added to repository. Implements a
Pandora_Data object, which holds a value and the timestamp when it
was created.
* modules/pandora_module.[cc,h]: It holds now a list of Pandora_Data
objects. The XML is generated based on the size of this list. Output
property has became obsolete and child modules must use setOutput().
* modules/pandora_module_cpuusage.cc,
modules/pandora_module_exec.cc,
modules/pandora_module_freedisk.cc,
modules/pandora_module_freememory.cc,
modules/pandora_module_odbc.cc, modules/pandora_module_proc.cc,
modules/pandora_module_service.cc: Updated to new Pandora_Module
parent class.
* modules/pandora_module_list.cc: Deleted debug output.
* pandora.cc: Now uses SYSTEMTIME instead of old time_t.
* pandora_windows_service.[cc,h]: Added Ramon Novoa to authors. Added
a new configuration token transfer_interval which sets the interval
where the data file will be sent to the server. If the current
interval token is lower than this transfer interval, the data will be
added into a data_list XML tag.
* PandoraAgent.dev: Added new files.
* bin/PandoraAgent.exe: Updated to last commit.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@803 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2008-04-09 17:48:06 +02:00
|
|
|
|
2008-11-28 11:51:03 +01:00
|
|
|
this->elapsed_transfer_time += this->interval;
|
2008-12-11 11:20:07 +01:00
|
|
|
|
2008-04-09 Esteban Sanchez <estebans@artica.es>
* modules/pandora_data.[cc,h]: Added to repository. Implements a
Pandora_Data object, which holds a value and the timestamp when it
was created.
* modules/pandora_module.[cc,h]: It holds now a list of Pandora_Data
objects. The XML is generated based on the size of this list. Output
property has became obsolete and child modules must use setOutput().
* modules/pandora_module_cpuusage.cc,
modules/pandora_module_exec.cc,
modules/pandora_module_freedisk.cc,
modules/pandora_module_freememory.cc,
modules/pandora_module_odbc.cc, modules/pandora_module_proc.cc,
modules/pandora_module_service.cc: Updated to new Pandora_Module
parent class.
* modules/pandora_module_list.cc: Deleted debug output.
* pandora.cc: Now uses SYSTEMTIME instead of old time_t.
* pandora_windows_service.[cc,h]: Added Ramon Novoa to authors. Added
a new configuration token transfer_interval which sets the interval
where the data file will be sent to the server. If the current
interval token is lower than this transfer interval, the data will be
added into a data_list XML tag.
* PandoraAgent.dev: Added new files.
* bin/PandoraAgent.exe: Updated to last commit.
git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@803 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
2008-04-09 17:48:06 +02:00
|
|
|
if (this->elapsed_transfer_time >= this->transfer_interval) {
|
2008-12-11 11:20:07 +01:00
|
|
|
this->elapsed_transfer_time = 0;
|
2008-12-24 13:33:41 +01:00
|
|
|
if (!server_addr.empty ()) {
|
|
|
|
this->sendXml (this->modules);
|
|
|
|
}
|
2006-10-06 13:25:36 +02:00
|
|
|
}
|
2008-07-09 14:46:22 +02:00
|
|
|
|
2006-12-01 17:29:27 +01:00
|
|
|
/* Get the interval value (in minutes) */
|
2008-07-09 14:46:22 +02:00
|
|
|
pandoraDebug ("Next execution on %d seconds", this->interval / 1000);
|
|
|
|
|
2011-07-11 17:49:29 +02:00
|
|
|
num = count_broker_agents();
|
|
|
|
string all_conf[num];
|
|
|
|
|
|
|
|
check_broker_agents(all_conf);
|
|
|
|
|
|
|
|
for (i=0;i<num;i++){
|
|
|
|
pandora_init_broker(all_conf[i]);
|
|
|
|
pandora_run_broker(all_conf[i]);
|
|
|
|
}
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
return;
|
2006-06-20 19:05:19 +02:00
|
|
|
}
|
2008-12-11 11:20:07 +01:00
|
|
|
|
|
|
|
Pandora_Agent_Conf *
|
|
|
|
Pandora_Windows_Service::getConf () {
|
|
|
|
return this->conf;
|
|
|
|
}
|