~ubuntu-branches/debian/stretch/jffnms/stretch

« back to all changes in this revision

Viewing changes to docs/upgrade/jffnms-0.9.2-to-0.9.3.patch

  • Committer: Package Import Robot
  • Author(s): Craig Small
  • Date: 2012-05-27 17:25:29 UTC
  • mfrom: (1.1.9)
  • Revision ID: package-import@ubuntu.com-20120527172529-w0bkk0qo3jz8vkhx
Tags: 0.9.3-1
* New upstream release
* Adjusted configurations for new apache standard Closes: #669853
* Removed orphan files Closes: #672385
* Generate valid DB config
* Fixup default config files Closes: #655654

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/BUGS jffnms-0.9.3/BUGS
 
2
--- ../jffnms-0.9.2/BUGS        2012-03-04 13:43:13.000000000 +1100
 
3
+++ jffnms-0.9.3/BUGS   1970-01-01 10:00:00.000000000 +1000
 
4
@@ -1,18 +0,0 @@
 
5
-If your find a bug please report it at sourceforge.net
 
6
-
 
7
-1. Mailing-List:
 
8
-
 
9
-    jffnms-users@lists.sourceforge.net
 
10
-        
 
11
-    Archives:
 
12
-       http://marc.theaimsgroup.com/?l=jffnms-users 
 
13
-       or 
 
14
-       http://lists.sourceforge.net/lists/listinfo/jffnms-users
 
15
-       or
 
16
-       http://www.mail-archive.com/jffnms-users@lists.sourceforge.net/
 
17
-
 
18
-2. Forums :
 
19
-    http://sourceforge.net/forum/?group_id=46041
 
20
-    
 
21
-3. Bugs:
 
22
-    http://sourceforge.net/tracker/?atid=444844&group_id=46041&func=browse
 
23
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/Changelog jffnms-0.9.3/Changelog
 
24
--- ../jffnms-0.9.2/Changelog   2012-03-04 13:43:13.000000000 +1100
 
25
+++ jffnms-0.9.3/Changelog      1970-01-01 10:00:00.000000000 +1000
 
26
@@ -1,1854 +0,0 @@
 
27
-JFFNMS 0.9.2
 
28
-============
 
29
-       * really save config file
 
30
-       * engines run with unset repeat values
 
31
-       * Fixed profile update so it works
 
32
-       * Interface selector can select multiple interfaces again
 
33
-       * config save fixes to reduce warnings
 
34
-       * Changed all php short tags to full ones
 
35
-       * Check for existance of some snmp functions that are not in windows
 
36
-       * Update to pass syntax for PHP version 5.4
 
37
-
 
38
-
 
39
-JFFNMS 0.9.1
 
40
-============
 
41
-       * SNMP trap receiver table can be edited with poller_backends
 
42
-       * poller backend select fixed
 
43
-       * Consolidater default repeat value set
 
44
-       * check for array to silence error message when array not set
 
45
-       * Config page saves config file and renames it
 
46
-       * Interface selector has some height
 
47
-
 
48
-JFFNMS 0.9.0
 
49
-============
 
50
-       * Fixed error in syslog consolidator which fails for postgresql
 
51
-       * All webpage input passes through Sanitizer
 
52
-       * register_globals no longer needs to be turned on, so turn it off!
 
53
-       * rrdtool v1.0 support dropped
 
54
-       * lots of cleanup
 
55
-       * poller rewritten with parent/child code
 
56
-       * autodiscovery the same as poller
 
57
-       * Removed php rrd module support
 
58
-       * Interface auto-discovery will check sysobjid before trying discovery
 
59
-       * IPv6 reachability support
 
60
-       * Separated interface selector code
 
61
-       * SNMP interfaces can have High Speed and optinally no Cisco proxy ping
 
62
-
 
63
-JFFNMS 0.8.5
 
64
-============
 
65
-       * Fixed traffic graph
 
66
-       * Commented out logfile checking
 
67
-       * postgresql schema uses mysqldump compat mode
 
68
-       * Adjusted build script to make cleaner tar files
 
69
-       * Change logfile column name offset to file_offset for pgsql
 
70
-       * Cleaned up some more code so STRICT complains less
 
71
-
 
72
-JFFNMS 0.8.4 Released 2009-10-05
 
73
-================================
 
74
-       * tcp_status poller only returns ascii data
 
75
-       * Config script redirects to https url if called that way
 
76
-       * Added security patches as per Debian security patch 20_security
 
77
-       * Above Closes SF:1725069
 
78
-       * blentz patch for Dell OpenManage Fans and Tempeature added SF:1633506
 
79
-       * Removed non-free font and change code to handle no font present
 
80
-       * Started on logfile reading
 
81
-       * UPS poller now can work with Mitsubishi Diamondlink devices
 
82
-       * APC PDU support - this and above patch from falz
 
83
-       * Added support for IBM Blades, IBM Servers, IBM DS4XXX controllers,
 
84
-         generic Fibre Channel - All from David Lima
 
85
-       * Informant-Advanced logical disk support added - From Sebastian van Dijk
 
86
-       * Network UPS Tool support added
 
87
-       * import_custom.php fixed for multiple fields in same table
 
88
-       * Host MIB Apps can be case-insensitive checking
 
89
-
 
90
-JFFNMS 0.8.3 Released 2006-09-16
 
91
-================================
 
92
-When other people are involved is noted if not it was me: Javier Szyszlican.
 
93
-
 
94
-* New Features:
 
95
-
 
96
-    - Support for RRDTool 1.2.x
 
97
-       - Escapes : in COMMENT statements (Reported by: Aaron Daubman <daubman |a|t| gmail |d|o|t| com>)
 
98
-       - Uses LucidaTypewriter font so the graphs are about the same as with RRDTool 1.0.x
 
99
-
 
100
-    - Storage device interface type now tracks index changes (like when adding a USB drive) or restarting the Agent
 
101
-       
 
102
-    - OS/400 Interface type with CPU Utilization graph
 
103
-       By: David LIMA <DLIMA |a|t| fr |d|o|t| scc |d|o|t| com>
 
104
-
 
105
-    - Per-Host CPU Threshold for Cisco and Linux/Unix hosts
 
106
-       By: David LIMA <DLIMA |a|t| fr |d|o|t| scc |d|o|t| com>
 
107
-       
 
108
-    - Initial Dell OpenManager Interface type (only general alarm for now)
 
109
-       By: Ben Lentz <blentz |a|t| channing-bete |d|o|t| com> and David LIMA <DLIMA@fr |d|o|t| scc |d|o|t| com>
 
110
-
 
111
-* Bug Fixes:
 
112
-
 
113
-    - Apache Discovery now has a 10 seconds timeout.
 
114
-       by: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
115
-       
 
116
-    - Install guide includes cron.allow and new tmpwatch and pcntl dependencies
 
117
-       Reported by: Joel Harrison <joel_harrison |a|t| bankone |d|o|t| com>
 
118
-       
 
119
-    - New Installation guide for Windows
 
120
-       By: Fabricio Castro <Fabricio |d|o|t| Castro |a|t| valueadd |d|o|t| com |d|o|t| br>
 
121
-    
 
122
-    - Host name field now is bigger
 
123
-       Reported by: Emmanuel Doguet <stage2 |a|t| tbs-internet |d|o|t| com>
 
124
-    
 
125
-    - crontab example now has only one Autodiscovery enabled (old one)
 
126
-       Reported by: Cody Holland <cody |d|o|t| holland |a|t| gmail |d|o|t| com>
 
127
-    
 
128
-    - Changed some tables to avoid MySQL 5.x keywords ('condition')
 
129
-       Fixed by: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
130
-    
 
131
-    - NAD now works in PostgreSQL
 
132
-    
 
133
-    - Cisco CC TFTP copy now works even with the MIBs loaded
 
134
-       Fixed by: Nick Korosi <nkorosi |a|t| sbcglobal |d|o|t| net>
 
135
-    
 
136
-    - NTP Client GPS support
 
137
-    
 
138
-    - TCP Port Status now supports hosts with a different SNMP port
 
139
-       Reported by: Tim Nelson <tnelson |a|t| utaria |d|o|t| net>
 
140
-    
 
141
-    - tmpwatch.sh script should work in most Unices now
 
142
-       Fixed by: Aaron Daubman <daubman |a|t| gmail |d|o|t| com>
 
143
-
 
144
-    - RRDTool will not use the Pipe system when the command line is bigger than 1000 characters
 
145
-       Fixed by: Aaron Daubman <daubman |a|t| gmail |d|o|t| com>
 
146
-    
 
147
-    - Added PortChannel link type to NAD
 
148
-    
 
149
-    - SNMP Traps Backend GUI now works
 
150
-       Fixed by: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
151
-    
 
152
-    - Timezone removed from PostgreSQL Date results
 
153
-       Reported by: MOYA Yves <MOYA |a|t| ifb-france |d|o|t| com>
 
154
-
 
155
-    - Changed state field in alarm_states to int (10)
 
156
-       Reported by: frederic Vay <frederic |d|o|t| vay |a|t| e-qual |d|o|t| fr>
 
157
-
 
158
-    - HostMIB interfaces on Windows paths with Non-Printable characters were not correctly handled
 
159
-    
 
160
-    - Fixed RRDTool grapher to skip empty array items causing problems with some RRDTool versions
 
161
-       By: Sebastien Namche <sebastien |d|o|t| nameche |a|t| netensia |d|o|t| fr>
 
162
-
 
163
-    - Added blocked_devices to storage discovery to avoid problems on MacOSX with /dev and /.vol
 
164
-
 
165
-
 
166
-JFFNMS 0.8.2 Released 2005-05-09
 
167
-================================
 
168
-
 
169
-*New Features:
 
170
-
 
171
-    - Host MIB hrSensor support, tested under net-snmp with lm_sensors patch. 
 
172
-       It can graph Temperature, Voltages and Fan's RPM.
 
173
-       Requested by: Michael Fuereder <Michael |d|o|t| Fuereder |a|t| ooe |d|o|t| gv |d|o|t| at>
 
174
-
 
175
-    - New SNMP Trap handler. It uses plugins (receivers) to parse the traps and send them to backends.
 
176
-       It provides a more flexible system for SNMP Trap processing.
 
177
-       By: Erno Rigo <mcree |a|t| tricon |d|o|t| hu>
 
178
-
 
179
-    - SystemMIB Name, Contact and Location added to the Windows, Linux, Solaris, Cisco and Alteon System informantion interface types.
 
180
-       This information is also tracked via AD so you will be notified of any change.
 
181
-       Sponsored by: John Wagrowski <wagrowski |a|t| morainevalley |d|o|t| edu> of Moraine Valley Community College
 
182
-       
 
183
-    - UPS MIB support, this should enable support for the Riello UPS or any other that implements the UPSMIB. 
 
184
-       Sponsored by: Novikmec Jozef <Jozef |d|o|t| Novikmec |a|t| zentiva |d|o|t| cz> of Zentiva
 
185
-
 
186
-    - Linux IPTables Chain support. This Interface type will graph the IPTables build-in chains bytes and packets.
 
187
-       By: Hans Peter Dittler <hpdittler |a|t| braintec-consult |d|o|t| de>
 
188
-       
 
189
-    - Cisco BGP Neighbor Routes graphing. This will only work with Cisco IOS version 12.0(26)S or later.
 
190
-       Request and info from: Fabiano Rodrigo Boscatto <fabiano |d|o|t| boscatto |a|t| pucpr |d|o|t| br> and Jade JDeane@sungardfutures |d|o|t| com
 
191
-       
 
192
-    - Cisco PIX support, Number of connections graph included.
 
193
-       By: Mario Spendier <mario |d|o|t| spendier |a|t| at |d|o|t| flextronics |d|o|t| com>
 
194
-
 
195
-    - Windows SNMP Informant Logical Disk Interface Type, offer Windows Disk Usage stats.
 
196
-       by: David Lima <DLIMA |a|t| fr |d|o|t| scc |d|o|t| com>
 
197
-
 
198
-    - Cisco NAT support, Active Binds and Input/Output packets graph by protocol (UDP, TCP, ICMP, Others).
 
199
-       By: Karl S |d|o|t|  Hagen <khagen |a|t| greyhelm |d|o|t| com>
 
200
-       
 
201
-    - Support for PHP snmp2_* functions.
 
202
-       By: Karl S |d|o|t|  Hagen <khagen |a|t| greyhelm |d|o|t| com>
 
203
-
 
204
-    - The host_information discovery script now tries to discovery how many CPUs the host has.
 
205
-
 
206
-    - Added Alarmed Hosts & Events to the Default View profile option values.
 
207
-
 
208
-    - Added PIX Event and PIX Port to the PIX filter
 
209
-    
 
210
-    - Added Cisco ISDN Syslog Events
 
211
-       Requested by: Roberto Veiga <roberto |a|t| veiga |d|o|t| biz>
 
212
-
 
213
-    - Included the "simple" discovery script, takes a Test OID and an interface name as parameter and returns an interface
 
214
-       if the OID is available.
 
215
-       
 
216
-    - Compaq Temperature Graph can be displayed in Fahrenheit now
 
217
-       Requested by: Chad Markley <cmarkley |a|t| markleytech |d|o|t| com>
 
218
-
 
219
-*Fixes:
 
220
-
 
221
-    - Start Page alarms now exclude the hidden interfaces, so now the number matches what is seen in the interfaces screen.
 
222
-       Reported by: Chris Hammond <chris |a|t| tac |d|o|t| esi |d|o|t| net>
 
223
-
 
224
-    - Rechability interface information is correctly tracked now if the Host IP changes.
 
225
-       Reported by: Travis Johnson <tlj |a|t| ida |d|o|t| net>
 
226
-
 
227
-    - The cpu_util no longer users the number of cpus to scale the graph, since the only ones using this are the Cisco System Info,
 
228
-       and the Windows System info, which we do an average of the CPU usage of all the CPUs, so the MAX is still 100%.
 
229
-       Reported by: David Lima <DLIMA |a|t| fr |d|o|t| scc |d|o|t| com>
 
230
-
 
231
-    - The jffnms-snmp system (for tc and iptables) now uses the pass_persist call in snmpd.conf please re check your configuration.
 
232
-       Reported by: Hans Peter Dittler <hpdittler |a|t| braintec-consult |d|o|t| de>
 
233
-
 
234
-    - SNMPv2 GET now handles multi-line strings correctly.
 
235
-       Reported by: Manoj Khabe <khabemanoj |a|t| yahoo |d|o|t| com>
 
236
-
 
237
-    - is_process_running() function now works fine on BSDs, changed "ps -eo args" to "ps axo args".
 
238
-       Fixed by: Chris Cappuccio <chris |a|t| nmedia |d|o|t| net>
 
239
-
 
240
-    - Disabled ordering in edit mode.
 
241
-
 
242
-    - Triggers Users filter by user when used by a User Admin.
 
243
-
 
244
-    - Trigger analizer now again honors the default "from" field from the trigger definition, if the trigger action parameter is not set.
 
245
-    
 
246
-    - PIX Syslog messages should match better now, removed the ^ in the regexps
 
247
-       Reported by: GuruLeeNyc <guruleenyc |a|t| charter |d|o|t| net>
 
248
-
 
249
-    - Its now possible to ack a lot of events with one click.
 
250
-       Reported by: GuruLeeNyc <guruleenyc |a|t| charter |d|o|t| net>
 
251
-
 
252
-    - Alteon Polling and Syslog Fixes
 
253
-       By: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
254
-
 
255
-    - Poller2 and NAD now work with PostgreSQL.
 
256
-
 
257
-    - Zone and Map trigger fields work again.
 
258
-       Reported by: Karl S |d|o|t|  Hagen <khagen |a|t| greyhelm |d|o|t| com>
 
259
-
 
260
-    - Windows Security events work better now.
 
261
-       Reported By: Brian Hoban <Bhoban |a|t| generalrevenue |d|o|t| com>      Fixed by: LIMA David <DLIMA@fr |d|o|t| scc |d|o|t| com>
 
262
-
 
263
-JFFNMS 0.8.1 Released 2005-03-07
 
264
-================================
 
265
-
 
266
-*New Features:
 
267
-
 
268
-    - New View: Alarmed Hosts & Events. It will only show the alarmed hosts screen and the events frame.
 
269
-    
 
270
-    - Windows Syslog Install Guide
 
271
-       by: Ruud Hop <ruud |d|o|t| hop |a|t| syntec |d|o|t| nl>
 
272
-
 
273
-    - Added 2 - 24 hours Poller Interval options.
 
274
-       Requested by: Jade <JDeane |a|t| sungardfutures |d|o|t| com>
 
275
-       
 
276
-    - Added Link to the Aggregated graph, useful to show only that.
 
277
-    
 
278
-    - Added Host Name to the State Reports screen.
 
279
-       Requested by: Mario Spendier <Mario |d|o|t| Spendier |a|t| at |d|o|t| flextronics |d|o|t| com>
 
280
-    
 
281
-*Fixes:
 
282
-
 
283
-    - The events_latest_max config option is back, this was causing slowdowns in the events screen.
 
284
-       Reported by: Travis Johnson <tlj |a|t| ida |d|o|t| net>
 
285
-    
 
286
-    - Syslog matching of messages that contain the work "Unknown" now works again.
 
287
-       Reported by: David Lima <DLIMA |a|t| fr |d|o|t| scc |d|o|t| com>
 
288
-
 
289
-    - New Poller now polls the host in order to avoid gaps in the graphs when using a low number of threads,
 
290
-       starts threads in groups of 5 so it can start working earlier and there were some speedups in the 
 
291
-       next-host-to-poll finder.
 
292
-       Reported by: Travis Johnson <tlj |a|t| ida |d|o|t| net>
 
293
-    
 
294
-    - User deletion works again.
 
295
-       Reported by: Thomas Mangin <thomas |d|o|t| mangin |a|t| exa-networks |d|o|t| co |d|o|t| uk>
 
296
-    
 
297
-    - Logged in Customers can use the calendar page now.
 
298
-       Reported by: ChakraPani <chakra_funny |a|t| yahoo |d|o|t| com>
 
299
-       
 
300
-    - Physical interfaces now show the correct bandwidth instead of 128k, 
 
301
-       it was caused by a parsing error in the snmp response.
 
302
-       Reported by: Balu <nbkr |a|t| indiatimes |d|o|t| com>
 
303
-
 
304
-    - Matching of Client for Events Triggers now works.
 
305
-       Fixed by: Hans Peter Dittler <hpdittler |a|t| braintec-consult |d|o|t| de>
 
306
-
 
307
-    - Logging file name fixed when using logger() from a web page. Now we use $_SERVER["SCRIPT_NAME"].
 
308
-       Reported by: Eugene Turovsky <john |a|t| igtel |d|o|t| ru> & Min Qiu <mqiu@pop2pop |d|o|t| com>
 
309
-
 
310
-    - Removed Totals section from the Aggregated Traffic graph, because its giving real values.
 
311
-       Reported by: Eugene Turovsky <john |a|t| igtel |d|o|t| ru>
 
312
-       
 
313
-    - Remove the SNMPv2c option if we're running on a Windows Host, because there is no support for SNMPv2 on it.
 
314
-    
 
315
-    - Events and Map refresh intervals from the User Profile work again.
 
316
-       Reported by: Renegade <guruleenyc |a|t| charter |d|o|t| net>
 
317
-
 
318
-    - Titles with \r\n were causing problems in the RRD Graphs.
 
319
-       Reported by: Chris Zimmerman <chris |d|o|t| zimmerman |a|t| fnf |d|o|t| com>
 
320
-       
 
321
-    - Using lots of interfaces in the DHTML maps were generating a long scroll, 
 
322
-       now they go to a new row at the end of the visible screen.
 
323
-       Reported by: Jason Humes <jhumes |a|t| acs |d|o|t| on |d|o|t| ca>
 
324
-
 
325
-    - SNMPv2 SETs were not returning a bool value and causing problems with CISCO Ping-MIB. 
 
326
-       Reported by: Jose Amengual & Javier Reyes <javier |d|o|t| reyes |a|t| telmex |d|o|t| com>
 
327
-       
 
328
-    - Cisco SYSMIB config transfer had a very, very long timeout. Now it waits around 4 to 8 seconds.
 
329
-       Reported by: Johan <johan30 |a|t| easynet |d|o|t| be>
 
330
-
 
331
-    - Fixed Cisco SAA Agent poller to work correctly with the new SNMP API.
 
332
-       Reported by: Jose Amengual & Javier Reyes <javier |d|o|t| reyes |a|t| telmex |d|o|t| com>
 
333
-
 
334
-
 
335
-JFFNMS 0.8.0 Released 2005-02-15
 
336
-================================
 
337
-
 
338
-*New Features:
 
339
-
 
340
-    .API:
 
341
-    -----
 
342
-    
 
343
-    - New Launcher thread manager, its a generic way to handle item processing to child process, 
 
344
-       while keeping the load down. It will launch a fixed number of threads and send them work.
 
345
-       Requested by: Travis Johnson <tlj |a|t| ida |d|o|t| net>
 
346
-    
 
347
-    - New Poller using the new launcher.  (poller2.php)
 
348
-       Its simpler than the old poller (which is kept for some features like DMII and Satellite that are 
 
349
-       not implemented here). This is still experimental and only works in Unix.
 
350
-       
 
351
-    - Network Autodiscovery.
 
352
-       Allows you to add 1 or more seed networks and snmp communities to a zone, and when the daemon runs,
 
353
-       it will discover the devices in that network and in attached networks. This is very useful to add
 
354
-       a lot of hosts easily. Experimental Too.
 
355
-
 
356
-    - Support for SNMPv2 and SNMPv3, Including 64 bits counters.
 
357
-       For SNMPv1 and SNMPv3 we are using the integrated PHP functions and for SNMPv2 we are calling the
 
358
-       net-snmp executables (snmpget, snmpwalk and snmpset) that is a little slow, but it works.
 
359
-       When using SNMPv2 or v3, the 64 bit OIDs will be used automatically for input and output, 
 
360
-       bytes and packet coutners.
 
361
-       Requested by: A lot of people
 
362
-
 
363
-    - New Backend Configuration Format, uses one defaults file (conf/jffnms.conf.defaults) and
 
364
-       one user-config file (conf/jffnms.conf) for easier automated upgrades.
 
365
-       JFFNMS should automatically upgrade from the old config system (conf/config.ini) to the new format.
 
366
-       Requested by: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
367
-
 
368
-    - APC UPS Monitoring: Autodiscovery, Status Alerts, Load, Capacity, Voltage (in/out), Time Remaining and Temperature Graphs. 
 
369
-       Requested by: Travis Johnson <tlj |a|t| ida |d|o|t| net> and Novikmec Jozef <Jozef |d|o|t| Novikmec@zentiva |d|o|t| cz>
 
370
-        
 
371
-    - Nth Percentile graphing support. (Like 95th percentile graphing).
 
372
-       This is configured per-interfaces and allows you to specify the Nth percentil you want.
 
373
-       A New line will be shown in the traffic graph.
 
374
-       Requested by: Richard Sears <rsears |a|t| adnc |d|o|t| com> and Paul Matuszewski <paul@inofficenetworks |d|o|t| com>
 
375
-
 
376
-    - Alteon AD3 monitoring
 
377
-       Monitors system, real and virtual servers and real services, Graphs for bytes, session rate and current value,
 
378
-       Alarms when servers or services go down, Fixes problem with physical ports all having the same name.
 
379
-       By: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
380
-                 
 
381
-    - Brocade Fibre Switch monitoring
 
382
-       Monitors temperature and fan sensors, Graphs temperature or fan speed, Monitors FC ports,
 
383
-       Graphs traffic by bits or frames.
 
384
-       By: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
385
-
 
386
-    - Cisco AS 5300
 
387
-       Count the number of Async or DSX1 lines used by an access switch removing the D channel.
 
388
-       Should work with all Cisco Routers with an E1/T1 connection to a Telco.
 
389
-       By: Thomas Mangin <thomas |d|o|t| mangin |a|t| exa-networks |d|o|t| co |d|o|t| uk>
 
390
-       
 
391
-    - New SQL Query Interface Type. 
 
392
-       It uses ODBC to query any database and graph the number of rows returned by the specified query.
 
393
-       Also includes Min/Max limit alerting.
 
394
-       Requested by: Daniel Afonso <dafonso |a|t| afonsoconsulting |d|o|t| com>
 
395
-
 
396
-    - New Interfaces Autodiscovery using the new launcher, replaced the old autodiscovery under the same name, all features re-implemented.
 
397
-
 
398
-    - Managed RRDtool: one RRDtool process is called by each poller and we use the open connection to multiple operations,
 
399
-       reducing the fork load. Only works on Unix.
 
400
-
 
401
-    - New Host fields: Creation, Modification, Last Poll Date and Last Poll duration Time, useful for debugging.
 
402
-
 
403
-    - Cisco PIX syslog events matching and filtering.
 
404
-       By: David Lima <DLIMA |a|t| fr |d|o|t| scc |d|o|t| com>
 
405
-       
 
406
-    .GUI: 
 
407
-    -----
 
408
-
 
409
-    - Complete GUI redesign using HTML 4.01 and CSS, known as DHTML. 
 
410
-
 
411
-       If you want to modify how JFFNMS looks you can use your own CSS file, check the 'Custom CSS' Setup option.
 
412
-       
 
413
-       Too many changes to describe them all, you have to see them for yourself. 
 
414
-
 
415
-    - New Logo
 
416
-       
 
417
-    - Interface Selector: we now use a popup system to show the selected group interfaces, making it possible
 
418
-       to select some interfaces from more than one group at the same time. Its also hiddable.
 
419
-       And when in Customer or Map Filtered mode, you can still select by host.
 
420
-       
 
421
-       Requested by: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>, Jason Humes <jhumes@acs |d|o|t| on |d|o|t| ca>, and others |d|o|t| 
 
422
-
 
423
-    - Faster Tools system, now will need to ask for a specific or specifics values, no more load-all-on-start. 
 
424
-       Requested by: TIBA Staff <ip |a|t| tiba |d|o|t| com>
 
425
-               
 
426
-    - New Standard Administration Features:
 
427
-       - Add without insert
 
428
-       - Discard Save
 
429
-       - Export to ASCII Table
 
430
-       - Filter by Field 
 
431
-       - Sort by Field
 
432
-
 
433
-       - New Administration Menu
 
434
-           Now its vertical on the right side of the screen, and its hiddable.
 
435
-               
 
436
-    - View Type (DHTML, text, etc)  saved in a Session Cookie.
 
437
-       So it will keep your selection until you change it or you logout, and it will get back to your default.
 
438
-       Requested By: falz <darkfalz |a|t| gmail |d|o|t| com>
 
439
-
 
440
-    - Option to hide a complete Zone from the interfaces view.
 
441
-       Requested by: Chris Hammond <chris |a|t| tac |d|o|t| esi |d|o|t| net>
 
442
-
 
443
-    - Events ACK, now its easier, just click on the blinking red dot.
 
444
-    
 
445
-    - View Performance: 
 
446
-       - CSV Export of the Input/Output value on Physical interfaces, including Nth percentile calculation.
 
447
-       - Allows hidding of the options box so you will get more space.
 
448
-       
 
449
-    - Better Events RSS output, now its RSS 2.0, tests with Mozilla Live Bookmarks
 
450
-       Used as: http://yourserver/jffnms/events.php?view_type=rss&user=admin&pass=admin
 
451
-    
 
452
-    .DOC:
 
453
-    -----
 
454
-       
 
455
-    - New UNIX Install Instructions using a 'jffnms' user, that way we don't need the system crontab anymore.
 
456
-
 
457
-*Fixed Bugs:
 
458
-
 
459
-    - Interface Map sort order fixed, using SORT_NUMERIC for the interface field now.
 
460
-       Reported by: Kelly Hamlin <k |d|o|t| hamlin |a|t| t3com |d|o|t| com>
 
461
-
 
462
-    - Events Interface Filter, now matches *INTERFACE instead of *INTERFACE*
 
463
-       Reported by: Durga Prasad <datasoftindia |a|t| gmail |d|o|t| com>
 
464
-
 
465
-    - Reachablity interface now works when using a host with : in the IP (useful for snmp agents on different ports).
 
466
-       Reported By: Manoj Khabe <khabemanoj |a|t| yahoo |d|o|t| com>
 
467
-
 
468
-    - IF-MIB discovery now works when the host IP is a DNS name.
 
469
-       Reported by: David Lima <DLIMA |a|t| fr |d|o|t| scc |d|o|t| com>
 
470
-
 
471
-    - Setup screen works correctly under SSL now.
 
472
-
 
473
-    - Windows Event Log Syslog events fixes.
 
474
-       By: David Lima <DLIMA |a|t| fr |d|o|t| scc |d|o|t| com>
 
475
-
 
476
-    - Fixed NTP poller bug when you have a Stratum 0 device connected locally.
 
477
-       Reported By: Karl S |d|o|t|  Hagen <khagen |a|t| greyhelm |d|o|t| com>
 
478
-
 
479
-    - Cisco SEC-6-IPACCESSLOGDP syslog rule fixed.
 
480
-       By: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
481
-
 
482
-    - Maps order fixed. Now its by Map Name, not ID.
 
483
-       Reported by: Kelly Hamlin <k |d|o|t| hamlin |a|t| t3com |d|o|t| com>    
 
484
-
 
485
-    - Better Linux Syslog matching.
 
486
-       With help from: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
487
-       
 
488
-    - Removed Consolidate Events->Alarms item limit.
 
489
-    
 
490
-    - Syslog message matching fixes: now its case-insensitive and has better handling of old/simple match strings, and
 
491
-       has better handling of not-matching hosts.
 
492
-
 
493
-    - NTP discovery and poller do not output errors now.
 
494
-
 
495
-    - Removed support for old UCD-SNMP 4.x
 
496
-    
 
497
-    - Old experimental poller removed.
 
498
-
 
499
-    - Apache Poller now works with Apache 1.3.x
 
500
-
 
501
-    - Fixed CatOS interface naming
 
502
-       Reported by: falz <darkfalz |a|t| gmail |d|o|t| com>
 
503
-       
 
504
-    - IOS Configuration now skips the ntp clock-period line.
 
505
-       By: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
506
-
 
507
-    - RRDtool Number of DS 
 
508
-
 
509
-
 
510
-JFFNMS 0.7.9 Released 2004-09-21
 
511
-================================
 
512
-
 
513
-*New Features:
 
514
-
 
515
-    - Support for PHP5
 
516
-       I've been testing on PHP 5.0.1 and everything I tried works. 
 
517
-       *** Please report any warnings or errors you may get ***
 
518
-
 
519
-    - Support for CatOS, Cisco Catalyst Switch.
 
520
-       Now you will see the correct interface names and descriptions.
 
521
-       Idea/Sample Code by: Perry Lewis <perry |d|o|t| lewis |a|t| htg |d|o|t| net>
 
522
-
 
523
-    - Apache /server-status? Monitoring.
 
524
-       You need to enable mod_status.so with permission to access from the JFFNMS server.
 
525
-       Will autodiscover the server on port 80, and allow for manual add for other ports.
 
526
-       Graphs for: Hits (with aggregation), Bytes transfered (with aggregation), 
 
527
-           Bytes per Request, CPU Load and Uptime, Busy/Idle Workers.
 
528
-       By: Robert St Denis <service |a|t| iahu |d|o|t| ca>
 
529
-
 
530
-    - IIS (Internet Information Server) Monitoring.
 
531
-       Graphs for: Bytes Received, CGI Requests, Files Sents, number of GETs and POSTs.
 
532
-       By: Robert St Denis <service |a|t| iahu |d|o|t| ca>
 
533
-
 
534
-    - Compaq Insight Manager Monitoring.
 
535
-       Will allow you to monitor fan, temperature and disks on Compaq/HP servers.
 
536
-       By: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
537
-
 
538
-    - Livingston Portmaster Serial Port Monitoring.
 
539
-       Allows you to see the general status of the ports in a graph.
 
540
-       By: Thomas Mangin <thomas |d|o|t| mangin |a|t| exa-networks |d|o|t| co |d|o|t| uk>
 
541
-    
 
542
-    - Windows EventLog Messages parsing and filter. You have to use NTSyslog.
 
543
-       By: David Lima <DLIMA |a|t| fr |d|o|t| scc |d|o|t| com>
 
544
-
 
545
-    - Windows CPU and Running Processes SLA 
 
546
-       New 'Process Threshold' field for SLA 
 
547
-       By: David Lima <DLIMA |a|t| fr |d|o|t| scc |d|o|t| com>
 
548
-
 
549
-    - Support for changing the envelope-sender in Triggers/Action emails.
 
550
-       New 'From' option in the trigger configuration.
 
551
-       Requeted/Idea by: ML <mathieu_lubrano |a|t| yahoo |d|o|t| fr>
 
552
-    
 
553
-    - New Aggregation (Average) Graphs for: Cisco CPU Utilization, Linux CPU Usage and Load Avearge.
 
554
-       By: Robert St Denis <service |a|t| iahu |d|o|t| ca>
 
555
-    
 
556
-    - New Packets and Errors Graphs, still in development.
 
557
-    
 
558
-    - New Temperature Aggregation Graph.
 
559
-       By: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
560
-
 
561
-    - New Manual Discovery Without PorScan (without using nmap).
 
562
-       Requested by: Robert St Denis <service |a|t| iahu |d|o|t| ca>
 
563
-
 
564
-    - Interface Selector now allows to select all interfaces in the group with one click.
 
565
-       And also, when using the Performance Screen, to show only the Date/Graph options 
 
566
-       before showing any graph.
 
567
-       Requested by: Robert St Denis <service |a|t| iahu |d|o|t| ca>
 
568
-
 
569
-    - Added HELP link from the setup.php screen to the JFFNMS Documentation.
 
570
-       Documentation By: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
571
-       
 
572
-    - Added 'active alarm' and its start date to the alarmed interfaces infobox.
 
573
-       Requested by: Chris Landegent <chrisl |a|t| adnc |d|o|t| com>
 
574
-
 
575
-    - Customer Selector in the Interfaces Viewer (Map Selector).
 
576
-       Requested by: Travis Johnson <tlj |a|t| ida |d|o|t| net>
 
577
-       
 
578
-    - Performance Viewer now allows to show only the Aggregate Graphs, 
 
579
-       and to select all the graph types with one click.
 
580
-       Requested by: Robert St Denis <service |a|t| iahu |d|o|t| ca>
 
581
-
 
582
-    - New Trigger Filter to Match by Interface name using 'Contains'.
 
583
-       Requested by: Chris Landegent <chrisl |a|t| adnc |d|o|t| com>
 
584
-
 
585
-*Fixed Bugs:
 
586
-
 
587
-    - Fixed Host Screen, now it does not have filters, and when you execute an action, 
 
588
-       it will show only the affected host. It also has a new Select Box for selecting the actions.
 
589
-       Reported by: Jason Humes <jhumes |a|t| acs |d|o|t| on |d|o|t| ca>
 
590
-
 
591
-    - Speed in Physical Interfaces will now be correctly set for interfaces without IPs.
 
592
-
 
593
-    - Peer IP will now be correctly shown in the RTT Graph.
 
594
-       Reported by: Jason Humes <jhumes |a|t| acs |d|o|t| on |d|o|t| ca>
 
595
-       
 
596
-    - Bandwidth information in traffic graph is now shown even if the BW is not in range
 
597
-
 
598
-    - Temperature Graph will now work, the RRDTool DS name was bad.
 
599
-       Reported by: Chris Epler <cepler |a|t| gmail |d|o|t| com>
 
600
-
 
601
-    - Graph Titles are now better centered in Debian PHP/GD systems.
 
602
-       Reported by: Karel P Kerezman <greyduck |a|t| greyduck |d|o|t| net>
 
603
-
 
604
-    - RRDTool Fetch Fixes that show up on sparc are now fixed.
 
605
-       By: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
606
-       
 
607
-    - RRDTool Fetch Fixes when using RRDTool > 1.0.47 fixed (timestamp parsing problem)
 
608
-       Reported by: Jeff Vaneek <vaneek |a|t| cs |d|o|t| utk |d|o|t| edu>
 
609
-
 
610
-    - Windows Upgrade documentation now includes .exe files copying.
 
611
-       Reported by: BJ
 
612
-    
 
613
-    - Allow values of '0' in multi_buffer (!empty("0") is not equal to ("0"!==""))
 
614
-    
 
615
-    - BGP Peers now use the Remote Neighbor IP as the Index field.
 
616
-    
 
617
-    - HostMIB Applications now use the process name as the Index field, no need for hashes now.
 
618
-    
 
619
-    - Traffic Aggregation Graph now includes Totals.
 
620
-       By: Robert St Denis <service |a|t| iahu |d|o|t| ca>
 
621
-
 
622
-    - Linux/Unix Net-SNMP CPU Usage graph now does averaging on devices with more than 1 CPU.
 
623
-       By: Robert St Denis <service |a|t| iahu |d|o|t| ca>
 
624
-
 
625
-    - When evaluating if we are going to store a new TFTP dowloaded config, don't escape the '
 
626
-    
 
627
-    - Better SNMP Trap RegExp
 
628
-       By: Nistor Lubomir <lubon_ |a|t| web |d|o|t| de>
 
629
-        
 
630
-    - Interface values are now trimmed, to avoid problems.
 
631
-
 
632
-    - Performance Viewer was not filtering by Customer when the User had a Fixed Customer.
 
633
-       Reported by: Johan <johan30 |a|t| easynet |d|o|t| be>
 
634
-
 
635
-    - Performance Viewer nows has a JavaScript refresh stopper (like the events screen).
 
636
-    
 
637
-    - Show Hour Control now adds the current hour:minute if not in the list.
 
638
-
 
639
-    - Users List is now sorted by Username.    
 
640
-       Reported by: Johan <johan30 |a|t| easynet |d|o|t| be>
 
641
-
 
642
-    - Allow for interfaces with '0' as the value. (!empty("0") is not equal to ("0"!==""))
 
643
-       Reported By: Craig Small <csmall |a|t| enc |d|o|t| com |d|o|t| au>
 
644
-
 
645
-    - RootMap is now shown in the Maps screen for easy background changing.
 
646
-       Reported by: Kelly Hamlin <fizz |a|t| users |d|o|t| sourceforge |d|o|t| net>
 
647
-
 
648
-
 
649
-JFFNMS 0.7.8 Released 2004-06-21
 
650
-================================
 
651
-
 
652
-*New Features:
 
653
-
 
654
-    - Host Information discovery (Windows, Unix, etc) now gathers the SysDescr,
 
655
-       usually it contains the Kernel and Host name, as this field is tracked, you will now when 
 
656
-       host changes kernels, or host name.
 
657
-       Requested by: Gregory Leggett
 
658
-       
 
659
-    - New general interface option to disable Status Polling completly. 
 
660
-       This way all graph information will be polled, but status will not, not even syslog messages 
 
661
-       for that interface. The interface upper-right corner will be gray.
 
662
-       Requested by: Tony Nelson & Others.
 
663
-
 
664
-    - Application interfaces now include the Memory used by the Application, with graph.
 
665
-       Requested by: Doug Toombs
 
666
-
 
667
-    - New Calendar for Reports. We're now using 'The Coolest DHTML Calendar' 
 
668
-       from http://dynarch.com/mishoo/calendar.epl , Behavior is better now.
 
669
-
 
670
-    - Profile Option to disable DHTML informational boxes.
 
671
-       Requested by: Travis Johnson
 
672
-       
 
673
-    - Profile option to restric interface viewing by customer, much like the Base Map option.
 
674
-       Requested by: Travis Johnson
 
675
-
 
676
-    - New Trigger field to match by Map.
 
677
-       Requested by: Alexandru Thomae
 
678
-
 
679
-    - New Trigger Field to match by Customer.
 
680
-       Requested by: Travis Johnson
 
681
-       
 
682
-    - UDP Port Monitoring, much like the TCP, but we use NMAP for testing, because it gives better results.
 
683
-       Based on design by: Yery Tannus
 
684
-       
 
685
-    - New Option to show the temperature in Farenheit
 
686
-       Requested by: Travis Johnson
 
687
-
 
688
-    - Added Mask to the Physical Interfaces options.
 
689
-       
 
690
-    - New AD Policy option to don't alert if an interface is not in host (deletion).
 
691
-    
 
692
-    - New Poller for easier handling Status MIB variables.
 
693
-       by: Craig Small
 
694
-    
 
695
-    - Add 'nolog' to the autodiscovery_interfaces to avoid creation of events, useful for debugging.
 
696
-
 
697
-*Fixed Bugs:
 
698
-
 
699
-    - Marked Disabled interfaces now don't count in the Status of a host in the Hosts Screen.
 
700
-       Requested by: Chris Tuska
 
701
-
 
702
-    - Easier event ACK'd now works as it should have been in 0.7.7
 
703
-       Reported by: Thomas Mangin
 
704
-
 
705
-    - Syslog Consolidator works again with the * and D variables.
 
706
-       Reported by: Mario Spendier
 
707
-       
 
708
-    - Session locking bug, now JFFNMS GUI should feel a lot faster.
 
709
-       
 
710
-    - Event Filter fixes.
 
711
-       Reported by: Chris Landegent
 
712
-
 
713
-    - TCP Connections tool fixes.
 
714
-       Reported by: Thomas Mangin
 
715
-
 
716
-    - NTP fixes.
 
717
-       Reported by: Thomas Mangin
 
718
-
 
719
-    - Popups & MiniSLA deprecated. No one used them.
 
720
-    
 
721
-    - Interfaces are now sorted using Natural Sort, this will make finding an interface by name easier.
 
722
-
 
723
-    - Better Filter behavior on the Hosts Screen.
 
724
-
 
725
-    - AD Output now includes the Interface Name.
 
726
-    
 
727
-    - SNMP Counter function now removes the ( and ) characters from output.
 
728
-
 
729
-    - DOC: Windows Install, added creation of c:\tmp folder
 
730
-    
 
731
-
 
732
-JFFNMS 0.7.7 Released 2004-04-05
 
733
-================================
 
734
-
 
735
-*New Features:
 
736
-
 
737
-    - New Login Screen, a new DHTML login screen, is selectable from the setup.
 
738
-       You can also add a logo to the page. This new method uses sessions/cookies to store a session id,
 
739
-       and internall is faster because we don't have to auth in every page request, which made some IDS ring.
 
740
-       An event is created when a user tries to login successfully or not.
 
741
-
 
742
-       Old method (HTTP AUTH) is still there, and will continue to be supported.
 
743
-
 
744
-    - New Tools Framework.
 
745
-       This system allows changes to be made to interfaces on the host.
 
746
-       Examples provided for Changing the Interface description and Admin Status on Routers and
 
747
-       to list or finish TCP connections on agents that support that feature (Cisco's TCP MIB).
 
748
-
 
749
-       A new event (Tool Action) is generated everytime something is changed using this tools.
 
750
-
 
751
-    - New Profile option to select which "View" Page do you want to see when you login.
 
752
-
 
753
-    - New ToolBox Interface Alarms widget. This allows access to more pages related to the selected interface.
 
754
-       Like Tools, Edit, Events and Performance. This is shown when you pass over an interface in the HTML or DHTML view types.
 
755
-
 
756
-    - New Event Type "internal" for JFFNMS related events. Also added a new option to hide the Host Name in the events viewer.
 
757
-       This event is used by the new Login Screen.
 
758
-
 
759
-    - 'Or' Type matching for Triggers.
 
760
-       Requested by: Alexandru Thomae
 
761
-       
 
762
-    - Poller, Autodiscovery, and Satellite Distribution now verifies that no other process with the same name are running.
 
763
-       To avoid duplicate processes. This works only on Linux.
 
764
-
 
765
-    - New Poller Helper, checks DMII and Alarmed interfaces, this allow faster UPs and faster poll of imporant interfaces.
 
766
-       Requested by: David Lima.
 
767
-       
 
768
-    - Alarm Backend now supports to set the time-span between down and up events, 
 
769
-       and the value to assume (or not) when no result is given by the poller.
 
770
-       Also, better (human readable) return values are given.
 
771
-
 
772
-    - RRD Backend again supports update on one DS by call. 
 
773
-       This is to make simplier poller groups when only one value is graphed.
 
774
-       And also to check if performance is better than doing all the DS at the end.
 
775
-       
 
776
-    - New poller option to poll just the DMII interaces on a host.
 
777
-       Requested by: David Lima.
 
778
-
 
779
-    - snmp_interfaces_status_all now checks if the host has more than 30 interfaces before doing the walk, 
 
780
-       if it does not, then uses normal snmp_get's
 
781
-       
 
782
-    - When ACK'ing summarized events ('Message Repeated N times'), all events are now ACKd rather than just one.
 
783
-       Requested by: Thomas Mangin
 
784
-
 
785
-    - Interfaces Alarm Screen now autodetects the screen width at start, so no more 'Big Screen' View types.
 
786
-    
 
787
-    - New folder ('engine/shared') to store shared code (ie. that may be required for pollers and for tools), 
 
788
-       and a new function to call them jffnms_shared().
 
789
-
 
790
-    - Satellite now works with HTTPS, new https_post_message function, that uses the CURL extension.
 
791
-       by: Chris Landegent
 
792
-
 
793
-    - Allow interfaces to be checked only every X minutes (N > 5), useful when used with the TCP Content Checking.
 
794
-       Requested by: Chris Landegent
 
795
-
 
796
-    - Anonymous customer logins. Just define a customer with no password.
 
797
-       Example URL: http://youserver/jffnms/?user=customer_username&pass=&logout=1
 
798
-       Requested by: Chris Tuska
 
799
-
 
800
-    - Direct Graph download. Useful for embedding them on a site, examples:
 
801
-       - Get the traffic graph from one interface:
 
802
-           http://youserver/jffnms/view_performance.php?interace_id=332&want_graph=traffic
 
803
-
 
804
-       - Get the Aggregation Traffic graph of a whole host:
 
805
-           http://youserver/jffnms/view_performance.php?host=6&want_graph=aggr&graph_type=traffic
 
806
-       
 
807
-       - Use with the Anonymous logins
 
808
-           http://youserver/jffnms/view_performance.php?user=customer1&pass=&logout=1&interace_id=332&want_graph=traffic
 
809
-
 
810
-    - Syslog Consolidator has a Position parameter now, to handle the order on which the syslog RegExps are tried.
 
811
-    
 
812
-    - New Syslog Event Type to match normal linux syslog messages.
 
813
-
 
814
-    - DOC: Added Another Example on using Syslog-NG
 
815
-    
 
816
-    - GUI: ACK'd events show differently on the Event Viewer 
 
817
-       Requested by: Thomas Mangin
 
818
-
 
819
-    - Storage Threshold can be configured per interface now.
 
820
-       Requested by: Thomas Mangin
 
821
-
 
822
-    - Cleanup Raw tables now supports deletion of N days old Router Configs, N is controlled via setup.
 
823
-       Requested by: Chris Tuska
 
824
-
 
825
-*Fixed Bugs:
 
826
-    
 
827
-    - DOC: Fixed the documentation about the PHP trap_receiver.
 
828
-
 
829
-    - Alarm table now allows bigger alarm_state ids.
 
830
-
 
831
-    - Syslog Consolidator now checks for Literals.
 
832
-    
 
833
-    - Events Screen now does escaping of HTML meta-chars.
 
834
-    
 
835
-    - Removal of un-matched < > variables in events.
 
836
-    
 
837
-    - Tacacs Consolidator now checks the Normal IP too, rather than only the Tacacs IP of the host when matching.
 
838
-       Requested by: Thomas Mangin
 
839
-    
 
840
-    - Severity Level Filter now works again.
 
841
-       Reported by: David Lima
 
842
-
 
843
-    - NTP Discovery now verifies if the Host has and IP address.
 
844
-    
 
845
-    - NTP Poller Now checks for timeouts.
 
846
-    
 
847
-    - Exp_poller now works correctly with this version.
 
848
-
 
849
-    - Removed old snmp_interfaces_status
 
850
-    
 
851
-    - Old 'Event Tools' depreacated. It was an old code that nobody used.
 
852
-
 
853
-    - Old perl trap_receiver depreacated.
 
854
-    
 
855
-    - GUI: Event Screen code cleanup, uses more CSS and the resulting file is smaller.
 
856
-    
 
857
-    - GUI: Better Interface Selector in the Triggers screen. 
 
858
-
 
859
-    - GUI: Better Recursive URL cleaner.
 
860
-    
 
861
-    - Manual Add is now show event if the host does not have any interface of that type.
 
862
-    
 
863
-    - We now only distribute the SQL Diffs of the past to the current version, not older files.
 
864
-    
 
865
-    - Coding Style changes and Call By Reference bugs fixed.
 
866
-
 
867
-
 
868
-JFFNMS 0.7.6 Released 2004-02-22
 
869
-================================
 
870
-
 
871
-*New Features:
 
872
-
 
873
-    - TCP Port Content (port response or URL content) can be checked against a Regular Expression to validate it.
 
874
-       Requested by: Richard Sears
 
875
-
 
876
-    - Manual Add of TCP Ports, now its possible to add any port number you want manually, 
 
877
-       or to set up the same port a more than one time with different testing Regular Expressions.
 
878
-
 
879
-    - CPU Usage and Load Average SLA for Linux Hosts.  
 
880
-
 
881
-    - CPU and Memory Usage SLA for Cisco Routers.      
 
882
-
 
883
-    - Graphing of the number of Application Instances.
 
884
-
 
885
-    - NTP syncronization testing, it reports when a NTP server is syncronized or not to another peer. (it requires the ntpq program)
 
886
-
 
887
-    - GUI: Added New "only when filtering" option to Event Types, to better manage its showing.
 
888
-       Requested by: David Lima
 
889
-
 
890
-    - GUI: New DHTML View Type for Interfaces and Hosts, it doesn't use png's anymore for the boxes, its all CSS and JavaScript, 
 
891
-       Tested with Mozilla/Firebird/Firefox on Linux and Windows, and with Internet Explorer 5.0 and 6.0
 
892
-
 
893
-    - GUI: New option to disable refresh on the Interfaces/Hosts Screens.
 
894
-       Requested by: Lucas Iglesias
 
895
-       
 
896
-    - GUI: New option to diable the refresh of the Events Screen more easily.
 
897
-       Click on the 'round arrows' icon to stop the refreshing, and click on the 'page refresh' to enable it again.
 
898
-
 
899
-    - GUI: Faster event Acknowlodge, without selecting a Journal. 
 
900
-       Requested by: Aaron Aubman
 
901
-
 
902
-    - New Physical Interface option to avoid the automatic Admin Status modifications.
 
903
-       When you mark "Fixed Admin Status" the show type of the interface (Show, Mark Disable, Don't show) will no be modified by the poller.
 
904
-       The Default is not checked, so the poller will automatically modify the Admin Status/View Type of the interface.
 
905
-
 
906
-    - New trap_receiver coded in PHP, now you can use the trap functions with postgresql, because it uses the JFFNMS DB abstraction.
 
907
-       by: Aaron Aubman
 
908
-       
 
909
-    - New Way to use Satellites "Local Master", this means the Satellite will poll the values, store them locally AND send it to the master too.
 
910
-       Requested by: Juan Rojas
 
911
-
 
912
-    - Added Interface Type to the list of Trigger Rules Fields, to match by the interface type.
 
913
-       Requested by: Ray Hatch
 
914
-
 
915
-    - API: Its now possible to poll more than one interface on the same host via the command line (ie for testing)            
 
916
-
 
917
-    - API: Added option to use HTTP/1.0 or HTTP/1.1 in HTTP queries
 
918
-
 
919
-    - API: The jffnms-snmp system (plugin's for net-snmp) now caches its response for one minute to ease the load on the server.
 
920
-
 
921
-    - API: Its now possible to setup Default SLAs per interface type
 
922
-    
 
923
-    - GUI: Double Clicking on a Graph Type on the Performance Screen, will show it without needing to click on the 'View' Button.
 
924
-
 
925
-    - GUI: Its now possible to select a Default View type in the User profile (ie Normal, Text, etc).
 
926
-
 
927
-    - GUI: New button in the top frame to reload the current selected view
 
928
-       Requested by: Thomas Mangin
 
929
-        
 
930
-    - DOC: msyslog & SLA configuration example documentation 
 
931
-       by: Chirstian Zimmerman
 
932
-
 
933
-*Fixed Bugs:
 
934
-
 
935
-    - Dates in graphs are checked to be sure they are valid.
 
936
-
 
937
-    - BGP Verify Number poller removed, its no longer needed.
 
938
-
 
939
-    - When adding a new interface from Manual Discovery, the interfaces screen now its correctly positioned.
 
940
-       Reported by: Ray Hatch
 
941
-
 
942
-    - Autodiscovery and RRD Analyzer now check the "poll" option in the interface and the host they are working on.
 
943
-
 
944
-    - Last Poll Date is now handled as an added poller/backend because it shares the same structure. (its now injected from poller_plan)
 
945
-
 
946
-    - Cosmetic Changes to Config Transfer Types, and Autodiscovery Policy
 
947
-       Requested by: Thomas Mangin
 
948
-
 
949
-    - Performance Graph Title was badly calculated.
 
950
-       Reported by: Pierre-Damien Gatouillat
 
951
-
 
952
-    - Autodiscovery now checks if the host is localy managed or satellite, this way AD only runs over the hosts this Satellite manages.
 
953
-
 
954
-    - Changed some Satellite Calling functions to make correct use of the 'params' field.
 
955
-
 
956
-    - Interface Type RRA Structure now included in the default field values.
 
957
-    
 
958
-    - Fixed handling of & and | in the Satellite Query content.
 
959
-    
 
960
-    - Customer Username can now be 60 characters long
 
961
-       Requested by: Thomas Mangin
 
962
-    
 
963
-
 
964
-JFFNMS 0.7.5 Released 2003-12-16
 
965
-================================
 
966
-
 
967
-*New Features:
 
968
-
 
969
-    - Per Interface-Type Fields:
 
970
-       
 
971
-       Until now every interface had the same fields, for some interface types this was ok, but others required more or different fields,
 
972
-       so this new feature allows different fields per interface type. 
 
973
-           ie: Linux TC now has Rate and Ceil fields, and its not using the BW in/out fields, TCP Ports don't have IP address or BW, etc.
 
974
-       
 
975
-       This was one of the big "barriers" in the internal design of JFFNMS, so I'm glad I finally made it configurable/modular.
 
976
-    
 
977
-       - DB: 3 new tables: interface_types_fields, interface_types_field_types, and interface_values
 
978
-       - GUI: Manual Discovery has a new layout and includes all the specific interface fields.
 
979
-       - GUI: View Interfaces shows all the 'description' fields and has a better text layout
 
980
-       - API: interfaces_update updates every interface value not just the interfaces table.
 
981
-       - API: Events Text now can include any interface type specific fields
 
982
-       - API: Poller Parameters can include any interface type specific fields
 
983
-
 
984
-       - AD Tracked Fields are set from the Interface Type Fields.
 
985
-       - SLA: now you can use SLA expressions with the name of each interface type specific field
 
986
-
 
987
-       - Changed all discovery, poller and backend scripts to use the new and specific fields, ie:
 
988
-           
 
989
-           - ALL: changed 'descr' fields to 'description' 
 
990
-           - Physical: Pings to Send configurable per interface
 
991
-           - BGP: Separated field for Local IP , Remote IP and ASN values.
 
992
-           - Applications: Number of Instanses stored in DB.
 
993
-           - Linux TC: Specific Ceil and Rate fields. 
 
994
-           - Storage: Specific Size Field (it was bandwidth before)
 
995
-           - TCP: Check content option now allows for a specific URL to be included
 
996
-           - Reachability: Now you can configure the fping parameters per interface
 
997
-           - Verify Interface Number Backend now uses specific Index Field.
 
998
-           - RRD Backend gets the RRD Structure from the Interface Type Fields.
 
999
-
 
1000
-       Important Notes:
 
1001
-       ----------------
 
1002
-
 
1003
-       * If you have "custom" interface types, please read the UPGRADE file carefully
 
1004
-       
 
1005
-       * By default we not 'track' the network interface's description via autodiscovery, so if you don't want to loose 
 
1006
-           your custom interface descriptions, please disable the field tracking via the Polling & Discovery=>Interface Types Screen. 
 
1007
-
 
1008
-    - All AD changes to an interface are summarized on one event.
 
1009
-    
 
1010
-    - Cleanup old Events and Alarms integrated to cleanup_raw_tables.
 
1011
-       - the number of days is configurable via setup.php (Defaults to 7 Days of Raw Events, and 60 Days of Normal Events/Alarms)
 
1012
-       - We try to repair the tables using a REPAIR/OPTIMIZE or VACUUM command at the end. This is to avoid index problems.
 
1013
-
 
1014
-    - Per Host 'Polling Enabled' Option to disallow polling of all host interfaces more easily.
 
1015
-       Requested by: Richard Sears
 
1016
-    
 
1017
-    - Host View option now acts over the View option of its interfaces, so if the Host is in Don't show or Mark Disabled, it will look as 
 
1018
-       all its interfaces where in the same state.
 
1019
-       Reqiested by: Richard Sears
 
1020
-
 
1021
-    - Experimental Poller (for networks with a lot of hosts)
 
1022
-       A new polling system that keeps a number of pollers running, and distributed the polling load by interface to them.
 
1023
-       This allow us to poll a lot of hosts without the problems of lauching one poller for each host. This is still experimental, don't use 
 
1024
-       it yet for production enviorments. It Requires the SHMOP and PCNTL PHP Modules to work. 
 
1025
-       By: Anders Karlsson
 
1026
-       
 
1027
-    - RRD_Analyzer: SLA is now a seprated analyzer, this mimics all other plugin scripts, SLA still the only one implemented.
 
1028
-
 
1029
-    - When a Network Interface (IFMIB) has AdminStatus 'down', it will be set to 'Mark Disabled' automatically, 
 
1030
-       also when the interface is back in AdminStatus 'up', it will be set to 'Show'.
 
1031
-       Requested by: Richard Sears
 
1032
-       
 
1033
-    - GUI: Interface Viewer (Status Map) now includes a link to the interface editor
 
1034
-    
 
1035
-    - GUI: Graph legends now include the Site Name.
 
1036
-    
 
1037
-    - GUI: Alarmed Interfaces view now includes the Host Name of the interfaces in a new line
 
1038
-       Requested by: Chris Landegent
 
1039
-       
 
1040
-    - GUI: When inside a Host in the Interface Viewer, clicking on the "card" (gray) box will show all the graph for that interface type
 
1041
-
 
1042
-    - GUI: Added the Current and Last Polled Date to the Performance Viewer
 
1043
-       Requested by: Smith Chen
 
1044
-       
 
1045
-    - API: Added fetch_ds() method to the interfaces class, to allow an RRDTool Fetch remotely.        
 
1046
-
 
1047
-    - API: Temporal Buffer Backend supports calling the same variable more than once, until it has a value.
 
1048
-
 
1049
-    - API: Poller Plan now allows to filter by type
 
1050
-    
 
1051
-    - API: Interfaces_Add can use an array as parameter to define more than the host_id of the new record, but only interface table fields
 
1052
-
 
1053
-    - UTILS: Added Debug option to jffnms-snmp, to check the output tree.
 
1054
-
 
1055
-*Fixes:
 
1056
-
 
1057
-    - Linux TC regexp fix to allow leaf and prio options
 
1058
-       By: Craig Small
 
1059
-
 
1060
-    - Better Autodiscovery Output with specific interface type fields.
 
1061
-    
 
1062
-    - Better Handling of subinterfaces (VLAN, FrameRelay, etc)
 
1063
-    
 
1064
-    - Removed some 'extract()' calls in graph's that were not needed.
 
1065
-    
 
1066
-    - Added more colors to the TC Aggregation Graph.
 
1067
-    
 
1068
-    - Added more descriptive names to 'View' options in Administration
 
1069
-    
 
1070
-    - Windows CPU Polling now doing a walk of the CPUs tree to get the avarage usage of all processors
 
1071
-       Report and Fix Concept by: Chen from Taiwan
 
1072
-    
 
1073
-    - Zone filter now works again.
 
1074
-
 
1075
-    - Don't Discover the Reachability Interface if the fping executable is not set-uid.
 
1076
-
 
1077
-    - Fix fping response when the IP is in the local subnet and its unreachable (read the last line)
 
1078
-       Reported by: Ben Lentz
 
1079
-
 
1080
-    - Cisco MAC Accounting Interfaces now include a unique indentifier.
 
1081
-
 
1082
-    - BGP4 MIB implementation fixes, the index is now better calculated to be unique, so no AD problems occur.
 
1083
-
 
1084
-    - Alarm Editor is back (under Internal Configuration=>Reports)
 
1085
-       Requested by: Rob Laidlaw
 
1086
-
 
1087
-    - Fixes SMS Client action message creation to include the interface data, and to trim the message to 140 chars.
 
1088
-       Reported/Fixed by: Ben Lentz & Yuri Krichevsky
 
1089
-
 
1090
-    - Maps List is now in a Select box, because if you have a lot of maps, or long names, you loose the View Types section.
 
1091
-    
 
1092
-    - API:DB some internal modifications, query doesn't die on failure, it tries 5 times, then it returns, but it doesn't die. 
 
1093
-
 
1094
-    - API:Satellite
 
1095
-       - WDDX Fixes
 
1096
-       - Import/Export (distribution) now also updates records on changes, not just deletes and inserts a new one
 
1097
-
 
1098
-    - Setup: don't allow " ' & | # = / characters in the fields (SF BUG 841139)
 
1099
-       Requested by: Mark Burdick
 
1100
-
 
1101
-    - Cisco CPU Poller now uses the 5 Minutes CPU utilization, rather than the 1 min OID (SF BUG 841140)
 
1102
-       Requested by: Mark Burdick
 
1103
-
 
1104
-
 
1105
-JFFNMS 0.7.4 Released 2003-10-13
 
1106
-================================
 
1107
-
 
1108
-*New Features:
 
1109
-
 
1110
-    - Reachability Interface Type
 
1111
-       Using fping (http://www.fping.com) we can now monitor hosts via ICMP (ping) and graph the RTT and PL from
 
1112
-       the JFFNMS server. It also issues events when the PL is over a treshold. This plugin will not work on Windows.
 
1113
-       Requested by: a lot of people.
 
1114
-
 
1115
-    - Linux Traffic Control (tc) Support
 
1116
-       Using our own net-snmp extension (pass-type) installed on the Shaper Box you can see each Class Bandwith Usage,
 
1117
-       including aggregation to view all usages on the same graph. Tested only with HBT. 
 
1118
-       Scripts and example configuration in docs/utils/jffnms-snmp/ .
 
1119
-    
 
1120
-    - Configurable Interface Field Tracking.
 
1121
-       Now is possible to track other interface fields rather than the name, for example the description.
 
1122
-       Added BGP Description Tracking.
 
1123
-       Requested by: Richard Sears
 
1124
-
 
1125
-    - TCP Content Checking.
 
1126
-       The TCP Poller now also check for a valid response in HTTP/HTTPS/FTP/FTPS ports using fopen().
 
1127
-       Until we get Per Interface Type Fields, configuration is done via the description field.
 
1128
-           ie: http|/jffnms/admin/adm/test.php
 
1129
-           ie: ftp://testuser:testpass@|/test.txt
 
1130
-           ie: https|/jffnms/admin/adm/test.php
 
1131
-
 
1132
-           'http' tells the poller to use the HTTP protocol and whats after the | specifies a page rather than the default (/).
 
1133
-
 
1134
-       Requested by: Richard Sears
 
1135
-       
 
1136
-    - Added the SNMP Auth Failed Trap.
 
1137
-
 
1138
-    - Added Acknowlodge Field to Express Filter.
 
1139
-       Requested by: Craig Small
 
1140
-
 
1141
-    - Added Creation, Modification and Last Poll Time Stamps to the Interfaces table.
 
1142
-       All this information is useful when looking for something wrong.
 
1143
-
 
1144
-    - Trigger rule to match the ongoing duration of active alarms (includes new consolidator process).
 
1145
-       By: Anders Karlsson
 
1146
-
 
1147
-    - News Section included in the Start Page.
 
1148
-
 
1149
-    - Support Client Only in Satellites (just incoming queries).    
 
1150
-
 
1151
-    - Added Example on how to use Satellites, in docs/utils/satellite-client.php
 
1152
-    
 
1153
-    - Better support for Juniper Routers (Based on M20): Consolidate Interface List and LowerLayerDown Support.
 
1154
-       Requested by: Richard Sears
 
1155
-
 
1156
-*Fixes:
 
1157
-
 
1158
-    - Added BASE64 Encoding to API:rrd_grapher() and BASE64 Decoding to GUI:performance_graph()
 
1159
-
 
1160
-    - When No Zone Image is configured the Events screen doesn't try to show it.
 
1161
-
 
1162
-    - When no interfaces were alarmed the 'Alarmed Interfaces' View showed all interfaces, now its fixed.
 
1163
-       Reported by: Kevin R. Armstrong
 
1164
-
 
1165
-    - RRDTool Graph now returns the real result of the command.
 
1166
-       Reported by: Anders Karlsson
 
1167
-
 
1168
-    - Fixes to poller_plan_next to replace all poller parameters
 
1169
-    
 
1170
-    - Problem with changing Fullname or Router Access to User, now its not needed to re-enter the password
 
1171
-
 
1172
-    - Support WDDX over TCP in Satellites.
 
1173
-    
 
1174
-    - RRD Files are now (back again) deleted when the interface is deleted.
 
1175
-
 
1176
-    - Now we check if allow_url_fopen is set to On in setup.
 
1177
-    
 
1178
-    - Changed JFFNMS URL to http://www.jffnms.org
 
1179
-
 
1180
-    - Fixed Input Error Rate Graph and SLA calculations (Total Input Packets = Input Packets + Input Errors)
 
1181
-
 
1182
-    - API:DB added db_free function
 
1183
-       By: Anders Karlsson
 
1184
-
 
1185
-    - Make sure most public API functions return some value (breaks satellize otherwise).
 
1186
-    
 
1187
-    - More separation between API and GUI code.
 
1188
-
 
1189
-    - Discovery_none script now doesn't return an error, just an empty list, to use when a new interface type does not have a discovery system.
 
1190
-       Requested by: Craig Small
 
1191
-
 
1192
-    - New Database entries on system tables start with id 10000 from now on, so we can add more things without interfering with 
 
1193
-       user-created internal configurations, like new Interface Types
 
1194
-
 
1195
-
 
1196
-JFFNMS 0.7.3 Released 2003-08-02
 
1197
-================================
 
1198
-
 
1199
-*New Features:
 
1200
-    
 
1201
-    - Host Config Downloader Rewrite: 
 
1202
-       Modular, More Secure and Better Error Reporting (via log, event and alarm)
 
1203
-       by: Javier Szyszlican   Ideas from: Michael Samuel
 
1204
-
 
1205
-    - GUI: Performance Viewer: Added 'Last 2 Days' to Time Span Options, Multiple Graph Selector, Graph Scale Legend included in IMG ALT
 
1206
-       Requested by: Juan Rojas (TIBA) by: Javier Szyszlican
 
1207
-
 
1208
-    - SMS via Mail Action: Modified Email Action for shorter messages.
 
1209
-       Requested by: Michael Orth      by: Javier Szyszlican
 
1210
-    
 
1211
-    - SMS via Modem Action: send SMS via modem with SMSClient (http://www.smsclient.org/)
 
1212
-       by: Craig Small
 
1213
-
 
1214
-    - GUI: Interface Viewer Reworked and Modularized:
 
1215
-       - View Interfaces, View Hosts and View Maps use the the same engine (but different sources), 
 
1216
-           this also means that you can now view Hosts and Maps in Text Mode also.
 
1217
-       - 'Performance View' is nicer now, and it can also use dynmap.
 
1218
-       - 'Text View' now shows all the links and it has a better layout
 
1219
-
 
1220
-    - Temp Files Cleanup Script for Unix
 
1221
-       by: Kovacs Andrei
 
1222
-
 
1223
-    - Get Interfaces (Manual Discovery): Show Interfaces not found in Host but found in the DB.
 
1224
-
 
1225
-    - Support for Cisco Catalyst Config Download
 
1226
-       Thanks to and Requested by: Paul Stewart        by: Javier Szyszlican    
 
1227
-
 
1228
-    - Logging is disbled by default, and the files now don't have the date in their name.
 
1229
-
 
1230
-    - New Engine Temp Folder, to store Engine (poller, autodiscovery, etc.) Temporary Files.
 
1231
-    
 
1232
-    - TCP Port Discovery now uses the New Engine Temp Folder. 
 
1233
-
 
1234
-    - API: Graph handling was put in the engine, and a wrapper function (performance_graph in GUI) was created.
 
1235
-       Now graphs are stored in the Engine Temp folder, read, deleted, and returned as a variable to the GUI, which
 
1236
-       stores it in Temp Graph Folder and allows the browser to see it.
 
1237
-
 
1238
-    - GUI: Some Graphs now show the 'In / Out Flipped' Legend, to let the user know the graph Input and Output are inverted.
 
1239
-       Requested by: Juan Rojas (TIBA) by: Javier Szyszlican
 
1240
-
 
1241
-    - SNMPTraps: the traps consolidator now supports placing literal data in the SNMP Trap Rules screen (like 'down' in the State field)
 
1242
-       Also some rewrite of the code, and handling of Up's and Down's in numeric mode
 
1243
-       
 
1244
-    - GUI: Behavior Change, if the Events Frame does not exists (ie. Hosts, Maps, Interfaces WITHOUT Events) don't display a new window.
 
1245
-       Requested by: Rob Laidlaw
 
1246
-       
 
1247
-*Fixed Bugs:
 
1248
-
 
1249
-    - Fixed TCP Port Discovery to only return Open TCP Ports, because Validate in AD is unchecked for feature reasons.
 
1250
-       Reported by: Daryl G. Jurbala   by: Javier Szyszlican    
 
1251
-
 
1252
-    - Changed Cisco EnvMIB Discovery (Voltage, PowerSupply, Temperature) to check for status, and 
 
1253
-       to give a more generic Interface Name
 
1254
-       Reported by: Daryl G. Jurbala   by: Javier Szyszlican    
 
1255
-
 
1256
-    - Fixed Customer Login when JFFNMS is installed in the Document Root (relative path /) 
 
1257
-       Reported by: Brian Watters
 
1258
-
 
1259
-    - Fixed Storage Interface Type to return the Device Type String from hard-coded values if the MIB doesn't include them (return OIDs is set).
 
1260
-
 
1261
-    - Fixed Host Information Interface Type to convert 'enterprises' to its OID when comparing (return OIDs is set).
 
1262
-    
 
1263
-    - Smokeping Internal Number Tracking Fixes
 
1264
-       by: Craig Small
 
1265
-
 
1266
-    - Don't send the Alarm's 'Date Stop' Field on a Down Alarm in Email Action 
 
1267
-
 
1268
-    - PgSQL 7.3 fix in UnAck Filter (changed '' for 0)
 
1269
-
 
1270
-    - PgSQL 7.3 fix in insert_alarm, don't include zero-lenght string for referer_stop
 
1271
-
 
1272
-    - PgSQL fixes (changed " for ') in interface_filter and cleanup_raw_tables
 
1273
-    
 
1274
-    - Fixed TCP Number of Connections Poller for use with NET-SNMP (not absolute OIDs in the returned array key)
 
1275
-    
 
1276
-    - Physical Interfaces Discovery now puts the correct Name for Cisco VLAN Interfaces (IOS 12.2.16b)
 
1277
-       Reported by: Lucas Iglesias (TIBA)      by: Javier Szyszlican
 
1278
-    
 
1279
-    - Autodiscovery now informs the New Interface Name when the AD Policy dont allow the name to be changed
 
1280
-
 
1281
-    - Fixed Physical Interfaces Status Pollers and Discovery to not depend on the MIBs values
 
1282
-
 
1283
-    - Packets Graph does not use the Flip Graph option anymore.
 
1284
-    
 
1285
-    - Fixed interface_shortname_and_card() to manage a new case when the interface[pos] is not numeric for Cisco ENVMIB
 
1286
-
 
1287
-    - snmp_get now tries 2 times to get the requested data.
 
1288
-
 
1289
-    - GUI: Administration Menu Internal Code and Organization reworked. 
 
1290
-    
 
1291
-    - GUI: First,Prev,Next,3Next Options Menu now is fixed size, the options don't change places.
 
1292
-       Requested by: Alejandro Alvarez (TIBA)
 
1293
-    
 
1294
-    - Fixed crypt() usage in Authentication
 
1295
-       Reported by: Michael Samuel
 
1296
-
 
1297
-    - Internal Messages Framework Deprecated.
 
1298
-    
 
1299
-    - Disabled the TIBA TT plugin. You have to write your own TT plugins.
 
1300
-    
 
1301
-    - Fixed more NET-SNMP returned values handling
 
1302
-
 
1303
-    - Fixed most of the functions that use the DB from the GUI, only 2 left. Added more API Classes, and fixed others.
 
1304
-    
 
1305
-    - Cleanup of unused GUI functions (due to the migration to API Classes)
 
1306
-        
 
1307
-    - Check if the DB module is loaded before testing the connection for setup in db_test.
 
1308
-
 
1309
-    - DOCS: Fixes and additions to the Windows Install Procedure, also start of the Windows Upgrade Procedure.
 
1310
-       By: James Swart
 
1311
-
 
1312
-    - Zone Image (flag) is not longer Required, now is optional.
 
1313
-    
 
1314
-
 
1315
-JFFNMS 0.7.2 Released 2003-05-27
 
1316
-================================
 
1317
-
 
1318
-*New Features:
 
1319
-    - Cisco Temperature (with graph), Voltage and Power Supply Monitoring.
 
1320
-       By: Anders Karlsson
 
1321
-
 
1322
-    - Internal: Support for more alarm_states, now pollers and events can return any state value
 
1323
-       Already Implemented for tcp poller (up,down) and Applications (running, not running)
 
1324
-       Requested: Anders Karlsson
 
1325
-
 
1326
-    - Internal: the Alarm Backend can get extra info from the poller with | as the separator 
 
1327
-       to include it as the info of a new event.
 
1328
-
 
1329
-    - Cisco SA Agent (Service Assurance) (Round Trip Latency, Jitter and Packet Loss)
 
1330
-       By: Anders Karlsson     
 
1331
-    
 
1332
-    - The TCP Poller now tries to read 1 second of data from the open socket to report it in the events.
 
1333
-
 
1334
-    - New Autodiscovery Policy to allow adding of interfaces without checking if they have an IP Address (for Switches)
 
1335
-
 
1336
-    - NetSNMP Agents added to UCD-SNMP System Interface Type
 
1337
-
 
1338
-    - Physical Interface Status is now gathered with a new poller which stores all the table and then processes it.
 
1339
-       By: Anders Karlsson
 
1340
-
 
1341
-    - Added in-development tools, an mib parser and an sql update generator (internal)
 
1342
-
 
1343
-    - Added InfoBox explaining the alarms in the Hosts View.
 
1344
-    
 
1345
-    - Hosts now can be hidden or marked disabled like interfaces (to hide old routers)
 
1346
-
 
1347
-    - Added Refresh link to the menu interfaces list.
 
1348
-    
 
1349
-    - New Mailing List Archives at: http://marc.theaimsgroup.com/?l=jffnms-users
 
1350
-
 
1351
-    - Added Storage Aggregation (All Selected Storage Interfaces in the same graph)
 
1352
-
 
1353
-    - Storage SLA alerts when the Used Space is more than 80%, its autoselected on every new Storage Interface.
 
1354
-       By: Dan Ratzlaff
 
1355
-
 
1356
-    - Satellites understands SOAP, you can talk SOAP with the satellite.php to call any method of any class.
 
1357
-    
 
1358
-    
 
1359
-*Fixed Bugs:
 
1360
-
 
1361
-    - State Report didn't show correctly the duration of alarms which lasted more than 24hs.
 
1362
-       Reported: Kevin R. Armstrong
 
1363
-
 
1364
-    - Missing Check in hosmib_apps poller caused error when the host had no snmp daemon.
 
1365
-       Reported: Larry Burton
 
1366
-    
 
1367
-    - Dont show RTT/PL in state report on interfaces which don't have them.
 
1368
-
 
1369
-    - Some bugfixes to allow use of net-snmp v5.
 
1370
-    
 
1371
-    - Modified autodiscovery_interfaces for better output and now it uses alarm_lookup to see if somethins is up or down
 
1372
-    
 
1373
-    - Modified the tcp_ports discovery to answer open or closed, because discovery now understands them via alarm_lookup
 
1374
-    
 
1375
-    - Poller Position is now included in the command line parameters when forking poller.php
 
1376
-       Reported: Nigel A. Taylor 
 
1377
-
 
1378
-    - Changed Interface Types Order, for manual Discovery
 
1379
-    
 
1380
-    - Performance Graphs now works in paths with dots. 
 
1381
-       Reported: Peter Burgstaller
 
1382
-       
 
1383
-    - Autodiscovery now let you set any interface field from the discovery script's (like slas, clients, etc)
 
1384
-
 
1385
-    - Autodiscovery can now be called with a second command line parameter to only discover one interface type (for debugging)
 
1386
-    
 
1387
-    - New Autodiscovery Policy options to check if the state is UP, and if the IP Address is valid. (both checked for all except the new policy for switches)
 
1388
-
 
1389
-    - The Cisco Ping Pollers where using the old buffer, changed to the new one.
 
1390
-       Reported: Oliver Kuhn
 
1391
-
 
1392
-    - Coding Style Fixes to get SOAP working, mostly undeclared variables and constant array keys
 
1393
-       By: Anders Karlsson
 
1394
-
 
1395
-    - State Report now shows only the customer, map, type, host or interfaces selected.
 
1396
-       Reported: Kevin R. Armstrong
 
1397
-
 
1398
-    - Added Zone Image (flag) to the Hosts View.
 
1399
-    
 
1400
-    - Added Images of More Coutries Flags in the Full Install.
 
1401
-    
 
1402
-    - Modified view_interfaces card detecting code to handle ie. Tunnel0, Tunnel1 and eth0, eth1 as the same card
 
1403
-
 
1404
-    - Modified 'Mark On Map' tool to show only the host of the interface in selected.
 
1405
-
 
1406
-    - The syslog consolidator now checks for the host name and ip (for syslog-ng)
 
1407
-       by: Craig Small
 
1408
-    
 
1409
-    - More Flexible and Clean auth.php
 
1410
-       by: Michael Samuel
 
1411
-
 
1412
-    - Customers are now allowed to see their State Report.
 
1413
-    
 
1414
-    - Fix possible overwriting of unavailability array.
 
1415
-
 
1416
-    - Physical Interfaces Discovery and the Tacacs Consolidator didnt handle the ' character in a good way.
 
1417
-       Reported by: Brian Watters 
 
1418
-
 
1419
-    - Off-by-one RRD DS Position error fixed and now we use interface_name as the file name.
 
1420
-       By: Craig Small
 
1421
-
 
1422
-    - snmp_walk now makes 2 tries to get the requested data.
 
1423
-
 
1424
-    - Changed INSTALL to allow PHP CLI work correctly from crontab (Current Working Directory Problems)
 
1425
-
 
1426
-    - rrd_analizer took the 0's as a value to calculate the averge causing bad readings.
 
1427
-       Reported by: Dan Ratzlaff
 
1428
-
 
1429
-    - Some Fixes to clean some alerts when viewing JFFNMS using SSL    
 
1430
-       Requested by: TIBA Staff
 
1431
-       
 
1432
-    - Quick/Bad Fix for the init - exim hash collition. 
 
1433
-       Reported by: Craig Small
 
1434
-
 
1435
-       
 
1436
-JFFNMS 0.7.1 Released 2003-04-02
 
1437
-================================
 
1438
-
 
1439
-*New Features:
 
1440
-
 
1441
-    - HostMIB Running Software Polling and Discovery
 
1442
-       By: Anders Karlsson
 
1443
-
 
1444
-    - Events RDF Feed availble from http://<yourhost>/jffnms/events.php?view_type=rdf
 
1445
-       By: Craig Small
 
1446
-       
 
1447
-    - Raw tables cleanup script
 
1448
-       By: Andrei Kovacs
 
1449
-
 
1450
-    - Added Latitude/Longitude fields to Host table (for future GIS Maps)
 
1451
-       Requested: Anders Karlsson
 
1452
-
 
1453
-    - Added Filter to show only UnAck'd Events
 
1454
-       Requested: Walter Brock
 
1455
-
 
1456
-    - Added 'Default Event Filter' Profile Option
 
1457
-
 
1458
-    - Added 'Events & Maps Refresh Intervals' Profile Options
 
1459
-       Requested: Daniel Farinella
 
1460
-
 
1461
-    - Documentation on how to use syslog-ng with JFFNMS.
 
1462
-       By: Craig Small
 
1463
 
1464
-*Fixed Bugs:
 
1465
-    
 
1466
-    - strpos() haystack, needle inversion in syslog parser.
 
1467
-       Fixed: Craig Small
 
1468
-       
 
1469
-    - Bad Loop in Somekping Poller
 
1470
-       Fixed: Craig Small
 
1471
-    
 
1472
-    - Satellite Field is now a text label when listing in the Hosts Screen
 
1473
-
 
1474
-    - Changed order of Hosts from Zone, Name to Name, Zone
 
1475
-       Requested: Lucas Iglesias
 
1476
-
 
1477
-    - Reworked interface_status its lot faster now.
 
1478
-       Requested: Anders Karlsson
 
1479
-       
 
1480
-    - Added interface_count and hosts_count for speed ups.
 
1481
-    
 
1482
-    - Graphviz doesn't show the unknown host anymore.
 
1483
-
 
1484
-    - Removed Link to old Message System from the control.php, also disabled refresh becasue it was not needed.
 
1485
-    
 
1486
-    - trap_reciever.pl does not mix the order of the OIDs now. Also changed the DB to reflect the real OID order.
 
1487
-    
 
1488
-    - Fixed trap_reciever.pl RegExp to match multi-word values in OIDs
 
1489
-
 
1490
-    - Setup.php on Windows Escaped \ as \\, causing problems with RRDTool, now it replaces \\ with /
 
1491
-       Reported: BEV
 
1492
-       
 
1493
-    - Added ScrollBar and Set the height of the color_select.php row to be sure of their size.
 
1494
-       Reported: Jack Snir 
 
1495
-
 
1496
-    - Fixed Repeated 'control name' in select_color(), it was causing problems in IE.
 
1497
-       Reported. Jack Snir
 
1498
-    
 
1499
-    - Period Can't be 0 in get_availability, changed to 1 if zero, to avoid division by zero warnings.
 
1500
-       Reported: Andrei Kovacs
 
1501
-       
 
1502
-    - State Report now sets the default TO time to the actual time rather than at 00:00 today.
 
1503
-       Reported: Andrei Kovacs
 
1504
-       
 
1505
-    - Customers are now allowed to see the Graph Type Chooser, until we get more flexible on what can a logged in customer do.
 
1506
-       Requested: Alexandra Alvarado
 
1507
-
 
1508
-
 
1509
-JFFNMS 0.7.0 - Released 2003-03-10
 
1510
-==================================
 
1511
-
 
1512
-*New Features:
 
1513
-    
 
1514
-    - New Syslog Message Processing System (support for RegExps and compatible with older definition)
 
1515
-       by: Craig Small and Javier Szyszlican
 
1516
-
 
1517
-    - New SNMP Traps Processing System 
 
1518
-       by: Craig Small
 
1519
-
 
1520
-    - Tacacs+ Consolidator now Supports REJECT messages (minor changes also).
 
1521
-
 
1522
-    - Reworked State Report 
 
1523
-       - Internal changes to use new rrdtool functions
 
1524
-       - Time filter
 
1525
-       - CSV Export
 
1526
-    
 
1527
-    - New API for some rrdtool functions to get dynamic structure changes,
 
1528
-       this includes cleanups in all graphs and every function that uses rrdtool.
 
1529
-       Now every DS goes on a different file like interface-999-0.rrd this is handled by the rrd_mode field 
 
1530
-    
 
1531
-    - The Interface Map Views has been broken in pieces for the cleaness of the code.
 
1532
-       This also helps to add a new Map View type. (htdocs/views/*) 
 
1533
-    
 
1534
-    - New Interface Map View on SubMaps (dynmap) allows you to change the position of 
 
1535
-       the interfaces in the map and to establish connections between them.
 
1536
-    
 
1537
-    - Bulk Interface Add Feature in Manual "Get Interfaces" Option, it allows you to add a lot of interfaces with only a few clicks,
 
1538
-       without using autodiscovery.
 
1539
-    
 
1540
-    - Designated Main Interface(s) (DMII) : You can select an interface or map of interfaces which will be the Main ones for that host, this means:
 
1541
-           if the DMII are all down, the polling of that host other interfaces will stop, 
 
1542
-           except for the DMII (to detect the UP again), this solves a domino or 'stacking' problem when some hosts are unreachable. 
 
1543
-           Also, a new event is generated when the Polling Fails because of DMII being down.
 
1544
-       Requested: Larry Burton
 
1545
-
 
1546
-    - Added Packets Aggregation (useful to see how much packets per second your router is handling)
 
1547
-    
 
1548
-    - New Interface Type for Windows Hosts (Servers), Number of Users, Number of Processes, Processor Utlization, and TCP Connections Graphs
 
1549
-       Requested: Rob Laidlaw  Information: Musfa Baig         Coding: Javier Szyszlican       URL: http://snmpboy.msft.net/
 
1550
-
 
1551
-    - New Interface Type: Cisco MAC Accounting, Polling and Graphing (ip accounting mac input, ip accounting mac output)
 
1552
-       This allows one graph per MAC Address giving you accounting per machine in an Ethernet Segment. Experimental, Autodiscovery Disabled.
 
1553
-
 
1554
-    - Modified Linux Host Type: New Graphs and Pollers for Number of Users, Number of Processes, and TCP Connections Graph
 
1555
-       Also Changed its name to UCD-SNMP Host, because we support FreeBSD (Need Testing) or other ucd-snmp implementations 
 
1556
-           with this Interface Type
 
1557
-
 
1558
-    - Modified Cisco Host: New Graphs and Pollers for TCP Connections Graph, and Accounting
 
1559
-
 
1560
-    - TCP Port Delay and Number of connections graph (aggregation too) (modified interface type) 
 
1561
-       Requested: Karlheinz Hagen
 
1562
-
 
1563
-    - Smokeping Integration (RTT & PL), Discovery, SLAs, Graphs
 
1564
-       by: Craig Small
 
1565
-    
 
1566
-    - Cisco IP Accouting Polling and Graphing (ip accounting output-packets)
 
1567
-        
 
1568
-    - If no interfaces found in Manual Discovery Show the "No Interfaces Found" Message
 
1569
-
 
1570
-    - Cisco CPU SLA, SLA set to match at > 80%
 
1571
-       Requested: Brian Watters                
 
1572
-
 
1573
-    - Cisco Syslog Message: ACL Match
 
1574
-       Requested: Alexandra Alvarado           
 
1575
-
 
1576
-    - Cisco Syslog Message: CDP Duplex Mismatch
 
1577
-       Requested: Alexandra Alvarado   
 
1578
-
 
1579
-    - Cisco Syslog BGP Notification Message
 
1580
-
 
1581
-    - Added Profile option to not show the stats on the start page.
 
1582
-    
 
1583
-    - Added Shortcuts to go bettween View Performance, Interface Administration and State Reports    
 
1584
-
 
1585
-    - New FrameWork for Distributed Processing (Satellites)
 
1586
-       Each Satellite is an jffnms in a different machine, this allows Distributed Polling for now
 
1587
-       in the future this will allow to do syslog,trap,discovery an other in a distributed fashion. 
 
1588
-       Experimental, Needs Testing, Allows Load Balancing.
 
1589
-    
 
1590
-    - Added Label at the Setup to know which config file are you using 
 
1591
-
 
1592
-    - Added Option to Event Filter so now you can filter by Extra Info too (LIKE), useful for seaching in tacacs logs.
 
1593
-       Requested: TIBA Staff
 
1594
-
 
1595
-    - Added Options to Event Filter to NOT get a field when it matches.
 
1596
-
 
1597
-    - Added the RRDTool Step value to the Interface Type options. 
 
1598
-       This is used when creating a new rrd file.
 
1599
-    
 
1600
-    - Added a Favicon icon and some HTML meta tags.
 
1601
-
 
1602
-    - Setup.php now checks for Register_Globals to be set to On    
 
1603
-       
 
1604
-    - Added RRDTool Dump & Restore functions to API
 
1605
-    
 
1606
-*Fixed bugs:
 
1607
-    
 
1608
-    - Wrong Query date compare in interfaces_status (typo from postgres changes) 
 
1609
-       Reported: Stanislav Gaydukov    Fixed: Javier Szyszlican
 
1610
-
 
1611
-    - RRDTool Fetch Speedups (it was using too much memory)
 
1612
-       Reported: Juan Rojas            Fixed: Javier Szyszlican
 
1613
-    
 
1614
-    - Verify length of info field in insert_event
 
1615
-       Reported: Alejandro Alvarez     Fixed: Javier Szyszlican
 
1616
-
 
1617
-    - Better handling of LIMIT on a pgsql query
 
1618
-       Reported: Alejandro Alvarez     Fixed: Javier Szyszlican
 
1619
-
 
1620
-    - Field type of interfaces.host was tinyint, now changed to int. (it was a typo)
 
1621
-       Reported: Kevin R. Armstrong    Fixed: Kevin R. Armstrong
 
1622
-    
 
1623
-    - The Maps Interfaces GUI type changer didn't work right on Mozilla
 
1624
-       Reported: Javier Szyszlican     Fixed: Javier Szyszlican
 
1625
-
 
1626
-    - The Path of the TFTP windows .bat file was wrong.
 
1627
-       Reported: Gregory A. Leggett Jr.Fixed: Gregory A. Leggett Jr.
 
1628
-
 
1629
-    - If no tcp ports were found on a host, the Manual discovery showed garbage
 
1630
-       Reported: Javier Szyszlican     Fixed: Javier Szyszlican
 
1631
-
 
1632
-    - Sounds where not working on the view_interfaces.php (Main Map).
 
1633
-       Reported: Javier Szyszlican     Fixed: Javier Szyszlican
 
1634
-
 
1635
-    - Off by 1 error didn't show events if only one is found.
 
1636
-       Reported: Javier Szyszlican     Fixed: Javier Szyszlican
 
1637
-
 
1638
-    - Events View All Option didnt show all the events.
 
1639
-       Reported: Juan Rojas            Fixed: Javier Szyszlican
 
1640
-
 
1641
-    - SQL LIMIT and OFFSET doesnt accept numbers with decimals, now rounded.
 
1642
-       Reported: Javier Szyszlican     Fixed: Javier Szyszlican
 
1643
-
 
1644
-    - State Report showed dates in Seconds, now in Hours:Minutes:Seconds
 
1645
-       Reported: Javier Szyszlican     Fixed: Javier Szyszlican
 
1646
-
 
1647
-    - State Report did wrong math in Total Values
 
1648
-       Reported: Javier Szyszlican     Fixed: Javier Szyszlican
 
1649
-
 
1650
-    - Java Map was deprecated.
 
1651
-
 
1652
-    - Availability Report was deprecated in favor of the State Report.
 
1653
-
 
1654
-    - Fixed SLA Processor (rrd_analizer) to take care of one line SLA's
 
1655
-       Reported: Brian Watters         Fixed: Javier Szyszlican
 
1656
-
 
1657
-    - Fixed Event Filter to Allow Search of Unknown Events
 
1658
-
 
1659
-    - Disable refresh when you go back in the Events Screen
 
1660
-
 
1661
-    - Behavior Change: when an interface/host is not reachable (non response) is taken like a down response.
 
1662
-       This affects the report generation also... please test this and give me feedback so we could know which is best.
 
1663
-
 
1664
-    - Added Verification of SNMP community to a few pollers
 
1665
-    
 
1666
-    - Fixed Typo in menu_interfaces
 
1667
-
 
1668
-    - Fixed Typo in db_copy_table()
 
1669
-    
 
1670
-    - Changed Most Event Filter Fields to the LIKE expression rather than equal (=)
 
1671
-
 
1672
-    - Added Default Customer to the Get Interfaces Option
 
1673
-            
 
1674
-    - New Include File Loader, fixed for multiple installtions
 
1675
-    
 
1676
-
 
1677
-JFFNMS 0.6.9-2 - Released 2002-09-21
 
1678
-====================================
 
1679
-
 
1680
-*Fixed bugs:
 
1681
-
 
1682
-    - Modified some SQL querys to make them compatible PostgreSQL
 
1683
-       Postgres support now works.
 
1684
-       
 
1685
-    - Fixed a typo in trap_receiver.php (the name)
 
1686
-    
 
1687
-    - Make RRDTool functions check for the .rrd file.
 
1688
-    
 
1689
-    - Converted some GUI selects to the new API.
 
1690
-    
 
1691
-    - Fixed a function name change in filters.    
 
1692
-
 
1693
-
 
1694
-JFFNMS 0.6.9 - Released 2002-09-07
 
1695
-==================================
 
1696
-
 
1697
-*New Features:
 
1698
-    
 
1699
-    -Triggers Framework:
 
1700
-       Parse New Events or Alarms with a condition,
 
1701
-       and triggers an Action.
 
1702
-
 
1703
-    -Actions Framework (email for now)
 
1704
-    
 
1705
-    -Host Default Customer 
 
1706
-       Assigns a default customer to an autodiscovered interface.
 
1707
-
 
1708
-    -Host TFTP Config Get Type included in DB.
 
1709
-    
 
1710
-    -TFTP Get Hosts Changed its name. (please update crontabs)
 
1711
-    
 
1712
-    -TFTP Config Upload Tool (external utility)
 
1713
-    
 
1714
-    -Use Interface Bandwidth parameter for number of CPU's on CPU Information.
 
1715
-    
 
1716
-    -SLAs: more verbose debug.
 
1717
-    
 
1718
-    -SLAs: Updated Rules.
 
1719
-
 
1720
-    -Maps: Mark Disabled now affects Maps also.
 
1721
-    
 
1722
-    -GUI: Events: Summary of Identical Events.
 
1723
-        
 
1724
-    -GUI: New Interfaces Views (supports bigger graphs)
 
1725
-
 
1726
-    -New To Do List.
 
1727
-
 
1728
-*Fixed bugs:
 
1729
-
 
1730
-    -Documentation fixes.
 
1731
-
 
1732
-    -Changed field 'tipo' (spanish) from events table to 'type'.
 
1733
-    
 
1734
-    -Reorganization of some API Classes.
 
1735
-
 
1736
-    -FreeBSD (PHP 4.2.2) $_SERVER variable Changes. 
 
1737
-       Reported: Nicolas Huret         Fixed: Javier Szyszlican
 
1738
-
 
1739
-    -Autodiscovery: Verify more before Modification.
 
1740
-    
 
1741
-    -Consolidate sub-programs name change.
 
1742
-
 
1743
-    -API Alarms: Fixed Filters.
 
1744
-    
 
1745
-    -API Events: Variable resolution now is internal, not in GUI.
 
1746
-
 
1747
-    -API RRDTool: verify if .rrd exists before tune.
 
1748
-
 
1749
-    -Ticket: Some changes.
 
1750
-    
 
1751
-    -GUI: Interfaces '1 record only' fixes.
 
1752
-    
 
1753
-    -GUI: Standard Admin Fixes.    
 
1754
-
 
1755
-    -GUI: Updated some selects to objects.
 
1756
-    
 
1757
-    -GUI: changed RRDTool Graph grid color.
 
1758
-
 
1759
-    -Alarm Viewer is gone, it didnt work.    
 
1760
-
 
1761
-
 
1762
-
 
1763
-JFFNMS 0.6.8 - Released 2002-07-27
 
1764
-==================================
 
1765
-
 
1766
-*New Features:
 
1767
-
 
1768
-    -Windows 2000/XP Support. 
 
1769
-       JFFNMS works correctly on Windows, all functions work 
 
1770
-           except TCP Port Autodiscovery (I need a windows nmap).
 
1771
-       Install Guide Included.
 
1772
-    
 
1773
-    -New Graph Types Framework
 
1774
-       Converted all graphs to the new format.
 
1775
-    
 
1776
-    -New Interface Types (by Robert Bogdon):
 
1777
-       Cisco CSS VIPs 
 
1778
-       Linux Processor Usage 
 
1779
-       Linux Load Average
 
1780
-       Solaris Memory Utilization
 
1781
-       Solaris Processor Usage
 
1782
-       Solaris Load Average
 
1783
-       
 
1784
-       Includes Autodiscovery, Graphs and Poller Groups.
 
1785
-       
 
1786
-    -Better Host Information Identification
 
1787
-       Based on Robert Bogdon code.
 
1788
-    
 
1789
-    -Added Drops (<drops>) variable to SLA's 
 
1790
-
 
1791
-    -Better SLA presentation, more flexible and useful output.
 
1792
-       Requested by: TIBA Staff
 
1793
-               
 
1794
-    -New MiniSLA's, SLA verifications every 5 minutes (optional)
 
1795
-       Requested by: TIBA Staff
 
1796
-    
 
1797
-    -New Journaling Framework, better handling of comments and 
 
1798
-       Reporting/Editing.
 
1799
-    
 
1800
-    -New Trouble Ticket Integration Framework, send Journals to your TT System.
 
1801
-       Example included.
 
1802
-       
 
1803
-    -Interface Selector, you can now select by Interface Type and 
 
1804
-       the View all button is back is Wizard Mode.
 
1805
-    
 
1806
-    
 
1807
-*Fixed bugs:
 
1808
-    -Documentation fixes.
 
1809
-
 
1810
-    -PHP Time Limit Handling implemented. 
 
1811
-       Reported: Micheal Orth          Fixed: Javier Szyszlican
 
1812
-
 
1813
-    -Quotes Handling in Tacacs and TFTP
 
1814
-       Reported: Alberto Passariello   Fixed: Javier Szyszlican
 
1815
-
 
1816
-    -Changed snmp_interfaces to numerical OIDs.
 
1817
-    
 
1818
-    -Take care of HexStrings and Quotes on Windows Agents
 
1819
-    
 
1820
-    -Changed Default Speed of Snmp Interfaces to 128k because 0 makes no graphs.
 
1821
-    
 
1822
-    -Changed $argv[] to _$SERVER[argv][] in engines.
 
1823
-       Requested by: Someone running FreeBSD with PHP 4.2.1
 
1824
-
 
1825
-    -Fixed a typo in poller.php str_replace.
 
1826
-       Fixed by: Robert Bogdon
 
1827
-
 
1828
-    -When creating a new Host, now the filter is to the seleced zone, not Uknown.
 
1829
-    
 
1830
-    -Fixed some Setup Autoconfiguration options
 
1831
-    
 
1832
-    -Move MiniSLA's and Messages to popups.php and popups/ directory
 
1833
-    
 
1834
-    -New Graph Type Selection (performance) Algorithm
 
1835
-    
 
1836
-    -Moved all RRD Related functions to api.rrdtool.inc.php
 
1837
-     
 
1838
-    -Changed Host_Interfaces (aka Get Interfaces in Host Configuration) to only 
 
1839
-       show the interfaces types with records.
 
1840
-
 
1841
-    -Don't Show MultiEdit in Interfaces Administration when only one record is shown.
 
1842
-    
 
1843
-
 
1844
-JFFNMS 0.6.7 - Released 2002-06-29
 
1845
-==================================
 
1846
-
 
1847
-*Fixed bugs:
 
1848
-    -When changing password the Router Access was disabled. 
 
1849
-        Reported: Mariano Schuler      Fixed: Javier Szyszlican
 
1850
-       
 
1851
-    -Handling of shutdown events, leaves interface down. 
 
1852
-       Reported: Lucas Iglesias        Fixed: Javier Szyszlican
 
1853
-    
 
1854
-    -Storage discovery broken in UCD-SNMP 2.4.4
 
1855
-    
 
1856
-    -TCP Port Poller timeout, too short, increased to 8 seconds.
 
1857
-    
 
1858
-    -Some Orders are inverted.
 
1859
-    
 
1860
-    -API: better filter management in interfaces object. (status & list)
 
1861
-    -API: Auth now on jffnms object.
 
1862
-    -API: new delete_from_all method on map_interfaces object.
 
1863
-
 
1864
-    -Change Clock color to white in Events.
 
1865
-        
 
1866
-*New Features:
 
1867
-    -New Interface in Rootmap status, you can mark the interface as disabled (grey).
 
1868
-    -Add to Map option in Interfaces Editor.
 
1869
-    -New Interface Selector (Wizard and Classic mode) (faster)
 
1870
-    -Autoconfigurable Setup.php (Robert Bogdon)
 
1871
-    -Use the OLD-CISCO-SYS-MIB for configuration retrival (optional) (requested by: Mike Hide)
 
1872
-    -Wait 3 seconds before spawning new a process in autodiscovery_interfaces.php and poller.php (requested by: Robert Bogdon)
 
1873
-    -New Poller: BGP Peer Interface Number (track when new bgp peer are added).
 
1874
-    -New Views: Host All Interfaces (not only the ones with show in rootmap), Alarmed interfaces & events.    
 
1875
-    
 
1876
-OLDER RELEASES
 
1877
-==============
 
1878
-
 
1879
-Please check http://sourceforge.net/tracker/?atid=444844&group_id=46041&func=browse
 
1880
-     
 
1881
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/conf/config.php jffnms-0.9.3/conf/config.php
 
1882
--- ../jffnms-0.9.2/conf/config.php     2012-03-04 13:43:11.000000000 +1100
 
1883
+++ jffnms-0.9.3/conf/config.php        2012-05-26 14:50:17.000000000 +1000
 
1884
@@ -1,7 +1,7 @@
 
1885
 <?php
 
1886
 /* This file is part of JFFNMS
 
1887
  * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
1888
- * Copyright (C) 2011 Craig Small <csmall@enc.com.au>
 
1889
+ * Copyright (C) 2012 Craig Small <csmall@enc.com.au>
 
1890
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
1891
  */
 
1892
 #error_reporting(E_ALL | E_STRICT);
 
1893
@@ -10,7 +10,7 @@
 
1894
     snmp_set_output_format(SNMP_OID_OUTPUT_NUMERIC);
 
1895
 if (function_exists('snmp_set_quick_print'))
 
1896
     snmp_set_quick_print(1);
 
1897
-define('JFFNMS_VERSION', '0.9.1');
 
1898
+define('JFFNMS_VERSION', '0.9.3');
 
1899
 
 
1900
 class JffnmsConfig
 
1901
 {
 
1902
@@ -52,7 +52,8 @@
 
1903
     {
 
1904
         if ($key == 'logging_file')
 
1905
             continue;
 
1906
-        if (!array_key_exists('type', $this->default_configs[$key]))
 
1907
+        if (!array_key_exists($key, $this->default_configs) ||
 
1908
+            !array_key_exists('type', $this->default_configs[$key]))
 
1909
             $config_type='plain';
 
1910
         else
 
1911
             $config_type = $this->default_configs[$key]['type'];
 
1912
@@ -64,7 +65,8 @@
 
1913
         case 'phpconf':
 
1914
             break; # this lot dont get saved
 
1915
         default:
 
1916
-            if (!array_key_exists('default', $this->default_configs[$key]) ||
 
1917
+            if (!array_key_exists($key, $this->default_configs) ||
 
1918
+                !array_key_exists('default', $this->default_configs[$key]) ||
 
1919
                 $value != $this->default_configs[$key]['default'])
 
1920
                 $new_config .= "$key = $value\n";
 
1921
         }
 
1922
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/docs/unix/crontab jffnms-0.9.3/docs/unix/crontab
 
1923
--- ../jffnms-0.9.2/docs/unix/crontab   2010-11-09 21:20:49.000000000 +1100
 
1924
+++ jffnms-0.9.3/docs/unix/crontab      2012-03-27 20:40:58.000000000 +1100
 
1925
@@ -16,10 +16,14 @@
 
1926
 20   * * * *    cd $JFFNMS && sh tmpwatch.sh $JFFNMS >/dev/null 2>&1
 
1927
 
 
1928
 
 
1929
-# Normal poller - run once (like old poller)
 
1930
-*/5  * * * *    cd $JFFNMS && $PHP -q poller.php -o >/dev/null 2>&1
 
1931
-# Poller that stays in loop, like poller2
 
1932
+
 
1933
+# *** Pollers
 
1934
+# Only uncomment one of the following. The -o flag will make it run only
 
1935
+# once then exit. It is better to use the first one
 
1936
 */5  * * * *    cd $JFFNMS && $PHP -q poller.php >/dev/null 2>&1
 
1937
+# run 20 children
 
1938
+#*/5  * * * *    cd $JFFNMS && $PHP -q poller.php -c 0,20 >/dev/null 2>&1
 
1939
+#*/5  * * * *    cd $JFFNMS && $PHP -q poller.php -o >/dev/null 2>&1
 
1940
 
 
1941
 # Interface Autodiscovery
 
1942
 */30 * * * *    cd $JFFNMS && $PHP -q autodiscovery_interfaces.php > /dev/null 2>&1
 
1943
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/autodiscovery_interfaces.php jffnms-0.9.3/engine/autodiscovery_interfaces.php
 
1944
--- ../jffnms-0.9.2/engine/autodiscovery_interfaces.php 2012-02-14 23:10:39.000000000 +1100
 
1945
+++ jffnms-0.9.3/engine/autodiscovery_interfaces.php    2012-04-18 09:00:13.000000000 +1000
 
1946
@@ -48,6 +48,7 @@
 
1947
         case 'F':
 
1948
             $opt_force=TRUE;
 
1949
             $num_params-= 1;
 
1950
+            break;
 
1951
         case 'type':
 
1952
         case 't':
 
1953
             $num_params-= 2;
 
1954
@@ -141,6 +142,7 @@
 
1955
 
 
1956
 function iad_get_hosts($host_id,$itype_id)
 
1957
 {
 
1958
+  global $opt_force;
 
1959
   if ($host_id === FALSE)
 
1960
     $hostid_match = '> 1';
 
1961
   else
 
1962
@@ -150,8 +152,9 @@
 
1963
       id, ip, rocommunity, autodiscovery_default_customer, autodiscovery, sysobjectid
 
1964
     FROM hosts
 
1965
     WHERE
 
1966
-      hosts.id $hostid_match
 
1967
-      AND hosts.poll = 1 AND hosts.autodiscovery > 1";
 
1968
+    hosts.id $hostid_match";
 
1969
+  if (!$opt_force)
 
1970
+      $query_hosts .= " AND hosts.poll = 1 AND hosts.autodiscovery > 1";
 
1971
 
 
1972
   $result_hosts = db_query($query_hosts) or die ('Query failed - iad_get_hosts() '.db_error());
 
1973
 
 
1974
@@ -175,27 +178,26 @@
 
1975
 
 
1976
 function iad_read_children(&$Parent)
 
1977
 {
 
1978
-    $repeats = 10;
 
1979
+    $read_timeout = max(time() + ENGINE_HEARTBEAT/$Parent->max_children,2);
 
1980
 
 
1981
-    while ($repeats--) {
 
1982
-        $read_retval = $Parent->read_children();
 
1983
-        if ($read_retval === FALSE)
 
1984
+    while (time() < $read_timeout) {
 
1985
+        if ($Parent->read_children('iad_read_callback') == FALSE)
 
1986
             return;
 
1987
-        if ($read_retval === TRUE)
 
1988
-            continue;
 
1989
-        // otherwise its something we parse
 
1990
-        list($child_id, $child_data) = $read_retval;
 
1991
-        switch($child_data['cmd'])
 
1992
-        {
 
1993
-        case 'DONE':
 
1994
-            $item_id = $Parent->child_done_job($child_id);
 
1995
-            break;
 
1996
-        case 'NOTDONE':
 
1997
-            $Parent->child_notdone_job($child_id);
 
1998
-            break;
 
1999
-        }
 
2000
-    } // while repeats
 
2001
-} //iad_read_children()
 
2002
+    }
 
2003
+}
 
2004
+
 
2005
+function iad_read_callback(&$Parent, $child_id, $child_data)
 
2006
+{
 
2007
+    switch($child_data['cmd'])
 
2008
+    {
 
2009
+    case 'DONE':
 
2010
+        $item_id = $Parent->child_done_job($child_id);
 
2011
+        break;
 
2012
+    case 'NOTDONE':
 
2013
+        $Parent->child_notdone_job($child_id);
 
2014
+        break;
 
2015
+    }
 
2016
+} //iad_read_callback()
 
2017
 
 
2018
 ?>
 
2019
       
 
2020
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/common_child.inc.php jffnms-0.9.3/engine/common_child.inc.php
 
2021
--- ../jffnms-0.9.2/engine/common_child.inc.php 2011-04-15 09:46:32.000000000 +1000
 
2022
+++ jffnms-0.9.3/engine/common_child.inc.php    2012-03-09 22:56:51.000000000 +1100
 
2023
@@ -40,9 +40,19 @@
 
2024
             die("Cannot write message to parent.\n");
 
2025
         fflush($this->stdout);
 
2026
     }
 
2027
+    public function debug($item)
 
2028
+    {
 
2029
+        $debug_msg = explode("\n", print_r($item, TRUE));
 
2030
+        $this->send_array("DEBUG",array('msg'=>$debug_msg));
 
2031
+    }
 
2032
+
 
2033
+    public function logger($msg)
 
2034
+    {
 
2035
+        $this->send_array('LOGGER', array('msg'=>addslashes(rtrim($msg))));
 
2036
+    }
 
2037
     public function send_error($msg)
 
2038
     {
 
2039
-        $this->send_array('ERROR', array('msg'=>$msg));
 
2040
+        $this->send_array('ERROR', array('msg'=>rtrim($msg)));
 
2041
     }
 
2042
     public function check_heartbeat($old_time)
 
2043
     {
 
2044
@@ -76,4 +86,12 @@
 
2045
         return TRUE;
 
2046
     } // require_file
 
2047
 } // class JffmnsEngineChild
 
2048
+
 
2049
+function child_debug($item)
 
2050
+{
 
2051
+    global $Child;
 
2052
+    $Child->debug($item);
 
2053
+}
 
2054
+
 
2055
+
 
2056
 ?>
 
2057
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/common_parent.inc.php jffnms-0.9.3/engine/common_parent.inc.php
 
2058
--- ../jffnms-0.9.2/engine/common_parent.inc.php        2011-05-23 10:23:31.000000000 +1000
 
2059
+++ jffnms-0.9.3/engine/common_parent.inc.php   2012-03-21 11:59:17.000000000 +1100
 
2060
@@ -11,6 +11,7 @@
 
2061
 define ('ENGINE_MAX_POLL_TIME', 180);
 
2062
 define ('ENGINE_DIE_TIME', 5);
 
2063
 define ('ENGINE_MAX_CHILDREN', 5);
 
2064
+define ('ENGINE_SELECT_USEC', 2000); //PHP RECOMMENDATION is 200,000
 
2065
 
 
2066
 require_once('../conf/config.php');
 
2067
 $Config = new JffnmsConfig();
 
2068
@@ -61,12 +62,12 @@
 
2069
     {
 
2070
         $new_wait = count($this->waiting_items);
 
2071
         if ($this->waiting_count != $new_wait) {
 
2072
-            logger("Waiting count adjusted to $new_wait (was ".$this->waiting_count.")\n");
 
2073
+            logger("PAR: Waiting count adjusted to $new_wait (was ".$this->waiting_count.")\n");
 
2074
             $this->waiting_count = $new_wait;
 
2075
         }
 
2076
         $new_poll = count($this->polling_items);
 
2077
         if ($this->polling_count != $new_poll) {
 
2078
-            logger("polling count adjusted to $new_poll (was ".$this->polling_count.")\n");
 
2079
+            logger("PAR: Polling count adjusted to $new_poll (was ".$this->polling_count.")\n");
 
2080
             $this->polling_count = $new_poll;
 
2081
         }
 
2082
     }
 
2083
@@ -79,7 +80,7 @@
 
2084
             return;
 
2085
         }
 
2086
         if (!array_key_exists($item_id, $this->polling_items)) {
 
2087
-            logger("item_set_done(): Item $item_id does not exist in poller items.\n");
 
2088
+            logger("PAR: ** ERROR ** item_set_done(): Item $item_id does not exist in poller items.\n");
 
2089
             $this->items_recount();
 
2090
             return;
 
2091
         }
 
2092
@@ -94,13 +95,17 @@
 
2093
             return;
 
2094
         }
 
2095
         if (!array_key_exists($item_id, $this->polling_items)) {
 
2096
-            logger("item_set_waiting(): Item $item_id does not exist in poller items.\n");
 
2097
+            logger("PAR: ** ERROR ** item_set_waiting(): Item $item_id does not exist in poller items.\n");
 
2098
             $this->items_recount();
 
2099
             return;
 
2100
         }
 
2101
-        $this->waiting_items[$item_id] = $this->polling_items[$item_id];
 
2102
+        if ($this->polling_items[$item_id]['tries'] > ENGINE_MAX_TRIES) {
 
2103
+            logger("PAR: Cannot process item $item_id after ".ENGINE_MAX_TRIES." attempts.\n");
 
2104
+        } else {
 
2105
+            $this->waiting_items[$item_id] = $this->polling_items[$item_id];
 
2106
+            $this->waiting_count++;
 
2107
+        }
 
2108
         unset($this->polling_items[$item_id]);
 
2109
-        $this->waiting_count++;
 
2110
         $this->polling_count--;
 
2111
     } // item_set_waiting
 
2112
 
 
2113
@@ -111,7 +116,7 @@
 
2114
             return;
 
2115
         }
 
2116
         if (!array_key_exists($item_id, $this->waiting_items)) {
 
2117
-            logger("item_set_polling(): Item $item_id does not exist in waiting items.\n");
 
2118
+            logger("PAR: ** ERROR ** item_set_polling(): Item $item_id does not exist in waiting items.\n");
 
2119
             $this->items_recount();
 
2120
             return;
 
2121
         }
 
2122
@@ -163,13 +168,22 @@
 
2123
             $new_child = $this->start_child();
 
2124
             if ($new_child === FALSE)
 
2125
                 return $children_started;
 
2126
-            $this->child_procs[] = $new_child;
 
2127
+            $this->child_procs[$this->get_child_id()] = $new_child;
 
2128
             $children_count++;
 
2129
             $children_started++;
 
2130
         }
 
2131
         return $children_started;
 
2132
     } // children_start()
 
2133
 
 
2134
+    public function get_child_id()
 
2135
+    {
 
2136
+        $id=0;
 
2137
+        while(TRUE) {
 
2138
+            if (!array_key_exists($id, $this->child_procs))
 
2139
+                return $id;
 
2140
+            $id++;
 
2141
+        }
 
2142
+    }
 
2143
     public function stop_all_children($reason)
 
2144
     {
 
2145
         foreach ($this->child_procs as $child_id => $child)
 
2146
@@ -179,10 +193,10 @@
 
2147
     public function stop_child($child_id, $reason)
 
2148
     {
 
2149
         if (!array_key_exists($child_id, $this->child_procs)) {
 
2150
-            logger("** FATAL ** Child ID $child_id stopped but doesn't exist.\n");
 
2151
+            logger("PAR: ** FATAL ** Child ID $child_id stopped but doesn't exist.\n");
 
2152
             die();
 
2153
         }
 
2154
-        logger("Child #$child_id (PID:".$this->child_procs[$child_id]['pid'].") stopped: $reason.\n");
 
2155
+        logger("CH$child_id (".$this->child_procs[$child_id]['pid']."): stopped: $reason.\n");
 
2156
         $this->item_set_waiting($this->child_procs[$child_id]['item_id']);
 
2157
         $this->child_procs[$child_id]['item_id']=FALSE;
 
2158
         $this->child_procs[$child_id]['state']='DEAD';
 
2159
@@ -199,7 +213,7 @@
 
2160
             // Check that the child process actually exists
 
2161
             $child_stat = proc_get_status($child['resource']);
 
2162
             if ($child_stat === FALSE ) {
 
2163
-                logger("Child $child_id has no status - removing.\n");
 
2164
+                logger("CH:$child_id no status - removing.\n");
 
2165
                 $this->item_set_waiting($child['item_id']);
 
2166
                 unset($this->child_procs[$child_id]);
 
2167
                 $child_count--;
 
2168
@@ -207,7 +221,7 @@
 
2169
             }
 
2170
             if ($child_stat['running'] === FALSE) {
 
2171
                 if ($child['state'] != 'DEAD')
 
2172
-                    logger("Child $child_id is no longer running - removing.\n");
 
2173
+                    logger("CH:$child_id No longer running - removing.\n");
 
2174
                 $this->item_set_waiting($child['item_id']);
 
2175
                 proc_close($child['resource']);
 
2176
                 unset($this->child_procs[$child_id]);
 
2177
@@ -238,7 +252,7 @@
 
2178
                 break;
 
2179
             case 'DEAD':
 
2180
                 if ($child['killtime'] + ENGINE_DIE_TIME < $now) {
 
2181
-                    logger("Child #$child_id (PID:$child[pid]) took too long to die.\n");
 
2182
+                    logger("CH:$child_id ($child[pid]): took too long to die.\n");
 
2183
                     proc_close($child['resource']);
 
2184
                     unset($this->child_procs[$child_id]);
 
2185
                     $child_count--;
 
2186
@@ -249,7 +263,7 @@
 
2187
         } // foreach children
 
2188
     }
 
2189
 
 
2190
-    public function read_children()
 
2191
+    public function read_children($callback_function)
 
2192
     {
 
2193
         $read_fds = array();
 
2194
         $write_fds = NULL;
 
2195
@@ -262,59 +276,83 @@
 
2196
         if (sizeof($read_fds) == 0)
 
2197
             return FALSE;
 
2198
 
 
2199
+        $child_had_data = FALSE;
 
2200
         if ( ($nr = stream_select($read_fds, $write_fds, $except_fds, 0)) !== FALSE) {
 
2201
             if ($nr == 0)
 
2202
                 return FALSE;
 
2203
             foreach($this->child_procs AS $child_id => &$child_proc) {
 
2204
                 if ( in_array($child_proc['output'], $read_fds)) {
 
2205
-                    if ( ($raw_data = fgets($child_proc['output'])) !== FALSE) {
 
2206
-                        $child_proc['lastseen'] = $now;
 
2207
-                        $child_data = @unserialize($raw_data);
 
2208
-                        //print_r($child_data);
 
2209
-                        if (!is_array($child_data)) {
 
2210
-                            // If unserialise fails, it needs to be logged
 
2211
-                            logger("CHILD #$child_id   ".preg_replace('/^\d\d\:\d\d\:\d\d /','',$raw_data));
 
2212
-                            return TRUE;
 
2213
-                        }
 
2214
-                        if (!array_key_exists('cmd', $child_data))
 
2215
-                        {
 
2216
-                            logger('Child #'.$child_id.' sent data with no cmd.');
 
2217
-                            return TRUE;
 
2218
-                        }
 
2219
-                        switch($child_data['cmd'])
 
2220
+                    if ( ($raw_data = fgets($child_proc['output'])) === FALSE)
 
2221
+                        continue;
 
2222
+                    $child_proc['lastseen'] = $now;
 
2223
+                    $child_data = @unserialize($raw_data);
 
2224
+                    //print_r($child_data);
 
2225
+                    if (!is_array($child_data)) {
 
2226
+                        // If unserialise fails, it needs to be logged
 
2227
+                        logger("CH$child_id :  RAW:".preg_replace('/^\d\d\:\d\d\:\d\d /','',$raw_data));
 
2228
+                        $child_had_data = TRUE;
 
2229
+                        continue;
 
2230
+                    }
 
2231
+                    if (!array_key_exists('cmd', $child_data))
 
2232
+                    {
 
2233
+                        logger("CH#$child_id: ERROR sent data with no cmd.");
 
2234
+                        $child_had_data = TRUE;
 
2235
+                        continue;
 
2236
+                    }
 
2237
+                    switch($child_data['cmd'])
 
2238
+                    {
 
2239
+                    case 'HEARTBEAT':
 
2240
+                        $child_had_data = TRUE;
 
2241
+                        break;
 
2242
+                    case 'START':
 
2243
+                        if ($child_proc['state'] != 'STARTING')
 
2244
                         {
 
2245
-                        case 'HEARTBEAT':
 
2246
-                            break;
 
2247
-                        case 'START':
 
2248
-                            if ($child_proc['state'] != 'STARTING')
 
2249
-                            {
 
2250
-                                logger('Child #'.$child_id.' sending START after starting.');
 
2251
+                            logger("CH$child_id ($child_proc[pid]): sending START after starting.\n");
 
2252
+                        } else {
 
2253
+                            if (array_key_exists('pid', $child_data)) {
 
2254
+                                $child_proc['pid'] = $child_data['pid'];
 
2255
+                                $child_proc['state'] = 'IDLE';
 
2256
+                                logger("CH:$child_id ($child_proc[pid]): START and idle.\n");
 
2257
                             } else {
 
2258
-                                if (array_key_exists('pid', $child_data))
 
2259
-                                {
 
2260
-                                    $child_proc['pid'] = $child_data['pid'];
 
2261
-                                    $child_proc['state'] = 'IDLE';
 
2262
-                                    logger("START     Child started with PID $child_proc[pid] and idle.\n");
 
2263
-                                } else {
 
2264
-                                    logger('START     Child #'.$child_id.' sent START with no PID.');
 
2265
-                                }
 
2266
+                                logger("CH:$child_id (unknown): ERROR: child started and did not return PID.\n");
 
2267
                             }
 
2268
-                            break;
 
2269
-                        case 'ERROR':
 
2270
-                            if (array_key_exists('msg', $child_data))
 
2271
-                                logger("Child #$child_id (PID:$child_proc[pid]) got error \"$child_data[msg]\"\n");
 
2272
-                            else
 
2273
-                                logger("Child #$child_id (PID:$child_proc[pid]) got error \"unknown error\"\n");
 
2274
-                            break;
 
2275
-                        default:
 
2276
-                            return array($child_id, $child_data);
 
2277
-                            break;
 
2278
-                        }// case
 
2279
-                    }
 
2280
-                }
 
2281
+                        }
 
2282
+                        $child_had_data = TRUE;
 
2283
+                        break;
 
2284
+                    case 'DEBUG':
 
2285
+                        if (array_key_exists('msg', $child_data)) {
 
2286
+                            logger("CH:$child_id ($child_proc[pid]): DEBUG\n");
 
2287
+                            foreach ($child_data['msg'] as $line)
 
2288
+                            logger("  $line\n");
 
2289
+                        } else
 
2290
+                            logger("CH:$child_id ($child_proc[pid]): got DEBUG with no message\n");
 
2291
+                        $child_had_data = TRUE;
 
2292
+                        break;
 
2293
+
 
2294
+                    case 'LOGGER':
 
2295
+                        if (array_key_exists('msg', $child_data)) {
 
2296
+                            $msg = stripslashes($child_data['msg']);
 
2297
+                            logger("CH:$child_id ($child_proc[pid]): $msg\n");
 
2298
+                        } else
 
2299
+                            logger("CH:$child_id ($child_proc[pid]): logger called with no msg.\n");
 
2300
+                        $child_had_data = TRUE;
 
2301
+                        break;
 
2302
+                    case 'ERROR':
 
2303
+                        if (array_key_exists('msg', $child_data))
 
2304
+                            logger("CH$child_id ($child_proc[pid]): ERROR: \"$child_data[msg]\"\n");
 
2305
+                        else
 
2306
+                            logger("CH$child_id ($child_proc[pid]): got error \"unknown error\"\n");
 
2307
+                        $child_had_data = TRUE;
 
2308
+                        break;
 
2309
+                    default:
 
2310
+                        call_user_func_array($callback_function,array(&$this, $child_id, $child_data));
 
2311
+                        $child_had_data = TRUE;
 
2312
+                        break;
 
2313
+                    }// case
 
2314
+                }//child output inarry
 
2315
             }//foreach
 
2316
-        } // valid select
 
2317
-        return TRUE;
 
2318
+        }//nr not false
 
2319
+        return $child_had_data;
 
2320
     } // read_children()
 
2321
 
 
2322
     /*
 
2323
@@ -341,7 +379,7 @@
 
2324
                 $item['tries']++;
 
2325
                 $item['poll_time'] = time();
 
2326
                 $this->item_set_polling($item_id);
 
2327
-                logger("WORK      Child $child_id was idle, working on item $item_id Try $item[tries]\n");
 
2328
+                logger("PAR: Child $child_id was idle, working on item $item_id Try $item[tries]\n");
 
2329
                 $this->send_to_child($child_id, 'POLL',$item);
 
2330
                 break;
 
2331
             }// foreach child
 
2332
@@ -355,7 +393,7 @@
 
2333
     {
 
2334
         $child_count = array('starting'=>0, 'idle'=>0, 'busy'=>0,'dead'=>0,
 
2335
             'other'=>0, 'total'=>0 );
 
2336
-        logger('STATUS    Items Waiting/Polling=Total: '.
 
2337
+        logger('PAR: Items Waiting/Polling=Total: '.
 
2338
             $this->waiting_count.'/'.$this->polling_count."\n");
 
2339
 
 
2340
         foreach($this->child_procs as $child) {
 
2341
@@ -368,7 +406,7 @@
 
2342
             default: $child_count['other']++; break;
 
2343
             }
 
2344
         }
 
2345
-        logger('STATUS    Childn Min/Max Idl/Bsy/Srt/Ded/Otr=Tot: '.
 
2346
+        logger('PAR: Childn Min/Max Idl/Bsy/Srt/Ded/Otr=Tot: '.
 
2347
             $this->min_children.'/'.
 
2348
             $this->max_children.' '.
 
2349
             "$child_count[idle]/$child_count[busy]/$child_count[starting]/$child_count[dead]/$child_count[other]=$child_count[total]\n");
 
2350
@@ -391,14 +429,15 @@
 
2351
     public function child_notdone_job($child_id)
 
2352
     {
 
2353
         if (array_key_exists($child_id, $this->child_procs)) {
 
2354
-            logger("Child #$child_id failed to process item $item_id.\n");
 
2355
-            $item_id = $this->child_procs[$child_id]['item_id'];
 
2356
+            $child = $this->child_procs[$child_id];
 
2357
+            $item_id = $child['item_id'];
 
2358
+            logger("CH:$child_id (): ** ERROR ** failed to process item $item_id.\n");
 
2359
             $this->item_set_waiting($item_id);
 
2360
             $this->child_procs[$child_id]['state'] = 'IDLE';
 
2361
             $this->child_procs[$child_id]['item_id'] = FALSE;
 
2362
             return $item_id;
 
2363
         }
 
2364
-        logger("** ERROR ** child_notdone_job(): Child ID $child_id not found.\n");
 
2365
+        logger("CH: $child_id(): ** ERROR ** child_notdone_job(): Child ID $child_id not found.\n");
 
2366
         return FALSE;
 
2367
     } // child_notdone_job()
 
2368
 
 
2369
@@ -430,7 +469,7 @@
 
2370
         $msg = serialize($args)."\n";
 
2371
         $msglen = strlen($msg);
 
2372
         if ( fwrite($this->child_procs[$child_id]['input'], $msg, $msglen) != $msglen)
 
2373
-            logger("Error sending message to child #$child_id.\n");
 
2374
+            logger("CH:$child_id(): ** ERROR ** Parent unable to send message to child.\n");
 
2375
         fflush($this->child_procs[$child_id]['input']);
 
2376
     }
 
2377
 } //class
 
2378
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/configs/alteon_webos.inc.php jffnms-0.9.3/engine/configs/alteon_webos.inc.php
 
2379
--- ../jffnms-0.9.2/engine/configs/alteon_webos.inc.php 2010-05-27 19:51:40.000000000 +1000
 
2380
+++ jffnms-0.9.3/engine/configs/alteon_webos.inc.php    2012-03-06 07:19:23.000000000 +1100
 
2381
@@ -5,11 +5,11 @@
 
2382
  */
 
2383
 
 
2384
 // agGeneral .1.3.6.1.4.1.1872.2.1.2.1
 
2385
-define(agTftpServer, '.1.3.6.1.4.1.1872.2.1.2.1.18.0');
 
2386
-define(agTftpCfgFileName, '.1.3.6.1.4.1.1872.2.1.2.1.19.0');
 
2387
-define(agTftpAction, '.1.3.6.1.4.1.1872.2.1.2.1.21.0');
 
2388
-define(cfg-get, '3');
 
2389
-define(agTftpLastActionStatus, '.1.3.6.1.4.1.1872.2.1.2.1.22.0');
 
2390
+define('agTftpServer', '.1.3.6.1.4.1.1872.2.1.2.1.18.0');
 
2391
+define('agTftpCfgFileName', '.1.3.6.1.4.1.1872.2.1.2.1.19.0');
 
2392
+define('agTftpAction', '.1.3.6.1.4.1.1872.2.1.2.1.21.0');
 
2393
+define('cfg-get', '3');
 
2394
+define('agTftpLastActionStatus', '.1.3.6.1.4.1.1872.2.1.2.1.22.0');
 
2395
 
 
2396
 function config_alteon_webos_get($ip, $community, $server, $filename) {
 
2397
 
 
2398
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/discovery/host_information.inc.php jffnms-0.9.3/engine/discovery/host_information.inc.php
 
2399
--- ../jffnms-0.9.2/engine/discovery/host_information.inc.php   2012-02-14 23:10:39.000000000 +1100
 
2400
+++ jffnms-0.9.3/engine/discovery/host_information.inc.php      2012-04-05 18:48:39.000000000 +1000
 
2401
@@ -35,7 +35,7 @@
 
2402
            // If it was, get all the other information and return an interface
 
2403
            if ($found==true) {
 
2404
                
 
2405
-               $description    = snmp_get ($ip, $rocommunity, $sysDescr_oid);
 
2406
+               $description    = str_replace("\n",' ',snmp_get ($ip, $rocommunity, $sysDescr_oid));
 
2407
                $name           = snmp_get ($ip, $rocommunity, $sysName_oid);
 
2408
                $contact        = snmp_get ($ip, $rocommunity, $sysContact_oid);
 
2409
                $location       = snmp_get ($ip, $rocommunity, $sysLocation_oid);
 
2410
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/discovery/snmp_interfaces.inc.php jffnms-0.9.3/engine/discovery/snmp_interfaces.inc.php
 
2411
--- ../jffnms-0.9.2/engine/discovery/snmp_interfaces.inc.php    2010-11-16 22:39:50.000000000 +1100
 
2412
+++ jffnms-0.9.3/engine/discovery/snmp_interfaces.inc.php       2012-04-09 10:44:26.000000000 +1000
 
2413
@@ -97,7 +97,7 @@
 
2414
           $int = $regs[1];
 
2415
           if (!empty($interface_names[$int])) // if it is already loaded in list
 
2416
           {
 
2417
-            $oid_id = $interface_names[$int];
 
2418
+            $old_id = $interface_names[$int];
 
2419
             $aux2 = $snmp_interfaces[$old_id];
 
2420
             $aux2['address'] = $new_interface['address'];
 
2421
             $aux2['peer'] = $new_interface['peer'];
 
2422
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/discovery/tcp_ports.inc.php jffnms-0.9.3/engine/discovery/tcp_ports.inc.php
 
2423
--- ../jffnms-0.9.2/engine/discovery/tcp_ports.inc.php  2011-02-21 11:55:19.000000000 +1100
 
2424
+++ jffnms-0.9.3/engine/discovery/tcp_ports.inc.php     2012-04-18 09:23:59.000000000 +1000
 
2425
@@ -36,12 +36,12 @@
 
2426
         foreach($nmap_ports as $nmap_port)
 
2427
         {
 
2428
           $port_data = explode('/', $nmap_port);
 
2429
-          if (preg_match('%^(\d+)/open/[a-z]+/([^/]+)/%', $nmap_port, $port_data))
 
2430
+          if ($port_data[1] == 'open')
 
2431
           {
 
2432
-            $port_num = $port_data[1];
 
2433
+            $port_num = trim($port_data[0]);
 
2434
             $ports[$port_num] = array(
 
2435
               'interface' => 'Port '.$port_num,
 
2436
-              'description' => $port_data[2],
 
2437
+              'description' => $port_data[4],
 
2438
               'admin' => 'open',
 
2439
               'oper' => 'open'
 
2440
             );
 
2441
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/iad_child.php jffnms-0.9.3/engine/iad_child.php
 
2442
--- ../jffnms-0.9.2/engine/iad_child.php        2012-02-14 23:10:39.000000000 +1100
 
2443
+++ jffnms-0.9.3/engine/iad_child.php   2012-04-06 22:10:59.000000000 +1000
 
2444
@@ -60,11 +60,13 @@
 
2445
 
 
2446
 function child_discover_interfaces($params)
 
2447
 {
 
2448
+  global $Config, $Child;
 
2449
   $iad_time = time_msec();
 
2450
   $Interfaces = new JffnmsInterfaces();
 
2451
   $InterfaceTypesFields = new JffnmsInterface_types_fields();
 
2452
+  $Events = new JffnmsEvents();
 
2453
 
 
2454
-  $autodiscovery = iad_get_autodiscovery($params['autodiscovery_id']);
 
2455
+  $ad_policy = iad_get_autodiscovery($params['autodiscovery_id']);
 
2456
   $interface_types = iad_get_interface_types($params['itype']);
 
2457
   if ($interface_types === FALSE)
 
2458
     return FALSE;
 
2459
@@ -104,33 +106,39 @@
 
2460
         array('itype'=>$itype['id'],'exclude_types'=>20));
 
2461
     if (is_array($ad_interfaces) && count($ad_interfaces) > 0)
 
2462
     {
 
2463
-      $unique_interfaces = array_unique(array_merge(array_merge(array_keys($ad_interfaces), array_keys($db_interfaces))));
 
2464
+      $unique_interfaces = array_unique(array_merge(array_keys($ad_interfaces), array_keys($db_interfaces)));
 
2465
+      asort($unique_interfaces);
 
2466
+      reset($unique_interfaces);
 
2467
       foreach($unique_interfaces as $key)
 
2468
       {
 
2469
         if ($key < 0)
 
2470
           continue;
 
2471
         $processed = FALSE;
 
2472
+       if (isset($db_interfaces[$key]))
 
2473
+               ksort($db_interfaces[$key]);
 
2474
+       if (isset($ad_interfaces[$key]))
 
2475
+               ksort($ad_interfaces[$key]);
 
2476
+
 
2477
         discovery_logger($params['host_id'], $itype['id'], $key,
 
2478
           'DB  : '.(isset($db_interfaces[$key])?iad_show_interface($fields,$db_interfaces[$key]):'Not Found'));
 
2479
         discovery_logger($params['host_id'], $itype['id'], $key,
 
2480
           'HOST: '.(isset($ad_interfaces[$key])?iad_show_interface($fields,$ad_interfaces[$key]):'Not Found'));
 
2481
 
 
2482
         // Not in DB but in Host = add new
 
2483
-        if (!isset($db[$key]) && isset($host[$key]))
 
2484
+        if (!isset($db_interfaces[$key]) && isset($ad_interfaces[$key]))
 
2485
         {
 
2486
-          if (iad_permit_new($host[$key], $host_info))
 
2487
-          {
 
2488
+          if (iad_permit_new($ad_interfaces[$key], $ad_policy,$itype)) {
 
2489
             $text = '';
 
2490
-            discovery_logger($host_info['id'], $it['id'], $key,
 
2491
+            discovery_logger($params['host_id'], $itype['id'], $key,
 
2492
               'RES : New Interface Found');
 
2493
             //if the AD policy permits adding an interface.
 
2494
-            if ($host_info['permit_add']==1)
 
2495
+            if ($ad_policy['permit_add']==1)
 
2496
             {
 
2497
               //if the AD policy says use default poller
 
2498
-              if ($host_info['poller_default']==1)
 
2499
-                ad_set_default ($host[$key]['poll'],$it['autodiscovery_default_poller']); //use the interface type default poller for this new interface
 
2500
-              ad_set_default ($host[$key]['client'],$host_info['autodiscovery_default_customer']);
 
2501
-              ad_set_default ($host[$key]['sla'],$it['sla_default']);
 
2502
+              if ($ad_policy['poller_default']==1)
 
2503
+                ad_set_default ($ad_interfaces[$key]['poll'],$itype['autodiscovery_default_poller']); //use the interface type default poller for this new interface
 
2504
+              ad_set_default ($ad_interfaces[$key]['client'],$params['autodiscovery_default_customer']);
 
2505
+              ad_set_default ($ad_interfaces[$key]['sla'],$itype['sla_default']);
 
2506
               //Find the Index Field
 
2507
                foreach ($fields as $fdata)
 
2508
                 if ($fdata['ftype']==3)
 
2509
@@ -139,28 +147,105 @@
 
2510
                   break;
 
2511
                 }
 
2512
               //add the index field as data to use when adding a record
 
2513
-              $host[$key][$index_field]=$key;
 
2514
+              $ad_interfaces[$key][$index_field]=$key;
 
2515
 
 
2516
                 //delete the status fields, because they will not be found in the db
 
2517
-                unset ($host[$key]['admin']);
 
2518
-                unset ($host[$key]['oper']);
 
2519
+                unset ($ad_interfaces[$key]['admin']);
 
2520
+                unset ($ad_interfaces[$key]['oper']);
 
2521
 
 
2522
-                $interface_id = adm_interfaces_add(array('host'=>$host_info['id'],'type'=>$it['id'])); //add new record
 
2523
-                adm_interfaces_update($interface_id,$host[$key]); //update it with the data
 
2524
+                $interface_id = $Interfaces->add(array('host'=>$params['host_id'],'type'=>$itype['id'])); //add new record
 
2525
+                $Interfaces->update($interface_id,$ad_interfaces[$key]); //update it with the data
 
2526
                 $text = '- Added';
 
2527
               } // permit add
 
2528
-              if ($log_events==true)
 
2529
-                insert_event ($now_date, $event_type_id, $host_info['id'], $host[$key]['interface'], //add informative event
 
2530
+                $Events->add(date("Y-m-d H:i:s",time()), $Config->get('jffnms_administrative_type'), $params['host_id'], $ad_interfaces[$key]['interface'], //add informative event
 
2531
                   'alert','autodiscovery',trim('Found '.$text),0); 
 
2532
               $processed = 1;
 
2533
-            } // if allow add
 
2534
-          }
 
2535
+            } // if allow add 
 
2536
+          continue;
 
2537
+        } // In Host not DB
 
2538
 
 
2539
-      } //foreach unique int id
 
2540
-    }
 
2541
-  } //foreach itype
 
2542
+        if (!isset($ad_interfaces[$key]) && isset($db_interfaces[$key])) {
 
2543
+            if ($itype['autodiscovery_validate']==1 && $db_interfaces[$key]['poll'] > 1) {
 
2544
+            discovery_logger($params['host_id'], $itype['id'], $key,
 
2545
+              'RES : Not Found in Host');
 
2546
+            $test='';
 
2547
+            if ($ad_policy['permit_del']==1 && $ad_policy['permit_disable']==0) {
 
2548
+                $Interfaces->del($db_interfaces[$key]['id']);
 
2549
+                $text = '- Deleted';
 
2550
+            }
 
2551
+            if ($ad_policy['permit_del']==0 && $ad_policy['permit_disable']==1) {
 
2552
+                $Interfaces->update($db_interfaces[$key]['id'],
 
2553
+                    array('poll'=>1, 'show_rootmap'=>2));
 
2554
+                $text = '- Disabled';
 
2555
+            }
 
2556
+
 
2557
+            if ($ad_policy['alert_del']==1)
 
2558
+                $Events->add(date("Y-m-d H:i:s",time()), $Config->get('jffnms_administrative_type'), $params['host_id'], $db_interfaces[$key]['interface'], //add informative event
 
2559
+                'alert', 'autodiscovery', trim('Not Found in Host '.$text),0);
 
2560
+            }
 
2561
+            continue;
 
2562
+        }
 
2563
+
 
2564
+        // Found in both and polling enabled
 
2565
+        if (isset($ad_interfaces[$key]) && isset($db_interfaces[$key])) {
 
2566
+            if ($itype['autodiscovery_validate']==1) {
 
2567
+                $fields_to_modify = array();
 
2568
+                $track_fields = array();
 
2569
+
 
2570
+                $track_fields['interface']='Interface Name';
 
2571
+                foreach ($fields as $fdata)
 
2572
+                    if ($fdata['tracked']==1)
 
2573
+                        $track_fields[$fdata['name']] = $fdata['description'];
 
2574
+
 
2575
+                foreach ($track_fields as $track_field=>$track_field_descr) {
 
2576
+                    if (!empty($ad_interfaces[$key][$track_field]) &&
 
2577
+                        (strncmp($ad_interfaces[$key][$track_field], $db_interfaces[$key][$track_field], 30) != 0)) {
 
2578
+                            discovery_logger($params['host_id'], $itype['id'], $key,
 
2579
+                                "RES : $track_field_descr changed from ". 
 
2580
+                                $db_interfaces[$key][$track_field].' to '.
 
2581
+                                $ad_interfaces[$key][$track_field]);
 
2582
+                            $fields_to_modify[$track_field]=$ad_interfaces[$key][$track_field];
 
2583
+                        } // fields not equal
 
2584
+                    if (count($fields_to_modify) > 0) {
 
2585
+                        $changed_fields = array();
 
2586
+                        foreach ($fields_to_modify as $field_name=>$field_value)
 
2587
+                            $changed_fields[] = $track_fields[$field_name].' to '.$field_value.' was '.$db_interfaces[$key][$field_name];
 
2588
+                        $changed_fields = join(' and ',$changed_fields);
 
2589
+
 
2590
+                        if ($ad_policy['permit_mod']==1) {
 
2591
+                            $Interfaces->update($db_interfaces[$key]['id'],
 
2592
+                                $fields_to_modify);
 
2593
+                            if (array_key_exists('interface', $fields_to_modify))
 
2594
+                                $interface_name = $ad_interfaces[$key]['interface'];
 
2595
+                            else
 
2596
+                                $interface_name = $db_interfaces[$key]['interface'];
 
2597
+                            $event_comment = '- Changed '.$changed_fields;
 
2598
+                        } else {
 
2599
+                            $interface_name = $db_interfaces[$key]['interface'];
 
2600
+                            $event_comment = '- NOT Changed '.$changed_fields;
 
2601
+                        }
 
2602
+                        $Events->add(date("Y-m-d H:i:s",time()), $Config->get('jffnms_administrative_type'), $params['host_id'], $interface_name,
 
2603
+                'alert', 'autodiscovery', trim('detected modification '.$event_comment),0);
 
2604
+                    }
 
2605
+                }
 
2606
+            }
 
2607
+
 
2608
+            // Check for interfaces with no client assigned
 
2609
+            if ($db_interfaces[$key]['client'] <= 1) {
 
2610
+                discovery_logger($params['host_id'], $itype['id'], $key,
 
2611
+                    'RES : No Customer Selected');
 
2612
+                $Events->add(date("Y-m-d H:i:s",time()), $Config->get('jffnms_administrative_type'), $params['host_id'], $db_interfaces[$key]['interface'],
 
2613
+                'alert', 'autodiscovery', 'Incomplete interface setup (Customer not selected)', 0);
 
2614
+                continue;
 
2615
+            }
 
2616
+        }
 
2617
+        discovery_logger($params['host_id'], $itype['id'], $key,
 
2618
+            'RES : Nothing done.');
 
2619
+      } // foreach unique interfaces
 
2620
+    } //ad_interfaces > 0
 
2621
+  } //interface types
 
2622
   $iad_time = round(time_msec_diff($iad_time));
 
2623
-  logger('H '.str_pad($params['host_id'],3,' ',STR_PAD_LEFT)." : Autodiscovery took ".$iad_time." msec.\n");
 
2624
+  $Child->logger('H '.str_pad($params['host_id'],3,' ',STR_PAD_LEFT)." : Autodiscovery took ".$iad_time." msec.\n");
 
2625
   return TRUE;
 
2626
 }
 
2627
 
 
2628
@@ -220,7 +305,10 @@
 
2629
 
 
2630
 function discovery_logger($host, $itype, $intid, $result)
 
2631
 {
 
2632
-  logger( 'H '.str_pad($host,3,' ',STR_PAD_LEFT).' : '.
 
2633
+    global $Child;
 
2634
+
 
2635
+    $Child->logger(
 
2636
+          'H '.str_pad($host,3,' ',STR_PAD_LEFT).' : '.
 
2637
           'IT '.str_pad($itype,3,' ',STR_PAD_LEFT).' : '.
 
2638
           ($intid?'I '.str_pad($intid,4,' ',STR_PAD_LEFT).' : ':'').
 
2639
           "$result.\n");
 
2640
@@ -239,23 +327,30 @@
 
2641
 }
 
2642
 
 
2643
 // Not in database but found in host - is it really supposed to be there?
 
2644
-function iad_permit_new(&$host_data, &$host_info)
 
2645
+function iad_permit_new(&$host_data, &$ad_policy, &$itype)
 
2646
 {
 
2647
-  if ($itype['autodiscovery_validate'] == 1)
 
2648
-    return FALSE;
 
2649
+  if ($itype['autodiscovery_validate'] == 0)
 
2650
+    return TRUE;
 
2651
 
 
2652
-  if ($host_info['skip_loopback'] == 1 && (
 
2653
-    preg_match('/(loopback.*|null.*|lo\d*)$/i', $host_data['interface']) ||
 
2654
-    (array_key_exists('address', $host_data) && $host_data['address'] == '127.0.0.1')))
 
2655
-    return FALSE;
 
2656
+  # If we skip looback and have a loopback address - dont add it
 
2657
+  if ( // Possibly check for loopback
 
2658
+         $ad_policy['skip_loopback'] == 1 &&
 
2659
+         (
 
2660
+             ( preg_match('/(loopback.*|null.*|lo\d*)$/i', $host_data['interface']) != 0) ||
 
2661
+             ( array_key_exists('address', $host_data) && $host_data['address'] == '127.0.0.1')
 
2662
+      )) {
 
2663
+       return FALSE; // Skip loopback and loopback detected
 
2664
+  }
 
2665
 
 
2666
-  if ($host_info['check_address'] == 1 && (
 
2667
-    !array_key_exists('address', $host_data ||
 
2668
-    $host_data['address'] == '' ||
 
2669
-    $host_data['address'] == '0.0.0.0')))
 
2670
-    return FALSE;
 
2671
+  # Valid address?
 
2672
+  if ( $ad_policy['check_address'] == 1 &&
 
2673
+         (array_key_exists('address', $host_data) == TRUE) &&
 
2674
+         ($host_data['address'] == '' || $host_data['address'] == '0.0.0.0')
 
2675
+  ) 
 
2676
+         return FALSE; // Found address and its invalid
 
2677
 
 
2678
-  if ($host_info['check_state'] == 1 &&
 
2679
+  $Alarms = new JffnmsAlarms();
 
2680
+  if ($ad_policy['check_state'] == 1 &&
 
2681
     $Alarms->lookup($host_data['oper']) != ALARM_UP)
 
2682
     return FALSE;
 
2683
 
 
2684
@@ -268,6 +363,7 @@
 
2685
   $sysObjectId = snmp_get($host_ip, $rocommunity, $oid);
 
2686
   if ($sysObjectId === FALSE)
 
2687
     return NULL;
 
2688
+  $sysObjectId = str_replace('SNMPv2-SMI::enterprises','ent', $sysObjectId);
 
2689
   db_update('hosts', $host_id, array('sysobjectid' => $sysObjectId));
 
2690
   return $sysObjectId;
 
2691
 }
 
2692
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/poller_child.php jffnms-0.9.3/engine/poller_child.php
 
2693
--- ../jffnms-0.9.2/engine/poller_child.php     2011-04-15 09:43:47.000000000 +1000
 
2694
+++ jffnms-0.9.3/engine/poller_child.php        2012-03-28 23:26:18.000000000 +1100
 
2695
@@ -57,7 +57,7 @@
 
2696
 
 
2697
 function child_poll_interface($params)
 
2698
 {
 
2699
-  global $Config, $Child;
 
2700
+  global $Config, $Child, $poller_buffer;
 
2701
 
 
2702
   $host_id = $params['host_id'];
 
2703
   if (!is_numeric($host_id)) {
 
2704
@@ -78,6 +78,7 @@
 
2705
   // Poller Group 1 is no polling so return immediately
 
2706
   if ($poller_group == 1)
 
2707
       return TRUE;
 
2708
+  $check_status = $params['check_status'];
 
2709
   $poller_group_query = 'SELECT
 
2710
     pollers.name AS poller_name, pollers.command AS poller_command,
 
2711
     pollers.parameters AS poller_parameters,
 
2712
@@ -90,6 +91,7 @@
 
2713
       pollers_poller_groups.poller_group = '.$poller_group.'
 
2714
       AND pollers_poller_groups.poller = pollers.id
 
2715
       AND pollers_poller_groups.backend = pollers_backend.id
 
2716
+      '.($check_status==0?' AND pollers_backend.type != 1':'').'
 
2717
     ORDER BY
 
2718
       pollers_poller_groups.pos';
 
2719
   //fwrite(STDERR, $poller_query);
 
2720
@@ -98,6 +100,7 @@
 
2721
       return FALSE;
 
2722
   }
 
2723
   $jffnms_real_path = $Config->get('jffnms_real_path');
 
2724
+  $poller_buffer=array();
 
2725
   while ($poller_row = db_fetch_array($poller_group_result)) {
 
2726
     $poller_command = $poller_row['poller_command'];
 
2727
     $backend_command = $poller_row['backend_command'];
 
2728
@@ -108,15 +111,23 @@
 
2729
     if ( $Child->require_file($backend_filename, 'backend_'.$backend_command) === FALSE)
 
2730
         continue;
 
2731
 
 
2732
+    #  Calls poller, poller returns NULL if there is an error
 
2733
+    #  An errors means don't waste time running backend
 
2734
     $poller_data = child_poller_data($interface_id, $poller_row, $params);
 
2735
     $time_poller_query = time_msec();
 
2736
     $poller_result = call_user_func_array('poller_'.$poller_command, array($poller_data));
 
2737
     $time_poller_query = time_msec_diff($time_poller_query);
 
2738
 
 
2739
-    $time_backend_query = time_msec();
 
2740
-    $backend_result = call_user_func_array('backend_'.$backend_command, 
 
2741
-      array($poller_data, $poller_result));
 
2742
-    $time_backend_query = time_msec_diff($time_backend_query);
 
2743
+    if ($poller_result === FALSE) {
 
2744
+        $time_backend_query=0;
 
2745
+        $poller_result='(FALSE)';
 
2746
+        $backend_result='(not run)';
 
2747
+    } else {
 
2748
+        $time_backend_query = time_msec();
 
2749
+        $backend_result = call_user_func_array('backend_'.$backend_command, 
 
2750
+            array($poller_data, $poller_result));
 
2751
+        $time_backend_query = time_msec_diff($time_backend_query);
 
2752
+    }
 
2753
       
 
2754
     // Output the results
 
2755
     $poller_param_description = '';
 
2756
@@ -125,7 +136,7 @@
 
2757
     if ( ($desc_len = strlen($poller_param_description)) > 10)
 
2758
       $poller_param_description = substr($poller_param_description,0,4).'..'.
 
2759
        substr($poller_param_description,$desc_len-4,4);
 
2760
-    logger(
 
2761
+    $Child->logger(
 
2762
       ' :  H '.str_pad($poller_data['host_id'],3,' ',STR_PAD_LEFT).
 
2763
       ' :  I '.str_pad($poller_data['interface_id'],3,' ',STR_PAD_LEFT).
 
2764
       ' :  P '.str_pad($poller_row['poller_pos'],3,' ',STR_PAD_LEFT).
 
2765
@@ -136,6 +147,7 @@
 
2766
       " (time P: $time_poller_query | B: $time_backend_query) ".
 
2767
       "\n");
 
2768
   } //while poller_row
 
2769
+  unset($poller_buffer);
 
2770
   return TRUE;
 
2771
 }
 
2772
 
 
2773
@@ -176,7 +188,7 @@
 
2774
   $poller_plan_result = poller_plan ($poller_plan_filter); // Get the Poller Plan (things to poll)
 
2775
 
 
2776
   if ($output)
 
2777
-    logger(" :  H ".str_pad($host_id,3," ",STR_PAD_LEFT)." : Poller Start : ".$poller_plan_result["items"]." Items.\n"); 
 
2778
+    $Child->logger(" :  H ".str_pad($host_id,3," ",STR_PAD_LEFT)." : Poller Start : ".$poller_plan_result["items"]." Items.\n"); 
 
2779
   else
 
2780
     ob_start();
 
2781
 
 
2782
@@ -247,7 +259,7 @@
 
2783
       if ($aux = strlen($poller_param_description) > 10) 
 
2784
         $poller_param_description = substr($poller_param_description,0,4)."..".substr($poller_param_description,strlen($aux)-4,4); 
 
2785
 
 
2786
-      logger( " :  H ".str_pad($poller_data["host_id"],3," ",STR_PAD_LEFT).
 
2787
+      $Child->logger( " :  H ".str_pad($poller_data["host_id"],3," ",STR_PAD_LEFT).
 
2788
         " :  I ".str_pad($poller_data["interface_id"],3," ",STR_PAD_LEFT).
 
2789
         " :  P ".str_pad($poller_data["poller_pos"],3," ",STR_PAD_LEFT).
 
2790
         " : ".(($backend_command=="buffer")?"$poller_command:":"").$poller_data["poller_name"]."(".$poller_param_description."): $poller_result ".
 
2791
@@ -261,7 +273,7 @@
 
2792
   } // while
 
2793
   $polling_time = round(time_msec_diff($time_start));
 
2794
   if ($output)
 
2795
-    logger(" :  H ".str_pad($host_id,3," ",STR_PAD_LEFT)." : Poller End, Total Time: $polling_time msec.\n");
 
2796
+    $Child->logger(" :  H ".str_pad($host_id,3," ",STR_PAD_LEFT)." : Poller End, Total Time: $polling_time msec.\n");
 
2797
   else
 
2798
     ob_end_clean();
 
2799
 
 
2800
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/poller.php jffnms-0.9.3/engine/poller.php
 
2801
--- ../jffnms-0.9.2/engine/poller.php   2012-02-14 23:10:39.000000000 +1100
 
2802
+++ jffnms-0.9.3/engine/poller.php      2012-03-28 23:24:29.000000000 +1100
 
2803
@@ -69,29 +69,27 @@
 
2804
 // Read all the children's chatter
 
2805
 function poller_read_children(&$Parent)
 
2806
 {
 
2807
-    $repeats = 10;
 
2808
+    $read_timeout = max(time() + ENGINE_HEARTBEAT/$Parent->max_children,2);
 
2809
 
 
2810
-    while ($repeats--) {
 
2811
-        $read_retval = $Parent->read_children();
 
2812
-        if ($read_retval === FALSE)
 
2813
+    while (time() < $read_timeout) 
 
2814
+        if ($Parent->read_children('poller_read_callback') == FALSE)
 
2815
             return;
 
2816
-        if ($read_retval === TRUE)
 
2817
-            continue;
 
2818
-        // otherwise its something we parse
 
2819
-        list($child_id, $child_data) = $read_retval;
 
2820
-        switch($child_data['cmd'])
 
2821
-        {
 
2822
-        case 'DONE':
 
2823
-            $item_id = $Parent->child_done_job($child_id);
 
2824
-            if ($item_id !== FALSE)
 
2825
-                poller_set_interface_lpd($item_id);
 
2826
-            break;
 
2827
-        case 'NOTDONE':
 
2828
-            $Parent->child_notdone_job($child_id);
 
2829
-            break;
 
2830
-        }
 
2831
-    } // while repeats
 
2832
-} //poller_read_children()
 
2833
+}
 
2834
+
 
2835
+function poller_read_callback(&$Parent, $child_id, $child_data)
 
2836
+{
 
2837
+    switch($child_data['cmd'])
 
2838
+    {
 
2839
+    case 'DONE':
 
2840
+        $item_id = $Parent->child_done_job($child_id);
 
2841
+        if ($item_id !== FALSE)
 
2842
+            poller_set_interface_lpd($item_id);
 
2843
+        break;
 
2844
+    case 'NOTDONE':
 
2845
+        $Parent->child_notdone_job($child_id);
 
2846
+        break;
 
2847
+    }
 
2848
+}
 
2849
 
 
2850
       
 
2851
 function parse_commandline()
 
2852
@@ -234,6 +232,7 @@
 
2853
       'rw_community' => $row['rwcommunity'],
 
2854
       'ro_community' => $row['rocommunity'],
 
2855
       'sysobjectid' => $row['sysobjectid'],
 
2856
+      'check_status' => $row['check_status'],
 
2857
       'tries' => 0,
 
2858
       'is_dmii' => FALSE,
 
2859
       'dmii_up' => 1
 
2860
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/bgp_peer_status.php jffnms-0.9.3/engine/pollers/bgp_peer_status.php
 
2861
--- ../jffnms-0.9.2/engine/pollers/bgp_peer_status.php  2012-02-14 23:10:39.000000000 +1100
 
2862
+++ jffnms-0.9.3/engine/pollers/bgp_peer_status.php     2012-03-26 18:11:05.000000000 +1100
 
2863
@@ -4,19 +4,16 @@
 
2864
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
2865
  */
 
2866
 
 
2867
-function poller_bgp_peer_status ($options) {
 
2868
-       
 
2869
-       $oid = ".1.3.6.1.2.1.15.3.1.2.".$options["remote"];
 
2870
-       
 
2871
-       $value = snmp_get($options["host_ip"],$options["ro_community"],$oid);
 
2872
+function poller_bgp_peer_status ($options)
 
2873
+{
 
2874
+    $oid = '.1.3.6.1.2.1.15.3.1.2.'.$options['remote'];
 
2875
+    $value = snmp_get($options["host_ip"],$options["ro_community"],$oid);
 
2876
 
 
2877
-        switch ($value) {
 
2878
-               case 1: $status = "down"; break;
 
2879
-               case 3: $status = "down"; break; //active
 
2880
-               case 6: $status = "up"; break;
 
2881
-       }
 
2882
-
 
2883
-       return $status;
 
2884
+    if ($value == '')
 
2885
+        return FALSE;
 
2886
+    if ($value == '6')
 
2887
+        return 'up';
 
2888
+    return 'down';
 
2889
 }
 
2890
 
 
2891
 ?>
 
2892
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/brocade_fcport_phystate.php jffnms-0.9.3/engine/pollers/brocade_fcport_phystate.php
 
2893
--- ../jffnms-0.9.2/engine/pollers/brocade_fcport_phystate.php  2010-05-27 19:51:40.000000000 +1000
 
2894
+++ jffnms-0.9.3/engine/pollers/brocade_fcport_phystate.php     2012-03-26 18:12:01.000000000 +1100
 
2895
@@ -4,15 +4,15 @@
 
2896
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
2897
  */
 
2898
 
 
2899
-define(swFCPortPhyState,  '1.3.6.1.4.1.1588.2.1.1.1.6.2.1.3');
 
2900
-    function poller_brocade_fcport_phystate ($options) {
 
2901
+function poller_brocade_fcport_phystate ($options) {
 
2902
+    $swFCPortPhyState = '1.3.6.1.4.1.1588.2.1.1.1.6.2.1.3';
 
2903
 
 
2904
        $community = $options['ro_community'];
 
2905
        $ip = $options['host_ip'];
 
2906
        $inst = $options['poller_parameters'];
 
2907
 
 
2908
        if ($ip && $community && $inst) {
 
2909
-               $snmp_value = snmp_get($ip, $community, swFCPortPhyState.".$inst");
 
2910
+               $snmp_value = snmp_get($ip, $community, $swFCPortPhyState.".$inst");
 
2911
                switch ($snmp_value) {
 
2912
                        case 1:
 
2913
                                return 'down|No card present';
 
2914
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/buffer.php jffnms-0.9.3/engine/pollers/buffer.php
 
2915
--- ../jffnms-0.9.2/engine/pollers/buffer.php   2010-11-11 22:35:50.000000000 +1100
 
2916
+++ jffnms-0.9.3/engine/pollers/buffer.php      2012-03-26 18:12:29.000000000 +1100
 
2917
@@ -3,7 +3,7 @@
 
2918
  * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
2919
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
2920
  */
 
2921
-    // Get Values fomr the Buffer Temp storage
 
2922
+    // Get Values from the Buffer Temp storage
 
2923
 
 
2924
 function poller_buffer ($options)
 
2925
 {
 
2926
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/cisco_envmib_status.php jffnms-0.9.3/engine/pollers/cisco_envmib_status.php
 
2927
--- ../jffnms-0.9.2/engine/pollers/cisco_envmib_status.php      2012-02-14 23:10:39.000000000 +1100
 
2928
+++ jffnms-0.9.3/engine/pollers/cisco_envmib_status.php 2012-03-26 14:25:33.000000000 +1100
 
2929
@@ -3,30 +3,15 @@
 
2930
  * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
2931
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
2932
  */
 
2933
-function poller_cisco_envmib_status ($options) {
 
2934
-       
 
2935
-        $val="down";
 
2936
-
 
2937
-       $data = &$GLOBALS["cisco_envmib_status_data"][$options["host_ip"]][$options["poller_parameters"]];
 
2938
-
 
2939
-       if (!is_array($data) && $options["ro_community"]) {
 
2940
-           $i=0;
 
2941
-           $rets="";
 
2942
-           while (!is_array($rets) and $i++ <=2 ) //try 2 times 
 
2943
-               $rets=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.13.1.".$options["poller_parameters"],1);
 
2944
-           
 
2945
-           if (is_array($rets))
 
2946
-           foreach ( $rets as $key=>$entry ) {
 
2947
-               $key=explode(".",$key);
 
2948
-                $key=array_reverse($key);
 
2949
-                $key=$key[0];
 
2950
-                $data[$key]=$entry;
 
2951
-            }
 
2952
-       }
 
2953
-
 
2954
-       $value=$data[$options["index"]];
 
2955
-    
 
2956
-       if ($value == "1") $val="up";
 
2957
-       return $val;
 
2958
+function poller_cisco_envmib_status ($options)
 
2959
+{
 
2960
+    if ($options['ro_community']=='' or !is_numeric($options['index']))
 
2961
+        return FALSE;
 
2962
+    $snmp_value = snmp_get($options['host_ip'], $options['ro_community'],
 
2963
+        '.1.3.6.1.4.1.9.9.13.1.'.$options['poller_parameters'].'.'.
 
2964
+        $options['index']);
 
2965
+    if ($snmp_value == '1')
 
2966
+        return 'up';
 
2967
+    return 'down';
 
2968
 }
 
2969
 ?>
 
2970
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/cisco_saagent_backwardjitter.php jffnms-0.9.3/engine/pollers/cisco_saagent_backwardjitter.php
 
2971
--- ../jffnms-0.9.2/engine/pollers/cisco_saagent_backwardjitter.php     2012-02-14 23:10:39.000000000 +1100
 
2972
+++ jffnms-0.9.3/engine/pollers/cisco_saagent_backwardjitter.php        2012-03-26 18:22:24.000000000 +1100
 
2973
@@ -3,66 +3,30 @@
 
2974
  * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
2975
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
2976
  */
 
2977
-function poller_cisco_saagent_backwardjitter($options) {
 
2978
+function poller_cisco_saagent_backwardjitter($options)
 
2979
+{
 
2980
+    if (empty($options['ro_community']) or !is_numeric($options['index']))
 
2981
+        return FALSE;
 
2982
+    $sa_oid = '1.3.6.1.4.1.9.9.42.1.5.2.1';
 
2983
+    $ip = $options['host_ip'];
 
2984
+    $comm = $options['ro_community'];
 
2985
+    $inst = $options['index'];
 
2986
+
 
2987
+    if ( ($sumposds = snmp_get($ip, $comm, "$sa_oid.19.$inst")) === FALSE)
 
2988
+        return FALSE;
 
2989
+    if ( ($sumnegds = snmp_get($ip, $comm, "$sa_oid.24.$inst")) === FALSE)
 
2990
+        return FALSE;
 
2991
+    if ( ($nrposds = snmp_get($ip, $comm, "$sa_oid.18.$inst")) === FALSE)
 
2992
+        return FALSE;
 
2993
+    if ( ($nrnegds = snmp_get($ip, $comm, "$sa_oid.23.$inst")) === FALSE)
 
2994
+        return FALSE;
 
2995
         
 
2996
-    if (  !is_array($GLOBALS["cisco_saagent_backwardjitter"][$options["host_id"]])) {
 
2997
-       $i=0;
 
2998
-        while ( !is_array($sumpossd) and $i++ <=2 ) {
 
2999
-           $sumpossd=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.19",1);
 
3000
-           $sumnegsd=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.24",1);
 
3001
-            $nrpossd=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.18",1);
 
3002
-            $nrnegsd=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.23",1);
 
3003
-       }
 
3004
+    $sum = $sumposds + $sumnegds;
 
3005
+    $nr = $nrposds + $nrnegds;
 
3006
 
 
3007
-       if ( is_array($sumpossd) )
 
3008
-       foreach ( $sumpossd as $key=>$entry ) { 
 
3009
-           $key=explode(".",$key);
 
3010
-            $key=$key[count($key)-1];
 
3011
-            
 
3012
-           $sum_pos_sd[$key]=$entry;
 
3013
-        }
 
3014
-
 
3015
-       if ( is_array($sumnegsd) )
 
3016
-       foreach ( $sumnegsd as $key=>$entry ) {
 
3017
-           $key=explode(".",$key);
 
3018
-            $key=$key[count($key)-1];
 
3019
-
 
3020
-           $sum_neg_sd[$key]=$entry;
 
3021
-        }
 
3022
-
 
3023
-       if ( is_array($nrpossd) )
 
3024
-       foreach ( $nrpossd as $key=>$entry ) { 
 
3025
-           $key=explode(".",$key);
 
3026
-            $key=$key[count($key)-1];
 
3027
-
 
3028
-           $nr_pos_sd[$key]=$entry;
 
3029
-        }
 
3030
-
 
3031
-       if ( is_array($nrnegsd) )
 
3032
-       foreach ( $nrnegsd as $key=>$entry ) {
 
3033
-           $key=explode(".",$key);
 
3034
-            $key=$key[count($key)-1];
 
3035
-
 
3036
-           $nr_neg_sd[$key]=$entry;
 
3037
-        }
 
3038
-
 
3039
-       if ( is_array($sum_pos_sd) )
 
3040
-       foreach ( $sum_pos_sd as $key=>$entry ) {
 
3041
-           $sum=$sum_pos_sd[$key]+$sum_neg_sd[$key];
 
3042
-            $nr=$nr_pos_sd[$key]+$nr_neg_sd[$key];
 
3043
-
 
3044
-            $backward_jitter[$key]=0;
 
3045
-           if ( $nr > 0 )
 
3046
-               $backward_jitter[$key]=($sum/$nr);
 
3047
-           
 
3048
-           $GLOBALS["cisco_saagent_backwardjitter"][$options["host_id"]][$key]=$backward_jitter[$key]; 
 
3049
-        }
 
3050
-    }
 
3051
-
 
3052
-    $value=0;
 
3053
-    if ( isset($GLOBALS["cisco_saagent_backwardjitter"][$options["host_id"]][$options["index"]]) )
 
3054
-       $value=$GLOBALS["cisco_saagent_backwardjitter"][$options["host_id"]][$options["index"]];
 
3055
-
 
3056
-    return round($value,2);
 
3057
+    $jitter=0;
 
3058
+    if ($nr > 0)
 
3059
+        $jitter = round($sum / $nr,2);
 
3060
+    return $jitter;
 
3061
 }
 
3062
 ?>
 
3063
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/cisco_saagent_bwpacketloss.php jffnms-0.9.3/engine/pollers/cisco_saagent_bwpacketloss.php
 
3064
--- ../jffnms-0.9.2/engine/pollers/cisco_saagent_bwpacketloss.php       2012-02-14 23:10:39.000000000 +1100
 
3065
+++ jffnms-0.9.3/engine/pollers/cisco_saagent_bwpacketloss.php  2012-03-26 18:29:53.000000000 +1100
 
3066
@@ -1,48 +1,27 @@
 
3067
 <?php
 
3068
 /* This file is part of JFFNMS
 
3069
  * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
3070
+ * Copyright (C) 2012 Craig Small <csmall@enc.com.au>
 
3071
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
3072
  */
 
3073
-function poller_cisco_saagent_bwpacketloss($options) {
 
3074
+function poller_cisco_saagent_bwpacketloss($options)
 
3075
+{
 
3076
+    if (empty($options['ro_community']) or !is_numeric($options['index']))
 
3077
+        return FALSE;
 
3078
+
 
3079
+    $sa_oid = '1.3.6.1.4.1.9.9.42.1.5.2.1';
 
3080
+    $ip = $options['host_ip'];
 
3081
+    $comm = $options['ro_community'];
 
3082
+    $inst = $options['index'];
 
3083
         
 
3084
-    if (!is_array($GLOBALS["cisco_saagent_bwpacketloss"][$options["host_id"]]) && $options["ro_community"]) {
 
3085
-       $i=0;
 
3086
-        while ( !is_array($bwpacketloss) and $i++ <=2 ) {
 
3087
-           $bwpacketloss_sd=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.27",1);
 
3088
-            $rtlnum=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.1",1);
 
3089
-       }
 
3090
-
 
3091
-        if ( is_array($bwpacketloss_sd) ) 
 
3092
-       foreach ($bwpacketloss_sd as $key=>$entry) {
 
3093
-           $key=explode(".",$key);
 
3094
-            $key=$key[count($key)-1];
 
3095
-
 
3096
-            $bwpacketloss_sd[$key]=$entry;
 
3097
-       }
 
3098
-
 
3099
-       if ( is_array($rtlnum) ) 
 
3100
-       foreach ($rtlnum as $key=>$entry) {
 
3101
-           $key=explode(".",$key);
 
3102
-            $key=$key[count($key)-1];
 
3103
-
 
3104
-           $rtlnum[$key]=$entry;
 
3105
-        }
 
3106
-
 
3107
-       if ( is_array($bwpacketloss_sd) )
 
3108
-        foreach ( $bwpacketloss_sd as $key=>$entry ) {
 
3109
-           $bwpacketloss[$key]=0;
 
3110
-            $nr=$rtlnum[$key];
 
3111
-            if ( $nr > 0 )
 
3112
-               $bwpacketloss[$key]=$bwpacketloss_sd[$key]/($bwpacketloss_sd[$key] + $rtlnum[$key])*100; 
 
3113
-
 
3114
-           $GLOBALS["cisco_saagent_bwpacketloss"][$options["host_id"]][$key]=$bwpacketloss[$key]; 
 
3115
-        }
 
3116
-    }
 
3117
-
 
3118
-    $value=0;
 
3119
-    if ( isset($GLOBALS["cisco_saagent_bwpacketloss"][$options["host_id"]][$options["index"]]) )
 
3120
-       $value=$GLOBALS["cisco_saagent_bwpacketloss"][$options["host_id"]][$options["index"]];
 
3121
-
 
3122
-    return $value;
 
3123
+    if ( ($bwpacketloss = snmp_get($ip, $comm, "$sa_oid.27.$inst")) === FALSE)
 
3124
+        return FALSE;
 
3125
+    if ( ($nr = snmp_get($ip, $comm, "$sa_oid.1.$inst")) === FALSE)
 
3126
+        return FALSE;
 
3127
+
 
3128
+    $pktloss=0;
 
3129
+    if ($nr > 0)
 
3130
+        $pktloss = $bwpacketloss/($bwpacketloss+$nr)*100;
 
3131
+    return $pktloss;
 
3132
 }
 
3133
 ?>
 
3134
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/cisco_saagent_forwardjitter.php jffnms-0.9.3/engine/pollers/cisco_saagent_forwardjitter.php
 
3135
--- ../jffnms-0.9.2/engine/pollers/cisco_saagent_forwardjitter.php      2012-02-14 23:10:39.000000000 +1100
 
3136
+++ jffnms-0.9.3/engine/pollers/cisco_saagent_forwardjitter.php 2012-03-26 18:30:12.000000000 +1100
 
3137
@@ -3,66 +3,30 @@
 
3138
  * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
3139
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
3140
  */
 
3141
-function poller_cisco_saagent_forwardjitter($options) {
 
3142
-
 
3143
-    if ( !is_array($GLOBALS["cisco_saagent_forwardjitter"][$options["host_id"]])) {
 
3144
-       $i=0;
 
3145
-        while ( !is_array($sumpossd) and $i++ <= 2 ) {
 
3146
-           $sumpossd=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.9",1);
 
3147
-           $sumnegsd=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.14",1);
 
3148
-            $nrpossd =snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.8",1);
 
3149
-            $nrnegsd =snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.13",1);
 
3150
-       }
 
3151
-
 
3152
-       if ( is_array($sumpossd) )
 
3153
-       foreach ( $sumpossd as $key=>$entry ) { 
 
3154
-           $key=explode(".",$key);
 
3155
-            $key=$key[count($key)-1];
 
3156
-            
 
3157
-           $sum_pos_sd[$key]=$entry;
 
3158
-        }
 
3159
-
 
3160
-       if ( is_array($sumnegsd) )
 
3161
-       foreach ( $sumnegsd as $key=>$entry ) {
 
3162
-           $key=explode(".",$key);
 
3163
-            $key=$key[count($key)-1];
 
3164
-
 
3165
-           $sum_neg_sd[$key]=$entry;
 
3166
-        }
 
3167
-
 
3168
-       if ( is_array($nrpossd) )
 
3169
-       foreach ( $nrpossd as $key=>$entry ) { 
 
3170
-           $key=explode(".",$key);
 
3171
-            $key=$key[count($key)-1];
 
3172
-
 
3173
-           $nr_pos_sd[$key]=$entry;
 
3174
-        }
 
3175
-
 
3176
-       if ( is_array($nrnegsd) ) 
 
3177
-       foreach ( $nrnegsd as $key=>$entry ) {
 
3178
-           $key=explode(".",$key);
 
3179
-            $key=$key[count($key)-1];
 
3180
-
 
3181
-           $nr_neg_sd[$key]=$entry;
 
3182
-        }
 
3183
-
 
3184
-       if ( is_array($sum_pos_sd) )
 
3185
-       foreach ( $sum_pos_sd as $key=>$entry ) {
 
3186
-           $sum=$sum_pos_sd[$key]+$sum_neg_sd[$key];
 
3187
-            $nr=$nr_pos_sd[$key]+$nr_neg_sd[$key];
 
3188
-        
 
3189
-           $forward_jitter[$key]=0;
 
3190
-           if ( $nr > 0 )
 
3191
-               $forward_jitter[$key]=($sum/$nr);
 
3192
-           
 
3193
-           $GLOBALS["cisco_saagent_forwardjitter"][$options["host_id"]][$key]=$forward_jitter[$key]; 
 
3194
-        }
 
3195
-    }
 
3196
-
 
3197
-    $value=0;
 
3198
-    if ( isset($GLOBALS["cisco_saagent_forwardjitter"][$options["host_id"]][$options["index"]]) )
 
3199
-       $value=$GLOBALS["cisco_saagent_forwardjitter"][$options["host_id"]][$options["index"]];
 
3200
-
 
3201
-    return round($value,2);
 
3202
+function poller_cisco_saagent_forwardjitter($options)
 
3203
+{
 
3204
+    if (empty($options['ro_community']) or !is_numeric($options['index']))
 
3205
+        return FALSE;
 
3206
+    $sa_oid = '1.3.6.1.4.1.9.9.42.1.5.2.1';
 
3207
+    $ip = $options['host_ip'];
 
3208
+    $comm = $options['ro_community'];
 
3209
+    $inst = $options['index'];
 
3210
+
 
3211
+    if ( ($sumpossd = snmp_get($ip, $comm, "$sa_oid.9.$inst")) === FALSE)
 
3212
+        return FALSE;
 
3213
+    if ( ($sumnegsd = snmp_get($ip, $comm, "$sa_oid.14.$inst")) === FALSE)
 
3214
+        return FALSE;
 
3215
+    if ( ($nrpossd = snmp_get($ip, $comm, "$sa_oid.8.$inst")) === FALSE)
 
3216
+        return FALSE;
 
3217
+    if ( ($nrnegsd = snmp_get($ip, $comm, "$sa_oid.13.$inst")) === FALSE)
 
3218
+        return FALSE;
 
3219
+
 
3220
+    $sum = $sumpossd + $sumnegsd;
 
3221
+    $nr = $nrpostsd + $nrnegsd;
 
3222
+
 
3223
+    $jitter=0;
 
3224
+    if ($nr > 0)
 
3225
+        $jitter = round($sum / $nr,2);
 
3226
+    return $jitter;
 
3227
 }
 
3228
 ?>
 
3229
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/cisco_saagent_fwpacketloss.php jffnms-0.9.3/engine/pollers/cisco_saagent_fwpacketloss.php
 
3230
--- ../jffnms-0.9.2/engine/pollers/cisco_saagent_fwpacketloss.php       2012-02-14 23:10:39.000000000 +1100
 
3231
+++ jffnms-0.9.3/engine/pollers/cisco_saagent_fwpacketloss.php  2012-03-26 18:31:23.000000000 +1100
 
3232
@@ -1,48 +1,27 @@
 
3233
 <?php
 
3234
 /* This file is part of JFFNMS
 
3235
  * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
3236
+ * Copyright (C) 2012 Craig Small <csmall@enc.com.au>
 
3237
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
3238
  */
 
3239
-function poller_cisco_saagent_fwpacketloss($options) {
 
3240
+function poller_cisco_saagent_fwpacketloss($options)
 
3241
+{
 
3242
+    if (empty($options['ro_community']) or !is_numeric($options['index']))
 
3243
+        return FALSE;
 
3244
+
 
3245
+    $sa_oid = '1.3.6.1.4.1.9.9.42.1.5.2.1';
 
3246
+    $ip = $options['host_ip'];
 
3247
+    $comm = $options['ro_community'];
 
3248
+    $inst = $options['index'];
 
3249
         
 
3250
-    if (!is_array($GLOBALS["cisco_saagent_fwpacketloss"][$options["host_id"]]) && $options["ro_community"]) {
 
3251
-       $i=0;
 
3252
-        while ( !is_array($fwpacketloss) and $i++ <=2 ) {
 
3253
-           $fwpacketloss_sd=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.26",1);
 
3254
-            $rtlnum=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.1",1);
 
3255
-       }
 
3256
-
 
3257
-        if ( is_array($fwpacketloss_sd) ) 
 
3258
-       foreach ($fwpacketloss_sd as $key=>$entry) {
 
3259
-           $key=explode(".",$key);
 
3260
-            $key=$key[count($key)-1];
 
3261
-
 
3262
-            $fwpacketloss_sd[$key]=$entry;
 
3263
-       }
 
3264
-
 
3265
-       if ( is_array($rtlnum) ) 
 
3266
-       foreach ($rtlnum as $key=>$entry) {
 
3267
-           $key=explode(".",$key);
 
3268
-            $key=$key[count($key)-1];
 
3269
-
 
3270
-           $rtlnum[$key]=$entry;
 
3271
-        }
 
3272
-
 
3273
-       if ( is_array($fwpacketloss_sd) )
 
3274
-        foreach ( $fwpacketloss_sd as $key=>$entry ) {
 
3275
-           $fwpacketloss[$key]=0;
 
3276
-            $nr=$rtlnum[$key];
 
3277
-            if ( $nr > 0 )
 
3278
-               $fwpacketloss[$key]=$fwpacketloss_sd[$key]/($fwpacketloss_sd[$key] + $rtlnum[$key])*100; 
 
3279
-
 
3280
-           $GLOBALS["cisco_saagent_fwpacketloss"][$options["host_id"]][$key]=$fwpacketloss[$key]; 
 
3281
-        }
 
3282
-    }
 
3283
-
 
3284
-    $value=0;
 
3285
-    if ( isset($GLOBALS["cisco_saagent_fwpacketloss"][$options["host_id"]][$options["index"]]) )
 
3286
-       $value=$GLOBALS["cisco_saagent_fwpacketloss"][$options["host_id"]][$options["index"]];
 
3287
-
 
3288
-    return $value;
 
3289
+    if ( ($fwpacketloss = snmp_get($ip, $comm, "$sa_oid.26.$inst")) === FALSE)
 
3290
+        return FALSE;
 
3291
+    if ( ($nr = snmp_get($ip, $comm, "$sa_oid.1.$inst")) === FALSE)
 
3292
+        return FALSE;
 
3293
+
 
3294
+    $pktloss=0;
 
3295
+    if ($nr > 0)
 
3296
+        $pktloss = $fwpacketloss/($fwpacketloss+$nr)*100;
 
3297
+    return $pktloss;
 
3298
 }
 
3299
 ?>
 
3300
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/cisco_saagent_rtl.php jffnms-0.9.3/engine/pollers/cisco_saagent_rtl.php
 
3301
--- ../jffnms-0.9.2/engine/pollers/cisco_saagent_rtl.php        2012-02-14 23:10:39.000000000 +1100
 
3302
+++ jffnms-0.9.3/engine/pollers/cisco_saagent_rtl.php   2012-03-26 18:31:39.000000000 +1100
 
3303
@@ -1,47 +1,26 @@
 
3304
 <?php
 
3305
 /* This file is part of JFFNMS
 
3306
  * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
3307
+ * Copyright (C) 2012 Craig Small <csmall@enc.com.au>
 
3308
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
3309
  */
 
3310
-function poller_cisco_saagent_rtl($options) {
 
3311
+function poller_cisco_saagent_rtl($options)
 
3312
+{
 
3313
+    if (empty($options['ro_community']) or !is_numeric($options['index']))
 
3314
+        return FALSE;
 
3315
+    $sa_oid = '1.3.6.1.4.1.9.9.42.1.5.2.1';
 
3316
+    $ip = $options['host_ip'];
 
3317
+    $comm = $options['ro_community'];
 
3318
+    $inst = $options['index'];
 
3319
         
 
3320
-    if ( !is_array($GLOBALS["cisco_saagent_rtl"][$options["host_id"]]) ) {
 
3321
-       $i=0;
 
3322
-        while ( !is_array($rtlsum) and $i++ <=2 ) {
 
3323
-           $rtlsum=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.2",1);
 
3324
-            $rtlnum=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.1",1);
 
3325
-       }
 
3326
-
 
3327
-       if ( is_array($rtlsum) )
 
3328
-       foreach ( $rtlsum as $key=>$entry ) {
 
3329
-           $key=explode(".",$key);
 
3330
-            $key=$key[count($key)-1];
 
3331
-
 
3332
-            $rtlsum[$key]=$entry;
 
3333
-        }
 
3334
-
 
3335
-       if ( is_array($rtlnum) )
 
3336
-       foreach ( $rtlnum as $key=>$entry ) { 
 
3337
-           $key=explode(".",$key);
 
3338
-            $key=$key[count($key)-1];
 
3339
-
 
3340
-            $rtlnum[$key]=$entry;
 
3341
-        }
 
3342
-
 
3343
-       if ( is_array($rtlsum) ) 
 
3344
-       foreach ( $rtlsum as $key=>$entry ) {
 
3345
-           $rtl[$key]="0";
 
3346
-            $nr=$rtlnum[$key];
 
3347
-            if ( $nr > 0 )
 
3348
-               $rtl[$key]=$rtlsum[$key]/$rtlnum[$key];
 
3349
-            $GLOBALS["cisco_saagent_rtl"][$options["host_id"]][$key]=$rtl[$key]; 
 
3350
-        }
 
3351
-    }
 
3352
-    
 
3353
-    $value=0;
 
3354
-    if (isset($GLOBALS["cisco_saagent_rtl"][$options["host_id"]][$options["index"]]) )
 
3355
-        $value=$GLOBALS["cisco_saagent_rtl"][$options["host_id"]][$options["index"]];
 
3356
-
 
3357
-    return $value;
 
3358
+    if ( ($rtlsum = snmpget($ip, $comm, "$sa_oid.2.$inst")) === FALSE)
 
3359
+        return FALSE;
 
3360
+    if ( ($rtlnum = snmpget($ip, $comm, "$sa_oid.1.$inst")) === FALSE)
 
3361
+        return FALSE;
 
3362
+
 
3363
+    $rtl = 0;
 
3364
+    if ($rtlnum > 0)
 
3365
+        $rtl = $rtlsum / $rtlnum;
 
3366
+    return $rtl;
 
3367
 }
 
3368
 ?>
 
3369
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/cisco_saagent_verify.php jffnms-0.9.3/engine/pollers/cisco_saagent_verify.php
 
3370
--- ../jffnms-0.9.2/engine/pollers/cisco_saagent_verify.php     2012-02-14 23:10:39.000000000 +1100
 
3371
+++ jffnms-0.9.3/engine/pollers/cisco_saagent_verify.php        2012-03-26 18:47:54.000000000 +1100
 
3372
@@ -3,29 +3,15 @@
 
3373
  * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
3374
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
3375
  */
 
3376
-function poller_cisco_saagent_verify($options) {
 
3377
-        
 
3378
-        if (!is_array($GLOBALS["verify_saagent_operation"][$options["host_id"]]) && $options["ro_community"]) {
 
3379
-           $i=0;
 
3380
-           while (!is_array($rets) and $i++ <=2 ) 
 
3381
-               $rets=snmp_walk($options["host_ip"],$options["ro_community"],".1.3.6.1.4.1.9.9.42.1.5.2.1.1",1);
 
3382
-            
 
3383
-           if ( is_array($rets) )
 
3384
-           foreach ( $rets as $key=>$entry ) {
 
3385
-               $key=explode(".",$key);
 
3386
-                $key=$key[count($key)-1];
 
3387
-               $GLOBALS["verify_saagent_operation"][$options["host_id"]][$key]=$entry;
 
3388
-            }
 
3389
-       }
 
3390
+function poller_cisco_saagent_verify($options)
 
3391
+{
 
3392
+    if ($options['ro_community'] == '')
 
3393
+        return FALSE;
 
3394
 
 
3395
-        //$value="down"; //don't assume DOWN let that job to the alarm backend
 
3396
-
 
3397
-        if ( isset($GLOBALS["verify_saagent_operation"][$options["host_id"]][$options["index"]]) )
 
3398
-            $check_val=$GLOBALS["verify_saagent_operation"][$options["host_id"]][$options["index"]];
 
3399
-
 
3400
-        if (isset($check_val))
 
3401
-             $value="up"; 
 
3402
-       
 
3403
-       return "$value|$value";
 
3404
+    $numrtt = snmpget($options['host_ip'], $options['ro_community'],
 
3405
+        '.1.3.6.1.4.1.9.9.42.1.5.2.1.1.'.$options['index']);
 
3406
+    if ($numrtt === FALSE)
 
3407
+        return FALSE;
 
3408
+    return "UP|$numrtt";
 
3409
 }
 
3410
 ?>
 
3411
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/cisco_snmp_ping_end.php jffnms-0.9.3/engine/pollers/cisco_snmp_ping_end.php
 
3412
--- ../jffnms-0.9.2/engine/pollers/cisco_snmp_ping_end.php      2012-02-14 23:10:39.000000000 +1100
 
3413
+++ jffnms-0.9.3/engine/pollers/cisco_snmp_ping_end.php 2012-03-26 09:35:44.000000000 +1100
 
3414
@@ -4,12 +4,17 @@
 
3415
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
3416
  */
 
3417
 function poller_cisco_snmp_ping_end ($options) {
 
3418
-       extract($options);
 
3419
+    $peer = $options['peer'];
 
3420
+    $host_ip = $options['host_ip'];
 
3421
+    $rw_community = $options['rw_community'];
 
3422
+    $interface_id = $options['interface_id'];
 
3423
+    $oid = '.1.3.6.1.4.1.9.9.16.1.1.1';
 
3424
 
 
3425
-       if (($peer) && ($host_ip) && ($rw_community)) {
 
3426
-           $oid = ".1.3.6.1.4.1.9.9.16.1.1.1";
 
3427
-           $result = snmp_set($host_ip,$rw_community,"$oid.16.$random$interface_id","i","6"); //destroy
 
3428
-           return count($result);
 
3429
-       } else return -1;
 
3430
+    if ($peer == '' || $host_ip == '' || $rw_community == '' )
 
3431
+        return -1;
 
3432
+
 
3433
+    if (snmp_set($host_ip,$rw_community,"$oid.16.$random$interface_id","i","6") !== FALSE)
 
3434
+        return 1;
 
3435
+       else return -1;
 
3436
 }
 
3437
 ?>
 
3438
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/cisco_snmp_ping_start.php jffnms-0.9.3/engine/pollers/cisco_snmp_ping_start.php
 
3439
--- ../jffnms-0.9.2/engine/pollers/cisco_snmp_ping_start.php    2010-11-08 10:20:56.000000000 +1100
 
3440
+++ jffnms-0.9.3/engine/pollers/cisco_snmp_ping_start.php       2012-03-26 09:18:17.000000000 +1100
 
3441
@@ -41,13 +41,12 @@
 
3442
   {
 
3443
     foreach($set_oids as $set_oid)
 
3444
     {
 
3445
-      if (count(snmp_set($host_ip,$rw_community,
 
3446
-        $oid.'.'.$set_oid[0].$random.$interface_id, 
 
3447
-        $set_oid[1], $set_oid[2])) != 1)
 
3448
-      {
 
3449
-        logger("ERROR: Ping not ready", 0);
 
3450
-        return -1;
 
3451
-      }
 
3452
+        if (snmp_set($host_ip,$rw_community, 
 
3453
+            $oid.'.'.$set_oid[0].$random.$interface_id,
 
3454
+            $set_oid[1], $set_oid[2]) === FALSE) {
 
3455
+                logger("ERROR: Ping not ready", 0);
 
3456
+                return -1;
 
3457
+            }
 
3458
     } //foreach
 
3459
     if (($result = snmp_get($host_ip,$rw_community,"$oid.16.$random$interface_id"))==2) //2 si esta listo
 
3460
     {
 
3461
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/hostmib_apps.php jffnms-0.9.3/engine/pollers/hostmib_apps.php
 
3462
--- ../jffnms-0.9.2/engine/pollers/hostmib_apps.php     2012-02-14 23:10:39.000000000 +1100
 
3463
+++ jffnms-0.9.3/engine/pollers/hostmib_apps.php        2012-03-26 08:59:01.000000000 +1100
 
3464
@@ -5,29 +5,44 @@
 
3465
  */
 
3466
 
 
3467
 
 
3468
-function poller_hostmib_apps ($options) {
 
3469
+function poller_hostmib_apps ($options)
 
3470
+{
 
3471
        global $Apps;
 
3472
+    static $buffer_age = 0;
 
3473
+    $buffer_max_len=20;
 
3474
+    $buffer_max_age=180;
 
3475
 
 
3476
        $oid = '.1.3.6.1.2.1.25.4.2.1.2'; //host.hrSWRun.hrSWRunTable.hrSWRunEntry.hrSWRunName
 
3477
-       $host_id = $options['host_id'];
 
3478
+       $hid = $options['host_id'];
 
3479
 
 
3480
-       $i=0;
 
3481
-       while (!is_array($Apps[$host_id]) && ($i++ <= 2) && ($options['ro_community'])) //try 3 times to get the data 
 
3482
-               $Apps[$host_id]['raw'] = snmp_walk($options['host_ip'],$options['ro_community'],$oid,1);
 
3483
+    if (empty($options['ro_community']))
 
3484
+        return FALSE;
 
3485
+
 
3486
+    // Check freshness of buffer
 
3487
+    if (!array_key_exists('Apps', $GLOBALS) or ($buffer_age + $buffer_max_age < time())) {
 
3488
+        $Apps = array();
 
3489
+        $buffer_age = time();
 
3490
+    }
 
3491
+
 
3492
+    if (!array_key_exists($hid, $Apps) || !array_key_exists('raw',$Apps[$hid])) 
 
3493
+        $Apps[$hid] = array(
 
3494
+            'raw'=> snmp_walk($options['host_ip'],$options['ro_community'],$oid,1),
 
3495
+                'pids'=> array()
 
3496
+        );
 
3497
        
 
3498
-       if (is_array($Apps[$host_id]['raw'])) //if we got something
 
3499
-    {
 
3500
+       if (is_array($Apps[$hid]['raw'])) {
 
3501
                $instances=0;
 
3502
-               foreach ($Apps[$host_id]['raw'] as $key=>$service) //go thru all 
 
3503
+               foreach ($Apps[$hid]['raw'] as $key=>$service) //go thru all 
 
3504
         {
 
3505
-                   $interface_in = trim(str_replace("'",'',trim($service)));
 
3506
-            if ( $interface_in == $options['interface']  
 
3507
-                || ($options['ignorecase'] 
 
3508
-                && (strcasecmp($interface_in, $options['interface']) == 0))) //until we find the interface we're looking for
 
3509
-            {
 
3510
+                   $interface_in = trim(str_replace(array("\"","'"),'',trim($service)));
 
3511
+            if (array_key_exists('ignorecase', $options) && $options['ignorecase'])
 
3512
+                $match = strncasecmp($interface_in,$options['interface'],30);
 
3513
+            else
 
3514
+                $match = strncmp($interface_in,$options['interface'],30);
 
3515
+            if ($match == 0) {
 
3516
                                $instances++;
 
3517
                            $pid = end(explode('.',$key));
 
3518
-                           $Apps[$host_id]['pids'][$interface_in][]=$pid;
 
3519
+                           $Apps[$hid]['pids'][$interface_in][]=$pid;
 
3520
                    }   
 
3521
                }
 
3522
                $value='not running';
 
3523
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/hostmib_perf.php jffnms-0.9.3/engine/pollers/hostmib_perf.php
 
3524
--- ../jffnms-0.9.2/engine/pollers/hostmib_perf.php     2012-02-14 23:10:39.000000000 +1100
 
3525
+++ jffnms-0.9.3/engine/pollers/hostmib_perf.php        2012-04-15 10:15:15.000000000 +1000
 
3526
@@ -7,22 +7,25 @@
 
3527
     //By: Javier Szyszlican
 
3528
     //Based on the Status Poller By: Anders Karlsson <anders.x.karlsson@songnetworks.se>
 
3529
 
 
3530
-    function poller_hostmib_perf ($options) {
 
3531
-       global $Apps;
 
3532
+function poller_hostmib_perf ($options)
 
3533
+{
 
3534
+    global $Apps;
 
3535
+    $hid = $options['host_id'];
 
3536
 
 
3537
-       $hrSWRunPerfEntry_oid = ".1.3.6.1.2.1.25.5.1.1";
 
3538
-       $perf_oid = $hrSWRunPerfEntry_oid.".".$options["poller_parameters"];
 
3539
-       
 
3540
-       if (is_array($Apps[$options["host_id"]]["pids"][$options["interface"]])) { //if we got something
 
3541
+    $hrSWRunPerfEntry_oid = '.1.3.6.1.2.1.25.5.1.1';
 
3542
+    $perf_oid = $hrSWRunPerfEntry_oid.'.'.$options['poller_parameters'];
 
3543
+    
 
3544
+    if (!array_key_exists('Apps', $GLOBALS))
 
3545
+        return FALSE;
 
3546
 
 
3547
-           $pids = $Apps[$options["host_id"]]["pids"][$options["interface"]];
 
3548
-           
 
3549
-           foreach ($pids as $pid)
 
3550
-               $values[] = current(explode(" ",snmp_get($options["host_ip"], $options["ro_community"], $perf_oid.".$pid")));
 
3551
-           
 
3552
-           $value = array_sum($values);
 
3553
-       
 
3554
-           return $value;
 
3555
-       }
 
3556
+    $value = 0;
 
3557
+    if (array_key_exists($hid, $Apps) && is_array($Apps[$hid]['pids'][$options['interface']])) { //if we got something
 
3558
+
 
3559
+        $pids = $Apps[$hid]['pids'][$options['interface']];
 
3560
+        
 
3561
+        foreach ($pids as $pid)
 
3562
+            $value += intval(current(explode(' ',snmp_get($options['host_ip'], $options['ro_community'], $perf_oid.".$pid"))));
 
3563
     }
 
3564
+    return $value;
 
3565
+}
 
3566
 ?>
 
3567
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/ntp_client.php jffnms-0.9.3/engine/pollers/ntp_client.php
 
3568
--- ../jffnms-0.9.2/engine/pollers/ntp_client.php       2011-03-03 12:48:07.000000000 +1100
 
3569
+++ jffnms-0.9.3/engine/pollers/ntp_client.php  2012-03-26 09:00:26.000000000 +1100
 
3570
@@ -10,7 +10,7 @@
 
3571
 
 
3572
     $ntp_command = $Config->get('ntpq_executable');
 
3573
     if (!is_executable($ntp_command)) 
 
3574
-        return 'error';
 
3575
+        return FALSE;
 
3576
 
 
3577
     exec($ntp_command.' -p '.$data['host_ip'].' 2>/dev/null',$raw_result);
 
3578
     if (count($raw_result)<=2)
 
3579
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/reachability_end.php jffnms-0.9.3/engine/pollers/reachability_end.php
 
3580
--- ../jffnms-0.9.2/engine/pollers/reachability_end.php 2011-02-03 15:46:34.000000000 +1100
 
3581
+++ jffnms-0.9.3/engine/pollers/reachability_end.php    2012-03-26 08:44:54.000000000 +1100
 
3582
@@ -12,7 +12,7 @@
 
3583
   $uniq = $poller_buffer['ping-'.$options['interface_id']]; //get file id from reachability_start
 
3584
   $filename = "$temp_path/$uniq.log";
 
3585
 
 
3586
-  $result = -1;
 
3587
+  $result = NULL;
 
3588
   if (file_exists($filename))
 
3589
          $result = unlink ($filename);
 
3590
   return $result;
 
3591
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/reachability_start.php jffnms-0.9.3/engine/pollers/reachability_start.php
 
3592
--- ../jffnms-0.9.2/engine/pollers/reachability_start.php       2011-02-09 11:35:55.000000000 +1100
 
3593
+++ jffnms-0.9.3/engine/pollers/reachability_start.php  2012-03-26 09:40:03.000000000 +1100
 
3594
@@ -8,9 +8,10 @@
 
3595
   global $Config;
 
3596
 
 
3597
   $temp_path = $Config->get('engine_temp_path');
 
3598
+  $uniq=FALSE;
 
3599
 
 
3600
   if ( ($host_info = resolve_host($options['host_ip'])) === FALSE)
 
3601
-    return -1;
 
3602
+    return FALSE;
 
3603
   list ($af, $ip, $port) = $host_info;
 
3604
   if ($af == 6)
 
3605
     $fping = $Config->get('fping6_executable');
 
3606
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/reachability_wait.php jffnms-0.9.3/engine/pollers/reachability_wait.php
 
3607
--- ../jffnms-0.9.2/engine/pollers/reachability_wait.php        2011-02-03 15:57:31.000000000 +1100
 
3608
+++ jffnms-0.9.3/engine/pollers/reachability_wait.php   2012-03-26 10:04:31.000000000 +1100
 
3609
@@ -9,7 +9,10 @@
 
3610
   global $poller_buffer;
 
3611
 
 
3612
   $temp_path = $Config->get('engine_temp_path');
 
3613
-  $uniq = $poller_buffer['ping-'.$options['interface_id']]; //get file id from reachability_start
 
3614
+  $buffer_name ='ping-'.$options['interface_id'];
 
3615
+  if (!array_key_exists($buffer_name, $poller_buffer))
 
3616
+      return 'error';
 
3617
+  $uniq = $poller_buffer[$buffer_name];
 
3618
 
 
3619
   $filename = "$temp_path/$uniq.log";
 
3620
 
 
3621
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/snmp_counter.php jffnms-0.9.3/engine/pollers/snmp_counter.php
 
3622
--- ../jffnms-0.9.2/engine/pollers/snmp_counter.php     2010-11-17 10:20:02.000000000 +1100
 
3623
+++ jffnms-0.9.3/engine/pollers/snmp_counter.php        2012-03-26 08:57:07.000000000 +1100
 
3624
@@ -5,18 +5,19 @@
 
3625
  */
 
3626
 function poller_snmp_counter ($options)
 
3627
 {
 
3628
-  extract($options);
 
3629
+    $oid = $options['poller_parameters'];
 
3630
+    $host_ip = $options['host_ip'];
 
3631
 
 
3632
-  $oid = $poller_parameters;
 
3633
+    if (!$options['ro_community'])
 
3634
+        return FALSE;
 
3635
 
 
3636
-  if ($ro_community) { //dont do anything if we dont have the community
 
3637
-      $value =  trim(get_snmp_counter($host_ip,$ro_community,$oid));
 
3638
-      if ($value=="") $value =  trim(get_snmp_counter($host_ip,$ro_community,$oid));
 
3639
-  
 
3640
-      if (strpos($value," ")!==FALSE) $value = substr($value,0,strpos($value," "));
 
3641
-      $value = str_replace("(","", str_replace(")","",$value));
 
3642
-  }
 
3643
+    $value = trim(get_snmp_counter($options['host_ip'], 
 
3644
+        $options['ro_community'], $oid));
 
3645
+    if ($value === FALSE or $value == '')
 
3646
+        return $value;
 
3647
 
 
3648
-  return $value;
 
3649
+    if ( ($pos = strpos($value,' ')) !==FALSE)
 
3650
+        $value = substr($value,0,$pos);
 
3651
+    return (str_replace(array('(',')'),'',$value));
 
3652
 }
 
3653
 ?>
 
3654
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/snmp_ibm_power.php jffnms-0.9.3/engine/pollers/snmp_ibm_power.php
 
3655
--- ../jffnms-0.9.2/engine/pollers/snmp_ibm_power.php   2012-02-14 23:10:39.000000000 +1100
 
3656
+++ jffnms-0.9.3/engine/pollers/snmp_ibm_power.php      2012-03-26 18:40:30.000000000 +1100
 
3657
@@ -3,14 +3,15 @@
 
3658
  * Copyright (C) <2002-2005> David LIMA <dlima@fr.scc.com> 
 
3659
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
3660
  */
 
3661
-function poller_snmp_ibm_power ($options) {
 
3662
-       extract($options);
 
3663
+function poller_snmp_ibm_power ($options)
 
3664
+{
 
3665
+    $oid = $options['poller_parameters'];
 
3666
+    if (empty($options['ro_community']))
 
3667
+        return FALSE;
 
3668
 
 
3669
-       $oid = $poller_parameters;
 
3670
-       if ($ro_community) { //dont do anything if we dont have the community
 
3671
-           $value2 =  (snmp_get($host_ip,$ro_community,$oid));
 
3672
-           preg_match('{(\d+)}',$value2,$value);
 
3673
-       }
 
3674
-       return $value[1];
 
3675
+    $snmp_value =  (snmp_get($options['host_ip'],$options['ro_community'],$oid));
 
3676
+    if ( preg_match('{(\d+)}',$snmp_value,$matches))
 
3677
+        return $matches[1];
 
3678
+    return FALSE;
 
3679
 }
 
3680
 ?>
 
3681
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/snmp_ibm_temperature.php jffnms-0.9.3/engine/pollers/snmp_ibm_temperature.php
 
3682
--- ../jffnms-0.9.2/engine/pollers/snmp_ibm_temperature.php     2012-02-14 23:10:39.000000000 +1100
 
3683
+++ jffnms-0.9.3/engine/pollers/snmp_ibm_temperature.php        2012-03-26 18:42:01.000000000 +1100
 
3684
@@ -3,14 +3,15 @@
 
3685
  * Copyright (C) <2002-2005> David LIMA <dlima@fr.scc.com> 
 
3686
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
3687
  */
 
3688
-function poller_snmp_ibm_temperature ($options) {
 
3689
-       extract($options);
 
3690
+function poller_snmp_ibm_temperature ($options)
 
3691
+{
 
3692
+    $oid = $options['poller_parameters'];
 
3693
+    if (empty($options['ro_community']))
 
3694
+        return FALSE;
 
3695
 
 
3696
-       $oid = $poller_parameters;
 
3697
-       if ($ro_community) { //dont do anything if we dont have the community
 
3698
-           $value2 =  (snmp_get($host_ip,$ro_community,$oid));
 
3699
-           preg_match('{[+|-](\d+)}',$value2,$value);
 
3700
-       }
 
3701
-       return $value[1];
 
3702
+    $snmp_value =  (snmp_get($options['host_ip'],$options['ro_community'],$oid));
 
3703
+    if ( preg_match('{[+|-](\d+)}',$snmp_value,$matches))
 
3704
+        return $matches[1];
 
3705
+    return FALSE;
 
3706
 }
 
3707
 ?>
 
3708
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/snmp_interface_status_all.php jffnms-0.9.3/engine/pollers/snmp_interface_status_all.php
 
3709
--- ../jffnms-0.9.2/engine/pollers/snmp_interface_status_all.php        2012-02-14 23:10:39.000000000 +1100
 
3710
+++ jffnms-0.9.3/engine/pollers/snmp_interface_status_all.php   2012-03-14 21:56:10.000000000 +1100
 
3711
@@ -8,7 +8,14 @@
 
3712
 
 
3713
 function poller_snmp_interface_status_all ($options)
 
3714
 {
 
3715
-       $stored_data = 'snmp_interface_status_data-'.$options['poller_parameters'];
 
3716
+    // buffer->hid
 
3717
+    static $static_buffer = array();
 
3718
+    static $buffer_age = 0;
 
3719
+    $hid = $options['host_id'];
 
3720
+    $buffer_max_age = 180; // 3 minutes of buffer
 
3721
+    $buffer_max_size = 20; // 20 hosts worth of data
 
3722
+    $min_iface_buffer = 30; // If device has 30 or more int, buffer it
 
3723
+    $snmp_col = $options['poller_parameters'];
 
3724
 
 
3725
     if (!$options['ro_community'])
 
3726
         return FALSE;
 
3727
@@ -17,30 +24,42 @@
 
3728
            ($options['fixed_admin_status']==1))  //And the interface has specified that it does not want its admin status to be modified
 
3729
         return FALSE; //Return nothing
 
3730
 
 
3731
-       if (!isset($GLOBALS[$stored_data]['number_of_interfaces'])) //Get the Number of Interfaces
 
3732
-               $GLOBALS[$stored_data]['number_of_interfaces'] = 
 
3733
-                   snmp_get($options['host_ip'],$options['ro_community'],'.1.3.6.1.2.1.2.1.0');
 
3734
-           if ($GLOBALS[$stored_data]['number_of_interfaces'] > 30) {
 
3735
-            if (count($GLOBALS[$stored_data])==1) { //only the number of interfaces is set
 
3736
-                $i=0;
 
3737
-                   $rets = '';
 
3738
-                       while (!is_array($rets) and $i++ <= 2) //check 3 times or until we get something valid
 
3739
-                       $rets=snmp_walk($options['host_ip'],$options['ro_community'],'.1.3.6.1.2.1.2.2.1.'.$options['poller_parameters'],1);
 
3740
-                   if (is_array($rets))
 
3741
-                    foreach ($rets as $key=>$entry) {
 
3742
-                        $key=explode('.',$key);
 
3743
-                               $key=$key[count($key)-1];
 
3744
-                               $GLOBALS[$stored_data][$key]=$entry;
 
3745
-                    }
 
3746
+    // Check freshnewss of buffer
 
3747
+    if ($buffer_age + $buffer_max_age < time()) {
 
3748
+        $static_buffer = array();
 
3749
+        $buffer_age = time();
 
3750
+    }
 
3751
+
 
3752
+    // Fill static buffer
 
3753
+    if (!array_key_exists($hid, $static_buffer)) {
 
3754
+        // Check max size
 
3755
+        if (count($static_buffer) > $buffer_max_size) 
 
3756
+            shift($static_buffer);
 
3757
+
 
3758
+        $static_buffer[$hid]=array('number_of_interfaces' => snmp_get($options['host_ip'],$options['ro_community'],'.1.3.6.1.2.1.2.1.0'));
 
3759
+    }
 
3760
+    if ($static_buffer[$hid]['number_of_interfaces'] > $min_iface_buffer) {
 
3761
+        if (!array_key_exists($snmp_col, $static_buffer[$hid])) {
 
3762
+            $rets=snmp_walk($options['host_ip'],$options['ro_community'],'.1.3.6.1.2.1.2.2.1.'.$options['poller_parameters'],1);
 
3763
+            if (is_array($rets)) {
 
3764
+                $static_buffer[$hid][$snmp_col] = array();
 
3765
+                foreach ($rets as $key=>$entry) {
 
3766
+                    $key=explode('.',$key);
 
3767
+                       $key=$key[count($key)-1];
 
3768
+                       $static_buffer[$hid][$snmp_col][$key]=$entry;
 
3769
+                }
 
3770
             }
 
3771
-           } else
 
3772
-            $GLOBALS[$stored_data][$options['interfacenumber']] =
 
3773
-                snmp_get($options['host_ip'],$options['ro_community'],'.1.3.6.1.2.1.2.2.1.'.$options['poller_parameters'].'.'.$options['interfacenumber']);
 
3774
+        }
 
3775
+    }
 
3776
+    $check_val = '';
 
3777
+    if ($static_buffer[$hid]['number_of_interfaces'] > $min_iface_buffer) {
 
3778
+        if (!array_key_exists($options['interfacenumber'], $static_buffer[$hid][$snmp_col]))
 
3779
+            return FALSE; // No found in buffer
 
3780
+        $check_val = $static_buffer[$hid][$snmp_col][$options['interfacenumber']];
 
3781
+    } else {
 
3782
+        $check_val = snmp_get($options['host_ip'],$options['ro_community'],'.1.3.6.1.2.1.2.2.1.'.$snmp_col.'.'.$options['interfacenumber']);
 
3783
+    }
 
3784
 
 
3785
-    if (!array_key_exists($options['interfacenumber'], $GLOBALS[$stored_data]))
 
3786
-        return FALSE;
 
3787
-
 
3788
-       $check_val=$GLOBALS[$stored_data][$options['interfacenumber']];
 
3789
     if ($check_val == '')
 
3790
         return FALSE;
 
3791
 
 
3792
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/snmp_walk_average.php jffnms-0.9.3/engine/pollers/snmp_walk_average.php
 
3793
--- ../jffnms-0.9.2/engine/pollers/snmp_walk_average.php        2012-02-14 23:10:39.000000000 +1100
 
3794
+++ jffnms-0.9.3/engine/pollers/snmp_walk_average.php   2012-03-26 18:44:07.000000000 +1100
 
3795
@@ -3,16 +3,16 @@
 
3796
  * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
3797
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
3798
  */
 
3799
-    function poller_snmp_walk_average ($options) {
 
3800
-       $oid = $options["poller_parameters"];
 
3801
+function poller_snmp_walk_average ($options)
 
3802
+{
 
3803
+    $oid = $options["poller_parameters"];
 
3804
+    if (empty($options['ro_community']))
 
3805
+        return FALSE;
 
3806
 
 
3807
-       if ($options["ro_community"]) { //dont do anything if we dont have the community
 
3808
-           $values = snmp_walk ($options["host_ip"],$options["ro_community"],$oid);
 
3809
-
 
3810
-           if (is_array($values) && count($values) > 0)
 
3811
-               $average = array_sum($values)/count($values);
 
3812
-       }
 
3813
-
 
3814
-       return $average;
 
3815
-    }
 
3816
+    $average=FALSE;
 
3817
+    $values = snmp_walk ($options['host_ip'],$options['ro_community'],$oid);
 
3818
+    if (is_array($values) && count($values) > 0)
 
3819
+        $average = array_sum($values)/count($values);
 
3820
+    return $average;
 
3821
+}
 
3822
 ?>
 
3823
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/sql_status.php jffnms-0.9.3/engine/pollers/sql_status.php
 
3824
--- ../jffnms-0.9.2/engine/pollers/sql_status.php       2012-02-14 23:10:39.000000000 +1100
 
3825
+++ jffnms-0.9.3/engine/pollers/sql_status.php  2012-03-26 18:44:55.000000000 +1100
 
3826
@@ -4,34 +4,38 @@
 
3827
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
3828
  */
 
3829
 
 
3830
-    function poller_sql_status ($options) {
 
3831
-
 
3832
-       $buffer = &$GLOBALS["session_vars"]["poller_buffer"];
 
3833
-
 
3834
-       $record_values = array(
 
3835
-           $buffer["records_counter-".$options["interface_id"]],
 
3836
-           $buffer["records_absolute-".$options["interface_id"]]);
 
3837
-           
 
3838
-       $records = is_numeric($record_values[0])?$record_values[0]:$record_values[1];
 
3839
-
 
3840
-       if ($records >= 0) {
 
3841
-           if (is_numeric($options["max_records"]) && ($records > $options["max_records"]))
 
3842
-               return "out of bounds|$records records is more than Max ".$options["max_records"];
 
3843
+function poller_sql_status ($options)
 
3844
+{
 
3845
+    global $poller_buffer;
 
3846
+
 
3847
+    if (!array_key_exists('records_counter-'.$options['interface_id'], $poller_buffer) or
 
3848
+        !array_key_exists('records_absolute-'.$options['interface_id'], $poller_buffer))
 
3849
+        return FALSE;
 
3850
+
 
3851
+    $record_values = array(
 
3852
+        $poller_buffer['records_counter-'.$options['interface_id']],
 
3853
+        $poller_buffer['records_absolute-'.$options['interface_id']]);
 
3854
+        
 
3855
+    $records = is_numeric($record_values[0])?$record_values[0]:$record_values[1];
 
3856
+
 
3857
+    if ($records >= 0) {
 
3858
+        if (is_numeric($options['max_records']) && ($records > $options['max_records']))
 
3859
+        return 'out of bounds|$records records is more than Max '.$options['max_records'];
 
3860
     
 
3861
-           if (is_numeric($options["min_records"]) && ($records < $options["min_records"]))
 
3862
-               return "out of bounds|$records records is less than Min ".$options["min_records"];
 
3863
+        if (is_numeric($options['min_records']) && ($records < $options['min_records']))
 
3864
+        return 'out of bounds|$records records is less than Min '.$options['min_records'];
 
3865
     
 
3866
-           return "ok|$records records is within boundaries";
 
3867
+        return 'ok|$records records is within boundaries';
 
3868
 
 
3869
-       } else {
 
3870
+    } else {
 
3871
 
 
3872
-           switch ($records) {
 
3873
-               case -1: $error = "Problem connecting to the DB"; break;
 
3874
-               case -2: $error = "Problem in Query"; break;
 
3875
-               case -3: $error = "Problem in Data Retrival"; break;
 
3876
-           }
 
3877
-           
 
3878
-           return "out of bounds|$error";
 
3879
-       }
 
3880
+        switch ($records) {
 
3881
+        case -1: $error = 'Problem connecting to the DB'; break;
 
3882
+        case -2: $error = 'Problem in Query'; break;
 
3883
+        case -3: $error = 'Problem in Data Retrival'; break;
 
3884
+        }
 
3885
+        
 
3886
+        return 'out of bounds|$error';
 
3887
     }
 
3888
+}
 
3889
 ?>
 
3890
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/tcp_connection_number.php jffnms-0.9.3/engine/pollers/tcp_connection_number.php
 
3891
--- ../jffnms-0.9.2/engine/pollers/tcp_connection_number.php    2011-03-03 13:11:52.000000000 +1100
 
3892
+++ jffnms-0.9.3/engine/pollers/tcp_connection_number.php       2012-03-26 14:46:18.000000000 +1100
 
3893
@@ -7,31 +7,46 @@
 
3894
 //Read the tcp.tcpConnTable.tcpConnEntry.tcpConnState table to find out
 
3895
 //which ports are used in the host
 
3896
 
 
3897
-function poller_tcp_connection_number ($options) {
 
3898
-    global $poller_buffer;
 
3899
-    $buffer_name = 'tcpConnEntry:'.$options['host_ip'];
 
3900
+function poller_tcp_connection_number ($options)
 
3901
+{
 
3902
+    static $static_buffer = array();
 
3903
+    static $buffer_age = 0;
 
3904
+    $buffer_max_len=20; // 20 hosts of details
 
3905
+    $buffer_max_age=180; // 3 minutes of buffer
 
3906
+    $port = $options['port'];
 
3907
+    $hid = $options['host_id'];
 
3908
 
 
3909
     if ($options['ro_community'] =='')
 
3910
-       return 0; 
 
3911
-    $cant = 0;
 
3912
-    $port = $options['port'];
 
3913
+       return FALSE; 
 
3914
 
 
3915
-    if (!array_key_exists($buffer_name, $poller_buffer))
 
3916
-        $poller_buffer[$buffer_name] = snmp_walk ($options['host_ip'],$options['ro_community'],'.1.3.6.1.2.1.6.13.1.1',1);
 
3917
-    $tcpConnEntry = $poller_buffer[$buffer_name];
 
3918
-    if (is_array($tcpConnEntry)) {
 
3919
-           reset($tcpConnEntry);
 
3920
-           //var_dump($tcpConnEntry);
 
3921
+    if ($buffer_age + $buffer_max_age < time()) {
 
3922
+        $static_buffer = array();
 
3923
+        $buffer_age = time();
 
3924
+    }
 
3925
+    if (!array_key_exists($hid, $static_buffer) or count($static_buffer[$hid])==0) {
 
3926
+        if (sizeof($static_buffer) > $buffer_max_len)
 
3927
+            array_shift($static_buffer);
 
3928
+
 
3929
+        // Fill the static buffer with port counts
 
3930
+        $snmp_table = snmp_walk ($options['host_ip'],$options['ro_community'],'.1.3.6.1.2.1.6.13.1.1',1);
 
3931
+        if (!is_array($snmp_table))
 
3932
+            return 0;
 
3933
+        reset($snmp_table);
 
3934
+        $static_buffer[$hid]=array();
 
3935
         foreach ($tcpConnEntry as $key => $state)
 
3936
-            if (strpos($state,"5")!==FALSE) { //only established
 
3937
-                $entry = explode(".",$key);
 
3938
-                $entry = array_slice ($entry, count($entry)-10,10); //get only the last 10 items (SRC-IP(4) + srcport + DEST-IP(4) + destport)
 
3939
-                $entry_port = $entry[4]; //srcport (local)
 
3940
+            if (strpos($state,'5')!==FALSE) { //only established
 
3941
+                $entry = explode('.',$key);
 
3942
+                   $entry = array_slice ($entry, count($entry)-10,10); //get only the last 10 items (SRC-IP(4) + srcport + DEST-IP(4) + destport)
 
3943
+                   $entry_port = $entry[4]; //srcport (local)
 
3944
 
 
3945
-          if ($port==$entry_port) //if the search and found ports are equal
 
3946
-              $cant++;
 
3947
-            }
 
3948
-    }
 
3949
-    return $cant;
 
3950
+                if (array_key_exists($entry_port,$static_buffer[$hid]))
 
3951
+                    $static_buffer[$hid][$entry_port]++;
 
3952
+                else
 
3953
+                    $static_buffer[$hid][$entry_port]=1;
 
3954
+            }//state==5
 
3955
+    }//buffer doesnt have hid
 
3956
+    if (array_key_exists($hid, $static_buffer) and array_key_exists($port, $static_buffer[$hid]))
 
3957
+        return $static_buffer[$hid][$port];
 
3958
+    return 0;
 
3959
 }
 
3960
 ?>
 
3961
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/tcp_port_content.php jffnms-0.9.3/engine/pollers/tcp_port_content.php
 
3962
--- ../jffnms-0.9.2/engine/pollers/tcp_port_content.php 2012-02-14 23:10:39.000000000 +1100
 
3963
+++ jffnms-0.9.3/engine/pollers/tcp_port_content.php    2012-03-26 16:34:02.000000000 +1100
 
3964
@@ -4,84 +4,78 @@
 
3965
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
3966
  */
 
3967
 function poller_tcp_port_content ($options) {
 
3968
+    global $poller_buffer;
 
3969
+    $buffer_name = $options['poller_parameters'].'-'.$options['interface_id'];
 
3970
 
 
3971
-    if ($options["check_content"]==1) {
 
3972
+    if (!array_key_exists($buffer_name, $poller_buffer))
 
3973
+        return FALSE;
 
3974
 
 
3975
-       $buffer = &$GLOBALS["session_vars"]["poller_buffer"];
 
3976
+    if ($options['check_content']!=1)
 
3977
+        return 'valid|not checked';
 
3978
 
 
3979
-       //URL Parsing
 
3980
-       //-----------
 
3981
-       $tcp_data = &$buffer[$options["poller_parameters"]."-".$options["interface_id"]];
 
3982
-
 
3983
-       if (!empty($options["check_url"])) //we have a URL to check
 
3984
-           $url = $options["check_url"];
 
3985
-       else 
 
3986
-           if (empty($tcp_data)) { //if didn't have data directly from TCP
 
3987
-       
 
3988
-               $allowed_protos = array("http","ftp","https","ftps"); //protos we can handle
 
3989
-
 
3990
-               list ($proto, $param) = explode ("|",$options["description"]);
 
3991
-               $proto_token = strpos($proto,"://");
 
3992
-
 
3993
-               if ($proto_token===FALSE) 
 
3994
-                   $proto_type = $proto;
 
3995
-               else
 
3996
-                   $proto_type = substr($proto,0,$proto_token);
 
3997
-           
 
3998
-               if (in_array($proto_type, $allowed_protos))
 
3999
-                   $url = (($proto_token===FALSE)?"$proto_type://":$proto).$options["host_ip"].":".$options["port"].$param;
 
4000
-           } 
 
4001
-
 
4002
-       //Data Gathering
 
4003
-       //--------------
 
4004
-       
 
4005
-       if (!empty($url)) { 
 
4006
-           if (!isset($buffer["tcp_port_content"][$url]))
 
4007
-               $buffer["tcp_port_content"][$url]= file($url);
 
4008
-       
 
4009
-           $data = $buffer["tcp_port_content"][$url];
 
4010
-
 
4011
-           if (is_array($data)) $data = implode("",$data);
 
4012
-       } else
 
4013
-           $data = $tcp_data; //if we didn't have a URL then use the tcp data;
 
4014
-
 
4015
-       
 
4016
-       //Analisis
 
4017
-       //--------
 
4018
-       
 
4019
-       $valid = false;
 
4020
-       
 
4021
-       if ($data!==false) { //if we didn't had an error
 
4022
-       
 
4023
-           if (!empty($options["check_regexp"])) { //if we have a regular expression set, use it.
 
4024
-               
 
4025
-               if (strpos($options["check_regexp"],"\\")!==false) //if the user escaped its regexp take it like it is.
 
4026
-                   $regexp = $options["check_regexp"];
 
4027
-               else //if he didn't then take it as a simple regexp (without grab) and escape it 
 
4028
-                   $regexp = preg_quote($options["check_regexp"]);    
 
4029
-
 
4030
-               $regexp = "/$regexp/i";
 
4031
-               echo "REGEXP: $regexp\nDATA: $data\n"; //DEBUG
 
4032
-               
 
4033
-               if (preg_match($regexp,$data,$parts)==true) {
 
4034
-                   //var_dump($parts); //DEBUG
 
4035
-               
 
4036
-                   $valid = true;
 
4037
-               
 
4038
-                   if (count($parts) > 1)  //more parts means with grab, so take all the parts except the first one as the result
 
4039
-                       $data = join(" ",array_slice($parts,1,count($parts)));
 
4040
-               }
 
4041
-           } else
 
4042
-               if (strlen($data) >= 60) // if we didn't have a Regular Expression to check, just check if its longer than 60 characters
 
4043
-                   $valid = true;
 
4044
-       }
 
4045
-
 
4046
-       if ($valid == true)  
 
4047
-           return "valid|".substr(trim(strip_tags($data)),0,40); //return part of the valid data
 
4048
-       else
 
4049
-           return "invalid"; //has URL or TCP data, but data is invalid
 
4050
-    } else 
 
4051
-       return "valid|Not Checked"; //didn't have check_content=1, or didn't have an allowed proto (because it didn't have a check_url)
 
4052
-}
 
4053
 
 
4054
+    $tcp_data = $poller_buffer[$buffer_name];
 
4055
+    $url='';
 
4056
+    if (!empty($options['check_url'])) //we have a URL to check
 
4057
+        $url = $options['check_url'];
 
4058
+    else 
 
4059
+        if (empty($tcp_data)) { //if didn't have data directly from TCP
 
4060
+            $allowed_protos = array('http','ftp','https','ftps'); //protos we can handle
 
4061
+            list ($proto, $param) = explode ('|',$options['description']);
 
4062
+            $proto_token = strpos($proto,'://');
 
4063
+            if ($proto_token===FALSE) 
 
4064
+                $proto_type = $proto;
 
4065
+            else
 
4066
+                $proto_type = substr($proto,0,$proto_token);
 
4067
+        
 
4068
+            if (in_array($proto_type, $allowed_protos))
 
4069
+                $url = (($proto_token===FALSE)?"$proto_type://":$proto).$options["host_ip"].":".$options["port"].$param;
 
4070
+        } 
 
4071
+
 
4072
+    //Data Gathering
 
4073
+    //--------------
 
4074
+    
 
4075
+    if (!empty($url)) { 
 
4076
+        if (!array_key_exists('tcp_port_content', $poller_buffer))
 
4077
+            $poller_buffer['tcp_port_content']=array();
 
4078
+        if  (!array_key_exists($url, $poller_buffer['tcp_port_content']))
 
4079
+            $poller_buffer['tcp_port_content'][$url]= file($url);
 
4080
+    
 
4081
+        $data = $poller_buffer['tcp_port_content'][$url];
 
4082
+
 
4083
+        if (is_array($data))
 
4084
+            $data = implode('',$data);
 
4085
+    } else
 
4086
+        $data = $tcp_data; //if we didn't have a URL then use the tcp data;
 
4087
+
 
4088
+    
 
4089
+    //Analisis
 
4090
+    //--------
 
4091
+    
 
4092
+    $valid = FALSE;
 
4093
+    
 
4094
+    if ($data!==FALSE) { //if we didn't had an error
 
4095
+    
 
4096
+        if (!empty($options['check_regexp'])) { //if we have a regular expression set, use it.
 
4097
+            if (strpos($options["check_regexp"],"\\")!==false) //if the user escaped its regexp take it like it is.
 
4098
+                $regexp = $options['check_regexp'];
 
4099
+            else //if he didn't then take it as a simple regexp (without grab) and escape it 
 
4100
+                $regexp = preg_quote($options['check_regexp']);    
 
4101
+            $regexp = "/$regexp/i";
 
4102
+            //echo "REGEXP: $regexp\nDATA: $data\n"; //DEBUG
 
4103
+        
 
4104
+            if (preg_match($regexp,$data,$parts)==true) {
 
4105
+                //var_dump($parts); //DEBUG
 
4106
+                $valid = true;
 
4107
+                if (count($parts) > 1)  //more parts means with grab, so take all the parts except the first one as the result
 
4108
+                    $data = join(" ",array_slice($parts,1,count($parts)));
 
4109
+            }
 
4110
+        } else
 
4111
+            if (strlen($data) >= 60) // if we didn't have a Regular Expression to check, just check if its longer than 60 characters
 
4112
+                $valid = true;
 
4113
+    }
 
4114
+    if ($valid == true)  
 
4115
+        return "valid|".substr(trim(strip_tags($data)),0,40); //return part of the valid data
 
4116
+    return 'invalid'; //has URL or TCP data, but data is invalid
 
4117
+}
 
4118
 ?>
 
4119
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/verify_interface_number.php jffnms-0.9.3/engine/pollers/verify_interface_number.php
 
4120
--- ../jffnms-0.9.2/engine/pollers/verify_interface_number.php  2011-05-25 15:43:13.000000000 +1000
 
4121
+++ jffnms-0.9.3/engine/pollers/verify_interface_number.php     2012-03-14 22:01:54.000000000 +1100
 
4122
@@ -1,44 +1,73 @@
 
4123
 <?php
 
4124
 /* This file is part of JFFNMS
 
4125
  * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
4126
+ * Copyright (C) 2012 Craig Small <csmall@enc.com.au>
 
4127
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
4128
  */
 
4129
 
 
4130
 function poller_verify_interface_number ($options)
 
4131
 {
 
4132
-  static $static_buffer = array();
 
4133
+    static $static_buffer = array();
 
4134
+    static $buffer_age = 0;
 
4135
+    $buffer_max_len=20; // 20 hosts of details
 
4136
+    $buffer_max_age=180; // 3 minutes of buffer
 
4137
+    require_once(jffnms_shared('catos'));
 
4138
+    require_once(jffnms_shared('webos'));
 
4139
+    $ifIndex_oid = '.1.3.6.1.2.1.2.2.1.1';
 
4140
 
 
4141
-  $current_ifindex = $options['interfacenumber'];
 
4142
+    $current_ifindex = $options['interfacenumber'];
 
4143
 
 
4144
-  //Search by Interface Name (ie. Switches or not IP interfaces)
 
4145
-  if (($options['address']=='') && ($options['interfacenumber']!='')) // if IP is empty and it has a interfacenumber in the DB
 
4146
-  {
 
4147
-    if (!array_key_exists('ifIndex', $static_buffer) && $options['ro_community'])
 
4148
-    { //Get the Tables via SNMP only once
 
4149
-  
 
4150
-      $ifIndex_oid = '.1.3.6.1.2.1.2.2.1.1';
 
4151
-      $static_buffer['ifIndex'] = snmp_walk($options['host_ip'],$options['ro_community'],$ifIndex_oid);
 
4152
-      include_once(jffnms_shared('catos'));        //Load CatOS code
 
4153
-      if (is_catos($options['host_ip'], $options['ro_community']))  //If this host is CatOS
 
4154
-        $ifDescr_oid = CATOS_IFDESCR_OID;
 
4155
-      else
 
4156
-        $ifDescr_oid = '.1.3.6.1.2.1.2.2.1.2';        //Use the Standard IF-MIB OID
 
4157
-      $static_buffer['ifDescr'] = snmp_walk($options['host_ip'],$options['ro_community'],$ifDescr_oid);
 
4158
-    }
 
4159
-    if (is_array($static_buffer['ifDescr']))
 
4160
-    {
 
4161
-      $pos = array_search($options['interface'],$static_buffer['ifDescr']);  //Find the DB interface name and return the index
 
4162
-      if (is_numeric($pos))            //if we found something
 
4163
-        $current_ifindex = $static_buffer['ifIndex'][$pos];      //return the ifIndex at the same position we found this
 
4164
-    }
 
4165
-  } else //Search by IP Address
 
4166
-    if (strpos($options['address'],'.') === FALSE)   // if the address is not an IP, use that as the IfIndex
 
4167
-    {
 
4168
-      $current_ifindex = $options['address'];
 
4169
-    } else                       //If its an IP Address
 
4170
-      if (!empty($options['ro_community']))            //and has SNMP
 
4171
-       $current_ifindex = snmp_get($options['host_ip'],$options['ro_community'],   //Get the interface index
 
4172
-        '.1.3.6.1.2.1.4.20.1.2.'.$options['address']);          //by looking up the IP
 
4173
-  return $current_ifindex;
 
4174
+    if (empty($options['ro_community']))
 
4175
+        return -1;
 
4176
+    $rocommunity = $options['ro_community'];
 
4177
+    $ip = $options['host_ip'];
 
4178
+    $hid = $options['host_id'];
 
4179
+
 
4180
+    # If the interface has no IP address then we need to search by name
 
4181
+    if (($options['address']=='')) {
 
4182
+        // Check freshness of buffer
 
4183
+        if ($buffer_age + $buffer_max_age < time()) {
 
4184
+            $static_buffer = array();
 
4185
+            $buffer_age = time();
 
4186
+        }
 
4187
+        if (!array_key_exists($hid, $static_buffer)) {
 
4188
+            if (sizeof($static_buffer) > $buffer_max_len)
 
4189
+                array_shift($static_buffer);
 
4190
+            $ifIndex = snmp_walk($options['host_ip'],$options['ro_community'],$ifIndex_oid);
 
4191
+            include_once(jffnms_shared('catos'));
 
4192
+            if (is_catos($options['host_ip'], $options['ro_community']))
 
4193
+                $ifDescr_oid = CATOS_IFDESCR_OID;
 
4194
+            else
 
4195
+                $ifDescr_oid = '.1.3.6.1.2.1.2.2.1.2';
 
4196
+            $ifDescr = snmp_walk($options['host_ip'],$options['ro_community'],$ifDescr_oid);
 
4197
+            if (is_array($ifIndex) && count($ifIndex) > 0 && is_array($ifDescr) && count($ifDescr) > 0) {
 
4198
+                $static_buffer[$hid] = array('ifIndex'=>$ifIndex, 'ifDescr'=>$ifDescr);
 
4199
+           } else {
 
4200
+               return -1; //snmpwalk failed
 
4201
+           }
 
4202
+
 
4203
+        }
 
4204
+        if ($current_ifindex != '') {
 
4205
+            $pos = array_search($current_ifindex, $static_buffer[$hid]['ifIndex']);
 
4206
+            if (is_numeric($pos) && array_key_exists($pos, $static_buffer[$hid]['ifDescr'])) {
 
4207
+                $polled_ifdescr = $static_buffer[$hid]['ifDescr'][$pos];
 
4208
+                if (strncmp($polled_ifdescr, $options['interface'],30)==0)
 
4209
+                    return $current_ifindex; // we found it
 
4210
+            }
 
4211
+        }
 
4212
+        // If not matched, then its changed, find new index
 
4213
+        $pos = array_search($options['interface'],$static_buffer[$hid]['ifDescr']);    //Find the DB interface name and return the index
 
4214
+        if (is_numeric($pos) and array_key_exists($pos, $static_buffer[$hid]['ifIndex']))                        //if we found something
 
4215
+            return $static_buffer[$hid]['ifIndex'][$pos];            //return the ifIndex at the same position we found this
 
4216
+    } else //Search by IP Address
 
4217
+        if (strpos($options['address'],'.') === FALSE)     // if the address is not an IP, use that as the IfIndex
 
4218
+        {
 
4219
+            return $options['address'];
 
4220
+        } else                                             //If its an IP Address
 
4221
+             return snmp_get($options['host_ip'],$options['ro_community'],     //Get the interface index
 
4222
+                '.1.3.6.1.2.1.4.20.1.2.'.$options['address']);                    //by looking up the IP
 
4223
+    return -1;
 
4224
 }
 
4225
+
 
4226
+
 
4227
 ?>
 
4228
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/verify_storage_index.php jffnms-0.9.3/engine/pollers/verify_storage_index.php
 
4229
--- ../jffnms-0.9.2/engine/pollers/verify_storage_index.php     2012-02-14 23:10:39.000000000 +1100
 
4230
+++ jffnms-0.9.3/engine/pollers/verify_storage_index.php        2012-03-14 22:13:29.000000000 +1100
 
4231
@@ -3,33 +3,47 @@
 
4232
  * Copyright (C) <2006> Javier Szyszlican <javier@szysz.com>
 
4233
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
4234
  */
 
4235
-function poller_verify_storage_index ($options) {
 
4236
-
 
4237
-    $hrStorageDescr_oid = ".1.3.6.1.2.1.25.2.3.1.3";
 
4238
-
 
4239
+function poller_verify_storage_index ($options)
 
4240
+{
 
4241
+    $hrStorageDescr_oid = '.1.3.6.1.2.1.25.2.3.1.3';
 
4242
     $index_actual = -1;
 
4243
-
 
4244
-    if (!is_array($GLOBALS["verify_storage_index_data"]) && !empty($options["ro_community"])) {
 
4245
-
 
4246
-        $aux = snmp_walk($options["host_ip"],$options["ro_community"],
 
4247
+    static $static_buffer = array();
 
4248
+    static $buffer_age=0;
 
4249
+    $buffer_max_len=20;
 
4250
+    $buffer_max_age=180;
 
4251
+
 
4252
+    if (empty($options['ro_community']))
 
4253
+        return $index_actual;
 
4254
+
 
4255
+    // Check freshness for buffer
 
4256
+    if ($buffer_age + $buffer_max_age < time()) {
 
4257
+        $static_buffer = array();
 
4258
+        $buffer_age = time();
 
4259
+    }
 
4260
+    if (!array_key_exists($options['host_id'], $static_buffer)) {
 
4261
+        // Check buffer length
 
4262
+        if (sizeof($static_buffer) > $buffer_max_len)
 
4263
+            array_shift($static_buffer);
 
4264
+        $storage_descs = snmp_walk($options['host_ip'],$options['ro_community'],
 
4265
            $hrStorageDescr_oid, INCLUDE_OID_1);
 
4266
 
 
4267
-       include_once(jffnms_shared("storage"));
 
4268
+           include_once(jffnms_shared('storage'));
 
4269
        
 
4270
-       if (is_array($aux))
 
4271
-       while (list($k, $v) = each ($aux))      // Parse each description to match what we do in discovery
 
4272
-           $GLOBALS["verify_storage_index_data"][$k]=current(storage_interface_parse_description ($v));
 
4273
-
 
4274
-       unset ($aux);
 
4275
+        if (is_array($storage_descs)) {
 
4276
+            $static_buffer[$options['host_id']] = array();
 
4277
+            foreach ($storage_descs as $key => $value) {
 
4278
+                   $static_buffer[$options['host_id']][$key]=substr(current(storage_interface_parse_description ($value)),0,30);
 
4279
+            }
 
4280
+        }
 
4281
+           unset ($storage_descs);
 
4282
     }
 
4283
 
 
4284
-    if (is_array($GLOBALS["verify_storage_index_data"])) {
 
4285
-       $storage_name = $options["interface"];
 
4286
-
 
4287
-       if (($index_actual = array_search($storage_name, $GLOBALS["verify_storage_index_data"]))===false)
 
4288
-           $index_actual = 90000+$options["interface_id"];     // if its not found in the host, change its id out of the picture for removal
 
4289
+    if (array_key_exists($options['host_id'], $static_buffer) and 
 
4290
+        sizeof($static_buffer[$options['host_id']]) > 0) {
 
4291
+           $storage_name = $options['interface'];
 
4292
+           if (($index_actual = array_search($storage_name, $static_buffer[$options['host_id']]))===false)
 
4293
+               $index_actual = 90000+$options['interface_id']; // if its not found in the host, change its id out of the picture for removal
 
4294
     }
 
4295
-
 
4296
     return $index_actual;                  
 
4297
 }
 
4298
 ?>
 
4299
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/pollers/verify_tc_class_number.php jffnms-0.9.3/engine/pollers/verify_tc_class_number.php
 
4300
--- ../jffnms-0.9.2/engine/pollers/verify_tc_class_number.php   2012-02-14 23:10:39.000000000 +1100
 
4301
+++ jffnms-0.9.3/engine/pollers/verify_tc_class_number.php      2012-03-14 22:24:17.000000000 +1100
 
4302
@@ -3,21 +3,37 @@
 
4303
  * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
4304
  * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
4305
  */
 
4306
-function poller_verify_tc_class_number ($options) {
 
4307
+function poller_verify_tc_class_number ($options)
 
4308
+{
 
4309
+    static $static_buffer = array();
 
4310
+    static $buffer_age = 0;
 
4311
+    $buffer_max_len = 20;
 
4312
+    $buffer_max_age = 180;
 
4313
 
 
4314
-    $linux_tc_oid = $options["autodiscovery_parameters"];
 
4315
+    $linux_tc_oid = $options['autodiscovery_parameters'];
 
4316
     
 
4317
-    $index_actual = -1;
 
4318
-    if (!is_array($GLOBALS["verify_tc_class_number_data"]) && !empty($options["ro_community"])) 
 
4319
-        $GLOBALS["verify_tc_class_number_data"] = snmp_walk($options["host_ip"],$options["ro_community"],
 
4320
-           "$linux_tc_oid.1.2",1);
 
4321
+    if (empty($options['ro_community']))
 
4322
+        return -1;
 
4323
 
 
4324
-    if (is_array($GLOBALS["verify_tc_class_number_data"])) {
 
4325
-       $class_name = substr($options["interface"],strpos($options["interface"],"/")+1,strlen($options["interface"]));
 
4326
-       $oid_key = array_search($class_name,$GLOBALS["verify_tc_class_number_data"]);
 
4327
-       $index_actual = current(array_reverse(explode (".",$oid_key)));
 
4328
+    // Check freshness of buffer
 
4329
+    if ($buffer_age + $buffer_max_age < time()) {
 
4330
+        $static_buffer = array();
 
4331
+        $buffer_age = time();
 
4332
     }
 
4333
 
 
4334
-    return $index_actual;                  
 
4335
+    if (!array_key_exists($options['host_id'], $static_buffer)) {
 
4336
+        // Check max buffer size
 
4337
+        if (sizeof($static_buffer) > $buffer_max_len)
 
4338
+            array_shift($static_buffer);
 
4339
+
 
4340
+        $static_buffer[$options['host_id']] = snmp_walk($options['host_ip'],$options['ro_community'], $linux_tc_oid.'.1.2',1);
 
4341
+    }
 
4342
+
 
4343
+    if (is_array($static_buffer[$options['host_id']])) {
 
4344
+           $class_name = substr($options['interface'],strpos($options['interface'],'/')+1,strlen($options['interface']));
 
4345
+           $oid_key = array_search($class_name,$static_buffer[$options['host_id']]);
 
4346
+           return current(array_reverse(explode ('.',$oid_key)));
 
4347
+    }
 
4348
+    return -1;
 
4349
 }
 
4350
 ?>
 
4351
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/rrd_analizer.php jffnms-0.9.3/engine/rrd_analizer.php
 
4352
--- ../jffnms-0.9.2/engine/rrd_analizer.php     2011-04-19 09:16:51.000000000 +1000
 
4353
+++ jffnms-0.9.3/engine/rrd_analizer.php        2012-04-13 15:05:18.000000000 +1000
 
4354
@@ -61,6 +61,10 @@
 
4355
       $type_dss[$row['type']] = $interface_data['values'][$row['id']];
 
4356
       unset ($interface_data);
 
4357
     }
 
4358
+    if (!array_key_exists($row['type'], $type_dss)) {
 
4359
+      logger("I$row[id] : has no values.\n");
 
4360
+      continue;
 
4361
+    }
 
4362
 
 
4363
     $dss = &$type_dss[$row['type']];
 
4364
     $values = analyzer_fetch ($row['id'], $start_time, $end_time, $dss);
 
4365
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/shared/storage.inc.php jffnms-0.9.3/engine/shared/storage.inc.php
 
4366
--- ../jffnms-0.9.2/engine/shared/storage.inc.php       2011-05-25 15:45:57.000000000 +1000
 
4367
+++ jffnms-0.9.3/engine/shared/storage.inc.php  2012-03-11 19:56:14.000000000 +1100
 
4368
@@ -5,7 +5,6 @@
 
4369
  */
 
4370
 
 
4371
 function storage_interface_parse_description ($descr) {
 
4372
-    $interface = '';
 
4373
     $description = '';
 
4374
 
 
4375
        $label_hex = strpos($descr,"Hex");
 
4376
@@ -14,14 +13,21 @@
 
4377
                    
 
4378
        $descr  = str_replace("\"","",$descr); // UCD-SNMP 4.2.4 fix
 
4379
        $descr  = str_replace("\\","",$descr); // Windows Hack for C:\ breaking the DB
 
4380
+    // By default it is the filtered thing given to us
 
4381
+       $interface = $descr; 
 
4382
 
 
4383
        //Windows XP Disk Label Hack
 
4384
        $label_pos = strpos($descr,"Label");
 
4385
        if ($label_pos!==false) {  
 
4386
            $interface = substr($descr,0, $label_pos - 1); //strip the \ and the space
 
4387
            $description = substr($descr,$label_pos, strlen($descr) - $label_pos);
 
4388
-       } else 
 
4389
-           $interface = $descr;
 
4390
+       } 
 
4391
+
 
4392
+    // Juniper JUNOS hack
 
4393
+    if (preg_match('/mounted on: (\S+)/', $descr, $groups)) {
 
4394
+        $interface = $groups[1];
 
4395
+    }
 
4396
+       
 
4397
            
 
4398
        return array($interface, $description);
 
4399
     }
 
4400
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/engine/tftp_get_host_config.php jffnms-0.9.3/engine/tftp_get_host_config.php
 
4401
--- ../jffnms-0.9.2/engine/tftp_get_host_config.php     2011-06-02 21:46:21.000000000 +1000
 
4402
+++ jffnms-0.9.3/engine/tftp_get_host_config.php        2012-03-15 20:19:03.000000000 +1100
 
4403
@@ -12,6 +12,7 @@
 
4404
 // main
 
4405
 { 
 
4406
   $Hosts = new JffnmsHosts();
 
4407
+  $HostsConfig = new JffnmsHosts_configs();
 
4408
 
 
4409
   $time_total = time_msec();
 
4410
   parse_commandline();
 
4411
@@ -41,8 +42,8 @@
 
4412
     $config_time = time_msec();
 
4413
     $config_file = $Config->get('jffnms_real_path').'/engine/configs/'.
 
4414
       $config_row["command"].'.inc.php';
 
4415
-    $config_get_command = 'hosts_config_'.$config_row['command'].'_get';
 
4416
-    $config_wait_command = 'hosts_config_'.$config_row['command'].'_wait';
 
4417
+    $config_get_command = 'config_'.$config_row['command'].'_get';
 
4418
+    $config_wait_command = 'config_'.$config_row['command'].'_wait';
 
4419
 
 
4420
     $now = date("Y-m-d H:i:s",time());
 
4421
     if (array_key_exists($config_file, $config_included_files))
 
4422
@@ -58,17 +59,17 @@
 
4423
         continue;
 
4424
       }
 
4425
       require_once($config_file);
 
4426
-      if (!function_exists($config_get_function))
 
4427
+      if (!function_exists($config_get_command))
 
4428
       {
 
4429
         host_config_logger($config_row, $config_time,
 
4430
-          "ERROR: Config get function '$config_get_function' does not exist in config file '$config_file'.\n");
 
4431
+          "ERROR: Config get function '$config_get_command' does not exist in config file '$config_file'.\n");
 
4432
         $config_included_files[$config_file] = FALSE;
 
4433
         continue;
 
4434
       }
 
4435
-      if (!function_exists($config_wait_function))
 
4436
+      if (!function_exists($config_wait_command))
 
4437
       {
 
4438
         host_config_logger($config_row, $config_time,
 
4439
-          "ERROR: Config wait function '$config_wait_function' does not exist in config file '$config_file'.\n");
 
4440
+          "ERROR: Config wait function '$config_wait_command' does not exist in config file '$config_file'.\n");
 
4441
         $config_included_files[$config_file] = FALSE;
 
4442
         continue;
 
4443
       }
 
4444
@@ -91,19 +92,20 @@
 
4445
       continue;
 
4446
     }
 
4447
       
 
4448
-    $function_data = array($config['host_ip'],$config['rwcommunity'],$config['tftp_server'],$config_filename);
 
4449
+    $function_data = array($config_row['host_ip'],$config_row['rwcommunity'],
 
4450
+        $config_row['tftp_server'],$real_tftp_filename);
 
4451
     
 
4452
-    if (call_user_func_array($config_get_function, $function_data) === FALSE)
 
4453
+    if (call_user_func_array($config_get_command, $function_data) === FALSE)
 
4454
     {
 
4455
       host_config_logger($config_row, $config_time,
 
4456
-        'Getting config file from host');
 
4457
+        'WARNING: Failed to get config file from host');
 
4458
       unlink($real_tftp_filename);
 
4459
       continue;
 
4460
     }
 
4461
-    if (call_user_func_array($wait_function, $function_data) === FALSE)
 
4462
+    if (call_user_func_array($config_wait_command, $function_data) === FALSE)
 
4463
     {
 
4464
       host_config_logger($config_row, $config_time,
 
4465
-        'Waiting for file transfer');
 
4466
+        'WARNING: Failed waiting for file transfer');
 
4467
       unlink($real_tftp_filename);
 
4468
       continue;
 
4469
     }
 
4470
@@ -111,13 +113,13 @@
 
4471
     if (!file_exists($real_tftp_filename) || filesize($real_tftp_filename) == 0)
 
4472
     {
 
4473
       host_config_logger($config_row, $config_time,
 
4474
-        'File did not transfer');
 
4475
+        'WARNING: file did not transfer');
 
4476
       unlink($real_tftp_filename);
 
4477
       continue;
 
4478
     }
 
4479
     $config_data_new = file_get_contents($real_tftp_filename);
 
4480
     unlink($real_tftp_filename);
 
4481
-    $db_host_configs =  $Hosts->config_list(NULL, $config_row['host_id'],NULL,1);
 
4482
+    $db_host_configs =  $HostsConfig->get_all(NULL, $config_row['host_id'],NULL,1);
 
4483
     $config_data_old = $db_host_configs[0]['config'];
 
4484
     $config_id_old = $db_host_configs[0]['id'];
 
4485
 
 
4486
@@ -130,14 +132,14 @@
 
4487
       $data = array(
 
4488
         'host'=>$config_row['host_id'],
 
4489
         'date'=>$now,
 
4490
-        'config'=>$config_data
 
4491
+        'config'=>$config_data_new
 
4492
       );
 
4493
-      $config_id = $Hosts->config_add();
 
4494
-      $result = $Hosts->config_update($config_id,$data); //save the config in the DB
 
4495
+      $config_id = $HostsConfig->add();
 
4496
+      $result = $HostsConfig->update($config_id,$data); //save the config in the DB
 
4497
       $info = "new config id $config_id";
 
4498
     } else  
 
4499
       $info = "same config as last one ($config_id_old)";
 
4500
-    hosts_config_logger($config_row, $config_time,'', $info);
 
4501
+    host_config_logger($config_row, $config_time,'', $info);
 
4502
   } //while row
 
4503
   $time_total = time_msec_diff($time_total);
 
4504
   logger( "TIMES \t: Total Time $time_total msec.\n");
 
4505
@@ -152,9 +154,9 @@
 
4506
   if ($error != '')
 
4507
   {
 
4508
     $Events = new JffnmsEvents();
 
4509
-    $Events->add($now, $Config->get('jffnms_administrative_type'),
 
4510
+    $Events->add(date("Y-m-d H:i:s",time()), $Config->get('jffnms_administrative_type'),
 
4511
       $config_row['host_id'],'CPU','error','host_config',
 
4512
-      "Host Config Transfer $error",0,0);
 
4513
+      'Host Config Transfer: '.addslashes($error),0,0);
 
4514
   } else
 
4515
     $error = "OK $info";
 
4516
 
 
4517
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/htdocs/admin/adm/adm_hosts_config.php jffnms-0.9.3/htdocs/admin/adm/adm_hosts_config.php
 
4518
--- ../jffnms-0.9.2/htdocs/admin/adm/adm_hosts_config.php       2011-01-05 17:02:12.000000000 +1100
 
4519
+++ jffnms-0.9.3/htdocs/admin/adm/adm_hosts_config.php  2012-03-15 08:32:27.000000000 +1100
 
4520
@@ -8,12 +8,13 @@
 
4521
 if (!profile('ADMIN_HOSTS')) die ('<H1> You dont have Permission to access this page.</H1></HTML>');
 
4522
     
 
4523
 adm_header('Hosts Config');
 
4524
-$api = new JffnmsHosts_config();
 
4525
+$api = new JffnmsHosts_configs();
 
4526
 
 
4527
 $span = $Sanitizer->get_int('span', 30);
 
4528
 $init = $Sanitizer->get_int('init', 0);
 
4529
 $filter = $Sanitizer->get_string('filter');
 
4530
 $action = $Sanitizer->get_string('action');
 
4531
+$actionid = $Sanitizer->get_int('actionid');
 
4532
 $diff1 = $Sanitizer->get_int('diff1');
 
4533
 $diff2 = $Sanitizer->get_int('diff2');
 
4534
 $fields = 6;    
 
4535
@@ -46,8 +47,8 @@
 
4536
         radiobutton('diff1', ($diff1==$rec['id'])?1:0, $rec['id']).
 
4537
         radiobutton('diff2', ($diff2==$rec['id'])?1:0, $rec['id']).
 
4538
         linktext('Read',
 
4539
-          $Sanitizer->get_url('','all', FALSE,
 
4540
-          array('action' => 'read', actionid => $rec['id'], 'init' => $init)),
 
4541
+          $Sanitizer->get_url('','all', 
 
4542
+          array('action' => 'read', 'actionid' => $rec['id'], 'init' => $init)),
 
4543
           'action')).
 
4544
       td($rec['id'], 'field_id').
 
4545
       td($rec["date"], "field").
 
4546
@@ -67,14 +68,15 @@
 
4547
 } //while
 
4548
 if ($action == 'diff')
 
4549
 {
 
4550
-  $clean_url = $Sanitizer->get_url('','all', array('action'),
 
4551
-    array('diff1', $diff1, 'diff2', $diff2, 'filter', $filter));
 
4552
+  $clean_url = $Sanitizer->get_url('','all', 
 
4553
+      array('diff1', $diff1, 'diff2', $diff2, 'filter', $filter),
 
4554
+      array('action'));
 
4555
   echo tr(linktext('Go Back',$clean_url), 'action', $fields).
 
4556
     tr('Difference Between Configurations','header',$fields).
 
4557
     tr_open().
 
4558
     td(memobox('', 20, 80, $api->diff($diff1, $diff2)), 'field', 'field_config', $fields, '', true);
 
4559
 } else
 
4560
   echo tr(adm_form_submit('View Diff'), 'action', $fields).
 
4561
-    form_close();
 
4562
+form_close();
 
4563
 adm_footer();
 
4564
 ?>
 
4565
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/htdocs/admin/adm/adm_triggers_rules.php jffnms-0.9.3/htdocs/admin/adm/adm_triggers_rules.php
 
4566
--- ../jffnms-0.9.2/htdocs/admin/adm/adm_triggers_rules.php     2012-02-14 23:10:39.000000000 +1100
 
4567
+++ jffnms-0.9.3/htdocs/admin/adm/adm_triggers_rules.php        2012-04-09 12:29:52.000000000 +1000
 
4568
@@ -22,23 +22,24 @@
 
4569
   switch ($action)
 
4570
   {
 
4571
   case 'update':
 
4572
-         #if (is_array($value)) $value = join($value,",");
 
4573
+      $value = $Sanitizer->get_string('value',array(),TRUE);
 
4574
+      if (is_array($value))
 
4575
+          $value = join($value,',');
 
4576
+      $update_data = array(
 
4577
+          //'trigger_id' => $Sanitizer->get_int('trigger_id'),
 
4578
+          'pos' => $Sanitizer->get_int('pos'),
 
4579
+          'field' => $Sanitizer->get_string('field'),
 
4580
+          'operator' => $Sanitizer->get_string('operator'),
 
4581
+          'value' => $value,
 
4582
+          'action_id' => $Sanitizer->get_int('action_id',1),
 
4583
+          'stop' => $Sanitizer->get_int('stop',0));
 
4584
       $action_params = $Sanitizer->get_string('action_params');
 
4585
       if (is_array($action_params))
 
4586
       {
 
4587
           foreach ($action_params as $key=>$data)
 
4588
               $aux[]="$key:$data";
 
4589
-             $action_parameters=join(",",$aux);
 
4590
+             $update_data['action_parameters']=join(",",$aux);
 
4591
          }
 
4592
-      $update_data = array(
 
4593
-          'trigger_id' => $Sanitizer->get_int('trigger_id'),
 
4594
-          'pos' => $Sanitizer->get_int('pos'),
 
4595
-          'field' => $Sanitizer->get_string('field'),
 
4596
-          'operator' => $Sanitizer->get_string('operator'),
 
4597
-          'value' => $Sanitizer->get_string('value',array(),TRUE),
 
4598
-          'action_id' => $actionid,
 
4599
-          'action_parameters' => $action_parameters,
 
4600
-          'stop' => $Sanitizer->get_int('stop',0));
 
4601
          $TriggersRules->update($actionid,$update_data);
 
4602
          $action="list";
 
4603
       break;
 
4604
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/htdocs/admin/adm/adm_users.inc.php jffnms-0.9.3/htdocs/admin/adm/adm_users.inc.php
 
4605
--- ../jffnms-0.9.2/htdocs/admin/adm/adm_users.inc.php  2011-03-10 14:33:54.000000000 +1100
 
4606
+++ jffnms-0.9.3/htdocs/admin/adm/adm_users.inc.php     2012-03-29 22:34:08.000000000 +1100
 
4607
@@ -29,7 +29,7 @@
 
4608
     $usern = '';
 
4609
   }
 
4610
   if ($actionid == 'new' && !empty($usern))
 
4611
-      $_POST['actionid'] = $api->add($usern);
 
4612
+      $actionid = $api->add($usern);
 
4613
 
 
4614
   $api->modify($actionid, $usern, $old_passwd, $new_passwd, $fullname, $router);
 
4615
   $GLOBALS['action']='list';
 
4616
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/htdocs/admin/adm/structures.php jffnms-0.9.3/htdocs/admin/adm/structures.php
 
4617
--- ../jffnms-0.9.2/htdocs/admin/adm/structures.php     2011-06-16 21:23:48.000000000 +1000
 
4618
+++ jffnms-0.9.3/htdocs/admin/adm/structures.php        2012-04-11 22:40:46.000000000 +1000
 
4619
@@ -447,7 +447,7 @@
 
4620
       'profile'=>'ADMIN_SYSTEM',
 
4621
       
 
4622
       'fields'=>array(
 
4623
-          'sla'=>array(  'name'=>'SLA',    'type'=>'select',  'func'=>'select_slas',    'size'=>30, 'view'=>'sla_description'),
 
4624
+          //'sla'=>array(  'name'=>'SLA',    'type'=>'select',  'func'=>'select_slas',    'size'=>30, 'view'=>'sla_description'),
 
4625
           'pos'=>array(  'name'=>'Position',  'type'=>'textbox', 'size'=>3),
 
4626
           'cond'=>array(  'name'=>'Condition',  'type'=>'select',  'func'=>'select_slas_cond',  'size'=>30, 'view'=>'cond_description'),
 
4627
           'show_in_result'=>array(  'name'=>'Show',    'type'=>'checkbox'),
 
4628
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/htdocs/admin/setup.php jffnms-0.9.3/htdocs/admin/setup.php
 
4629
--- ../jffnms-0.9.2/htdocs/admin/setup.php      2012-02-14 23:10:39.000000000 +1100
 
4630
+++ jffnms-0.9.3/htdocs/admin/setup.php 2012-03-06 07:22:35.000000000 +1100
 
4631
@@ -222,6 +222,7 @@
 
4632
 
 
4633
   if ($Config->get('jffnms_initial_config_finished') ==1)
 
4634
   { 
 
4635
+    require_once('../auth.php');
 
4636
     if (($Config->get('jffnms_access_method') == 'local') && (db_test()))
 
4637
       $no_db = 0; 
 
4638
     if (!profile('ADMIN_SYSTEM')) die ('<H1> You dont have Permission to access this page.</H1></HTML>');
 
4639
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/INSTALL jffnms-0.9.3/INSTALL
 
4640
--- ../jffnms-0.9.2/INSTALL     2012-03-04 13:43:13.000000000 +1100
 
4641
+++ jffnms-0.9.3/INSTALL        1970-01-01 10:00:00.000000000 +1000
 
4642
@@ -1,226 +0,0 @@
 
4643
-'Just For Fun' Network Management System Version 0.9.2
 
4644
-           By Javier Szyszlican and Craig Small
 
4645
-======================================================
 
4646
-
 
4647
-Requirements:
 
4648
-=============
 
4649
-
 
4650
--Operating System:
 
4651
-    . *NIX (Development is on GNU/Linux, It has been tested on FreeBSD and Solaris too)
 
4652
-    . Windows 2000/XP also works (A good crond for windows will be useful). 
 
4653
-       If you are installing on Windows please read the INSTALL.win32.txt file.
 
4654
-    
 
4655
--Apache ( > 1.3.x or > 2.0.x)
 
4656
-
 
4657
--MySQL ( > 3.23.x or > 4.0.x ) or PostgreSQL ( Tested with 7.4.6 )
 
4658
-
 
4659
--RRDtool (www.rrdtool.org) (> 1.0.33 )
 
4660
-
 
4661
--PHP  ( > 5.0.x )
 
4662
-       Extensions: snmp, ssl, gd, sockets, mysql or pgsql, pcre, posix, ob, pcntl and session
 
4663
-
 
4664
--NET-SNMP utilities and trapd server (optional) 
 
4665
-
 
4666
--GNU Diff 
 
4667
-
 
4668
--TFTP Server (optional)
 
4669
-
 
4670
--JFF NMS Integration Packages (TACACS+ & Syslog) (optional, useful on routers) 
 
4671
-
 
4672
--Graphviz & WebFonts (http://www.graphviz.org) (optional)
 
4673
-
 
4674
--NMAP PortScanner > 2.54B (http://www.insecure.org/nmap/) for TCP Port Discovery (optional)
 
4675
-
 
4676
--Fping (http://www.fping.com) for Reachability (Only on Linux/*NIX)
 
4677
-
 
4678
--tmpwatch (http://linux.maruhn.com/sec/tmpwatch.html) (Only on Linux/*NIX)
 
4679
-       Used for deleting all temporary files
 
4680
-
 
4681
-
 
4682
-Steps:
 
4683
-======
 
4684
-
 
4685
-. Compile and/or Install MySQL / PgSQL
 
4686
-
 
4687
-. Compile and/or Install Apache
 
4688
-
 
4689
-. Compile and/or Install Graphviz and WebFonts (optional)
 
4690
-
 
4691
-. Compile and/or Install NMAP
 
4692
-    
 
4693
-    Nmap should be set-uid root if you want UDP port monitoring & discovery to work.
 
4694
-
 
4695
-    Execute: 
 
4696
-        # chmod +s /usr/bin/nmap
 
4697
-        # chmod a+x /usr/bin/nmap
 
4698
-
 
4699
-. Compile and/or Install Fping
 
4700
-
 
4701
-    Verify that the user running the cron jobs, is able to execute fping and that it is set-uid root.
 
4702
-     
 
4703
-    Execute: 
 
4704
-        # chmod +s /usr/sbin/fping
 
4705
-        # chmod a+x /usr/sbin/fping
 
4706
-    
 
4707
-    And you should see something like this:
 
4708
-       -rwsr-xr-x    1 root     adm         28291 May 31 22:14 /usr/sbin/fping
 
4709
-
 
4710
-. Compile and/or Install RRDtool
 
4711
-    
 
4712
-. Compile and/or Install PHP 
 
4713
-
 
4714
-       I M P O R T A N T
 
4715
-       -----------------
 
4716
-
 
4717
-    PHP Modules Needed: sockets, snmp, gd, (pgsql and/or mysql), wddx (for satellites), pcre (syslog parsing)
 
4718
-
 
4719
-    Be sure to add the required modules to your /etc/php.ini file.
 
4720
-    
 
4721
-    Remember to verify that your modules are loaded with /admin/adm/test.php or the JFFNMS setup screen.
 
4722
-
 
4723
-    A N D
 
4724
-
 
4725
-    ---------------------------------------------------
 
4726
-    ---------------------------------------------------
 
4727
-    Change This in your php.ini file.
 
4728
-
 
4729
-    register_globals = On 
 
4730
-    register_argc_argv = On 
 
4731
-    error_reporting  =  E_ALL & ~E_NOTICE
 
4732
-    allow_url_fopen = On
 
4733
-    include_path = .:/usr/share/pear
 
4734
-    short_open_tag = On
 
4735
-    
 
4736
-    ---------------------------------------------------
 
4737
-    ---------------------------------------------------
 
4738
-
 
4739
-    Also check if your Apache is loading mod_php.
 
4740
-
 
4741
-    Any change to the PHP ini file (ie. /etc/php.ini) requires Apache to be restarted to take effect.
 
4742
-
 
4743
---------------------------------------------------------------
 
4744
-. Read the docs/* files, these are examples of configuration.
 
4745
---------------------------------------------------------------
 
4746
-
 
4747
-. Optional: Install Integration Packages tac_plus and msyslog (read the README and INSTALL files of each program).
 
4748
-    Hints: 
 
4749
-       -If you have problems with mysql when compiling (mysql.h lines ~245 & ~256) change DB to db (lowercase);
 
4750
-       -If you have a linking problem with compress add -lz to the Makefile libraries      
 
4751
-       -msyslog: Remember to change your init.d/syslog to the new binary and command line options. (read the example)
 
4752
-
 
4753
-. Create User & Group
 
4754
-
 
4755
-       Note: replace apache by your Apache user (like apache, httpd, www-data, etc)
 
4756
-
 
4757
-       # groupadd jffnms
 
4758
-       # useradd -g jffnms -d /opt/jffnms -s /bin/false -c 'JFFNMS User' jffnms
 
4759
-       # usermod -G jffnms apache
 
4760
-
 
4761
-. Unpack the release:
 
4762
-
 
4763
-       # tar xvzf jffnms-0.9.2.tar.gz 
 
4764
-
 
4765
-    You will get a directory called jffnms-0.9.2/ 
 
4766
-
 
4767
-       # mv jffnms-0.9.2 /opt/jffnms
 
4768
-
 
4769
-. Permissions
 
4770
-       
 
4771
-       # chown -R jffnms:jffnms /opt/jffnms
 
4772
-       # chmod 770 /opt/jffnms
 
4773
-       # chmod -R ug+rw /opt/jffnms
 
4774
-
 
4775
-. Crontab
 
4776
-       Install the JFFNMS crontab file 
 
4777
-
 
4778
-       # crontab -u jffnms /opt/jffnms/docs/unix/crontab
 
4779
-       
 
4780
-       Now modify the values at the top if they don't match your system:
 
4781
-
 
4782
-       # crontab -e -u jffnms 
 
4783
-
 
4784
-       Allow JFFNMS to run cron jobs (AFAIK only needed in Solaris)
 
4785
-
 
4786
-       # echo jffnms >> /etc/cron.allow
 
4787
-
 
4788
-. Create the Databases
 
4789
-
 
4790
-    Manually create the database "jffnms", set the permissions and then import the schema and data.
 
4791
-    
 
4792
-    Replace the 'x' with the jffnms version number.
 
4793
-    
 
4794
-    MySQL:
 
4795
-    ======
 
4796
-       # mysql -u <mysql admin username> -p<password>
 
4797
-       mysql> CREATE DATABASE jffnms;
 
4798
-       mysql> GRANT ALL PRIVILEGES ON jffnms.* TO jffnms@localhost IDENTIFIED BY 'jffnms';
 
4799
-       mysql> FLUSH PRIVILEGES;
 
4800
-       mysql> quit
 
4801
-    
 
4802
-       # mysql -u jffnms -pjffnms jffnms < docs/install/jffnms-0.9.2.mysql
 
4803
-    
 
4804
-    PostgreSQL:
 
4805
-    ===========
 
4806
-       # psql template1 postgres
 
4807
-       template1=# create user jffnms password 'jffnms' createdb;
 
4808
-       template1=# \connect template1 jffnms
 
4809
-       template1=# create database jffnms;
 
4810
-       template1=# \q
 
4811
-       
 
4812
-       # psql jffnms jffnms < docs/install/jffnms-0.9.2.pgsql
 
4813
-    
 
4814
-    This will create the jffnms Tables and required records.  
 
4815
-
 
4816
-
 
4817
-. Configure Apache as follows (from docs/*): 
 
4818
-
 
4819
-    1. As a Virtual Host (if you control a DNS server):
 
4820
-
 
4821
-       <VirtualHost *>
 
4822
-            ServerAdmin you@yournet.com
 
4823
-            DocumentRoot /opt/jffnms/htdocs
 
4824
-            ServerName nms.yournet.com
 
4825
-           LimitRequestLine 20000
 
4826
-        </VirtualHost>
 
4827
-
 
4828
-    2. As a sym-link (in Unix):
 
4829
-
 
4830
-       ln -s /opt/jffnms/htdocs /var/www/html/jffnms 
 
4831
-
 
4832
-       (or the path your Apache uses).
 
4833
-
 
4834
-    JFFNMS needs to be at the main Document Root, a VirtualHost or a SymLink. 
 
4835
-
 
4836
-. Restart/Reload Apache, MySQL or PgSQL, xINETD (tftpd)
 
4837
-
 
4838
-. PHP Module Load Errors are reported to /var/log/httpd/error_log (RedHat) or /var/log/apache/error_log (Gentoo)
 
4839
-
 
4840
-. Point your browser to http://www.yourserver.com/jffnms or http://nms.yournet.com/ (depending on what you choose)
 
4841
-
 
4842
-       You should see the Setup screen, it should have auto-discovered your configuration.
 
4843
-       Verify that everything is correct (OK, YES in green) before saving the config.
 
4844
-    
 
4845
-. Point your browser (again) to http://www.yourserver.com/jffnms or http://nms.yournet.com/ (depending on what you 
 
4846
-choose)
 
4847
-
 
4848
-    Username: admin 
 
4849
-    Password: admin
 
4850
-
 
4851
-    And now, you are inside the system.
 
4852
-
 
4853
-
 
4854
-. You can read the manual at http://www.jffnms.org
 
4855
-
 
4856
-
 
4857
-=========================================================================
 
4858
-If you need anything, contact us at: jffnms-users@lists.sourceforge.net
 
4859
-
 
4860
-Thank You for trying 'Just For Fun' Network Management System
 
4861
-
 
4862
-Don't forget to Donate to the project if you find it useful for your work.
 
4863
-=========================================================================
 
4864
-
 
4865
-Javier Szyszlican aka SzYsZ
 
4866
-Buenos Aires, Argentina
 
4867
-javier@jffnms.org (please try the mailing list first) 
 
4868
-ICQ #397319
 
4869
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/INSTALL.win32.txt jffnms-0.9.3/INSTALL.win32.txt
 
4870
--- ../jffnms-0.9.2/INSTALL.win32.txt   2012-03-04 13:43:13.000000000 +1100
 
4871
+++ jffnms-0.9.3/INSTALL.win32.txt      1970-01-01 10:00:00.000000000 +1000
 
4872
@@ -1,203 +0,0 @@
 
4873
-Windows 2000/XP Install Procedure 
 
4874
-=================================
 
4875
-
 
4876
-
 
4877
-Note: This will not work for Windows 95/98/Me, it's only for Windows 2000/XP and maybe NT 4.0
 
4878
-
 
4879
-The installation should be done as and Administrator User.
 
4880
-
 
4881
-This guide is for Apache2 with PHP5. If you want to use older versions, 
 
4882
-read the JFFNMS 0.7.9 INSTALL.win32.txt file.
 
4883
-
 
4884
-Installation:
 
4885
--------------
 
4886
-
 
4887
-Install Apache: 
 
4888
-       Download Apache2 from: http://www.apache.org/dist/httpd/binaries/win32/
 
4889
-       Get the latest release "no_ssl.msi" package, like "apache_2.0.52-win32-x86-no_ssl.msi".
 
4890
-       Complete Install, Click on Next until Finish. 
 
4891
-       You should see Apache running in your taskbar.
 
4892
-       Test it going browsing to http://localhost/ or http://IP.OF.YOUR.BOX/
 
4893
-
 
4894
-Install MySQL: 
 
4895
-       Download from: http://www.mysql.com/downloads/mysql/4.1.html
 
4896
-       Scroll down until you find MySQL Essentials for Windows.
 
4897
-       
 
4898
-       Select the "Complete Install", Click on Next until Finish.
 
4899
-
 
4900
-       When you go into the configuration phase, select "Server Machine", 
 
4901
-       and then "Non-Transacctional Database Only".
 
4902
-       
 
4903
-       Then set a new root password.
 
4904
-       
 
4905
-       All other configuration leave as default.
 
4906
-               
 
4907
-Install PHP:
 
4908
-       Download PHP 5 from: http://www.php.net/downloads.php
 
4909
-       Get the "Windows Binaries ZIP package" with all the modules (First One).
 
4910
-
 
4911
-       Extract the archive to c:\php 
 
4912
-
 
4913
-       Execute the following: 
 
4914
-           c:\> copy c:\php\php.ini-dist c:\windows\php.ini
 
4915
-           c:\> copy c:\php\libmysql.dll c:\windows\
 
4916
-       
 
4917
-       Create Folder c:\usr
 
4918
-       Copy c:\php\extra\mibs to c:\usr\mibs
 
4919
-
 
4920
-Install JFFNMS:
 
4921
-       Download the .zip file (I'm sure you already have done this) and extract it to c:\jffnms 
 
4922
-
 
4923
-       Create the User 'jffnms' in the Windows User Manager with any password you choose.
 
4924
-       
 
4925
-       Remember to CHECK 'Password Never Expires' and UNCHECK 'Must Change password at next logon' for this user.
 
4926
-       
 
4927
-       Give the 'jffnms' user FULL CONTROL over the c:\jffnms folder (and its sub-folders)
 
4928
-
 
4929
-Install RRDTOOL:
 
4930
-       Download from: http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/?M=D
 
4931
-       Get the rrdtool-1.0.49-win32-bin.zip (or newer) file.
 
4932
-       Extract the archive to a temporary location.
 
4933
-       Copy the rrdtool.exe file from inside the archive to c:\jffnms 
 
4934
-
 
4935
-Install NMAP: (If you are running Windows XP please read the NMAP page carefully, it may not work)
 
4936
-       Download it from: http://www.insecure.org/nmap/nmap_download.html
 
4937
-       Get the nmap-3.81-win32.zip file (or newer)
 
4938
-       Extract the nmap.exe file from the archive to c:\jffnms\
 
4939
-
 
4940
-Install WinPCAP for NMAP:
 
4941
-    
 
4942
-       Download it from: http://winpcap.polito.it/
 
4943
-       Choose the Auto-Installer.
 
4944
-       Complete Install, Click on Next until Finish.
 
4945
-       
 
4946
-       
 
4947
-Configuration:
 
4948
---------------
 
4949
-
 
4950
-Configure Apache for PHP5:
 
4951
-
 
4952
-       Add this to the bottom of your c:\program files\apache group\Apache2\conf\httpd.conf file:
 
4953
-
 
4954
-       LoadModule php5_module c:/php/php5apache2.dll
 
4955
-       AddType application/x-httpd-php .php
 
4956
-
 
4957
-       NameVirtualHost *
 
4958
-
 
4959
-       <VirtualHost *>
 
4960
-           ServerAdmin webmaster@your-domain.com
 
4961
-           DocumentRoot c:\jffnms\htdocs
 
4962
-           ServerName nms.yourdomain.com
 
4963
-           DirectoryIndex index.php
 
4964
-           LimitRequestLine 20000
 
4965
-       </VirtualHost>
 
4966
-
 
4967
-       * Make sure you modify the above information to match your needed settings
 
4968
-
 
4969
-Configure PHP: 
 
4970
-       Make sure you have this on your php.ini file:
 
4971
-
 
4972
-       register_globals = On
 
4973
-       register_argc_argv = On
 
4974
-       allow_url_fopen = On
 
4975
-       
 
4976
-       extension_dir = c:\php\ext
 
4977
-       
 
4978
-       (Uncomment the following):
 
4979
-       extension=php_gd2.dll
 
4980
-       extension=php_snmp.dll
 
4981
-       extension=php_mysql.dll
 
4982
-       extension=php_sockets.dll
 
4983
-       
 
4984
-       SMTP = your.mail.server.com     (set it to your mail server IP or DNS name)
 
4985
-
 
4986
-       Now Restart the Apache Service.
 
4987
-
 
4988
-       if you don't change these, JFFNMS will not work.
 
4989
-
 
4990
-Configure MySQL:
 
4991
-
 
4992
-       To create the JFFNMS DB run the following:
 
4993
-       
 
4994
-       Check the path to mysql.exe
 
4995
-
 
4996
-       c:\> c:\Program Files\MySQL\MySQL Server 4.1\bin\mysql.exe -u root -p<Root MySQL Password>
 
4997
-       
 
4998
-       mysql>CREATE DATABASE jffnms;
 
4999
-       mysql>GRANT ALL PRIVILEGES ON jffnms.* TO jffnms@localhost IDENTIFIED BY 'jffnms';  
 
5000
-       mysql>FLUSH PRIVILEGES;  
 
5001
-       mysql>quit;
 
5002
-       
 
5003
-       And:
 
5004
-
 
5005
-       c:\> c:\Program Files\MySQL\MySQL Server 4.1\bin\mysql.exe -ujffnms -pjffnms jffnms < c:\jffnms\docs\jffnms-0.8.x.mysql         
 
5006
-    
 
5007
-       Replace x with the version you are installing.
 
5008
-
 
5009
-Configure JFFNMS:
 
5010
-       
 
5011
-       -----------------
 
5012
-       I M P O R T A N T
 
5013
-       -----------------
 
5014
-       
 
5015
-       Go to: http://yourserver/
 
5016
-
 
5017
-       Verify and change (if needed) the options. 
 
5018
-       
 
5019
-       Don't mind the errors on diff, neato, smsclient, fping, ntpq, PgSQL and SOAP.
 
5020
-       
 
5021
-       Save the configuration and change the values until everything needed is Green.
 
5022
-       
 
5023
-       Everything else SHOULD be OK. 
 
5024
-
 
5025
-       Scheduled Tasks:
 
5026
-       ----------------
 
5027
-               If you did not install jffnms in c:\jffnms you will have to change the 
 
5028
-               contents of the .bat files (path).
 
5029
-
 
5030
-               Start/Settings/Control Panel/Scheduled Tasks/Add Scheduled Task.
 
5031
-                       1) Next
 
5032
-                       2) Click Browse
 
5033
-                       3) Browse to c:\jffnms\engine\windows and select the first .bat file. 
 
5034
-                       4) Select Daily, then Next.
 
5035
-                       5) Change the Start time to 12:00 AM
 
5036
-                       6) Select Every 1 Days then Next.
 
5037
-                       7) Enter Username: jffnms and Password: (the one you choosed before), then Next.
 
5038
-                       8) Click the 'Open Avanced...' checkbox, then click Finish
 
5039
-                       9) Change "Start In" to c:\jffnms\engine
 
5040
-                       10) Click the Schedule tab
 
5041
-                       11) For autodiscovery_interfaces, consolidate, poller & rrd_analizer:
 
5042
-                               Click on the Advanced Button.
 
5043
-                               Check Repeat Task.  In the Every Field enter the respective times: 
 
5044
-                                       autodiscovery_interfaces every 30 minutes.                              
 
5045
-                                       consolidate Every 1 Minute.
 
5046
-                                       poller Every 4 minutes.
 
5047
-                                       rrd_analizer every 30 minutes.
 
5048
-                               Duration: 24 Hours.
 
5049
-
 
5050
-                       12) Click on OK.
 
5051
-                       13) Click on OK.
 
5052
-                       
 
5053
-               ** REPEAT THESE STEPS FOR EACH .BATCH FILE IN THE C:\JFFNMS\ENGINE\WINDOWS PATH!
 
5054
-
 
5055
-
 
5056
-Now... try to access http://yourserver/ or http://yourserver/jffnms/ (if you took this way)
 
5057
-Remember to add the last slash / to the URL.
 
5058
-The Default Username and password is "admin".
 
5059
-
 
5060
-If you want to read more, please read the INSTALL file and skip the Unix Parts.
 
5061
-
 
5062
-
 
5063
-=========================================================================
 
5064
-
 
5065
-If you need anything, contact us at: jffnms-users@lists.sourceforge.net
 
5066
-
 
5067
-Thank You for trying 'Just For Fun' Network Management System
 
5068
-
 
5069
-Don't forget to Donate to the project if you find it useful for your work.
 
5070
-
 
5071
-=========================================================================
 
5072
-Javier Szyszlican aka SzYsZ
 
5073
-Buenos Aires, Argentina
 
5074
-javier@jffnms.org (please try the mailing list first) 
 
5075
-ICQ #397319
 
5076
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/lib/api.classes.inc.php jffnms-0.9.3/lib/api.classes.inc.php
 
5077
--- ../jffnms-0.9.2/lib/api.classes.inc.php     2011-06-15 11:39:31.000000000 +1000
 
5078
+++ jffnms-0.9.3/lib/api.classes.inc.php        2012-04-11 21:58:45.000000000 +1000
 
5079
@@ -35,46 +35,6 @@
 
5080
   }
 
5081
 } // class jffnms_graph_types
 
5082
 
 
5083
-class JffnmsHosts_config extends basic
 
5084
-{
 
5085
-  function diff ($id1, $id2)
 
5086
-  {
 
5087
-    global $Config;
 
5088
-  
 
5089
-    if ($id1 != $id2)
 
5090
-    {
 
5091
-      $aux = $this->config_list(array($id1,$id2));
 
5092
-      $str1 = $aux[0]['config'];
 
5093
-      $str2 = $aux[1]['config'];
 
5094
-    
 
5095
-      $engine_temp = $Config->get('engine_temp_path');
 
5096
-    
 
5097
-      $name1 = $engine_temp.'/'.uniqid('').'.dat';
 
5098
-      $name2 = $engine_temp.'/'.uniqid('').'.dat';
 
5099
-  
 
5100
-      $pf = fopen($name1,'w');
 
5101
-      fputs($pf,$str1);
 
5102
-      fclose($pf);
 
5103
-  
 
5104
-      $pf = fopen($name2,"w");
 
5105
-      fputs($pf,$str2);
 
5106
-      fclose($pf);
 
5107
-  
 
5108
-      $diff_executable = $Config->get('diff_executable');
 
5109
-  
 
5110
-      if (file_exists($diff_executable))
 
5111
-      {
 
5112
-        $c = exec($diff_executable.' -Nru '.$name1.' '.$name2, $diff);
 
5113
-        unlink($name1);
 
5114
-        unlink($name2);
 
5115
-        
 
5116
-        $diff = join("\n",array_slice($diff, 3));
 
5117
-        return $diff;
 
5118
-      }
 
5119
-    }
 
5120
-    return false;
 
5121
-  }
 
5122
-}
 
5123
 
 
5124
 class JffnmsHosts_config_types extends basic
 
5125
 { 
 
5126
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/lib/api.iad.inc.php jffnms-0.9.3/lib/api.iad.inc.php
 
5127
--- ../jffnms-0.9.2/lib/api.iad.inc.php 2010-11-01 10:56:01.000000000 +1100
 
5128
+++ jffnms-0.9.3/lib/api.iad.inc.php    2012-04-11 22:27:10.000000000 +1000
 
5129
@@ -24,6 +24,8 @@
 
5130
           $index=$field;
 
5131
           break;
 
5132
         }
 
5133
+    if (!isset($index))
 
5134
+        return $db_interfaces;
 
5135
     unset ($field);
 
5136
     unset ($fdata);
 
5137
     unset ($aux['field_types']);
 
5138
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/lib/api.inc.php jffnms-0.9.3/lib/api.inc.php
 
5139
--- ../jffnms-0.9.2/lib/api.inc.php     2012-02-14 23:10:39.000000000 +1100
 
5140
+++ jffnms-0.9.3/lib/api.inc.php        2012-04-13 20:59:05.000000000 +1000
 
5141
@@ -25,16 +25,19 @@
 
5142
 
 
5143
   if ($Config->get('jffnms_debug')==1)
 
5144
   {
 
5145
-    $file = str_replace('.php','',basename($Config->get('logging_file')));
 
5146
-    $filename = $Config->get('log_path').'/'.$file.'-'.date('Y-m-d').'.log';
 
5147
-
 
5148
-    if ( ($log = fopen($filename,"a+")) === FALSE)
 
5149
-    {
 
5150
-      print "Unable to open log file $filename.\n";
 
5151
-      return;
 
5152
-    }
 
5153
-    fputs($log, $text);
 
5154
-    fclose($log);
 
5155
+      if (array_key_exists('Child', $GLOBALS)) {
 
5156
+          $GLOBALS['Child']->logger($text);
 
5157
+          return;
 
5158
+      }  
 
5159
+      $file = str_replace('.php','',basename($Config->get('logging_file')));
 
5160
+      $filename = $Config->get('log_path').'/'.$file.'-'.date('Y-m-d').'.log';
 
5161
+
 
5162
+      if ( ($log = fopen($filename,'a+')) === FALSE) {
 
5163
+          print "Unable to open log file $filename.\n";
 
5164
+          return;
 
5165
+      }
 
5166
+      fputs($log, $text);
 
5167
+      fclose($log);
 
5168
   }
 
5169
   echo $text;
 
5170
 }
 
5171
@@ -73,6 +76,18 @@
 
5172
   return $result;
 
5173
 }
 
5174
 
 
5175
+// Youre kidding me right? the float and floatvar are not locale
 
5176
+// aware? Really?
 
5177
+// Lucky for us rrdtool exports things as scientific notation so we don't
 
5178
+// need to worry about thousand separators
 
5179
+function str2f($str)
 
5180
+{
 
5181
+    $linfo = localeconv();
 
5182
+    $str = str_replace(',','.',$str);
 
5183
+    return floatval($str);
 
5184
+}
 
5185
+
 
5186
+
 
5187
 // TIME FUNCTIONS
 
5188
 //-----------------------------------------
 
5189
 //
 
5190
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/lib/api.network.inc.php jffnms-0.9.3/lib/api.network.inc.php
 
5191
--- ../jffnms-0.9.2/lib/api.network.inc.php     2011-06-01 15:10:15.000000000 +1000
 
5192
+++ jffnms-0.9.3/lib/api.network.inc.php        2012-04-11 22:23:54.000000000 +1000
 
5193
@@ -70,13 +70,16 @@
 
5194
 
 
5195
   if ($include_oid > INCLUDE_OID_BASE)
 
5196
     $result = snmp_reduce_table_key ($result, $include_oid-INCLUDE_OID_BASE);
 
5197
-  foreach  ($result as $oid => $value)
 
5198
+  $new_result = array();
 
5199
+  foreach  ($result as $oid => $value) {
 
5200
       if (
 
5201
           (strpos($value, 'No Such Instance') !== FALSE) or
 
5202
           (strpos($value, 'No Such Object') !== FALSE) or
 
5203
           (strpos($value, 'No more variables left') !== FALSE) )
 
5204
-          unset($result[$oid]);
 
5205
-  return $result;
 
5206
+          continue;
 
5207
+      $new_result[$oid] = snmp_fix_value($value);
 
5208
+  }
 
5209
+  return $new_result;
 
5210
 }
 
5211
 
 
5212
 function snmp_get ($host, $comm, $oid, $retries = 2)
 
5213
@@ -107,7 +110,7 @@
 
5214
       (strpos($result, 'No Such Object') !== FALSE) or
 
5215
       (strpos($result, 'No more variables left') !== FALSE) )
 
5216
     return FALSE;
 
5217
-  return $result;
 
5218
+  return snmp_fix_value($result);
 
5219
 }
 
5220
     
 
5221
 function snmp_set ($host, $comm, $oid, $type, $value, $retries = 2)
 
5222
@@ -158,17 +161,17 @@
 
5223
 
 
5224
 function snmp_fix_value ($value)
 
5225
 {
 
5226
-  $value = trim ($value);
 
5227
-  if (strpos($value,'=') !== false)           // if it has = in the value
 
5228
-    $value = substr($value, strpos($value,'=')+2, strlen($value));  // return only the data after the =
 
5229
-
 
5230
-  if ($value=preg_replace('/INTEGER: /','',$value))
 
5231
-    return $value;
 
5232
-  
 
5233
-  if (preg_match("/^\"(\S.+)\"$/",$value,$parts)) $value = $parts[1];
 
5234
-  if (preg_match("/STRING: \"(\S.+)\"/",$value,$parts)) $value = $parts[1];
 
5235
-
 
5236
-  return preg_replace('/(?:STRING|IpAddress|Gauge32|Counter32|Counter64): /','',$value);
 
5237
+    if ($value === FALSE)
 
5238
+        return FALSE;
 
5239
+    $value = preg_replace('/(counter32|counter64|gauge|gauge32|gauge64|hex|ipaddress|integer|string):/i', '', $value);
 
5240
+    if ($value == '')
 
5241
+        return '';
 
5242
+    if (is_numeric($value))
 
5243
+        return trim($value);
 
5244
+
 
5245
+    // Remove quotes and other delimiters
 
5246
+    $value = str_replace(array("\"","'",">","<","\\","\n","\r"),'', $value);
 
5247
+    return trim($value);
 
5248
 }
 
5249
     
 
5250
 function snmp_reduce_table_key ($table, $important = 1)
 
5251
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/lib/api.rrdtool.inc.php jffnms-0.9.3/lib/api.rrdtool.inc.php
 
5252
--- ../jffnms-0.9.2/lib/api.rrdtool.inc.php     2012-02-14 23:10:39.000000000 +1100
 
5253
+++ jffnms-0.9.3/lib/api.rrdtool.inc.php        2012-04-13 16:42:54.000000000 +1000
 
5254
@@ -50,11 +50,12 @@
 
5255
     $command .= ' --daemon '.RRDCACHED_SOCKET;
 
5256
 
 
5257
   //debug($command);
 
5258
+  $command .= ' 2>&1';
 
5259
         
 
5260
   if ($use_pipe)
 
5261
     list ($ret1, $ret2) = rrd_pipe($method." '".$file."' ".$aux);
 
5262
   else
 
5263
-    exec($command,$ret1,$ret2);
 
5264
+    $ret3 = exec($command,$ret1,$ret2);
 
5265
     
 
5266
   //debug($ret1);
 
5267
   //debug($ret2);
 
5268
@@ -74,7 +75,7 @@
 
5269
           {
 
5270
             for ($i = 1; $i < count($line1); $i++)      // Part 1 is timestamp
 
5271
               if ($line1[$i]!=="")           // Part 2 maybe is a space
 
5272
-                $value[] = ($line1[$i]=="nan")?0:(float)$line1[$i]; // Part 3 (or 2) has the data
 
5273
+                $value[] = ($line1[$i]=="nan")?0:str2f($line1[$i]); // Part 3 (or 2) has the data
 
5274
             $date = (int)$line1[0];          // Time Stamp
 
5275
             if (!isset($stop)) $stop=0;
 
5276
             if ($date > $stop) $stop = $date;
 
5277
@@ -111,6 +112,7 @@
 
5278
       if ($ret2 != 0 )
 
5279
       {
 
5280
         $error=1; $ret = 0;
 
5281
+        $info .+ $ret3;
 
5282
       }
 
5283
       break;
 
5284
     case 'last':
 
5285
@@ -125,8 +127,12 @@
 
5286
     $error=1; $ret = 0;
 
5287
   }
 
5288
   
 
5289
-  if ($error==1)
 
5290
-    echo("rrd_$method() ERROR: $info");
 
5291
+  if ($error==1) {
 
5292
+      if (array_key_exists('Child', $GLOBALS)) {
 
5293
+          $GLOBALS['Child']->send_error("rrd_$method(): $ret3");
 
5294
+      } else
 
5295
+          echo("rrd_$method() ERROR: $info");
 
5296
+  }
 
5297
   return $ret;
 
5298
 }
 
5299
 
 
5300
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/lib/gui.admin.inc.php jffnms-0.9.3/lib/gui.admin.inc.php
 
5301
--- ../jffnms-0.9.2/lib/gui.admin.inc.php       2012-02-14 23:10:39.000000000 +1100
 
5302
+++ jffnms-0.9.3/lib/gui.admin.inc.php  2012-04-13 21:26:48.000000000 +1000
 
5303
@@ -46,19 +46,16 @@
 
5304
 
 
5305
 function adm_table_header($title, $init, &$span, $cols, $total_items = -1, $id = "", $show_add = true)
 
5306
 {
 
5307
-  global $Sanitizer;
 
5308
+    global $Sanitizer;
 
5309
        global $filter, $host_id, $client_id, $map_id, $use_interfaces, $interface_id, $filter_field;
 
5310
 
 
5311
-       if (!$span) $span = 20;
 
5312
-  $url = $Sanitizer->get_url('', 'all', 
 
5313
-    array('filter' => $filter), //new
 
5314
-    array('action', 'actionid'));//del
 
5315
-  $url_init = $Sanitizer->get_url('', 'all', 
 
5316
-    array('filter' => $filter), //new
 
5317
-    array('action', 'actionid', 'init'));//del
 
5318
-  $url_span = $Sanitizer->get_url('', 'all', 
 
5319
-    array('filter' => $filter), //new
 
5320
-    array('action', 'actionid', 'span'));//del
 
5321
+    if (!$span) $span = 20;
 
5322
+    $url = $Sanitizer->get_url('', array('use_interfaces', 'admin_structure','init','span'),
 
5323
+        array('filter' => $filter));
 
5324
+    $url_init = $Sanitizer->get_url('', array('use_interfaces', 'admin_structure', 'span'),
 
5325
+        array('filter' => $filter));
 
5326
+    $url_span = $Sanitizer->get_url('', array('use_interfaces', 'admin_structure', 'init'),
 
5327
+        array('filter' => $filter));
 
5328
 
 
5329
        return
 
5330
            table ($id, "admintable").
 
5331
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/lib/gui.controls.inc.php jffnms-0.9.3/lib/gui.controls.inc.php
 
5332
--- ../jffnms-0.9.2/lib/gui.controls.inc.php    2011-06-15 11:40:54.000000000 +1000
 
5333
+++ jffnms-0.9.3/lib/gui.controls.inc.php       2012-04-11 21:58:37.000000000 +1000
 
5334
@@ -198,7 +198,7 @@
 
5335
 
 
5336
 function select_slas_cond ($name,$id, $add_data = NULL, $onchange = "", $params = array())
 
5337
 {
 
5338
-  $SLAs_cond = new JffnmsSlas_conds();
 
5339
+  $SLAs_cond = new JffnmsSlas_cond();
 
5340
   return select_object($SLAs_cond,$name,$id,$add_data,'id','description',$params,1,$onchange);
 
5341
 } 
 
5342
 
 
5343
@@ -295,9 +295,9 @@
 
5344
 
 
5345
   if ($text==0)
 
5346
       return select_custom($name,$trigger_op,$value);
 
5347
-  else 
 
5348
+  if (array_key_exists($value, $trigger_op))
 
5349
       return $trigger_op[$value];
 
5350
-      
 
5351
+  return '';
 
5352
     }
 
5353
 
 
5354
     function get_trigger_fields($type)
 
5355
@@ -357,10 +357,8 @@
 
5356
 {
 
5357
   $trigger_fields = get_trigger_fields($type);
 
5358
     
 
5359
-  //var_dump(array($type, $field));
 
5360
-  #if ((!$field) || ($field=='any') || ($field=='none')) 
 
5361
-  if ( ($field=='any') || ($field=='none')) 
 
5362
-    return "field $field f";
 
5363
+  if ((!$field) || ($field=='any') || ($field=='none')) 
 
5364
+      return '';
 
5365
   else 
 
5366
     return call_user_func_array($trigger_fields[$field]['function'],
 
5367
     array_merge(array($name, $value), $trigger_fields[$field]['params']));
 
5368
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/lib/hosts_configs.class.php jffnms-0.9.3/lib/hosts_configs.class.php
 
5369
--- ../jffnms-0.9.2/lib/hosts_configs.class.php 1970-01-01 10:00:00.000000000 +1000
 
5370
+++ jffnms-0.9.3/lib/hosts_configs.class.php    2012-03-15 21:44:48.000000000 +1100
 
5371
@@ -0,0 +1,87 @@
 
5372
+<?php
 
5373
+/* This file is part of JFFNMS
 
5374
+ * Copyright (C) <2002-2005> Javier Szyszlican <javier@szysz.com>
 
5375
+:w 
 
5376
+ * This program is licensed under the GNU GPL, full terms in the LICENSE file
 
5377
+ */
 
5378
+class JffnmsHosts_configs extends basic
 
5379
+{
 
5380
+  function jffnms_class()
 
5381
+  {
 
5382
+      return 'hosts_config';
 
5383
+  }
 
5384
+
 
5385
+  function add($host_id=1) {
 
5386
+      return db_insert('hosts_config', array('config'=>'New Config', 'host'=>$host_id));
 
5387
+  } // add
 
5388
+
 
5389
+
 
5390
+  function diff ($id1, $id2)
 
5391
+  {
 
5392
+    global $Config;
 
5393
+  
 
5394
+    if ($id1 != $id2)
 
5395
+    {
 
5396
+      $aux = $this->get_all(array($id1,$id2));
 
5397
+      $str1 = $aux[0]['config'];
 
5398
+      $str2 = $aux[1]['config'];
 
5399
+    
 
5400
+      $engine_temp = $Config->get('engine_temp_path');
 
5401
+    
 
5402
+      $name1 = $engine_temp.'/'.uniqid('').'.dat';
 
5403
+      $name2 = $engine_temp.'/'.uniqid('').'.dat';
 
5404
+  
 
5405
+      $pf = fopen($name1,'w');
 
5406
+      fputs($pf,$str1);
 
5407
+      fclose($pf);
 
5408
+  
 
5409
+      $pf = fopen($name2,"w");
 
5410
+      fputs($pf,$str2);
 
5411
+      fclose($pf);
 
5412
+  
 
5413
+      $diff_executable = $Config->get('diff_executable');
 
5414
+  
 
5415
+      if (file_exists($diff_executable))
 
5416
+      {
 
5417
+        $c = exec($diff_executable.' -Nru '.$name1.' '.$name2, $diff);
 
5418
+        unlink($name1);
 
5419
+        unlink($name2);
 
5420
+        
 
5421
+        $diff = join("\n",array_slice($diff, 3));
 
5422
+        return $diff;
 
5423
+      }
 
5424
+    }
 
5425
+    return false;
 
5426
+  }
 
5427
+
 
5428
+  function get_all($ids = NULL, $host_id=NULL, $init=NULL, $span=NULL, $where_special=NULL)
 
5429
+  {
 
5430
+      if (!is_array($where_special))
 
5431
+          $where_special = array();
 
5432
+
 
5433
+      if (is_numeric($host_id))
 
5434
+          $where_special[]=array('hosts.id','=',$host_id);
 
5435
+      if ($ids!= NULL)
 
5436
+          $order = 'asc';
 
5437
+      else 
 
5438
+          $order = 'desc';
 
5439
+
 
5440
+      return get_db_list(
 
5441
+        array('hosts_config','zones','hosts'),
 
5442
+        $ids,
 
5443
+        array('hosts_config.*',
 
5444
+              'zone_description'=>'zones.zone',
 
5445
+              'host_description'=>'hosts.name' ),
 
5446
+        array_merge(
 
5447
+            array(
 
5448
+                array('hosts.zone','=','zones.id'),
 
5449
+                array('hosts_config.host','=','hosts.id'),
 
5450
+                array('hosts_config.id','>','1')),
 
5451
+            $where_special),
 
5452
+        array (
 
5453
+            array('hosts_config.date',$order),
 
5454
+            array('hosts.id','asc')),
 
5455
+        '',NULL,$init,$span
 
5456
+    );
 
5457
+  }
 
5458
+} // class JffnmsHosts_Config
 
5459
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/LICENSE jffnms-0.9.3/LICENSE
 
5460
--- ../jffnms-0.9.2/LICENSE     2012-03-04 13:43:13.000000000 +1100
 
5461
+++ jffnms-0.9.3/LICENSE        1970-01-01 10:00:00.000000000 +1000
 
5462
@@ -1,340 +0,0 @@
 
5463
-
 
5464
-                    GNU GENERAL PUBLIC LICENSE
 
5465
-                       Version 2, June 1991
 
5466
-
 
5467
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 
5468
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
5469
- Everyone is permitted to copy and distribute verbatim copies
 
5470
- of this license document, but changing it is not allowed.
 
5471
-
 
5472
-                            Preamble
 
5473
-
 
5474
-  The licenses for most software are designed to take away your
 
5475
-freedom to share and change it.  By contrast, the GNU General Public
 
5476
-License is intended to guarantee your freedom to share and change free
 
5477
-software--to make sure the software is free for all its users.  This
 
5478
-General Public License applies to most of the Free Software
 
5479
-Foundation's software and to any other program whose authors commit to
 
5480
-using it.  (Some other Free Software Foundation software is covered by
 
5481
-the GNU Lesser General Public License instead.)  You can apply it to
 
5482
-your programs, too.
 
5483
-
 
5484
-  When we speak of free software, we are referring to freedom, not
 
5485
-price.  Our General Public Licenses are designed to make sure that you
 
5486
-have the freedom to distribute copies of free software (and charge for
 
5487
-this service if you wish), that you receive source code or can get it
 
5488
-if you want it, that you can change the software or use pieces of it
 
5489
-in new free programs; and that you know you can do these things.
 
5490
-
 
5491
-  To protect your rights, we need to make restrictions that forbid
 
5492
-anyone to deny you these rights or to ask you to surrender the rights.
 
5493
-These restrictions translate to certain responsibilities for you if you
 
5494
-distribute copies of the software, or if you modify it.
 
5495
-
 
5496
-  For example, if you distribute copies of such a program, whether
 
5497
-gratis or for a fee, you must give the recipients all the rights that
 
5498
-you have.  You must make sure that they, too, receive or can get the
 
5499
-source code.  And you must show them these terms so they know their
 
5500
-rights.
 
5501
-
 
5502
-  We protect your rights with two steps: (1) copyright the software, and
 
5503
-(2) offer you this license which gives you legal permission to copy,
 
5504
-distribute and/or modify the software.
 
5505
-
 
5506
-  Also, for each author's protection and ours, we want to make certain
 
5507
-that everyone understands that there is no warranty for this free
 
5508
-software.  If the software is modified by someone else and passed on, we
 
5509
-want its recipients to know that what they have is not the original, so
 
5510
-that any problems introduced by others will not reflect on the original
 
5511
-authors' reputations.
 
5512
-
 
5513
-  Finally, any free program is threatened constantly by software
 
5514
-patents.  We wish to avoid the danger that redistributors of a free
 
5515
-program will individually obtain patent licenses, in effect making the
 
5516
-program proprietary.  To prevent this, we have made it clear that any
 
5517
-patent must be licensed for everyone's free use or not licensed at all.
 
5518
-
 
5519
-  The precise terms and conditions for copying, distribution and
 
5520
-modification follow.
 
5521
-
 
5522
-                    GNU GENERAL PUBLIC LICENSE
 
5523
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
5524
-
 
5525
-  0. This License applies to any program or other work which contains
 
5526
-a notice placed by the copyright holder saying it may be distributed
 
5527
-under the terms of this General Public License.  The "Program", below,
 
5528
-refers to any such program or work, and a "work based on the Program"
 
5529
-means either the Program or any derivative work under copyright law:
 
5530
-that is to say, a work containing the Program or a portion of it,
 
5531
-either verbatim or with modifications and/or translated into another
 
5532
-language.  (Hereinafter, translation is included without limitation in
 
5533
-the term "modification".)  Each licensee is addressed as "you".
 
5534
-
 
5535
-Activities other than copying, distribution and modification are not
 
5536
-covered by this License; they are outside its scope.  The act of
 
5537
-running the Program is not restricted, and the output from the Program
 
5538
-is covered only if its contents constitute a work based on the
 
5539
-Program (independent of having been made by running the Program).
 
5540
-Whether that is true depends on what the Program does.
 
5541
-
 
5542
-  1. You may copy and distribute verbatim copies of the Program's
 
5543
-source code as you receive it, in any medium, provided that you
 
5544
-conspicuously and appropriately publish on each copy an appropriate
 
5545
-copyright notice and disclaimer of warranty; keep intact all the
 
5546
-notices that refer to this License and to the absence of any warranty;
 
5547
-and give any other recipients of the Program a copy of this License
 
5548
-along with the Program.
 
5549
-
 
5550
-You may charge a fee for the physical act of transferring a copy, and
 
5551
-you may at your option offer warranty protection in exchange for a fee.
 
5552
-
 
5553
-  2. You may modify your copy or copies of the Program or any portion
 
5554
-of it, thus forming a work based on the Program, and copy and
 
5555
-distribute such modifications or work under the terms of Section 1
 
5556
-above, provided that you also meet all of these conditions:
 
5557
-
 
5558
-    a) You must cause the modified files to carry prominent notices
 
5559
-    stating that you changed the files and the date of any change.
 
5560
-
 
5561
-    b) You must cause any work that you distribute or publish, that in
 
5562
-    whole or in part contains or is derived from the Program or any
 
5563
-    part thereof, to be licensed as a whole at no charge to all third
 
5564
-    parties under the terms of this License.
 
5565
-
 
5566
-    c) If the modified program normally reads commands interactively
 
5567
-    when run, you must cause it, when started running for such
 
5568
-    interactive use in the most ordinary way, to print or display an
 
5569
-    announcement including an appropriate copyright notice and a
 
5570
-    notice that there is no warranty (or else, saying that you provide
 
5571
-    a warranty) and that users may redistribute the program under
 
5572
-    these conditions, and telling the user how to view a copy of this
 
5573
-    License.  (Exception: if the Program itself is interactive but
 
5574
-    does not normally print such an announcement, your work based on
 
5575
-    the Program is not required to print an announcement.)
 
5576
-
 
5577
-These requirements apply to the modified work as a whole.  If
 
5578
-identifiable sections of that work are not derived from the Program,
 
5579
-and can be reasonably considered independent and separate works in
 
5580
-themselves, then this License, and its terms, do not apply to those
 
5581
-sections when you distribute them as separate works.  But when you
 
5582
-distribute the same sections as part of a whole which is a work based
 
5583
-on the Program, the distribution of the whole must be on the terms of
 
5584
-this License, whose permissions for other licensees extend to the
 
5585
-entire whole, and thus to each and every part regardless of who wrote it.
 
5586
-
 
5587
-Thus, it is not the intent of this section to claim rights or contest
 
5588
-your rights to work written entirely by you; rather, the intent is to
 
5589
-exercise the right to control the distribution of derivative or
 
5590
-collective works based on the Program.
 
5591
-
 
5592
-In addition, mere aggregation of another work not based on the Program
 
5593
-with the Program (or with a work based on the Program) on a volume of
 
5594
-a storage or distribution medium does not bring the other work under
 
5595
-the scope of this License.
 
5596
-
 
5597
-  3. You may copy and distribute the Program (or a work based on it,
 
5598
-under Section 2) in object code or executable form under the terms of
 
5599
-Sections 1 and 2 above provided that you also do one of the following:
 
5600
-
 
5601
-    a) Accompany it with the complete corresponding machine-readable
 
5602
-    source code, which must be distributed under the terms of Sections
 
5603
-    1 and 2 above on a medium customarily used for software interchange; or,
 
5604
-
 
5605
-    b) Accompany it with a written offer, valid for at least three
 
5606
-    years, to give any third party, for a charge no more than your
 
5607
-    cost of physically performing source distribution, a complete
 
5608
-    machine-readable copy of the corresponding source code, to be
 
5609
-    distributed under the terms of Sections 1 and 2 above on a medium
 
5610
-    customarily used for software interchange; or,
 
5611
-
 
5612
-    c) Accompany it with the information you received as to the offer
 
5613
-    to distribute corresponding source code.  (This alternative is
 
5614
-    allowed only for noncommercial distribution and only if you
 
5615
-    received the program in object code or executable form with such
 
5616
-    an offer, in accord with Subsection b above.)
 
5617
-
 
5618
-The source code for a work means the preferred form of the work for
 
5619
-making modifications to it.  For an executable work, complete source
 
5620
-code means all the source code for all modules it contains, plus any
 
5621
-associated interface definition files, plus the scripts used to
 
5622
-control compilation and installation of the executable.  However, as a
 
5623
-special exception, the source code distributed need not include
 
5624
-anything that is normally distributed (in either source or binary
 
5625
-form) with the major components (compiler, kernel, and so on) of the
 
5626
-operating system on which the executable runs, unless that component
 
5627
-itself accompanies the executable.
 
5628
-
 
5629
-If distribution of executable or object code is made by offering
 
5630
-access to copy from a designated place, then offering equivalent
 
5631
-access to copy the source code from the same place counts as
 
5632
-distribution of the source code, even though third parties are not
 
5633
-compelled to copy the source along with the object code.
 
5634
-
 
5635
-  4. You may not copy, modify, sublicense, or distribute the Program
 
5636
-except as expressly provided under this License.  Any attempt
 
5637
-otherwise to copy, modify, sublicense or distribute the Program is
 
5638
-void, and will automatically terminate your rights under this License.
 
5639
-However, parties who have received copies, or rights, from you under
 
5640
-this License will not have their licenses terminated so long as such
 
5641
-parties remain in full compliance.
 
5642
-
 
5643
-  5. You are not required to accept this License, since you have not
 
5644
-signed it.  However, nothing else grants you permission to modify or
 
5645
-distribute the Program or its derivative works.  These actions are
 
5646
-prohibited by law if you do not accept this License.  Therefore, by
 
5647
-modifying or distributing the Program (or any work based on the
 
5648
-Program), you indicate your acceptance of this License to do so, and
 
5649
-all its terms and conditions for copying, distributing or modifying
 
5650
-the Program or works based on it.
 
5651
-
 
5652
-  6. Each time you redistribute the Program (or any work based on the
 
5653
-Program), the recipient automatically receives a license from the
 
5654
-original licensor to copy, distribute or modify the Program subject to
 
5655
-these terms and conditions.  You may not impose any further
 
5656
-restrictions on the recipients' exercise of the rights granted herein.
 
5657
-You are not responsible for enforcing compliance by third parties to
 
5658
-this License.
 
5659
-
 
5660
-  7. If, as a consequence of a court judgment or allegation of patent
 
5661
-infringement or for any other reason (not limited to patent issues),
 
5662
-conditions are imposed on you (whether by court order, agreement or
 
5663
-otherwise) that contradict the conditions of this License, they do not
 
5664
-excuse you from the conditions of this License.  If you cannot
 
5665
-distribute so as to satisfy simultaneously your obligations under this
 
5666
-License and any other pertinent obligations, then as a consequence you
 
5667
-may not distribute the Program at all.  For example, if a patent
 
5668
-license would not permit royalty-free redistribution of the Program by
 
5669
-all those who receive copies directly or indirectly through you, then
 
5670
-the only way you could satisfy both it and this License would be to
 
5671
-refrain entirely from distribution of the Program.
 
5672
-
 
5673
-If any portion of this section is held invalid or unenforceable under
 
5674
-any particular circumstance, the balance of the section is intended to
 
5675
-apply and the section as a whole is intended to apply in other
 
5676
-circumstances.
 
5677
-
 
5678
-It is not the purpose of this section to induce you to infringe any
 
5679
-patents or other property right claims or to contest validity of any
 
5680
-such claims; this section has the sole purpose of protecting the
 
5681
-integrity of the free software distribution system, which is
 
5682
-implemented by public license practices.  Many people have made
 
5683
-generous contributions to the wide range of software distributed
 
5684
-through that system in reliance on consistent application of that
 
5685
-system; it is up to the author/donor to decide if he or she is willing
 
5686
-to distribute software through any other system and a licensee cannot
 
5687
-impose that choice.
 
5688
-
 
5689
-This section is intended to make thoroughly clear what is believed to
 
5690
-be a consequence of the rest of this License.
 
5691
-
 
5692
-  8. If the distribution and/or use of the Program is restricted in
 
5693
-certain countries either by patents or by copyrighted interfaces, the
 
5694
-original copyright holder who places the Program under this License
 
5695
-may add an explicit geographical distribution limitation excluding
 
5696
-those countries, so that distribution is permitted only in or among
 
5697
-countries not thus excluded.  In such case, this License incorporates
 
5698
-the limitation as if written in the body of this License.
 
5699
-
 
5700
-  9. The Free Software Foundation may publish revised and/or new versions
 
5701
-of the General Public License from time to time.  Such new versions will
 
5702
-be similar in spirit to the present version, but may differ in detail to
 
5703
-address new problems or concerns.
 
5704
-
 
5705
-Each version is given a distinguishing version number.  If the Program
 
5706
-specifies a version number of this License which applies to it and "any
 
5707
-later version", you have the option of following the terms and conditions
 
5708
-either of that version or of any later version published by the Free
 
5709
-Software Foundation.  If the Program does not specify a version number of
 
5710
-this License, you may choose any version ever published by the Free Software
 
5711
-Foundation.
 
5712
-
 
5713
-  10. If you wish to incorporate parts of the Program into other free
 
5714
-programs whose distribution conditions are different, write to the author
 
5715
-to ask for permission.  For software which is copyrighted by the Free
 
5716
-Software Foundation, write to the Free Software Foundation; we sometimes
 
5717
-make exceptions for this.  Our decision will be guided by the two goals
 
5718
-of preserving the free status of all derivatives of our free software and
 
5719
-of promoting the sharing and reuse of software generally.
 
5720
-
 
5721
-                            NO WARRANTY
 
5722
-
 
5723
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 
5724
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
 
5725
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
 
5726
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
 
5727
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 
5728
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
 
5729
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
 
5730
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
 
5731
-REPAIR OR CORRECTION.
 
5732
-
 
5733
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
 
5734
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
 
5735
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
 
5736
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
 
5737
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
 
5738
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
 
5739
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
 
5740
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 
5741
-POSSIBILITY OF SUCH DAMAGES.
 
5742
-
 
5743
-                     END OF TERMS AND CONDITIONS
 
5744
-
 
5745
-            How to Apply These Terms to Your New Programs
 
5746
-
 
5747
-  If you develop a new program, and you want it to be of the greatest
 
5748
-possible use to the public, the best way to achieve this is to make it
 
5749
-free software which everyone can redistribute and change under these terms.
 
5750
-
 
5751
-  To do so, attach the following notices to the program.  It is safest
 
5752
-to attach them to the start of each source file to most effectively
 
5753
-convey the exclusion of warranty; and each file should have at least
 
5754
-the "copyright" line and a pointer to where the full notice is found.
 
5755
-
 
5756
-    <one line to give the program's name and a brief idea of what it does.>
 
5757
-    Copyright (C) <year>  <name of author>
 
5758
-
 
5759
-    This program is free software; you can redistribute it and/or modify
 
5760
-    it under the terms of the GNU General Public License as published by
 
5761
-    the Free Software Foundation; either version 2 of the License, or
 
5762
-    (at your option) any later version.
 
5763
-
 
5764
-    This program is distributed in the hope that it will be useful,
 
5765
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
5766
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
5767
-    GNU General Public License for more details.
 
5768
-
 
5769
-    You should have received a copy of the GNU General Public License along
 
5770
-    with this program; if not, write to the Free Software Foundation, Inc.,
 
5771
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
5772
-
 
5773
-Also add information on how to contact you by electronic and paper mail.
 
5774
-
 
5775
-If the program is interactive, make it output a short notice like this
 
5776
-when it starts in an interactive mode:
 
5777
-
 
5778
-    Gnomovision version 69, Copyright (C) year name of author
 
5779
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
 
5780
-    This is free software, and you are welcome to redistribute it
 
5781
-    under certain conditions; type `show c' for details.
 
5782
-
 
5783
-The hypothetical commands `show w' and `show c' should show the appropriate
 
5784
-parts of the General Public License.  Of course, the commands you use may
 
5785
-be called something other than `show w' and `show c'; they could even be
 
5786
-mouse-clicks or menu items--whatever suits your program.
 
5787
-
 
5788
-You should also get your employer (if you work as a programmer) or your
 
5789
-school, if any, to sign a "copyright disclaimer" for the program, if
 
5790
-necessary.  Here is a sample; alter the names:
 
5791
-
 
5792
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
 
5793
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
 
5794
-
 
5795
-  <signature of Ty Coon>, 1 April 1989
 
5796
-  Ty Coon, President of Vice
 
5797
-
 
5798
-This General Public License does not permit incorporating your program into
 
5799
-proprietary programs.  If your program is a subroutine library, you may
 
5800
-consider it more useful to permit linking proprietary applications with the
 
5801
-library.  If this is what you want to do, use the GNU Lesser General
 
5802
-Public License instead of this License.
 
5803
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/README jffnms-0.9.3/README
 
5804
--- ../jffnms-0.9.2/README      2012-03-04 13:43:13.000000000 +1100
 
5805
+++ jffnms-0.9.3/README 1970-01-01 10:00:00.000000000 +1000
 
5806
@@ -1,25 +0,0 @@
 
5807
-README file for JFFNMS
 
5808
-======================
 
5809
-
 
5810
-This file contains important information about JFFNMS and should be read
 
5811
-before installing or upgrading JFFNMS.
 
5812
-
 
5813
-Upgrading from 0.8.4
 
5814
---------------------
 
5815
-JFFNMS version 0.8.4 shipped with a serious bug with the database extraction.
 
5816
-The part of the build process that makes the databases differences was 
 
5817
-missing, however the database dump worked ok.
 
5818
-
 
5819
-This gives us two scenarios:
 
5820
-  * You had a pre 0.8.4 (eg 0.8.3) JFFNMS and upgraded, giving you an
 
5821
-    unchanged 0.8.3 database.
 
5822
-  * You (re)installed jffnms 0.8.4 and used the database dump. You got the 
 
5823
-    correct database.
 
5824
-
 
5825
-The schema for 0.8.4 and 0.8.5 are the same.
 
5826
-
 
5827
-This means if you are the first pre-0.8.4 scenario you WILL need to run the SQL update scripts to update your schema, just like you normally should do.
 
5828
-
 
5829
-If JFFNMS 0.8.4 was your first database install, your schema is already 
 
5830
-current, do NOT update the database (it will error out anyhow).
 
5831
-
 
5832
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/TODO jffnms-0.9.3/TODO
 
5833
--- ../jffnms-0.9.2/TODO        2012-03-04 13:43:13.000000000 +1100
 
5834
+++ jffnms-0.9.3/TODO   1970-01-01 10:00:00.000000000 +1000
 
5835
@@ -1,81 +0,0 @@
 
5836
-This are the remaining tasks to be done in JFFNMS.
 
5837
-If you want to contribute and you dont know where to start, please read this lines.
 
5838
-If you want to add a task, send me an email.
 
5839
-
 
5840
-Craig's TODO list
 
5841
-=================
 
5842
-
 
5843
-  - rewrite tcp_port discovery script to use popen, log better and
 
5844
-    new format for nmap 5.21, also pgrep()
 
5845
-
 
5846
-To Do
 
5847
-=====
 
5848
-
 
5849
-    - Host Types
 
5850
-    - events/interface JS/CSS font-size
 
5851
-    - popup selector full-text search
 
5852
-    - discovery params: new/old field ?
 
5853
-    - SNMP Timeout per-host
 
5854
-    - Host Types, IT by Host Type
 
5855
-    - Host Groups (modify maps)
 
5856
-    - alarm backend: N Downs. db records per-int and global
 
5857
-    - Chris ESI: Pix config transfer
 
5858
-    - Host Groups (like maps) (modify maps to allow hosts)
 
5859
-    - Craig: NUT UPS
 
5860
-    - ALL Button in admin_header
 
5861
-    - Configurable Delay in the DHTML popups
 
5862
-    - TCP Port Hello/Quit string
 
5863
-    - new/poller+ad satellite filter
 
5864
-        
 
5865
-
 
5866
-For Later:
 
5867
-----------
 
5868
-
 
5869
-API:
 
5870
-    - Thomas DNS monitoring
 
5871
-    - Generic Interface Type
 
5872
-        
 
5873
-    - Poller Helper: Poll only State
 
5874
-    - Satellite Remote (Auto)Discovery
 
5875
-    - Satellite Sync (virtual satellite in case theres no connection and I'm not the master)
 
5876
-    - Modify Pollers that handle the buffer locally to somehow use the backend (or sync it)
 
5877
-
 
5878
-    - RRD Analyzers:
 
5879
-       - How much traffic the Interface had in X time (95th Percentile also)
 
5880
-       - TOP 10 (Top Traffic, Errors, RTT, etc.)
 
5881
-
 
5882
-    - Tools:
 
5883
-       - Host Tools (Routing Table, ARP Table, Socket State, etc. SNMP-based)
 
5884
-       - Tools for all interface types (id =1)
 
5885
-
 
5886
-    - New Trigger/Action to allow config transfer as soon as a config change is made (event)
 
5887
-    - Make consolidate scripts functions (like the other parts)
 
5888
-    - Asset Tracking (Inventory) (Part Number, Serial Number, Cards, etc) (could use ENTITY-MIB/STACK-MIB)
 
5889
-    - TFTP Configuration CVS Upload (Requested by Mike Hyde)
 
5890
-    - TFTP Configuration Scheduled Upload (Requested by Rob Laidlaw)
 
5891
-    - SLA Planned Outages/Maintence Windows
 
5892
-    - SNMP Traps Processing more useful and flexible. (match by interfacenumber also) (Call Handler Scripts)
 
5893
-    - Event Flap Detection.
 
5894
-    
 
5895
-GUI:
 
5896
-    - Send a URL to the interface in the Email Action (Requested by Rob Laidlaw)
 
5897
-    - Stored Reports
 
5898
-    
 
5899
-MISC:
 
5900
-    - NetFlow Integration
 
5901
-    - Use the Standard msyslog, not one modified for JFFNMS
 
5902
-    - MD5 Signature of the tarball
 
5903
-    - RPM Package
 
5904
-    - Better SOAP Interoperatibility testing
 
5905
-    - Snort SNMP TRAP messages integration
 
5906
-    - Radius Integration
 
5907
-    - Trouble Ticket Plugins (Framework Ready)
 
5908
-    - Implement ENTITY-MIB & STACK-MIB for Cisco's & others
 
5909
-
 
5910
-
 
5911
-In the Works:
 
5912
-=============
 
5913
-
 
5914
-    - Documentation (on CVS by Craig Small and Javier Szyszlican)
 
5915
-    - Interface inter-dependece (will be based on DMII Designated Main Interfaces)
 
5916
-    - Multi Language Support (Sergio Martinez)
 
5917
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/UPGRADE jffnms-0.9.3/UPGRADE
 
5918
--- ../jffnms-0.9.2/UPGRADE     2012-03-04 13:43:13.000000000 +1100
 
5919
+++ jffnms-0.9.3/UPGRADE        1970-01-01 10:00:00.000000000 +1000
 
5920
@@ -1,58 +0,0 @@
 
5921
-This file explains the upgrade procedure between versions:
 
5922
-
 
5923
-0.9.1 to 0.9.2
 
5924
-==============
 
5925
-
 
5926
-    0. You are adviced to upgrade your PHP and PostgreSQL (if you use that) versions before the upgrade,
 
5927
-       because some new features may need that. 
 
5928
-       
 
5929
-       The new poller is still experimental, and its not enabled by default.
 
5930
-
 
5931
-    Replace the <patch tar.gz path> with the actual path to the patch files,
 
5932
-    '../jffnms-upgrade-0.9.1-to-0.9.2' if you are using jffnms-upgrade-0.9.1-to-0.9.2.tar.gz or 
 
5933
-    '/opt/jffnms-0.9.2/docs/upgrade' if you are using jffnms-0.9.2.tar.gz
 
5934
-    
 
5935
-    1. Apply the code patch: 
 
5936
-       # cd /opt/jffnms 
 
5937
-       # patch -p1 < <patch tar.gz path>/jffnms-0.9.1-to-0.9.2.patch 
 
5938
-
 
5939
-       If you have not changed the code, there should not be any errors.
 
5940
-       Replace apache.apache with your HTTPd username and group (nobody, httpd, etc)
 
5941
-
 
5942
-    2. Upgrade the DB: 
 
5943
-       MySQL:
 
5944
-           Backup in case of failure:
 
5945
-               # mysqldump --opt -ujffnms -pjffnms jffnms > /tmp/jffnms.backup.mysql
 
5946
-       
 
5947
-           Upgrade the MySQL Tables:
 
5948
-               # cat docs/upgrade/mysql/jffnms-0.9.1-to-0.9.2.mysql.diff* | mysql -u jffnms -pjffnms jffnms
 
5949
-
 
5950
-       PgSQL:
 
5951
-           Backup in case of failure:
 
5952
-               # pg_dump -U jffnms jffnms -dROc > /tmp/jffnms.backup.pgsql
 
5953
-
 
5954
-           Upgrade the PgSQL Tables:
 
5955
-               # cat docs/upgrade/pgsql/jffnms-0.9.1-to-0.9.2.pgsql.diff* | psql jffnms jffnms
 
5956
-
 
5957
-    3. Copy the new binary files: 
 
5958
-
 
5959
-       # cp -Rv <patch tar.gz path>/files/* /opt/jffnms/
 
5960
-
 
5961
-    4. Change Ownership
 
5962
-    
 
5963
-       # chown -R apache:apache *
 
5964
-
 
5965
-           OR if you used the new Instalation method: 
 
5966
-       # chown -R jffnms:jffnms *  
 
5967
-
 
5968
-    
 
5969
-       And then re apply the permissions to the /opt/jffnms folder:
 
5970
-       
 
5971
-       # chmod -R ug+rw *
 
5972
-
 
5973
-       
 
5974
-    5. Verify Everything is ok:
 
5975
-       Go to the Setup page at
 
5976
-           http://youserver/jffnms/admin/setup.php (or the path you set)
 
5977
-           
 
5978
-           Check everything, make the corrections and SAVE the Configuration anyway. 
 
5979
diff -Nru '-x*.png' '-x*.ini' '-x*.*sql' '-x*.patch' '-x*.svn' ../jffnms-0.9.2/UPGRADE.win32.txt jffnms-0.9.3/UPGRADE.win32.txt
 
5980
--- ../jffnms-0.9.2/UPGRADE.win32.txt   2012-03-04 13:43:13.000000000 +1100
 
5981
+++ jffnms-0.9.3/UPGRADE.win32.txt      1970-01-01 10:00:00.000000000 +1000
 
5982
@@ -1,59 +0,0 @@
 
5983
-How to do an upgrade on Windows?
 
5984
---------------------------------
 
5985
-
 
5986
-Please read all this note before executing something, so you can understand all the process.
 
5987
-
 
5988
-Step 1 - Code Update:
 
5989
-=====================
 
5990
-
 
5991
-    1. Rename the c:\jffnms folder to jffnms-old
 
5992
-    2. Rename the new jffnms version folder (like c:\jffnms-0.7.3) to c:\jffnms
 
5993
-    3. Copy your c:\jffnms-old\rrd folder to c:\jffnms\rrd 
 
5994
-    4. Copy the c:\jffnms-old\rrdtool.exe and nmap.exe to c:\jffnms\
 
5995
-    5. Re-apply the permissions, give the jffnms user FULL CONTROL over c:\jffnms
 
5996
-            
 
5997
-    6. At this point you have the new version in place with your old version data. 
 
5998
-       The only thing missing is a correct configuration. You have to go to your setup.php 
 
5999
-       and reconfigure everything like you did when you first install it. (Step 3)
 
6000
-
 
6001
-
 
6002
-Step 2 - Database Update:
 
6003
-=========================
 
6004
-
 
6005
-    You have to send every file in the c:\jffnms\docs\upgrade\mysql to the mysql daemon :
 
6006
-    
 
6007
-    1. Backup in case of failure:
 
6008
-       c:\> c:\mysql\bin\mysqldump.exe --opt -u root jffnms > c:\jffnms.backup.mysql
 
6009
-    
 
6010
-    2. Go to the DB upgrade folder
 
6011
-       c:\> cd \jffnms\docs\upgrade\mysql
 
6012
-
 
6013
-    3. Replace OLD with your current JFFNMS version number (like 0.7.2) and NEW with the new version number (like 0.7.3)
 
6014
-       c:\jffnms\docs\upgrade\mysql> dir jffnms-OLD-to-NEW*    (look at all the file names)
 
6015
-
 
6016
-    4. Apply the DB changes
 
6017
-       c:\jffnms\docs\upgrade\mysql> c:\mysql\bin\mysql.exe -u root jffnms < <Put every Filename here>
 
6018
-       
 
6019
-       or, as suggested by Michael Mayers:
 
6020
-       
 
6021
-           If in .cmd file:
 
6022
-           for /f "tokens=*" %%i in ('dir jffnms* /b') DO c:\mysql\bin\mysql.exe -u root jffnms < %%i
 
6023
-       
 
6024
-           If not in .cmd file:
 
6025
-           for /f "tokens=*" %i in ('dir jffnms* /b') DO c:\mysql\bin\mysql.exe -u root jffnms < %i
 
6026
-
 
6027
-
 
6028
-Step 3 - Check Everything:
 
6029
-==========================
 
6030
-    
 
6031
-    Go to your setup in http://yourserver/admin/setup.php (put the correct path here).
 
6032
-    
 
6033
-    Check if everything is ok, and Save the configuration.
 
6034
-
 
6035
-
 
6036
------------------------------------------------------
 
6037
-If you have any other note you will like added here, 
 
6038
-please send it to the mailing list. 
 
6039
-
 
6040
-Thanks.
 
6041
-Javier Szyszlican