Skip to Content.
Sympa Menu

sm-commit - [SM-Commit] GIT changes to master grimoire by Vlad Glagolev (1bc1883675ae335bd44dc93b793120631233828d)

sm-commit AT lists.ibiblio.org

Subject: Source Mage code commit list

List archive

Chronological Thread  
  • From: Vlad Glagolev <scm AT sourcemage.org>
  • To: sm-commit AT lists.ibiblio.org
  • Subject: [SM-Commit] GIT changes to master grimoire by Vlad Glagolev (1bc1883675ae335bd44dc93b793120631233828d)
  • Date: Fri, 10 Dec 2010 10:04:11 -0600

GIT changes to master grimoire by Vlad Glagolev <stealth AT sourcemage.org>:

net/cacti/DEPENDS | 4
net/cacti/DETAILS | 5
net/cacti/HISTORY | 7
net/cacti/PRE_BUILD | 20
net/cacti/pa.patch | 31 +
net/cacti/patches/data_source_deactivate.patch | 17
net/cacti/patches/graph_list_view.patch | 110 ++++
net/cacti/patches/html_output.patch | 71 +++
net/cacti/patches/ldap_group_authenication.patch | 11
net/cacti/patches/ping.patch | 23
net/cacti/patches/poller_interval.patch | 168 +++++++
net/cacti/patches/script_server_command_line_parse.patch | 136 +++++
net/spine/DETAILS | 4
net/spine/HISTORY | 6
net/spine/INSTALL | 3
net/spine/PRE_BUILD | 4
net/spine/config.patch | 11
net/spine/patches/mysql_client_reconnect.patch | 15
net/spine/patches/ping_reliability.patch | 45 -
net/spine/patches/snmp_v3_fix.patch | 88 ---
net/spine/patches/unified_issues.patch | 348
+++++++++++++++
21 files changed, 950 insertions(+), 177 deletions(-)

New commits:
commit 1bc1883675ae335bd44dc93b793120631233828d
Author: Vlad Glagolev <stealth AT sourcemage.org>
Commit: Vlad Glagolev <stealth AT sourcemage.org>

spine: => 0.8.7g

commit ff3c25673737afa4929df474b870048399c297b8
Author: Vlad Glagolev <stealth AT sourcemage.org>
Commit: Vlad Glagolev <stealth AT sourcemage.org>

cacti: updated plugin arch to 2.8, added patches

diff --git a/net/cacti/DEPENDS b/net/cacti/DEPENDS
index 4563082..f430700 100755
--- a/net/cacti/DEPENDS
+++ b/net/cacti/DEPENDS
@@ -2,4 +2,6 @@ depends WEBSERVER &&
depends PHP &&
depends rrdtool &&
depends MYSQL &&
-depends net-snmp
+depends net-snmp &&
+
+suggest_depends spine "" "" "for high-performance poller support"
diff --git a/net/cacti/DETAILS b/net/cacti/DETAILS
index 9648da4..6d2abbe 100755
--- a/net/cacti/DETAILS
+++ b/net/cacti/DETAILS
@@ -1,12 +1,13 @@
SPELL=cacti
VERSION=0.8.7g
SECURITY_PATCH=1
+ PATCHLEVEL=1
SOURCE=$SPELL-$VERSION.tar.gz
if [[ $CACTI_PA == y ]]; then
- VERSION_PA=2.7
+ VERSION_PA=2.8
SOURCE2=$SPELL-plugin-$VERSION-PA-v${VERSION_PA}.tar.gz
SOURCE2_URL[0]=http://mirror.cactiusers.org/downloads/plugins/$SOURCE2
-
SOURCE2_HASH=sha512:a7d7f00fd0a1bb38b40234d48d94681945854c512f012cb3b032356e92e568be409fc1eab5eac7b8db870c264a4b8dbf18676bbba5bca006bd735854e09dae6d
+
SOURCE2_HASH=sha512:4ac6f3bb459def465ef63f87e9129f11b42e351f14c2ceb53f3b1dd5e824c9ad939c3bdec0e51ea864631e94fd99dc8c72eaf0e9ed4de61bd06ab9db92015b85
SOURCE_DIRECTORY2="$BUILD_DIRECTORY/$SPELL-PA-${VERSION_PA}"
fi
SOURCE_DIRECTORY="$BUILD_DIRECTORY/$SPELL-$VERSION"
diff --git a/net/cacti/HISTORY b/net/cacti/HISTORY
index 7422e65..43cd4c5 100644
--- a/net/cacti/HISTORY
+++ b/net/cacti/HISTORY
@@ -1,3 +1,10 @@
+2010-12-10 Vlad Glagolev <stealth AT sourcemage.org>
+ * DETAILS: updated plugin arch to 2.8
+ * DEPENDS: added spine suggest dependency
+ * PRE_BUILD: reimplement patching logic
+ * patches/*: added 0.8.7g patches
+ * pa.patch: added, to use with the latest official patches
+
2010-10-20 Bor Kraljič <pyrobor AT ver.si>
* DETAILS: updated spell to 0.8.7g

diff --git a/net/cacti/PRE_BUILD b/net/cacti/PRE_BUILD
index 12e9f98..6fbe833 100755
--- a/net/cacti/PRE_BUILD
+++ b/net/cacti/PRE_BUILD
@@ -1,11 +1,4 @@
default_pre_build &&
-
-if [[ $CACTI_PA == y ]]; then
- mk_source_dir "$SOURCE_DIRECTORY2"
- cd "$SOURCE_DIRECTORY2" &&
- unpack_file 2
-fi &&
-
cd "$SOURCE_DIRECTORY" &&

if [[ -d "$SPELL_DIRECTORY/patches" ]]; then
@@ -15,6 +8,17 @@ if [[ -d "$SPELL_DIRECTORY/patches" ]]; then
fi &&

if [[ $CACTI_PA == y ]]; then
+ mk_source_dir "$SOURCE_DIRECTORY2"
+ cd "$SOURCE_DIRECTORY2" &&
+ unpack_file 2 &&
+
+ patch -p1 < "$SPELL_DIRECTORY/pa.patch" &&
+
+ cd "$SOURCE_DIRECTORY" &&
+
cat "$SOURCE_DIRECTORY2/cacti-plugin-arch/pa.sql" >> cacti.sql &&
- patch -p1 <
"$SOURCE_DIRECTORY2/cacti-plugin-arch/$SPELL-plugin-$VERSION-PA-v${VERSION_PA}.diff"
+ patch -p1 <
"$SOURCE_DIRECTORY2/cacti-plugin-arch/$SPELL-plugin-$VERSION-PA-v${VERSION_PA}.diff"
&&
+
+ # cleaning up post-patching
+ rm -f *.orig
fi
diff --git a/net/cacti/pa.patch b/net/cacti/pa.patch
new file mode 100644
index 0000000..eb4e7ce
--- /dev/null
+++ b/net/cacti/pa.patch
@@ -0,0 +1,31 @@
+--- cacti-PA-2.8/cacti-plugin-arch/cacti-plugin-0.8.7g-PA-v2.8.diff
2010-07-10 02:40:54.000000000 +0400
++++ cacti-PA-2.8-patched/cacti-plugin-arch/cacti-plugin-0.8.7g-PA-v2.8.diff
2010-12-09 15:17:56.372139350 +0300
+@@ -203,9 +203,9 @@
+ if (sizeof($data_sources) > 0) {
+ foreach ($data_sources as $data_source) {
+ + $data_source =
api_plugin_hook_function('data_sources_table', $data_source);
+- $data_template_name =
((empty($data_source["data_template_name"])) ? "<em>None</em>" :
$data_source["data_template_name"]);
+- $data_input_name =
((empty($data_source["data_input_name"])) ? "<em>External</em>" :
$data_source["data_input_name"]);
+- $poller_interval =
((isset($poller_intervals[$data_source["local_data_id"]])) ?
$poller_intervals[$data_source["local_data_id"]] : 0);
++ /* we're escaping strings here, so no need to escape
them on form_selectable_cell */
++ $data_template_name =
((empty($data_source["data_template_name"])) ? "<em>None</em>" :
htmlspecialchars($data_source["data_template_name"]));
++ $data_input_name =
((empty($data_source["data_input_name"])) ? "<em>External</em>" :
htmlspecialchars($data_source["data_input_name"]));
+ diff -Naur cacti-0.8.7g-old/graph_image.php cacti-0.8.7g/graph_image.php
+ --- cacti-0.8.7g-old/graph_image.php 2010-07-09 18:33:46.000000000 -0400
+ +++ cacti-0.8.7g/graph_image.php 2010-07-09 18:34:11.000000000 -0400
+@@ -2395,14 +2395,12 @@
+ /* Populate each execution file with appropriate information
*/
+ foreach ($polling_hosts as $item) {
+ if ($host_count == 1) {
+-@@ -446,9 +450,11 @@
++@@ -446,7 +450,9 @@
+
+ /* sleep the appripriate amount of time */
+ if ($poller_runs_completed < $poller_runs) {
+ + api_plugin_hook('poller_bottom');
+- db_close();
+ usleep($sleep_time * 1000000);
+- db_connect_real($database_hostname,
$database_username, $database_password, $database_default, $database_type,
$database_port);
+ + api_plugin_hook('poller_top');
+ }
+ }else if (read_config_option('log_verbosity') >=
POLLER_VERBOSITY_MEDIUM || $debug) {
diff --git a/net/cacti/patches/data_source_deactivate.patch
b/net/cacti/patches/data_source_deactivate.patch
new file mode 100644
index 0000000..1a3f727
--- /dev/null
+++ b/net/cacti/patches/data_source_deactivate.patch
@@ -0,0 +1,17 @@
+--- cacti-0.8.7g/lib/api_data_source.php 2010-07-09 18:33:46.000000000
-0400
++++ cacti-0.8.7g-patched/lib/api_data_source.php 2010-07-27
21:30:31.000000000 -0400
+@@ -131,12 +131,12 @@
+
+ $i++;
+
+- if ($i % 1000) {
++ if (!($i % 1000)) {
+ db_execute("DELETE FROM poller_item WHERE
local_data_id IN ($ids_to_disable)");
+ db_execute("UPDATE data_template_data SET
active='' WHERE local_data_id IN ($ids_to_disable)");
+
+ $i = 0;
+- $ids_to_delete = "";
++ $ids_to_disable = "";
+ }
+ }
+
diff --git a/net/cacti/patches/graph_list_view.patch
b/net/cacti/patches/graph_list_view.patch
new file mode 100644
index 0000000..47a5b72
--- /dev/null
+++ b/net/cacti/patches/graph_list_view.patch
@@ -0,0 +1,110 @@
+--- cacti-0.8.7g/graph_view.php 2010-07-09 18:33:46.000000000 -0400
++++ cacti-0.8.7g-patched/graph_view.php 2010-07-27 21:30:31.000000000
-0400
+@@ -204,7 +204,7 @@
+ $sql_where = "";
+ $sql_join = "";
+ }
+- /* the user select a bunch of graphs of the 'list' view and wants
them dsplayed here */
++ /* the user select a bunch of graphs of the 'list' view and wants
them displayed here */
+ if (isset($_REQUEST["style"])) {
+ if (get_request_var_request("style") == "selective") {
+
+@@ -296,8 +296,9 @@
+ $sql_where =
get_graph_permissions_sql($current_user["policy_graphs"],
$current_user["policy_hosts"], $current_user["policy_graph_templates"]);
+
+ $hosts =
db_fetch_assoc("SELECT DISTINCT host.id, host.description as name
+- FROM
(graph_templates_graph,graph_local)
+- LEFT
JOIN host ON (host.id=graph_local.host_id)
++ FROM
host
++ LEFT
JOIN graph_local ON ( host.id = graph_local.host_id )
++ LEFT
JOIN graph_templates_graph ON ( graph_templates_graph.local_graph_id =
graph_local.id )
+ LEFT
JOIN graph_templates ON (graph_templates.id=graph_local.graph_template_id)
+ LEFT
JOIN user_auth_perms ON
((graph_templates_graph.local_graph_id=user_auth_perms.item_id and
user_auth_perms.type=1 and user_auth_perms.user_id=" .
$_SESSION["sess_user_id"] . ") OR (host.id=user_auth_perms.item_id and
user_auth_perms.type=3 and user_auth_perms.user_id=" .
$_SESSION["sess_user_id"] . ") OR (graph_templates.id=user_auth_perms.item_id
and user_auth_perms.type=4 and user_auth_perms.user_id=" .
$_SESSION["sess_user_id"] . "))
+ WHERE
graph_templates_graph.local_graph_id=graph_local.id
+@@ -327,8 +328,9 @@
+ <?php
+ if
(read_config_option("auth_method") != 0) {
+
$graph_templates = db_fetch_assoc("SELECT DISTINCT graph_templates.*
+- FROM
(graph_templates_graph,graph_local)
+- LEFT
JOIN host ON (host.id=graph_local.host_id)
++ FROM
host
++ LEFT
JOIN graph_local ON ( host.id = graph_local.host_id )
++ LEFT
JOIN graph_templates_graph ON ( graph_templates_graph.local_graph_id =
graph_local.id )
+ LEFT
JOIN graph_templates ON (graph_templates.id=graph_local.graph_template_id)
+ LEFT
JOIN user_auth_perms ON
((graph_templates_graph.local_graph_id=user_auth_perms.item_id and
user_auth_perms.type=1 and user_auth_perms.user_id=" .
$_SESSION["sess_user_id"] . ") OR (host.id=user_auth_perms.item_id and
user_auth_perms.type=3 and user_auth_perms.user_id=" .
$_SESSION["sess_user_id"] . ") OR (graph_templates.id=user_auth_perms.item_id
and user_auth_perms.type=4 and user_auth_perms.user_id=" .
$_SESSION["sess_user_id"] . "))
+ WHERE
graph_templates_graph.local_graph_id=graph_local.id
+@@ -514,10 +516,10 @@
+ }else{
+ /* if any of the settings changed, reset the page number */
+ $changed = false;
+- $changed += check_changed("host_id",
"sess_graphs_view_list_host");
+- $changed += check_changed("rows",
"sess_graphs_view_list_rows");
+- $changed += check_changed("graph_template_id",
"sess_graphs_view_list_graph_template");
+- $changed += check_changed("filter",
"sess_graphs_view_list_filter");
++ $changed += check_changed("host_id",
"sess_graph_view_list_host");
++ $changed += check_changed("rows",
"sess_graph_view_list_rows");
++ $changed += check_changed("graph_template_id",
"sess_graph_view_list_graph_template");
++ $changed += check_changed("filter",
"sess_graph_view_list_filter");
+ if ($changed) $_REQUEST["page"] = 1;
+ }
+
+@@ -563,7 +565,7 @@
+ ?>
+ <tr bgcolor="#<?php print $colors["panel"];?>">
+ <td>
+- <form style="margin:0px;padding:0px;" name="form_graph_list"
method="POST" onSubmit='form_graph(document.chk,document.form_graph_list)'
action="graph_view.php">
++ <form style="margin:0px;padding:0px;" name="form_graph_list"
method="POST" onSubmit='form_graph(document.chk,document.form_graph_list)'>
+ <table width="100%" cellpadding="0" cellspacing="0">
+ <tr>
+ <td nowrap style='white-space:
nowrap;' width="40">
+@@ -578,8 +580,9 @@
+ $sql_where =
get_graph_permissions_sql($current_user["policy_graphs"],
$current_user["policy_hosts"], $current_user["policy_graph_templates"]);
+
+ $hosts =
db_fetch_assoc("SELECT DISTINCT host.id, host.description as name
+- FROM
(graph_templates_graph,graph_local)
+- LEFT
JOIN host ON (host.id=graph_local.host_id)
++ FROM
host
++ LEFT
JOIN graph_local ON ( host.id = graph_local.host_id )
++ LEFT
JOIN graph_templates_graph ON ( graph_templates_graph.local_graph_id =
graph_local.id )
+ LEFT
JOIN graph_templates ON (graph_templates.id=graph_local.graph_template_id)
+ LEFT
JOIN user_auth_perms ON
((graph_templates_graph.local_graph_id=user_auth_perms.item_id and
user_auth_perms.type=1 and user_auth_perms.user_id=" .
$_SESSION["sess_user_id"] . ") OR (host.id=user_auth_perms.item_id and
user_auth_perms.type=3 and user_auth_perms.user_id=" .
$_SESSION["sess_user_id"] . ") OR (graph_templates.id=user_auth_perms.item_id
and user_auth_perms.type=4 and user_auth_perms.user_id=" .
$_SESSION["sess_user_id"] . "))
+ WHERE
graph_templates_graph.local_graph_id=graph_local.id
+@@ -608,8 +611,9 @@
+ <?php
+ if
(read_config_option("auth_method") != 0) {
+
$graph_templates = db_fetch_assoc("SELECT DISTINCT graph_templates.*
+- FROM
(graph_templates_graph,graph_local)
+- LEFT
JOIN host ON (host.id=graph_local.host_id)
++ FROM
host
++ LEFT
JOIN graph_local ON ( host.id = graph_local.host_id )
++ LEFT
JOIN graph_templates_graph ON ( graph_templates_graph.local_graph_id =
graph_local.id )
+ LEFT
JOIN graph_templates ON (graph_templates.id=graph_local.graph_template_id)
+ LEFT
JOIN user_auth_perms ON
((graph_templates_graph.local_graph_id=user_auth_perms.item_id and
user_auth_perms.type=1 and user_auth_perms.user_id=" .
$_SESSION["sess_user_id"] . ") OR (host.id=user_auth_perms.item_id and
user_auth_perms.type=3 and user_auth_perms.user_id=" .
$_SESSION["sess_user_id"] . ") OR (graph_templates.id=user_auth_perms.item_id
and user_auth_perms.type=4 and user_auth_perms.user_id=" .
$_SESSION["sess_user_id"] . "))
+ WHERE
graph_templates_graph.local_graph_id=graph_local.id
+@@ -736,13 +740,13 @@
+
+ html_start_box("", "100%", $colors["header"], "1", "center", "");
+ print $nav;
+- html_header_checkbox(array("Graph Title", "Graph Size"));
++ html_header_checkbox(array("Graph Title", "Graph Size"), false);
+
+ $i = 0;
+ if (sizeof($graphs)) {
+ foreach ($graphs as $graph) {
+ form_alternate_row_color($colors["alternate"],
$colors["light"], $i, 'line' . $graph["local_graph_id"]); $i++;
+- form_selectable_cell("<strong><a href='" .
htmlspecialchars("graph.php?local_graph_id=" . $graph["local_graph_id"] .
"&rra_id=all") . "'>" . htmlspecialchars($graph["title_cache"]) .
"</a><strong>", $graph["local_graph_id"]);
++ form_selectable_cell("<strong><a href='" .
htmlspecialchars("graph.php?local_graph_id=" . $graph["local_graph_id"] .
"&rra_id=all") . "'>" . htmlspecialchars($graph["title_cache"]) .
"</a></strong>", $graph["local_graph_id"]);
+ form_selectable_cell($graph["height"] . "x" .
$graph["width"], $graph["local_graph_id"]);
+ form_checkbox_cell($graph["title_cache"],
$graph["local_graph_id"]);
+ form_end_row();
+@@ -795,8 +799,8 @@
+ strDel = strDel.substring(0,strDel.length - 1);
+ strURL = '&graph_add=' + strAdd + '&graph_remove=' + strDel;
+ return strNavURL + strURL;
+- alert(strAdd);
+- alert(strDel);
++ //alert(strAdd);
++ //alert(strDel);
+ }
+ function url_go(strURL) {
+ document.location = strURL;
diff --git a/net/cacti/patches/html_output.patch
b/net/cacti/patches/html_output.patch
new file mode 100644
index 0000000..22f0985
--- /dev/null
+++ b/net/cacti/patches/html_output.patch
@@ -0,0 +1,71 @@
+--- cacti-0.8.7g/lib/html_form.php 2010-07-09 18:33:46.000000000 -0400
++++ cacti-0.8.7g-patched/lib/html_form.php 2010-07-27 21:30:31.000000000
-0400
+@@ -65,7 +65,7 @@
+
form_alternate_row_color($colors["form_alternate1"],
$colors["form_alternate2"], $i, 'row_' . $field_name);
+ }
+
+- print "<td width='" .
((isset($config_array["left_column_width"])) ?
$config_array["left_column_width"] : "50%") . "'>\n<font
class='textEditTitle'>" . htmlspecialchars($field_array["friendly_name"]) .
"</font><br>\n";
++ print "<td width='" .
((isset($config_array["left_column_width"])) ?
$config_array["left_column_width"] : "50%") . "'>\n<font
class='textEditTitle'>" . $field_array["friendly_name"] . "</font><br>\n";
+
+ if (isset($field_array["sub_checkbox"])) {
+
form_checkbox($field_array["sub_checkbox"]["name"],
$field_array["sub_checkbox"]["value"],
+--- cacti-0.8.7g/lib/data_query.php 2010-07-09 18:33:46.000000000 -0400
++++ cacti-0.8.7g-patched/lib/data_query.php 2010-07-27 21:30:31.000000000
-0400
+@@ -620,6 +620,7 @@
+ }
+
+ /* update the cache */
++ /* TODO: if both $sort field and $title_format are empty, this yields
funny results */
+ db_execute("update host_snmp_query set sort_field = '$sort_field',
title_format = '$title_format' where host_id = '$host_id' and snmp_query_id =
'$data_query_id'");
+ }
+
+--- cacti-0.8.7g/data_sources.php 2010-07-09 18:33:46.000000000 -0400
++++ cacti-0.8.7g-patched/data_sources.php 2010-07-27 21:30:31.000000000
-0400
+@@ -899,7 +899,7 @@
+ <td bgcolor='#" . $colors["header"] . "'
class='textHeaderDark'>
+ <strong>Data Source Item</strong>
$header_label
+ </td>
+- <td class='textHeaderDark' align='right'
bgcolor='" . $colors["header"] . "'>
++ <td class='textHeaderDark' align='right'
bgcolor='#" . $colors["header"] . "'>
+ " . ((!empty($_GET["id"]) &&
(empty($data_template["id"]))) ? "<strong><a class='linkOverDark' href='" .
htmlspecialchars("data_sources.php?action=rrd_add&id=" . $_GET["id"]) .
"'>New</a>&nbsp;</strong>" : "") . "
+ </td>
+ </tr>\n";
+@@ -1310,16 +1310,17 @@
+ $i = 0;
+ if (sizeof($data_sources) > 0) {
+ foreach ($data_sources as $data_source) {
+- $data_template_name =
((empty($data_source["data_template_name"])) ? "<em>None</em>" :
$data_source["data_template_name"]);
+- $data_input_name =
((empty($data_source["data_input_name"])) ? "<em>External</em>" :
$data_source["data_input_name"]);
++ /* we're escaping strings here, so no need to escape
them on form_selectable_cell */
++ $data_template_name =
((empty($data_source["data_template_name"])) ? "<em>None</em>" :
htmlspecialchars($data_source["data_template_name"]));
++ $data_input_name =
((empty($data_source["data_input_name"])) ? "<em>External</em>" :
htmlspecialchars($data_source["data_input_name"]));
+ $poller_interval =
((isset($poller_intervals[$data_source["local_data_id"]])) ?
$poller_intervals[$data_source["local_data_id"]] : 0);
+ form_alternate_row_color($colors["alternate"],
$colors["light"], $i, 'line' . $data_source["local_data_id"]); $i++;
+ form_selectable_cell("<a class='linkEditMain' href='"
. htmlspecialchars("data_sources.php?action=ds_edit&id=" .
$data_source["local_data_id"]) . "' title='" . $data_source["name_cache"] .
"'>" . ((get_request_var_request("filter") != "") ? eregi_replace("(" .
preg_quote(get_request_var_request("filter")) . ")", "<span
style='background-color: #F8D93D;'>\\1</span>",
title_trim(htmlspecialchars($data_source["name_cache"]),
read_config_option("max_title_data_source"))) :
title_trim(htmlspecialchars($data_source["name_cache"]),
read_config_option("max_title_data_source"))) . "</a>",
$data_source["local_data_id"]);
+ form_selectable_cell($data_source['local_data_id'],
$data_source['local_data_id']);
+-
form_selectable_cell(((get_request_var_request("filter") != "") ?
eregi_replace("(" . preg_quote(get_request_var_request("filter")) . ")",
"<span style='background-color: #F8D93D;'>\\1</span>",
htmlspecialchars($data_input_name)) : htmlspecialchars($data_input_name)),
$data_source["local_data_id"]);
++
form_selectable_cell(((get_request_var_request("filter") != "") ?
eregi_replace("(" . preg_quote(get_request_var_request("filter")) . ")",
"<span style='background-color: #F8D93D;'>\\1</span>", $data_input_name) :
$data_input_name), $data_source["local_data_id"]);
+
form_selectable_cell(get_poller_interval($poller_interval),
$data_source["local_data_id"]);
+ form_selectable_cell(($data_source['active'] == "on"
? "Yes" : "No"), $data_source["local_data_id"]);
+-
form_selectable_cell(((get_request_var_request("filter") != "") ?
eregi_replace("(" . preg_quote(get_request_var_request("filter")) . ")",
"<span style='background-color: #F8D93D;'>\\1</span>",
htmlspecialchars($data_source['data_template_name'])) :
htmlspecialchars($data_source['data_template_name'])),
$data_source["local_data_id"]);
++
form_selectable_cell(((get_request_var_request("filter") != "") ?
eregi_replace("(" . preg_quote(get_request_var_request("filter")) . ")",
"<span style='background-color: #F8D93D;'>\\1</span>", $data_template_name) :
$data_template_name), $data_source["local_data_id"]);
+ form_checkbox_cell($data_source["name_cache"],
$data_source["local_data_id"]);
+ form_end_row();
+ }
+--- cacti-0.8.7g/graphs.php 2010-07-09 18:33:46.000000000 -0400
++++ cacti-0.8.7g-patched/graphs.php 2010-07-27 21:30:31.000000000 -0400
+@@ -1317,11 +1317,12 @@
+ $i = 0;
+ if (sizeof($graph_list) > 0) {
+ foreach ($graph_list as $graph) {
+- $template_name = ((empty($graph["name"])) ?
"<em>None</em>" : $graph["name"]);
++ /* we're escaping strings here, so no need to escape
them on form_selectable_cell */
++ $template_name = ((empty($graph["name"])) ?
"<em>None</em>" : htmlspecialchars($graph["name"]));
+ form_alternate_row_color($colors["alternate"],
$colors["light"], $i, 'line' . $graph["local_graph_id"]); $i++;
+ form_selectable_cell("<a class='linkEditMain' href='"
. htmlspecialchars("graphs.php?action=graph_edit&id=" .
$graph["local_graph_id"]) . "' title='" .
htmlspecialchars($graph["title_cache"]) . "'>" .
((get_request_var_request("filter") != "") ? eregi_replace("(" .
preg_quote(get_request_var_request("filter")) . ")", "<span
style='background-color: #F8D93D;'>\\1</span>",
title_trim(htmlspecialchars($graph["title_cache"]),
read_config_option("max_title_graph"))) :
title_trim(htmlspecialchars($graph["title_cache"]),
read_config_option("max_title_graph"))) . "</a>", $graph["local_graph_id"]);
+ form_selectable_cell($graph["local_graph_id"],
$graph["local_graph_id"]);
+-
form_selectable_cell(((get_request_var_request("filter") != "") ?
eregi_replace("(" . preg_quote(get_request_var_request("filter")) . ")",
"<span style='background-color: #F8D93D;'>\\1</span>",
htmlspecialchars($template_name)) : htmlspecialchars($template_name)),
$graph["local_graph_id"]);
++
form_selectable_cell(((get_request_var_request("filter") != "") ?
eregi_replace("(" . preg_quote(get_request_var_request("filter")) . ")",
"<span style='background-color: #F8D93D;'>\\1</span>", $template_name) :
$template_name), $graph["local_graph_id"]);
+ form_selectable_cell($graph["height"] . "x" .
$graph["width"], $graph["local_graph_id"]);
+ form_checkbox_cell($graph["title_cache"],
$graph["local_graph_id"]);
+ form_end_row();
diff --git a/net/cacti/patches/ldap_group_authenication.patch
b/net/cacti/patches/ldap_group_authenication.patch
new file mode 100644
index 0000000..00894c0
--- /dev/null
+++ b/net/cacti/patches/ldap_group_authenication.patch
@@ -0,0 +1,11 @@
+--- cacti-0.8.7g/lib/ldap.php 2010-07-09 18:33:46.000000000 -0400
++++ cacti-0.8.7g-patched/lib/ldap.php 2010-07-27 21:30:31.000000000 -0400
+@@ -250,7 +250,7 @@
+ if ($ldap_response) {
+ if ($this->group_require == 1) {
+ /* Process group membership if
required */
+- if ($ldap_group_member_type == 1) {
++ if ($this->group_member_type == 1) {
+ $ldap_group_response =
@ldap_compare($ldap_conn, $this->group_dn, $this->group_attrib, $this->dn);
+ } else {
+ $ldap_group_response =
@ldap_compare($ldap_conn, $this->group_dn, $this->group_attrib,
$this->username);
diff --git a/net/cacti/patches/ping.patch b/net/cacti/patches/ping.patch
new file mode 100644
index 0000000..a48050b
--- /dev/null
+++ b/net/cacti/patches/ping.patch
@@ -0,0 +1,23 @@
+diff -ruBbd cacti-0.8.7g/lib/ping.php cacti-0.8.7g-patched/lib/ping.php
+--- cacti-0.8.7g/lib/ping.php 2010-07-09 18:33:46.000000000 -0400
++++ cacti-0.8.7g-patched/lib/ping.php 2010-08-31 20:31:22.000000000 -0400
+@@ -577,12 +577,16 @@
+ switch(socket_select($r =
array($this->socket), $w = array($this->socket), $f = array($this->socket),
$to_sec, $to_usec)){
+ case 2:
+ /* connection refused */
+- $this->ping_response = "TCP ping
connection refused";
+- $this->ping_status = "down";
++ $this->time =
$this->get_time($this->precision);
++
++ if (($this->time*1000) <=
$this->timeout) {
++ $this->ping_response = "TCP
Ping connection refused (" . $this->time*1000 . " ms)";
++ $this->ping_status =
$this->time*1000;
++ }
+
+ $this->close_socket();
+
+- return false;
++ return true; /* "connection refused"
says: host is alive (else ping would time out) */
+ case 1:
+ /* connected, so calculate the total
time and return */
+ $this->time =
$this->get_time($this->precision);
diff --git a/net/cacti/patches/poller_interval.patch
b/net/cacti/patches/poller_interval.patch
new file mode 100644
index 0000000..dac3956
--- /dev/null
+++ b/net/cacti/patches/poller_interval.patch
@@ -0,0 +1,168 @@
+diff -ruBbd cacti-0.8.7g/lib/database.php
cacti-0.8.7g-patched/lib/database.php
+--- cacti-0.8.7g/lib/database.php 2010-07-09 18:33:46.000000000 -0400
++++ cacti-0.8.7g-patched/lib/database.php 2010-08-31 20:31:22.000000000
-0400
+@@ -38,14 +38,14 @@
+ $cnn = NewADOConnection($db_type);
+ $class = get_class($cnn);
+
+- if (!is_a($cnn_id, $class)) {
+- $cnn_id = $cnn;
+- }
+-
+ $hostport = $host . ":" . $port;
+
+ while ($i <= $retries) {
+ if ($cnn->PConnect($hostport,$user,$pass,$db_name)) {
++ if (!is_a($cnn_id, $class)) {
++ $cnn_id = $cnn;
++ }
++
+ return($cnn);
+ }
+
+@@ -92,7 +92,7 @@
+ while (1) {
+ $query = $db_conn->Execute($sql);
+
+- if (($query) || ($db_conn->ErrorNo() == 1032)) {
++ if (($db_conn->ErrorNo() == 0) || ($db_conn->ErrorNo() ==
1032)) {
+ return(1);
+ }else if (($db_conn->ErrorNo() == 1049) ||
($db_conn->ErrorNo() == 1051)) {
+ printf("FATAL: Database or Table does not exist");
+@@ -143,7 +143,7 @@
+
+ $query = $db_conn->Execute($sql);
+
+- if (($query) || ($db_conn->ErrorNo() == 1032)) {
++ if (($db_conn->ErrorNo() == 0) || ($db_conn->ErrorNo() == 1032)) {
+ if (!$query->EOF) {
+ if ($col_name != '') {
+ $column = $query->fields[$col_name];
+@@ -184,7 +184,7 @@
+ $db_conn->SetFetchMode(ADODB_FETCH_ASSOC);
+ $query = $db_conn->Execute($sql);
+
+- if (($query) || ($db_conn->ErrorNo() == 1032)) {
++ if (($db_conn->ErrorNo() == 0) || ($db_conn->ErrorNo() == 1032)) {
+ if (!$query->EOF) {
+ $fields = $query->fields;
+
+@@ -222,7 +222,7 @@
+ $db_conn->SetFetchMode(ADODB_FETCH_ASSOC);
+ $query = $db_conn->Execute($sql);
+
+- if (($query) || ($db_conn->ErrorNo() == 1032)) {
++ if (($db_conn->ErrorNo() == 0) || ($db_conn->ErrorNo() == 1032)) {
+ while ((!$query->EOF) && ($query)) {
+ $data{sizeof($data)} = $query->fields;
+ $query->MoveNext();
+diff -ruBbd cacti-0.8.7g/poller.php cacti-0.8.7g-patched/poller.php
+--- cacti-0.8.7g/poller.php 2010-07-09 18:33:46.000000000 -0400
++++ cacti-0.8.7g-patched/poller.php 2010-08-31 20:31:22.000000000 -0400
+@@ -109,7 +109,7 @@
+ }
+
+ /* record the start time */
+-list($micro,$seconds) = split(" ", microtime());
++list($micro,$seconds) = explode(" ", microtime());
+ $poller_start = $seconds + $micro;
+ $overhead_time = 0;
+
+@@ -140,7 +140,7 @@
+ WHERE rrd_next_step<=0
+ GROUP BY host_id
+ ORDER BY host_id"),
"host_id", "data_sources");
+- $poller_runs = $cron_interval / $poller_interval;
++ $poller_runs = intval($cron_interval / $poller_interval);
+
+ define("MAX_POLLER_RUNTIME", $poller_runs * $poller_interval - 2);
+ }else{
+@@ -211,10 +211,11 @@
+
+ $poller_runs_completed = 0;
+ $poller_items_total = 0;
++$polling_hosts = array_merge(array(0 => array("id" => "0")),
db_fetch_assoc("SELECT id FROM host WHERE disabled='' ORDER BY id"));
+
+ while ($poller_runs_completed < $poller_runs) {
+ /* record the start time for this loop */
+- list($micro,$seconds) = split(" ", microtime());
++ list($micro,$seconds) = explode(" ", microtime());
+ $loop_start = $seconds + $micro;
+
+ /* calculate overhead time */
+@@ -222,8 +223,6 @@
+ $overhead_time = $loop_start - $poller_start;
+ }
+
+- $polling_hosts = array_merge(array(0 => array("id" => "0")),
db_fetch_assoc("SELECT id FROM host WHERE disabled = '' ORDER BY id"));
+-
+ /* initialize counters for script file handling */
+ $host_count = 1;
+
+@@ -375,7 +374,7 @@
+
+ break;
+ }else {
+- if (read_config_option("log_verbosity") >=
POLLER_VERBOSITY_MEDIUM) {
++ if (read_config_option("log_verbosity") >=
POLLER_VERBOSITY_MEDIUM || $debug) {
+ print "Waiting on " .
($started_processes - $finished_processes) . " of " . $started_processes . "
pollers.\n";
+ }
+
+@@ -390,7 +389,7 @@
+
+ break;
+ }else{
+- sleep(1);
++ usleep(500);
+ }
+ }
+ }
+@@ -427,28 +426,27 @@
+ $poller_runs_completed++;
+
+ /* record the start time for this loop */
+- list($micro,$seconds) = split(" ", microtime());
++ list($micro,$seconds) = explode(" ", microtime());
+ $loop_end = $seconds + $micro;
++ $loop_time = $loop_end - $loop_start;
+
+- if (($loop_end - $loop_start) < $poller_interval) {
++ if ($loop_time < $poller_interval) {
+ if ($poller_runs_completed == 1) {
+- $sleep_time = ($poller_interval - ($loop_end -
$loop_start) - $overhead_time);
+- }else{
+- $sleep_time = ($poller_interval - ($loop_end -
$loop_start));
++ $sleep_time = $poller_interval - $loop_time -
$overhead_time;
++ } else {
++ $sleep_time = $poller_interval - $loop_time;
+ }
+
+ /* log some nice debug information */
+- if (read_config_option('log_verbosity') >=
POLLER_VERBOSITY_DEBUG) {
+- echo "Loop Time is: " . ($loop_end - $loop_start) .
"\n";
+- echo "Sleep Time is: " . $sleep_time . "\n";
+- echo "Total Time is: " . ($loop_end - $poller_start)
. "\n";
++ if (read_config_option('log_verbosity') >=
POLLER_VERBOSITY_DEBUG || $debug) {
++ echo "Loop Time is: " . round($loop_time, 2) . "\n";
++ echo "Sleep Time is: " . round($sleep_time, 2) . "\n";
++ echo "Total Time is: " . round($loop_end -
$poller_start, 2) . "\n";
+ }
+
+ /* sleep the appripriate amount of time */
+ if ($poller_runs_completed < $poller_runs) {
+- db_close();
+ usleep($sleep_time * 1000000);
+- db_connect_real($database_hostname,
$database_username, $database_password, $database_default, $database_type,
$database_port);
+ }
+ }else if (read_config_option('log_verbosity') >=
POLLER_VERBOSITY_MEDIUM || $debug) {
+ cacti_log("WARNING: Cacti Polling Cycle Exceeded Poller
Interval by " . $loop_end-$loop_start-$poller_interval . " seconds", TRUE,
"POLLER");
+@@ -459,7 +457,7 @@
+ $hosts_per_process, $num_polling_items, $rrds_processed) {
+
+ /* take time and log performance data */
+- list($micro,$seconds) = split(" ", microtime());
++ list($micro,$seconds) = explode(" ", microtime());
+ $loop_end = $seconds + $micro;
+
+ $cacti_stats = sprintf(
+
diff --git a/net/cacti/patches/script_server_command_line_parse.patch
b/net/cacti/patches/script_server_command_line_parse.patch
new file mode 100644
index 0000000..8cddf18
--- /dev/null
+++ b/net/cacti/patches/script_server_command_line_parse.patch
@@ -0,0 +1,136 @@
+--- cacti-0.8.7g/script_server.php 2010-07-09 18:33:46.000000000 -0400
++++ cacti-0.8.7g-patched/script_server.php 2010-07-27 21:30:31.000000000
-0400
+@@ -72,7 +72,7 @@
+ }
+
+ /* record the script start time */
+-list($micro,$seconds) = split(" ", microtime());
++list($micro,$seconds) = explode(" ", microtime());
+ $start = $seconds + $micro;
+
+ /* some debugging */
+@@ -171,7 +171,11 @@
+
+ if (isset($command_array[2])) {
+ $parameters = trim($command_array[2]);
+- $parameter_array = explode(" ",
trim($command_array[2]));
++ $parameter_array = array();
++ if (!parseArgs($parameters,
$parameter_array)) {
++ cacti_log("WARNING: Script
Server count not parse '$parameters' for $function", false, "PHPSVR");
++ return "U";
++ }
+ }else{
+ $parameters = "";
+ $parameters_array = array();
+@@ -236,3 +240,111 @@
+ exit (-1);
+ }
+ }
++
++function parseArgs($string, &$str_list, $debug = false) {
++ $delimiters = array("'",'"');
++ $delimited = false;
++ $str_list = array();
++
++ if ($debug) echo "String: '" . $string . "'\n";
++
++ foreach($delimiters as $delimiter) {
++ if (strpos($string, $delimiter) !== false) {
++ $delimited = true;
++ break;
++ }
++ }
++
++ /* process the simple case */
++ if (!$delimited) {
++ $str_list = explode(" ", $string);
++
++ if ($debug) echo "Output: '" . implode(",", $str_list) .
"'\n";
++
++ return true;
++ }
++
++ /* Break str down into an array of characters and process */
++ $char_array = str_split($string);
++ $escaping = false;
++ $indelim = false;
++ $parse_ok = true;
++ $curstr = '';
++ foreach($char_array as $char) {
++ switch ($char) {
++ case '\'':
++ case '"':
++ if (!$indelim) {
++ if (!$escaping) {
++ $indelim = true;
++ }else{
++ $curstr .= $char;
++ $escaping = false;
++ }
++ }elseif (!$escaping) {
++ $str_list[] = $curstr;
++ $curstr = '';
++ $indelim = false;
++ }elseif ($escaping) {
++ $curstr .= $char;
++ $escaping = false;
++ }
++
++ break;
++ case '\\':
++ if ($escaping) {
++ $curstr .= $char;
++ $escaping = false;
++ }else{
++ $escaping = true;
++ }
++
++ break;
++ case ' ':
++ if ($escaping) {
++ $parse_ok = false;
++ $msg = 'Parse error attempting to parse
string';
++ }elseif ($indelim) {
++ $curstr .= $char;
++ }elseif (strlen($curstr)) {
++ $str_list[] = $curstr;
++ $curstr = '';
++ }
++
++ break;
++ case '`':
++ $parse_ok = false;
++ $msg = 'Backtic (`) characters not allowed';
++
++ break;
++ default:
++ if ($escaping) {
++ $parse_ok = false;
++ $msg = 'Parse error attempting to parse
string';
++ }else{
++ $curstr .= $char;
++ }
++ break;
++ }
++
++ if (!$parse_ok) {
++ break;
++ }
++ }
++
++ /* Add the last str to the string array */
++ if ($indelim || $escaping) {
++ $parse_ok = false;
++ $msg = 'Parse error attempting to parse string';
++ }
++
++ if (!$parse_ok) {
++ echo "ERROR: " . $msg . " '" . $string . "'\n";
++ }else{
++ $str_list[] = $curstr;
++ }
++
++ if ($debug) echo "Output: '" . implode(",", $str_list) . "'\n";
++
++ return $parse_ok;
++}
diff --git a/net/spine/DETAILS b/net/spine/DETAILS
index 0b83afb..27a7865 100755
--- a/net/spine/DETAILS
+++ b/net/spine/DETAILS
@@ -1,8 +1,8 @@
SPELL=spine
- VERSION=0.8.7e
+ VERSION=0.8.7g
SOURCE=cacti-$SPELL-$VERSION.tar.gz
SOURCE_URL[0]=http://www.cacti.net/downloads/$SPELL/$SOURCE
-
SOURCE_HASH=sha512:7ec964922770f7db89fdf62dff74fdd98397a045239e9e776efd8f07791d243125211d660acc54060cb7e386d8d9997e6cef2c4fc1364e7076f8e3c6ddd90536
+
SOURCE_HASH=sha512:be0dd06649005085b2ef6c773e934e9dedd35d7c2d990637ae45347c5e27d8076f046f7b08ea497e183b688661b63b4135e6cecefe4c74f4b422f7008e90f117
SOURCE_DIRECTORY="$BUILD_DIRECTORY/cacti-$SPELL-$VERSION"
WEB_SITE=http://www.cacti.net/spine_info.php
LICENSE[0]=LGPL
diff --git a/net/spine/HISTORY b/net/spine/HISTORY
index 1713793..1fccfc0 100644
--- a/net/spine/HISTORY
+++ b/net/spine/HISTORY
@@ -1,3 +1,9 @@
+2010-12-09 Vlad Glagolev <stealth AT sourcemage.org>
+ * DETAILS: updated spell to 0.8.7g
+ * INSTALL: upstream finally fixed conf trashing issue
+ * PRE_BUILD: removed reconf
+ * patches/unified_issues.patch: added official patch
+
2010-05-21 Vlad Glagolev <stealth AT sourcemage.org>
* PRE_BUILD: fixed compilation with newer autotools; apply the patch
* INSTALL: added, to properly install config file
diff --git a/net/spine/INSTALL b/net/spine/INSTALL
index 283f5a5..bd369c0 100755
--- a/net/spine/INSTALL
+++ b/net/spine/INSTALL
@@ -1,3 +1,4 @@
default_install &&

-install_config_file "$SOURCE_DIRECTORY/spine.conf"
"$INSTALL_ROOT/etc/spine.conf"
+install_config_file "$SOURCE_DIRECTORY/spine.conf.dist" \
+ "$INSTALL_ROOT/etc/spine.conf"
diff --git a/net/spine/PRE_BUILD b/net/spine/PRE_BUILD
index 66c1a66..4f1cd3f 100755
--- a/net/spine/PRE_BUILD
+++ b/net/spine/PRE_BUILD
@@ -1,10 +1,6 @@
default_pre_build &&
cd "$SOURCE_DIRECTORY" &&

-patch -p0 < "$SPELL_DIRECTORY/config.patch" &&
-
-libtoolize --copy --force --install &&
-
if [[ -d "$SPELL_DIRECTORY/patches" ]]; then
for patch in "$SPELL_DIRECTORY/patches"/*.patch; do
patch -p1 < $patch
diff --git a/net/spine/config.patch b/net/spine/config.patch
deleted file mode 100644
index 808eb3a..0000000
--- a/net/spine/config.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- Makefile.am.orig 2009-06-29 06:03:36.000000000 +0400
-+++ Makefile.am 2010-05-21 19:53:22.980952845 +0400
-@@ -2,7 +2,4 @@
-
- spine_SOURCES = sql.c spine.c util.c snmp.c locks.c poller.c nft_popen.c
php.c ping.c keywords.c error.c
-
--configdir = $(sysconfdir)
--config_DATA = spine.conf
--
- bin_PROGRAMS = spine
-\ No newline at end of file
diff --git a/net/spine/patches/mysql_client_reconnect.patch
b/net/spine/patches/mysql_client_reconnect.patch
deleted file mode 100644
index 5880915..0000000
--- a/net/spine/patches/mysql_client_reconnect.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- 0.8.7e/sql.c 2009-06-28 21:45:02.000000000 -0400
-+++ ../branches/0.8.7/sql.c 2009-08-18 20:51:30.000000000 -0400
-@@ -186,6 +186,12 @@
- die("FATAL: MySQL options unable to set timeout value");
- }
-
-+ my_bool reconnect = 1;
-+ options_error = mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect);
-+ if (options_error < 0) {
-+ die("FATAL: MySQL options unable to set reconnect option\n");
-+ }
-+
- while (tries > 0) {
- tries--;
-
diff --git a/net/spine/patches/ping_reliability.patch
b/net/spine/patches/ping_reliability.patch
deleted file mode 100644
index 0535fa5..0000000
--- a/net/spine/patches/ping_reliability.patch
+++ /dev/null
@@ -1,45 +0,0 @@
---- 0.8.7e/ping.c 2009-06-28 21:45:02.000000000 -0400
-+++ ../branches/0.8.7/ping.c 2009-08-18 20:51:30.000000000 -0400
-@@ -890,7 +890,7 @@
- return(cleaned_hostname);
- }
-
--/*! \fn unsigned short get_checksum(void* buf, int len)
-+/*! \fn unsigned short int get_checksum(void* buf, int len)
- * \brief calculates a 16bit checksum of a packet buffer
- * \param buf the input buffer to calculate the checksum of
- * \param len the size of the input buffer
-@@ -898,11 +898,12 @@
- * \return 16bit checksum of an input buffer of size len.
- *
- */
--unsigned short get_checksum(void* buf, int len) {
-+unsigned short int get_checksum(void* buf, int len) {
- int nleft = len;
- int32_t sum = 0;
-- unsigned short answer;
-- unsigned short* w = (unsigned short*)buf;
-+ unsigned short int answer;
-+ unsigned short int* w = (unsigned short int*)buf;
-+ unsigned short int odd_byte = 0;
-
- while (nleft > 1) {
- sum += *w++;
-@@ -910,7 +911,8 @@
- }
-
- if (nleft == 1) {
-- sum += *(unsigned char*)w;
-+ *(unsigned char*)(&odd_byte) = *(unsigned char*)w;
-+ sum += odd_byte;
- }
-
- sum = (sum >> 16) + (sum & 0xffff);
---- 0.8.7e/ping.h 2009-06-28 21:45:02.000000000 -0400
-+++ ../branches/0.8.7/ping.h 2009-08-18 20:51:30.000000000 -0400
-@@ -142,4 +142,4 @@
- extern char *remove_tcp_udp_from_hostname(char *hostname);
- extern void update_host_status(int status, host_t *host, ping_t *ping, int
availability_method);
- extern int init_sockaddr(struct sockaddr_in *name, const char *hostname,
unsigned short int port);
--extern unsigned short get_checksum(void* buf, int len);
-+extern unsigned short int get_checksum(void* buf, int len);
diff --git a/net/spine/patches/snmp_v3_fix.patch
b/net/spine/patches/snmp_v3_fix.patch
deleted file mode 100644
index 6efe173..0000000
--- a/net/spine/patches/snmp_v3_fix.patch
+++ /dev/null
@@ -1,88 +0,0 @@
---- 0.8.7e/configure.ac 2009-06-28 21:45:02.000000000 -0400
-+++ ../branches/0.8.7/configure.ac 2009-08-18 20:51:30.000000000 -0400
-@@ -351,6 +351,21 @@
- AC_MSG_RESULT([no])
- fi
-
-+# ****************** Force Net-SNMP Version Checks ***********************
-+# If we should use the system popen or nifty popen
-+AC_MSG_CHECKING(whether to verify net-snmp library vs header versions)
-+AC_ARG_ENABLE(strict-snmp,
-+ [ --enable-strict-snmp Enable checking of Net-SNMP library vs
header versions (default: disabled)],
-+ [ ENABLED_SNMP_VERSION=$enableval ],
-+ [ ENABLED_SNMP_VERSION=no ]
-+ )
-+if test "$ENABLED_SNMP_VERSION" = "yes"; then
-+ AC_MSG_RESULT([yes])
-+ AC_DEFINE(VERIFY_PACKAGE_VERSION, 1, If we are going to force Net-SNMP
library and header versons to be the same)
-+else
-+ AC_MSG_RESULT([no])
-+fi
-+
- # ****************** gethostbyname_r Check ***********************
- # Linux Variant
- AC_MSG_CHECKING([for glibc gethostbyname_r])
---- 0.8.7e/snmp.c 2009-06-28 21:45:02.000000000 -0400
-+++ ../branches/0.8.7/snmp.c 2009-08-18 20:51:30.000000000 -0400
-@@ -91,7 +91,7 @@
- netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID,
NETSNMP_DS_LIB_PRINT_BARE_VALUE, 1);
- netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID,
NETSNMP_DS_LIB_NUMERIC_TIMETICKS, 1);
-
-- #ifdef PACKAGE_VERSION
-+ #if defined(VERIFY_PACKAGE_VERSION) && defined(PACKAGE_VERSION)
- /* check that the headers we compiled with match the library
we linked with -
- apparently not defined in UCD-SNMP...
- */
-@@ -215,24 +215,22 @@
- session.securityName = snmp_username;
- session.securityNameLen = strlen(session.securityName);
-
-+ if (snmp_context && strlen(snmp_context)) {
- session.contextName = snmp_context;
- session.contextNameLen = strlen(session.contextName);
-+ }
-
- session.securityAuthKeyLen = USM_AUTH_KU_LEN;
-
-- /* set the engineBoots and engineTime to null so that they
are discovered */
-- session.engineBoots = 0;
-- session.engineTime = 0;
--
- /* set the authentication protocol */
- if (strcmp(snmp_auth_protocol, "MD5") == 0) {
- /* set the authentication method to MD5 */
-- session.securityAuthProto =
snmp_duplicate_objid(usmHMACMD5AuthProtocol, OIDSIZE(usmHMACMD5AuthProtocol));
-- session.securityAuthProtoLen =
OIDSIZE(usmHMACMD5AuthProtocol);
-+ session.securityAuthProto =
snmp_duplicate_objid(usmHMACMD5AuthProtocol, USM_AUTH_PROTO_MD5_LEN);
-+ session.securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN;
- }else{
- /* set the authentication method to SHA1 */
-- session.securityAuthProto =
snmp_duplicate_objid(usmHMACSHA1AuthProtocol,
OIDSIZE(usmHMACSHA1AuthProtocol));
-- session.securityAuthProtoLen =
OIDSIZE(usmHMACSHA1AuthProtocol);
-+ session.securityAuthProto =
snmp_duplicate_objid(usmHMACSHA1AuthProtocol, USM_AUTH_PROTO_SHA_LEN);
-+ session.securityAuthProtoLen = USM_AUTH_PROTO_SHA_LEN;
- }
-
- /* set the authentication key to the hashed version. The
password must me at least 8 char */
-@@ -255,16 +253,16 @@
- session.securityLevel =
SNMP_SEC_LEVEL_AUTHNOPRIV;
- }else{
- if (strcmp(snmp_priv_protocol, "DES") == 0) {
-- session.securityPrivProto =
snmp_duplicate_objid(usmDESPrivProtocol, OIDSIZE(usmDESPrivProtocol));
-- session.securityPrivProtoLen =
OIDSIZE(usmDESPrivProtocol);
-+ session.securityPrivProto =
snmp_duplicate_objid(usmDESPrivProtocol, USM_PRIV_PROTO_DES_LEN);
-+ session.securityPrivProtoLen =
USM_PRIV_PROTO_DES_LEN;
- session.securityPrivKeyLen =
USM_PRIV_KU_LEN;
-
- /* set the security level to authenticate,
and encrypted */
- session.securityLevel =
SNMP_SEC_LEVEL_AUTHPRIV;
- }else{
-- #if defined(usmAESPrivProtocol) &&
SNMP_DEFAULT_PRIV_PROTO == usmAESPrivProtocol
-- session.securityPrivProto =
snmp_duplicate_objid(usmAESPrivProtocol, OIDSIZE(usmAESPrivProtocol));
-- session.securityPrivProtoLen =
OIDSIZE(usmAESPrivProtocol);
-+ #if defined(USM_PRIV_PROTO_AES_LEN)
-+ session.securityPrivProto =
snmp_duplicate_objid(usmAESPrivProtocol, USM_PRIV_PROTO_AES_LEN);
-+ session.securityPrivProtoLen =
USM_PRIV_PROTO_AES_LEN;
- session.securityPrivKeyLen =
USM_PRIV_KU_LEN;
- #else
- session.securityPrivProto =
snmp_duplicate_objid(usmAES128PrivProtocol, OIDSIZE(usmAES128PrivProtocol));
diff --git a/net/spine/patches/unified_issues.patch
b/net/spine/patches/unified_issues.patch
new file mode 100644
index 0000000..d24cdaa
--- /dev/null
+++ b/net/spine/patches/unified_issues.patch
@@ -0,0 +1,348 @@
+diff -ruBbd cacti-spine-0.8.7g.old/ChangeLog cacti-spine-0.8.7g/ChangeLog
+--- cacti-spine-0.8.7g.old/ChangeLog 2010-07-09 19:25:56.000000000 -0400
++++ cacti-spine-0.8.7g/ChangeLog 2010-08-31 20:21:22.000000000 -0400
+@@ -1,5 +1,13 @@
+ The Cacti Group | spine
+
++Patched 0.8.7g
++-bug#0001669: Problems with getting data from script using SPINE on Windows
Server 2003 x32
++-bug#0001829: Wrong string numerical value got from Spine SNMP poller
++-bug: Net-snmp API issues cause spine crashes with some SNMP agents
++-bug: Host list not properly initialized
++-bug: Mutex locking issues cause deadlocks in Windows
++-bug: Escape windows type back slashes in scripts
++
+ 0.8.7g
+ -feature: Multi threaded host polling
+
+diff -ruBbd cacti-spine-0.8.7g.old/poller.c cacti-spine-0.8.7g/poller.c
+--- cacti-spine-0.8.7g.old/poller.c 2010-07-09 17:39:53.000000000 -0400
++++ cacti-spine-0.8.7g/poller.c 2010-08-31 20:18:58.000000000 -0400
+@@ -57,21 +57,26 @@
+ host_data_ids = poller_details.host_data_ids;
+ snprintf(host_time, SMALL_BUFSIZE, "%s", poller_details.host_time);
+
+- thread_mutex_unlock(LOCK_THREAD);
+-
+ free(arg);
+
++ thread_ready = TRUE;
++
+ SPINE_LOG_DEBUG(("DEBUG: In Poller, About to Start Polling of Host"));
+
+ poll_host(host_id, host_thread, last_host_thread, host_data_ids,
host_time);
+
+- thread_mutex_lock(LOCK_THREAD);
+-
++ while (TRUE) {
++ if (thread_mutex_trylock(LOCK_THREAD) == 0) {
+ active_threads--;
++ thread_mutex_unlock(LOCK_THREAD);
+
+- SPINE_LOG_DEBUG(("DEBUG: The Value of Active Threads is %i"
,active_threads));
++ break;
++ }
+
+- thread_mutex_unlock(LOCK_THREAD);
++ usleep(100);
++ }
++
++ SPINE_LOG_DEBUG(("DEBUG: The Value of Active Threads is %i"
,active_threads));
+
+ /* end the thread */
+ pthread_exit(0);
+@@ -965,7 +970,7 @@
+ poll_result = exec_poll(host,
poller_items[i].arg1);
+
+ /* process the result */
+- if ((is_numeric(poll_result)) ||
(is_multipart_output(poll_result))) {
++ if ((is_numeric(poll_result)) ||
(is_multipart_output(trim(poll_result)))) {
+ snprintf(poller_items[i].result,
RESULTS_BUFFER, "%s", poll_result);
+ }else if (is_hexadecimal(snmp_oids[j].result,
TRUE)) {
+ snprintf(poller_items[i].result,
RESULTS_BUFFER, "%lld", hex2dec(poll_result));
+@@ -998,7 +1003,7 @@
+ poll_result = php_cmd(poller_items[i].arg1,
php_process);
+
+ /* process the output */
+- if ((is_numeric(poll_result)) ||
(is_multipart_output(poll_result))) {
++ if ((is_numeric(poll_result)) ||
(is_multipart_output(trim(poll_result)))) {
+ snprintf(poller_items[i].result,
RESULTS_BUFFER, "%s", poll_result);
+ }else if (is_hexadecimal(snmp_oids[j].result,
TRUE)) {
+ snprintf(poller_items[i].result,
RESULTS_BUFFER, "%lld", hex2dec(poll_result));
+@@ -1247,7 +1252,7 @@
+ if (is_numeric(result)) {
+ return TRUE;
+ }else{
+- if (is_multipart_output(result)) {
++ if (is_multipart_output(trim(result))) {
+ return TRUE;
+ }else{
+ return FALSE;
+@@ -1290,7 +1295,7 @@
+
+ /* compensate for back slashes in arguments */
+ #if defined(__CYGWIN__)
+- proc_command = add_slashes(command, 2);
++ proc_command = add_slashes(command);
+ #else
+ proc_command = command;
+ #endif
+@@ -1340,7 +1345,7 @@
+ FD_SET(cmd_fd, &fds);
+
+ /* wait x seonds for pipe response */
+- switch (select(cmd_fd+1, &fds, NULL, NULL, &timeout)) {
++ switch (select(FD_SETSIZE, &fds, NULL, NULL, &timeout)) {
+ case -1:
+ switch (errno) {
+ case EBADF:
+@@ -1381,11 +1386,13 @@
+ break;
+ }
+ case 0:
++ #ifdef USING_TPOPEN
+ SPINE_LOG(("Host[%i] ERROR: The POPEN timed out",
current_host->id));
+
+- #ifdef USING_TPOPEN
+ close_fd = FALSE;
+ #else
++ SPINE_LOG(("Host[%i] ERROR: The NIFTY POPEN timed
out", current_host->id));
++
+ pid = nft_pchild(cmd_fd);
+ kill(pid, SIGKILL);
+ #endif
+diff -ruBbd cacti-spine-0.8.7g.old/snmp.c cacti-spine-0.8.7g/snmp.c
+--- cacti-spine-0.8.7g.old/snmp.c 2010-07-09 17:39:53.000000000 -0400
++++ cacti-spine-0.8.7g/snmp.c 2010-08-31 20:18:58.000000000 -0400
+@@ -499,13 +499,9 @@
+ size_t out_len = 0;
+
+ if ((buf = (u_char *) calloc(buf_len, 1)) != 0) {
+- if (sprint_realloc_value(&buf, &buf_len, &out_len, 1,
+- objid, objidlen, variable)) {
++ sprint_realloc_by_type(&buf, &buf_len, &out_len, 1, variable,
NULL, NULL, NULL);
+ snprintf(obuf, buf_len, "%s", buf);
+ }else{
+- snprintf(obuf, buf_len, "%s [TRUNCATED]", buf);
+- }
+- }else{
+ SET_UNDEFINED(obuf);
+ }
+
+@@ -528,6 +524,7 @@
+ int i;
+ int array_count;
+ int index_count;
++ char temp_result[RESULTS_BUFFER];
+
+ struct nameStruct {
+ oid name[MAX_OID_LEN];
+@@ -570,11 +567,13 @@
+ for(i = 0; i < num_oids && vars; i++) {
+ if
(!IS_UNDEFINED(snmp_oids[i].result)) {
+ #ifdef USE_NET_SNMP
+-
snmp_snprint_value(snmp_oids[i].result, RESULTS_BUFFER, vars->name,
vars->name_length, vars);
++
snmp_snprint_value(temp_result, RESULTS_BUFFER, vars->name,
vars->name_length, vars);
+ #else
+-
sprint_value(snmp_oids[i].result, vars->name, vars->name_length, vars);
++ sprint_value(temp_result,
vars->name, vars->name_length, vars);
+ #endif
+
++ snprintf(snmp_oids[i].result,
RESULTS_BUFFER, "%s", trim(temp_result));
++
+ vars = vars->next_variable;
+ }
+ }
+diff -ruBbd cacti-spine-0.8.7g.old/spine.c cacti-spine-0.8.7g/spine.c
+--- cacti-spine-0.8.7g.old/spine.c 2010-07-09 17:39:53.000000000 -0400
++++ cacti-spine-0.8.7g/spine.c 2010-08-31 20:18:58.000000000 -0400
+@@ -94,6 +94,7 @@
+ int num_hosts = 0;
+ int active_threads = 0;
+ int active_scripts = 0;
++int thread_ready = FALSE;
+
+ config_t set;
+ php_t *php_processes = 0;
+@@ -134,7 +135,7 @@
+ int poller_counter = 0;
+ int last_active_threads = 0;
+ int valid_conf_file = FALSE;
+- long int EXTERNAL_THREAD_SLEEP = 5000;
++ long int EXTERNAL_THREAD_SLEEP = 50;
+ long int internal_thread_sleep;
+ char querybuf[BIG_BUFSIZE], *qp = querybuf;
+ char *host_time = NULL;
+@@ -196,6 +197,7 @@
+
+ /* we attempt to support scripts better in cygwin */
+ #if defined(__CYGWIN__)
++ setenv("CYGWIN", "nodosfilewarning", 1);
+ if (file_exists("./sh.exe")) {
+ set.cygwinshloc = 0;
+ printf("NOTE: The Shell Command Exists in the current
directory\n");
+@@ -281,7 +283,7 @@
+
+ else if (STRMATCH(arg, "-H") ||
+ STRIMATCH(arg, "--hostlist")) {
+- snprintf(set.host_id_list, BIG_BUFSIZE, getarg(opt,
&argv));
++ snprintf(set.host_id_list, BIG_BUFSIZE, "%s",
getarg(opt, &argv));
+ }
+
+ else if (STRMATCH(arg, "-h") ||
+@@ -584,6 +586,11 @@
+ poller_details->host_data_ids = itemsPT;
+ poller_details->host_time = host_time;
+
++ /* this variable tells us that the child had
loaded the poller
++ * poller_details structure and we can move
on to the next thread
++ */
++ thread_ready = FALSE;
++
+ /* create child process */
+ thread_status =
pthread_create(&threads[device_counter], &attr, child, poller_details);
+
+@@ -596,6 +603,11 @@
+ }
+ active_threads++;
+
++ /* wait for the child to read
and process the structure */
++ while (!thread_ready) {
++
usleep(internal_thread_sleep);
++ }
++
+ SPINE_LOG_DEBUG(("DEBUG: The
Value of Active Threads is %i", active_threads));
+
+ break;
+@@ -603,7 +615,7 @@
+ SPINE_LOG(("ERROR: The System
Lacked the Resources to Create a Thread"));
+ break;
+ case EFAULT:
+- SPINE_LOG(("ERROR: The Thread
or Attribute Was Invalid"));
++ SPINE_LOG(("ERROR: The Thread
or Attribute were Invalid"));
+ break;
+ case EINVAL:
+ SPINE_LOG(("ERROR: The Thread
Attribute is Not Initialized"));
+@@ -613,6 +625,8 @@
+ break;
+ }
+
++ thread_mutex_unlock(LOCK_THREAD);
++
+ /* get current time and exit program if time
limit exceeded */
+ if (poller_counter >= 20) {
+ current_time = get_time_as_double();
+diff -ruBbd cacti-spine-0.8.7g.old/spine.h cacti-spine-0.8.7g/spine.h
+--- cacti-spine-0.8.7g.old/spine.h 2010-07-09 17:39:53.000000000 -0400
++++ cacti-spine-0.8.7g/spine.h 2010-08-31 20:18:58.000000000 -0400
+@@ -504,5 +504,6 @@
+ extern char start_datetime[20];
+ extern char config_paths[CONFIG_PATHS][BUFSIZE];
+ extern int active_threads;
++extern int thread_ready;
+
+ #endif /* not _SPINE_H_ */
+diff -ruBbd cacti-spine-0.8.7g.old/util.c cacti-spine-0.8.7g/util.c
+--- cacti-spine-0.8.7g.old/util.c 2010-07-09 17:39:53.000000000 -0400
++++ cacti-spine-0.8.7g/util.c 2010-08-31 20:18:58.000000000 -0400
+@@ -755,7 +755,7 @@
+ /* empty string is not all digits */
+ if ( *string == '\0' ) return FALSE;
+
+- while ( isdigit(*string) )
++ while ( isdigit((int)*string) )
+ string++;
+
+ return *string == '\0';
+@@ -773,7 +773,7 @@
+ */
+ int is_ipaddress(const char *string) {
+ while (*string) {
+- if ((isdigit(*string)) ||
++ if ((isdigit((int)*string)) ||
+ (*string == '.') ||
+ (*string == ':')) {
+ string++;
+@@ -887,7 +887,7 @@
+ i = strlen(string);
+
+ while (i >= 0) {
+- if (isdigit(string[i])) {
++ if (isdigit((int)string[i])) {
+ break;
+ }else{
+ string[i] = '\0';
+@@ -898,17 +898,15 @@
+ return string;
+ }
+
+-/*! \fn char *add_slashes(char *string, int arguments_2_strip)
+- * \brief change all backslashes to forward slashes for the first n
arguements.
++/*! \fn char *add_slashes(char *string)
++ * \brief add escaping to back slashes on for Windows type commands.
+ * \param string the string to replace slashes
+- * \param arguments_2_strip the number of space delimited arguments to
reverse
+ *
+ * \return a pointer to the modified string. Variable must be freed by
parent.
+ *
+ */
+-char *add_slashes(char *string, int arguments_2_strip) {
++char *add_slashes(char *string) {
+ int length;
+- int space_count;
+ int position;
+ int new_position;
+ char *return_str;
+@@ -919,9 +917,8 @@
+ return_str[0] = '\0';
+
+ length = strlen(string);
+- space_count = 0;
+ position = 0;
+- new_position = position;
++ new_position = 0;
+
+ /* simply return on blank string */
+ if (!length) {
+@@ -931,17 +928,9 @@
+ while (position < length) {
+ /* backslash detected, change to forward slash */
+ if (string[position] == '\\') {
+- /* only add slashes for first x arguments */
+- if (space_count < arguments_2_strip) {
+- return_str[new_position] = '/';
+- }else{
+- return_str[new_position] = string[position];
+- }
+- /* end of argument detected */
+- }else if (string[position] == ' ') {
+- return_str[new_position] = ' ';
+- space_count++;
+- /* normal character detected */
++ return_str[new_position] = '\\';
++ new_position++;
++ return_str[new_position] = '\\';
+ }else{
+ return_str[new_position] = string[position];
+ }
+@@ -1248,7 +1237,7 @@
+ seteuid(0);
+
+ if (geteuid() != 0) {
+- SPINE_LOG_DEBUG(("WARNING: Spine NOT running asroot. This is
require if using ICMP. Please run \"chmod +s;chown root:root spine\" to
resolve."));
++ SPINE_LOG_DEBUG(("WARNING: Spine NOT running asroot. This is
required if using ICMP. Please run \"chmod +s;chown root:root spine\" to
resolve."));
+ set.icmp_avail = FALSE;
+ }else{
+ SPINE_LOG_DEBUG(("DEBUG: Spine is running asroot."));
+diff -ruBbd cacti-spine-0.8.7g.old/util.h cacti-spine-0.8.7g/util.h
+--- cacti-spine-0.8.7g.old/util.h 2010-07-09 17:39:53.000000000 -0400
++++ cacti-spine-0.8.7g/util.h 2010-08-31 20:18:58.000000000 -0400
+@@ -54,7 +54,7 @@
+ extern int is_hexadecimal(const char * str, const short ignore_space);
+
+ /* string and file functions */
+-extern char *add_slashes(char *string, int arguments_2_strip);
++extern char *add_slashes(char *string);
+ extern int file_exists(const char *filename);
+ extern char *strip_alpha(char *string);
+ extern char *strncopy(char *dst, const char *src, size_t n);



  • [SM-Commit] GIT changes to master grimoire by Vlad Glagolev (1bc1883675ae335bd44dc93b793120631233828d), Vlad Glagolev, 12/10/2010

Archive powered by MHonArc 2.6.24.

Top of Page