------=_Part_9420_24666062.1196147541525
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
Hi list,
found the problem, at least I think to have found the problem.
Actually function neb_set_module_info does not operate on the
nebmodule struct but on the mod_handle it got from its caller. The
latter is from type lt_dlhandle. To set an info of type
NEBMODULE_MODINFO_* does not make sense.
Two problems arose by this and I fall into both. Writing informations
to the module by neb_set_module_info works for some of the
NEBMODULE_MODINFO_*. Some other lead to a segfault. The second problem
is, if you have overwritten the NEBMODULE_MODINFO_TITLE you overwrite
the filename of the lt_dlhandle and the module can't be unloaded
anymore.
I have written a patch. Since I am not a very experienced C programmer
please review it carefully before applying to official Nagios code.
--- nagios-3.0b7/base/nebmods.c 2007-10-22 15:39:30.000000000 +0200
+++ nagios-3.0b7-mod/base/nebmods.c 2007-11-27 07:35:52.000000000 +0100
@@ -338,24 +338,29 @@
/****************************************************************************/
/* sets module information */
-int neb_set_module_info(void *handle, int type, char *data){
- nebmodule *mod=NULL;
+int neb_set_module_info(void *mod_handle, int type, char *data){
+ nebmodule *temp_module = NULL;
- if(handle==NULL)
+ if(mod_handle==NULL)
return NEBERROR_NOMODULE;
/* check type */
if(type=NEBMODULE_MODINFO_NUMITEMS)
return NEBERROR_MODINFOBOUNDS;
- /* get the module */
- mod=(nebmodule *)handle;
+ /* find corresponding nebmodule */
+ for(temp_module=neb_module_list;temp_module;temp_module=temp_module->next){
+ if((void *)temp_module->module_handle == (void *)mod_handle)
+ break;
+ }
+ if(temp_module==NULL)
+ return NEBERROR_BADMODULEHANDLE;
/* free any previously allocated memory */
- my_free(mod->info[type]);
+ my_free(temp_module->info[type]);
/* allocate memory for the new data */
- if((mod->info[type]=(char *)strdup(data))==NULL)
+ if((temp_module->info[type]=(char *)strdup(data))==NULL)
return NEBERROR_NOMEM;
return OK;
Thanks.
Tobias
------=_Part_9420_24666062.1196147541525
Content-Type: text/x-patch; name=nebmods.c.patch
Content-Transfer-Encoding: base64
X-Attachment-Id: f_f9i37fjl
Content-Disposition: attachment; filename=nebmods.c.patch
LS0tIG5hZ2lvcy0zLjBiNy9iYXNlL25lYm1vZHMuYwkyMDA3LTEwLTIyIDE1OjM5OjMwLjAwMDAw
MDAwMCArMDIwMAorKysgbmFnaW9zLTMuMGI3LW1vZC9iYXNlL25lYm1vZHMuYwkyMDA3LTExLTI3
IDA3OjM1OjUyLjAwMDAwMDAwMCArMDEwMApAQCAtMzM4LDI0ICszMzgsMjkgQEAKIC8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwogCiAvKiBzZXRzIG1vZHVsZSBpbmZvcm1hdGlvbiAqLwotaW50IG5lYl9z
ZXRfbW9kdWxlX2luZm8odm9pZCAqaGFuZGxlLCBpbnQgdHlwZSwgY2hhciAqZGF0YSl7Ci0JbmVi
bW9kdWxlICptb2Q9TlVMTDsKK2ludCBuZWJfc2V0X21vZHVsZV9pbmZvKHZvaWQgKm1vZF9oYW5k
bGUsIGludCB0eXBlLCBjaGFyICpkYXRhKXsKKwluZWJtb2R1bGUgKnRlbXBfbW9kdWxlID0gTlVM
TDsKIAotCWlmKGhhbmRsZT09TlVMTCkKKwlpZihtb2RfaGFuZGxlPT1OVUxMKQogCQlyZXR1cm4g
TkVCRVJST1JfTk9NT0RVTEU7CiAKIAkvKiBjaGVjayB0eXBlICovCiAJaWYodHlwZTwwIHx8IHR5
cGU+PU5FQk1PRFVMRV9NT0RJTkZPX05VTUlURU1TKQogCQlyZXR1cm4gTkVCRVJST1JfTU9ESU5G
T0JPVU5EUzsKIAotCS8qIGdldCB0aGUgbW9kdWxlICovCi0JbW9kPShuZWJtb2R1bGUgKiloYW5k
bGU7CisJLyogZmluZCBjb3JyZXNwb25kaW5nIG5lYm1vZHVsZSAqLworCWZvcih0ZW1wX21vZHVs
ZT1uZWJfbW9kdWxlX2xpc3Q7dGVtcF9tb2R1bGU7dGVtcF9tb2R1bGU9dGVtcF9tb2R1bGUtPm5l
eHQpeworCQlpZigodm9pZCAqKXRlbXBfbW9kdWxlLT5tb2R1bGVfaGFuZGxlID09ICh2b2lkICop
bW9kX2hhbmRsZSkKKwkJCWJyZWFrOworCX0KKwlpZih0ZW1wX21vZHVsZT09TlVMTCkKKwkJcmV0
dXJuIE5FQkVSUk9SX0JBRE1PRFVMRUhBTkRMRTsKIAogCS8qIGZyZWUgYW55IHByZXZpb3VzbHkg
YWxsb2NhdGVkIG1lbW9yeSAqLwotCW15X2ZyZWUobW9kLT5pbmZvW3R5cGVdKTsKKwlteV9mcmVl
KHRlbXBfbW9kdWxlLT5pbmZvW3R5cGVdKTsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhl
IG5ldyBkYXRhICovCi0JaWYoKG1vZC0+aW5mb1t0eXBlXT0oY2hhciAqKXN0cmR1cChkYXRhKSk9
PU5VTEwpCisJaWYoKHRlbXBfbW9kdWxlLT5pbmZvW3R5c
...[email truncated]...
This post was automatically imported from historical nagios-devel mailing list archives
Original poster: [email protected]