Re: exec problem with 5.1
Dave Shield <[email protected]>
| Newsgroups | gmane.network.net-snmp.user |
|---|---|
| Message-ID | <[email protected]> |
[ Reminder - *please* don't mail me privately, without copying
any responses to the mailing list. I don't have the time
or inclination to offer private, unpaid, SNMP consultancy.
Keep discussions to the list, where others can both learn
and offer advice. Thanks. ]
On Sat, 2006-03-18 at 15:55 +0100, Tomasz Nowak wrote:
> Dave Shield <[email protected]> wrote:
> > That one I wasn't able to reproduce.
> > Can you try with the attached patch, and see if you still have
> > the same problem. If so, please could you let me know the relevant
> > lines from your snmpd.conf
>
> But the second problem still exists.
> Information given below should help you be able
> to reproduce the bug.
> /etc/snmp/snmpd.conf part:
>
> extend onetping /root/ping.sh onet.pl
[snip]
Not immediately, no.
I tried with a version of your script, and everything worked fine.
But it suddenly occurred to me to try with *two* identically
named "extend" directives, and that did trigger the same symptoms.
The registration of the nsExtend{Config,Output1}Tables failed,
but the config handling routine didn't detect this, so carried
on setting things up for the (manually implemented) Output2Table.
I suspect that either you have a duplicate "extend" entry in your
config file, or the system is reading in the config file twice.
(It doesn't check for this, although it really should do so).
I'm appending a patch to perform some basic error checking on this
registration. It's not complete, and almost certainly introduces
a minor memory leak. But it ought to fix the immediate problem.
Dave
extend.diff
(text/x-patch, 615 B)
--- extend.c.cln 2006-03-15 18:14:18.000000000 +0000
+++ extend.c 2006-03-21 08:16:39.000000000 +0000
@@ -341,7 +341,12 @@
extension->row = row;
netsnmp_table_row_add_index( row, ASN_OCTET_STR,
exec_name, strlen(exec_name));
- netsnmp_table_data_add_row( dinfo, row);
+ if ( netsnmp_table_data_add_row( dinfo, row) != SNMPERR_SUCCESS ) {
+ /* _free_extension( extension, ereg ); */
+ SNMP_FREE( extension ); /* Probably not sufficient */
+ SNMP_FREE( row );
+ return NULL;
+ }
ereg->num_entries++;
/*