From 811bcc96deb2981e76a4b6f24605622508ae2eca Mon Sep 17 00:00:00 2001
From: Ramon Novoa <rnovoa@artica.es>
Date: Fri, 12 Apr 2013 14:30:16 +0000
Subject: [PATCH] 2013-04-12  Ramon Novoa  <rnovoa@artica.es>

	* modules/pandora_module_factory.cc: Added macro support to all
	  configuration tokens.



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@7978 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
---
 pandora_agents/win32/ChangeLog                |   5 +
 pandora_agents/win32/installer/pandora.mpi    |   4 +
 .../win32/modules/pandora_module_factory.cc   | 549 +++++++++++++++++-
 3 files changed, 553 insertions(+), 5 deletions(-)

diff --git a/pandora_agents/win32/ChangeLog b/pandora_agents/win32/ChangeLog
index d73ccc3465..0ce005de07 100644
--- a/pandora_agents/win32/ChangeLog
+++ b/pandora_agents/win32/ChangeLog
@@ -1,3 +1,8 @@
+2013-04-12  Ramon Novoa  <rnovoa@artica.es>
+
+	* modules/pandora_module_factory.cc: Added macro support to all
+	  configuration tokens.
+
 2013-04-12  Hirofumi Kosaka <kosaka@rworks.jp>
 
 	* modules/pandora_module_exec.cc: Fixed possible resource leaks,
diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi
index 80ce226857..5c0ba9b065 100755
--- a/pandora_agents/win32/installer/pandora.mpi
+++ b/pandora_agents/win32/installer/pandora.mpi
@@ -666,6 +666,7 @@ InstallComponent 3A1294BA-6D93-95C0-D81D-3435E62A69F3 -setup Uninstall -type act
 InstallComponent 73C87D6F-ACBB-026B-157C-1CC1FD4C4EEC -setup Uninstall -type action -title {Execute External Program} -component ExecuteExternalProgram -active Yes -parent 73AB9FDF-9481-4EC3-8B31-C109BAA1086C
 InstallComponent 0BABDE07-5132-BB2B-CDB4-AED542367076 -setup Uninstall -type action -title {Remove Directory From Path} -component RemoveDirectoryFromPath -active Yes -parent 73AB9FDF-9481-4EC3-8B31-C109BAA1086C
 InstallComponent D2829903-F232-F03E-070A-386860F74F4A -setup Uninstall -type action -title {Delete File} -component DeleteFile -active Yes -parent 73AB9FDF-9481-4EC3-8B31-C109BAA1086C
+InstallComponent 100C074A-1AB7-6813-12F8-585CF0B5C2D5 -setup Uninstall -type action -title {Uninstall Leftover Files} -component UninstallLeftoverFiles -active Yes -parent 73AB9FDF-9481-4EC3-8B31-C109BAA1086C
 InstallComponent ACFFE9C0-C404-4FD9-AD70-8F60E822DE65 -setup Uninstall -type action -title {Uninstall Selected Files} -component UninstallSelectedFiles -active Yes -parent 73AB9FDF-9481-4EC3-8B31-C109BAA1086C
 InstallComponent AA00EDED-9979-419F-A32C-DF1480E9EFF0 -setup Uninstall -type actiongroup -title {Finish Actions} -active Yes -parent ActionGroupsUninstall
 InstallComponent BC4AB013-F50F-49BF-BF98-FF7EBE16BCA4 -setup Uninstall -type actiongroup -title {Cancel Actions} -active Yes -parent ActionGroupsUninstall
@@ -748,6 +749,9 @@ array set Properties {
 0F1370DF-FF15-4CE7-ADF6-CA74BC642334,String
 {<%LicenseAccepted%>}
 
+100C074A-1AB7-6813-12F8-585CF0B5C2D5,Conditions
+{0 conditions}
+
 103DC6E3-97DC-46AC-81C5-DED8E4E319E7,CheckCondition
 {Before Action is Executed}
 
diff --git a/pandora_agents/win32/modules/pandora_module_factory.cc b/pandora_agents/win32/modules/pandora_module_factory.cc
index 43b31de9e2..018435b03a 100644
--- a/pandora_agents/win32/modules/pandora_module_factory.cc
+++ b/pandora_agents/win32/modules/pandora_module_factory.cc
@@ -532,13 +532,552 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
 			pos = macro_name.find (" ");
 			if(pos != 0) {
 				// Split name of the macro y value
-				macro_value = macro_name.substr (pos);
+				macro_value = macro_name.substr (pos + 1);
 				macro_name.erase(pos, macro_name.size () - pos);
 				
-				// Search the macro in the module_exec and replace it
-				pos_macro = module_exec.find(macro_name);
-				if (pos_macro != string::npos){
-					module_exec.replace(pos_macro, macro_name.size(), macro_value);
+				// Replace macros
+				if (module_name != "") {
+					pos_macro = module_name.find(macro_name);
+					if (pos_macro != string::npos){
+						module_name.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_type != "") {
+					pos_macro = module_type.find(macro_name);
+					if (pos_macro != string::npos){
+						module_type.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (precondition_list.size () > 0) {
+					precondition_iter = precondition_list.begin ();
+					for (precondition_iter = precondition_list.begin ();
+					     precondition_iter != precondition_list.end ();
+					     precondition_iter++) {
+
+						pos_macro = precondition_iter->find(macro_name);
+						if (pos_macro != string::npos){
+							precondition_iter->replace(pos_macro, macro_name.size(), macro_value);
+						}
+
+					}
+				}
+
+				if (module_precondition != "") {
+					pos_macro = module_precondition.find(macro_name);
+					if (pos_macro != string::npos){
+						module_precondition.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_interval != "") {
+					pos_macro = module_interval.find(macro_name);
+					if (pos_macro != string::npos){
+						module_interval.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_exec != "") {
+					pos_macro = module_exec.find(macro_name);
+					if (pos_macro != string::npos){
+						module_exec.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_proc != "") {
+					pos_macro = module_proc.find(macro_name);
+					if (pos_macro != string::npos){
+						module_proc.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_service != "") {
+					pos_macro = module_service.find(macro_name);
+					if (pos_macro != string::npos){
+						module_service.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_freedisk != "") {
+					pos_macro = module_freedisk.find(macro_name);
+					if (pos_macro != string::npos){
+						module_freedisk.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_freedisk_percent != "") {
+					pos_macro = module_freedisk_percent.find(macro_name);
+					if (pos_macro != string::npos){
+						module_freedisk_percent.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_freememory != "") {
+					pos_macro = module_freememory.find(macro_name);
+					if (pos_macro != string::npos){
+						module_freememory.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_freememory_percent != "") {
+					pos_macro = module_freememory_percent.find(macro_name);
+					if (pos_macro != string::npos){
+						module_freememory_percent.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_cpuusage != "") {
+					pos_macro = module_cpuusage.find(macro_name);
+					if (pos_macro != string::npos){
+						module_cpuusage.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_inventory != "") {
+					pos_macro = module_inventory.find(macro_name);
+					if (pos_macro != string::npos){
+						module_inventory.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_odbc != "") {
+					pos_macro = module_odbc.find(macro_name);
+					if (pos_macro != string::npos){
+						module_odbc.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_max != "") {
+					pos_macro = module_max.find(macro_name);
+					if (pos_macro != string::npos){
+						module_max.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_min != "") {
+					pos_macro = module_min.find(macro_name);
+					if (pos_macro != string::npos){
+						module_min.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_post_process != "") {
+					pos_macro = module_post_process.find(macro_name);
+					if (pos_macro != string::npos){
+						module_post_process.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_min_critical != "") {
+					pos_macro = module_min_critical.find(macro_name);
+					if (pos_macro != string::npos){
+						module_min_critical.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_max_critical != "") {
+					pos_macro = module_max_critical.find(macro_name);
+					if (pos_macro != string::npos){
+						module_max_critical.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_min_warning != "") {
+					pos_macro = module_min_warning.find(macro_name);
+					if (pos_macro != string::npos){
+						module_min_warning.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_max_warning != "") {
+					pos_macro = module_max_warning.find(macro_name);
+					if (pos_macro != string::npos){
+						module_max_warning.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_disabled != "") {
+					pos_macro = module_disabled.find(macro_name);
+					if (pos_macro != string::npos){
+						module_disabled.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_min_ff_event != "") {
+					pos_macro = module_min_ff_event.find(macro_name);
+					if (pos_macro != string::npos){
+						module_min_ff_event.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_description != "") {
+					pos_macro = module_description.find(macro_name);
+					if (pos_macro != string::npos){
+						module_description.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_odbc_query != "") {
+					pos_macro = module_odbc_query.find(macro_name);
+					if (pos_macro != string::npos){
+						module_odbc_query.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_logevent != "") {
+					pos_macro = module_logevent.find(macro_name);
+					if (pos_macro != string::npos){
+						module_logevent.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_source != "") {
+					pos_macro = module_source.find(macro_name);
+					if (pos_macro != string::npos){
+						module_source.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_eventtype != "") {
+					pos_macro = module_eventtype.find(macro_name);
+					if (pos_macro != string::npos){
+						module_eventtype.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_eventcode != "") {
+					pos_macro = module_eventcode.find(macro_name);
+					if (pos_macro != string::npos){
+						module_eventcode.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_pattern != "") {
+					pos_macro = module_pattern.find(macro_name);
+					if (pos_macro != string::npos){
+						module_pattern.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_application != "") {
+					pos_macro = module_application.find(macro_name);
+					if (pos_macro != string::npos){
+						module_application.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_async != "") {
+					pos_macro = module_async.find(macro_name);
+					if (pos_macro != string::npos){
+						module_async.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_start_command != "") {
+					pos_macro = module_start_command.find(macro_name);
+					if (pos_macro != string::npos){
+						module_start_command.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_watchdog != "") {
+					pos_macro = module_watchdog.find(macro_name);
+					if (pos_macro != string::npos){
+						module_watchdog.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_wmiquery != "") {
+					pos_macro = module_wmiquery.find(macro_name);
+					if (pos_macro != string::npos){
+						module_wmiquery.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_wmicolumn != "") {
+					pos_macro = module_wmicolumn.find(macro_name);
+					if (pos_macro != string::npos){
+						module_wmicolumn.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_retries != "") {
+					pos_macro = module_retries.find(macro_name);
+					if (pos_macro != string::npos){
+						module_retries.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_startdelay != "") {
+					pos_macro = module_startdelay.find(macro_name);
+					if (pos_macro != string::npos){
+						module_startdelay.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_retrydelay != "") {
+					pos_macro = module_retrydelay.find(macro_name);
+					if (pos_macro != string::npos){
+						module_retrydelay.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_perfcounter != "") {
+					pos_macro = module_perfcounter.find(macro_name);
+					if (pos_macro != string::npos){
+						module_perfcounter.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_tcpcheck != "") {
+					pos_macro = module_tcpcheck.find(macro_name);
+					if (pos_macro != string::npos){
+						module_tcpcheck.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_port != "") {
+					pos_macro = module_port.find(macro_name);
+					if (pos_macro != string::npos){
+						module_port.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_timeout != "") {
+					pos_macro = module_timeout.find(macro_name);
+					if (pos_macro != string::npos){
+						module_timeout.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_regexp != "") {
+					pos_macro = module_regexp.find(macro_name);
+					if (pos_macro != string::npos){
+						module_regexp.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_plugin != "") {
+					pos_macro = module_plugin.find(macro_name);
+					if (pos_macro != string::npos){
+						module_plugin.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_save != "") {
+					pos_macro = module_save.find(macro_name);
+					if (pos_macro != string::npos){
+						module_save.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (condition_list.size () > 0) {
+					condition_iter = condition_list.begin ();
+					for (condition_iter = condition_list.begin ();
+						condition_iter != condition_list.end ();
+						condition_iter++) {
+
+						pos_macro = condition_iter->find(macro_name);
+						if (pos_macro != string::npos){
+							condition_iter->replace(pos_macro, macro_name.size(), macro_value);
+						}
+					}
+				}
+
+				if (module_crontab != "") {
+					pos_macro = module_crontab.find(macro_name);
+					if (pos_macro != string::npos){
+						module_crontab.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_cron_interval != "") {
+					pos_macro = module_cron_interval.find(macro_name);
+					if (pos_macro != string::npos){
+						module_cron_interval.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_noseekeof != "") {
+					pos_macro = module_noseekeof.find(macro_name);
+					if (pos_macro != string::npos){
+						module_noseekeof.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_ping != "") {
+					pos_macro = module_ping.find(macro_name);
+					if (pos_macro != string::npos){
+						module_ping.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_ping_count != "") {
+					pos_macro = module_ping_count.find(macro_name);
+					if (pos_macro != string::npos){
+						module_ping_count.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_ping_timeout != "") {
+					pos_macro = module_ping_timeout.find(macro_name);
+					if (pos_macro != string::npos){
+						module_ping_timeout.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_snmpget != "") {
+					pos_macro = module_snmpget.find(macro_name);
+					if (pos_macro != string::npos){
+						module_snmpget.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_snmp_version != "") {
+					pos_macro = module_snmp_version.find(macro_name);
+					if (pos_macro != string::npos){
+						module_snmp_version.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_snmp_community != "") {
+					pos_macro = module_snmp_community.find(macro_name);
+					if (pos_macro != string::npos){
+						module_snmp_community.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_snmp_agent != "") {
+					pos_macro = module_snmp_agent.find(macro_name);
+					if (pos_macro != string::npos){
+						module_snmp_agent.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_snmp_oid != "") {
+					pos_macro = module_snmp_oid.find(macro_name);
+					if (pos_macro != string::npos){
+						module_snmp_oid.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_advanced_options != "") {
+					pos_macro = module_advanced_options.find(macro_name);
+					if (pos_macro != string::npos){
+						module_advanced_options.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_cooked != "") {
+					pos_macro = module_cooked.find(macro_name);
+					if (pos_macro != string::npos){
+						module_cooked.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (intensive_condition_list.size () > 0) {
+					intensive_condition_iter = intensive_condition_list.begin ();
+					for (intensive_condition_iter = intensive_condition_list.begin ();
+						intensive_condition_iter != intensive_condition_list.end ();
+						intensive_condition_iter++) {
+							
+						pos_macro = intensive_condition_iter->find(macro_name);
+						if (pos_macro != string::npos){
+							intensive_condition_iter->replace(pos_macro, macro_name.size(), macro_value);
+						}
+					}
+				}
+
+				if (module_unit != "") {
+					pos_macro = module_unit.find(macro_name);
+					if (pos_macro != string::npos){
+						module_unit.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_group != "") {
+					pos_macro = module_group.find(macro_name);
+					if (pos_macro != string::npos){
+						module_group.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_custom_id != "") {
+					pos_macro = module_custom_id.find(macro_name);
+					if (pos_macro != string::npos){
+						module_custom_id.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_str_warning != "") {
+					pos_macro = module_str_warning.find(macro_name);
+					if (pos_macro != string::npos){
+						module_str_warning.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_str_critical != "") {
+					pos_macro = module_str_critical.find(macro_name);
+					if (pos_macro != string::npos){
+						module_str_critical.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_critical_instructions != "") {
+					pos_macro = module_critical_instructions.find(macro_name);
+					if (pos_macro != string::npos){
+						module_critical_instructions.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_warning_instructions != "") {
+					pos_macro = module_warning_instructions.find(macro_name);
+					if (pos_macro != string::npos){
+						module_warning_instructions.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_unknown_instructions != "") {
+					pos_macro = module_unknown_instructions.find(macro_name);
+					if (pos_macro != string::npos){
+						module_unknown_instructions.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_tags != "") {
+					pos_macro = module_tags.find(macro_name);
+					if (pos_macro != string::npos){
+						module_tags.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_critical_inverse != "") {
+					pos_macro = module_critical_inverse.find(macro_name);
+					if (pos_macro != string::npos){
+						module_critical_inverse.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_warning_inverse != "") {
+					pos_macro = module_warning_inverse.find(macro_name);
+					if (pos_macro != string::npos){
+						module_warning_inverse.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_quiet != "") {
+					pos_macro = module_quiet.find(macro_name);
+					if (pos_macro != string::npos){
+						module_quiet.replace(pos_macro, macro_name.size(), macro_value);
+					}
+				}
+
+				if (module_ff_interval != "") {
+					pos_macro = module_ff_interval.find(macro_name);
+					if (pos_macro != string::npos){
+						module_ff_interval.replace(pos_macro, macro_name.size(), macro_value);
+					}
 				}
 			}
 		}