[Nagiosplug-devel] RV: Problem with "check_tcp"

Holger Weiß holger at cis.fu-berlin.de
Mon Sep 9 16:37:07 CEST 2013


* Julio Pedreira Paz <julio.pedreira at equifax.es> [2013-09-09 13:57]:
> I know that the server performs a "flush" after the first 5 bytes are
> ready but it does not close the connection. Its just that the server
> flushes parts of the response as soon as it has them ready. Tracking
> this to "check_tcp" source code, I found:
> 
>         /* watch for the expect string */
>         while ((i = my_recv(buffer, sizeof(buffer))) > 0) {
>                  status = realloc(status, len + i + 1);
>                  memcpy(&status[len], buffer, i);
>                  len += i;
> 
>                  /* stop reading if user-forced or data-starved */
>                  if(i < sizeof(buffer) || (maxbytes && len >= maxbytes))
>                           break;
> 
> If I'm not wrong, the "i < sizeof(buffer)" condition means to leave the
> reading loop if the bytes received are less than the buffer size, wich
> makes no sense to me, as other bytes may be awainting in the server, as
> it was my case. In fact, if I comment that condition and recompile, it
> works as expected.
> 
> Is it a bug or just something I'm missing?

It's a bug, the author of those lines obviously assumed that check_tcp
would always receive the data in one go.

Could you submit a pull request on GitHub (or shall I fix this myself)?

Holger




More information about the Devel mailing list