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>
|
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;
|
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 () {
|
2008-07-09 14:46:22 +02:00
|
|
|
if (this->conf != NULL) {
|
|
|
|
delete this->conf;
|
|
|
|
}
|
2006-07-05 16:02:05 +02:00
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2006-06-20 19:05:19 +02:00
|
|
|
void
|
|
|
|
Pandora_Windows_Service::pandora_init () {
|
2008-07-09 14:46:22 +02:00
|
|
|
string conf_file, interval, debug, transfer_interval;
|
2008-12-11 11:20:07 +01:00
|
|
|
string udp_server_enabled, udp_server_port, udp_server_addr, udp_server_auth_addr;
|
|
|
|
static UDP_Server *udp_server = NULL;
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
setPandoraDebug (true);
|
|
|
|
|
|
|
|
conf_file = Pandora::getPandoraInstallDir ();
|
|
|
|
conf_file += "pandora_agent.conf";
|
|
|
|
|
|
|
|
this->conf = Pandora::Pandora_Agent_Conf::getInstance ();
|
|
|
|
this->conf->setFile (conf_file);
|
|
|
|
this->modules = new Pandora_Module_List (conf_file);
|
|
|
|
|
|
|
|
/* 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);
|
|
|
|
|
|
|
|
pandoraLog ("Pandora agent started");
|
2008-12-11 11:20:07 +01:00
|
|
|
|
|
|
|
/* Launch UDP Server */
|
|
|
|
udp_server_enabled = conf->getValue ("udp_server");
|
|
|
|
if (udp_server == NULL && udp_server_enabled.compare ("1") == 0) {
|
|
|
|
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");
|
|
|
|
udp_server = new UDP_Server (this, udp_server_addr, udp_server_auth_addr, atoi (udp_server_port.c_str ()));
|
|
|
|
udp_server->start ();
|
|
|
|
}
|
2006-06-20 19:05:19 +02:00
|
|
|
}
|
|
|
|
|
2006-07-04 16:07:08 +02:00
|
|
|
TiXmlElement *
|
|
|
|
Pandora_Windows_Service::getXmlHeader () {
|
2008-07-09 14:46:22 +02:00
|
|
|
TiXmlElement *agent;
|
|
|
|
char timestamp[20];
|
|
|
|
string value;
|
2008-07-31 12:31:58 +02:00
|
|
|
time_t ctime;
|
|
|
|
struct tm *ctime_tm = NULL;
|
2008-07-09 14:46:22 +02:00
|
|
|
|
|
|
|
agent = new TiXmlElement ("agent_data");
|
|
|
|
|
|
|
|
value = conf->getValue ("agent_name");
|
|
|
|
if (value == "") {
|
|
|
|
value = Pandora_Windows_Info::getSystemName ();
|
|
|
|
}
|
|
|
|
agent->SetAttribute ("agent_name", value);
|
|
|
|
|
|
|
|
agent->SetAttribute ("version", getPandoraAgentVersion ());
|
|
|
|
|
2008-07-31 12:31:58 +02:00
|
|
|
// Get current time
|
|
|
|
ctime = time(0);
|
2008-11-28 11:51:03 +01:00
|
|
|
ctime_tm = localtime(&ctime);
|
2008-07-31 12:31:58 +02:00
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
agent->SetAttribute ("timestamp", timestamp);
|
|
|
|
|
2006-07-04 16:07:08 +02:00
|
|
|
value = conf->getValue ("interval");
|
2008-07-09 14:46:22 +02:00
|
|
|
agent->SetAttribute ("interval", value);
|
2006-07-04 16:07:08 +02:00
|
|
|
|
|
|
|
value = Pandora_Windows_Info::getOSName ();
|
2008-07-09 14:46:22 +02:00
|
|
|
agent->SetAttribute ("os", value);
|
2006-07-04 16:07:08 +02:00
|
|
|
|
|
|
|
value = Pandora_Windows_Info::getOSVersion ();
|
2008-07-09 14:46:22 +02:00
|
|
|
agent->SetAttribute ("os_version", value);
|
|
|
|
|
|
|
|
return agent;
|
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
|
|
|
{
|
2009-02-09 18:47:24 +01:00
|
|
|
bool rc = false;
|
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
|
|
|
}
|
|
|
|
|
|
|
|
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));
|
|
|
|
rc = CreateProcess (NULL , (CHAR *)tentacle_cmd.c_str (), NULL, NULL, FALSE, CREATE_NO_WINDOW,
|
|
|
|
NULL, NULL, &si, &pi);
|
|
|
|
WaitForSingleObject(pi.hProcess, INFINITE);
|
2009-02-09 18:47:24 +01:00
|
|
|
if (rc == true) {
|
|
|
|
return 0;
|
|
|
|
}
|
2009-02-24 19:50:16 +01:00
|
|
|
|
2009-02-09 18:47:24 +01:00
|
|
|
pandoraDebug ("Tentacle client was unable to copy %s",
|
2008-07-09 14:46:22 +02:00
|
|
|
filename.c_str ());
|
2009-02-09 18:47:24 +01:00
|
|
|
return -1;
|
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;
|
|
|
|
string tmp_dir, filepath;
|
|
|
|
string pubkey_file, privkey_file;
|
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
|
|
|
|
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.connectWithPublicKey (host.c_str (), 22, "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);
|
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 = 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;
|
|
|
|
string filepath;
|
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
|
|
|
|
|
|
|
ftp_client.connect (host,
|
|
|
|
22,
|
|
|
|
"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;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Copy the file to the secondary server if needed
|
|
|
|
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
|
|
|
}
|
|
|
|
|
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 {
|
|
|
|
pandoraLog ("Transfer mode %s does not support file retrieval.");
|
|
|
|
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
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
void
|
|
|
|
Pandora_Windows_Service::checkConfig () {
|
|
|
|
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;
|
2008-06-10 11:50:29 +02:00
|
|
|
string conf_file, conf_tmp_file, md5_tmp_file, temp_dir, tmp;
|
|
|
|
|
|
|
|
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 base install directory */
|
|
|
|
conf_file = Pandora::getPandoraInstallDir ();
|
2008-07-09 14:46:22 +02:00
|
|
|
conf_file += "pandora_agent.conf";
|
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
/* Get agent name */
|
|
|
|
tmp = conf->getValue ("agent_name");
|
|
|
|
if (tmp == "") {
|
|
|
|
tmp = Pandora_Windows_Info::getSystemName ();
|
|
|
|
}
|
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 {
|
|
|
|
conf_size = Pandora_File::readBinFile (conf_file, &conf_str);
|
|
|
|
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
|
|
|
|
2008-06-10 11:50:29 +02:00
|
|
|
pandoraLog("Pandora_Windows_Service::checkConfig: Configuration has changed");
|
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 */
|
|
|
|
Pandora_File::writeBinFile (conf_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-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-11-28 11:51:03 +01:00
|
|
|
TiXmlDeclaration *decl;
|
|
|
|
TiXmlDocument *doc;
|
|
|
|
TiXmlElement *local_xml, *agent;
|
|
|
|
string xml_filename, random_integer;
|
|
|
|
string tmp_filename, tmp_filepath;
|
|
|
|
string encoding;
|
2008-12-11 11:20:07 +01:00
|
|
|
bool saved;
|
|
|
|
static HANDLE mutex = 0;
|
|
|
|
|
|
|
|
if (mutex == 0) {
|
|
|
|
mutex = CreateMutex (NULL, FALSE, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Wait for the mutex to be opened */
|
|
|
|
WaitForSingleObject (mutex, INFINITE);
|
|
|
|
|
2008-11-28 11:51:03 +01:00
|
|
|
agent = getXmlHeader ();
|
|
|
|
|
|
|
|
if (modules != NULL) {
|
|
|
|
modules->goFirst ();
|
|
|
|
|
|
|
|
while (! modules->isLast ()) {
|
|
|
|
Pandora_Module *module;
|
|
|
|
|
|
|
|
module = modules->getCurrentValue ();
|
|
|
|
|
|
|
|
local_xml = module->getXml ();
|
|
|
|
if (local_xml != NULL) {
|
|
|
|
agent->InsertEndChild (*local_xml);
|
|
|
|
|
|
|
|
delete local_xml;
|
|
|
|
}
|
|
|
|
modules->goNext ();
|
|
|
|
}
|
2008-12-11 11:20:07 +01:00
|
|
|
}
|
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 */
|
|
|
|
encoding = conf->getValue ("encoding");
|
|
|
|
if (encoding == "") {
|
|
|
|
encoding = "ISO-8859-1";
|
|
|
|
}
|
|
|
|
|
|
|
|
pandoraDebug ("Copying XML on %s", tmp_filepath.c_str ());
|
2008-12-01 14:40:19 +01:00
|
|
|
decl = new TiXmlDeclaration ("1.0", encoding.c_str(), "");
|
2008-11-28 11:51:03 +01:00
|
|
|
doc = new TiXmlDocument (tmp_filepath);
|
|
|
|
doc->InsertEndChild (*decl);
|
|
|
|
doc->InsertEndChild (*agent);
|
|
|
|
saved = doc->SaveFile();
|
|
|
|
delete doc;
|
|
|
|
delete agent;
|
|
|
|
|
|
|
|
if (!saved) {
|
|
|
|
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
|
|
|
}
|
|
|
|
|
|
|
|
/* Only send if debug is not activated */
|
|
|
|
if (getPandoraDebug () == false) {
|
|
|
|
this->copyDataFile (tmp_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
|
|
|
Pandora_File::removeFile (tmp_filepath);
|
2008-12-11 11:20:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
ReleaseMutex (mutex);
|
|
|
|
}
|
2008-06-10 11:50:29 +02:00
|
|
|
|
2006-12-01 17:29:27 +01:00
|
|
|
void
|
|
|
|
Pandora_Windows_Service::pandora_run () {
|
2008-12-24 13:33:41 +01:00
|
|
|
Pandora_Agent_Conf *conf = NULL;
|
|
|
|
string server_addr;
|
|
|
|
|
2008-07-09 14:46:22 +02:00
|
|
|
pandoraDebug ("Run begin");
|
|
|
|
|
|
|
|
/* Check for configuration changes */
|
|
|
|
this->checkConfig ();
|
|
|
|
|
2008-12-24 13:33:41 +01:00
|
|
|
conf = this->getConf ();
|
|
|
|
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 ();
|
|
|
|
|
|
|
|
pandoraDebug ("Run %s", module->getName ().c_str ());
|
|
|
|
module->run ();
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|