[Nagiosplug-devel] complication executing one plugin by another

Bob Ingraham bobi at netshel.net
Thu Sep 22 13:49:09 CEST 2005


Sorry, here's a correction to the sample code snippet in my prior e-mail
below.

The call to spopen() should read:

   /* Now use the spopen() command to exec our co-plugin */
   child_process = spopen (PluginPath);
                           ^^^^^^^^^^

Bob

> I have an idea...  :-)
>
> It seems to me that the plugins are always executed with full path
> information contained in argv[0], since the nrpe.cfg file usually contains
> the full path information and this is what nrpe use to exec() these
> plugins.
>
> Therefore, if you know that you want to execute a fellow plugin (why does
> that not sound right? ;-) ), then all you need do is extract the full path
> info from main's argv[0] vector, and use that to construct the path the
> "peer" plugin.
>
> Something like:
>
> #define PS_COMMAND   "pst3"   /* From config.h */
>
> #ifdef WINDOZE
> #define PATH_DELIMITER '\\'
> #else
> #define PATH_DELIMITER '/'
> #endif
>
> int main (int argc, char **argv)
> {
>     char PluginPath[MAX_PATH+1], *cp;
>
>     /* ...  snip ... */
>
>     /* Build the path to our co-plugin */
>     strcpy(PluginPath, argv[0]);
>     if ((cp = strrchr(PluginPath, PATH_DELIMITER)) != NULL)
>         strcpy(cp+1, PS_COMMAND);
>     else  /* No path prefix found - assume that the system path works */
>         strcpy(PluginPath, PS_COMMAND);
>
>     /* Now use the spopen() command to exec our co-plugin */
>     child_process = spopen (PS_COMMAND);
>
>    /* ...  snip ... */
> }
>
> Hope this is helpful...
>
> Bob
>
>> if you've read the subject, you may be thinking "why the hell would
>> you want to do that?"
>>
>> one example is the latest modification i've made (or half-made,
>> hence the email) to check_procs, to call the pst3 program submitted
>> by bob ingraham, which will also reside in the plugin installation
>> dir.
>>
>> the problem is that to execute pst3, one has to either supply the
>> full path or assume that it is in the path.  the problem with the
>> latter is that it probably will not be in the system path, and
>> the problem with the former is that i can't figure out a good way
>> to supply the path to the plugin.
>>
>> so, i see a couple iof options here:
>>
>> - modify configure.in, config.h and/or Makefile.am's to pass the
>>   information at compile-time
>> - modify check_procs to include the pst3 code natively, making this
>>   a moot issue.
>>
>> comments?  in the meantime, i'll leave the CVS HEAD configure.in script
>> with ac_cv_ps_command="pst3" (no path), so if someone cares they
>> can copy the binary into their paths.  if i don't hear back, i think
>> i'll try and work with option 2.
>>
>>
>> 	sean
>>
>
>
>
> -------------------------------------------------------
> SF.Net email is sponsored by:
> Tame your development challenges with Apache's Geronimo App Server.
> Download it for free - -and be entered to win a 42" plasma tv or your very
> own Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
> _______________________________________________________
> Nagios Plugin Development Mailing List
> Nagiosplug-devel at lists.sourceforge.net
> Unsubscribe at
> https://lists.sourceforge.net/lists/listinfo/nagiosplug-devel
> ::: Please include plugins version (-v) and OS when reporting any issue.
> ::: Messages without supporting info will risk being sent to /dev/null
>





More information about the Devel mailing list