<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Just off the top of my head, I believe startlocation and endlocation
should be int not char* same with all the variables intended to hold numerical
values.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
nagios-devel-bounces@lists.sourceforge.net
[mailto:nagios-devel-bounces@lists.sourceforge.net] <b>On Behalf Of </b>Clifton
Griffin<br>
<b>Sent:</b> Thursday, August 14, 2008 10:41 AM<br>
<b>To:</b> nagios-devel@lists.sourceforge.net<br>
<b>Subject:</b> [Nagios-devel] check_by_ssh frustration!<o:p></o:p></span></p>

</div>

<p class=MsoNormal><o:p> </o:p></p>

<div>

<p class=MsoNormal>Hi,<br>
First of all, I'm rather weak in C. So please be gentle. :)<br>
<br>
I have been working on a modification to check_by_ssh that will append a couple
of html links to the end of the output. Basically, whenever a check runs I want
to get back:<br>
<Check Output><Link 1><Link 2><br>
<br>
The links will go to an internal wiki we use at my organization.<br>
<br>
I got this working fine, or so I thought, a couple of nights ago. However, upon
deployment, a number of checks caused my build to fail with a segmentation
fault. This would make sense if the output of these failing checks were largely
different from the output of the succeeding checks, but they aren't.<br>
<br>
It's roughly the same number of characters. The string with the html links is
much larger than the output of the checks that are not working. <br>
<br>
Here is the code: (an experienced C programmer is probably going to have a
visceral reaction to some of my methods!)<br>
######################################################<br>
        /* run the command */<br>
        if (verbose)<br>
               
printf ("%s\n", comm);<br>
<br>
       /* my modifications start here*/<br>
        char* startString =
"check";        /* I get the name of
the check by searching the output to find this string*/<br>
        char* endString = " ";
       /* and then I look for the next single
space */<br>
        char* startLocation;<br>
        char* endLocation;<br>
        char* endLocation2;<br>
        char* strCheck;<br>
        char* temp = comm; /* the string I
search for the name of the check running *<br>
        char* strHost;
       /* this will hold the name of the host the
check is being run on...*/<br>
        char* strLinks;  /*the
links...generated below*/<br>
        int tempLength1;<br>
        char* tempString;<br>
        char* holder; /*copy of output to
parse through for host name*/<br>
<br>
        startLocation =
strstr(temp,startString);<br>
        endLocation =
strstr(startLocation,endString);<br>
        tempLength1 =
(int)startLocation-(int)endLocation;<br>
        /* make sure the answer is positive
*/<br>
        if(tempLength1 < 0)<br>
               
tempLength1 = tempLength1*-1;<br>
<br>
       
strncpy(strCheck,startLocation,tempLength1);<br>
        strCheck[tempLength1] = '\0'; /*make
sure the string is properly terminated*/<br>
        /*original nagios code! I modify
comm in the proccess_arguments function...as notated later*/<br>
        result = np_runcmd(comm,
&chld_out, &chld_err, 0); <br>
        holder = strdup(chld_out.buf);
/*copy of output*/<br>
<br>
        strHost =
strtok(holder,":"); /*grab host name from output in the form of
hostname:output*/<br>
<br>
        asprintf(&strLinks, "<a
target=\"_blank\" href=\"<a
href="https://noctalk.liberty.edu/wiki/%25s:%25s/">https://noctalk.liberty.edu/wiki/%s:%s\</a>">(Wiki
Article)</a>&nbsp;<a target=\"_blank\" href=\"<a
href="https://noctalk.liberty.edu/wiki/Special:Search?search=%25s&fulltext=Search;\">https://noctalk.liberty.edu/wiki/Special:Search?search=%s&fulltext=Search;\</a>">(Wiki
Search)</a>", strCheck, strHost, strCheck); */generate links */<br>
<br>
        strcat(chld_out.buf, strLinks);<br>
#########################################################<br clear=all>
<br>
And here is where I modify the command being run to get the hostname prepended:<br>
#########################################################<br>
process_arguments (int argc, char **argv)<br>
{<br>
        char* cmdHost = "echo -n
$HOSTNAME;echo -n :;"; /*echo hostname and a colon */<br>
<br>
............skipping down......<br>
<br>
               
case
'C':                                                                      
/* Command for remote machine */<br>
                       
commands++;<br>
                       
if (commands > 1)<br>
                               
asprintf (&remotecmd, "%s;echo STATUS CODE: $?;", remotecmd);<br>
                       
asprintf(&remotecmd, "%s%s%s",cmdHost,remotecmd, optarg); /* my
mod */<br>
                       
//asprintf (&remotecmd, "%s%s", remotecmd, optarg);
<---Original code<br>
#########################################################<br>
<br>
That's it. For the checks that fail, I can change strcat(chld_out.buf,
strLinks) to strncat(chld_out.buf, strLinks, 10) and it works...ie, no
segmentation fault. However, at 11 characters it fails.<br>
<br>
Any ideas? I'm attaching check_by_ssh.c. It doesn't have all of these comments
and I removed some lines that were for my testing, but it is basically the
same.<br>
<br>
I will be eternally grateful to anyone who can either:<br>
1. Show me what I'm doing wrong.<br>
OR<br>
2. Help me understand how chld_out.buf works better so I can understand why
this might be failing.<br>
<br>
Clifton<br>
<br>
-- <br>
"True Christians consider themselves as not satisfying some rigorous
creditor, but as discharging a debt of gratitude. Accordingly, theirs is not
the stinted return of a constrained obedience, but the large and liberal
measure of voluntary service." - William Wilberforce, Real Christianity<o:p></o:p></p>

</div>

</div>


<HR>NOTICE: This email message is for the sole use of the intended recipient(s) and may contain confidential and privileged information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message.<BR>
</body>

</html>