<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2656.60">
<TITLE>RE : [Nagios-devel] objects.cache : CGI fails if line longer than 64K characters (2.0 b3)</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>Andreas Ericsson wrote :</FONT>
</P>

<P><FONT SIZE=2>> That would be mmap_fgets. I've got a feeling you're about to discover </FONT>
<BR><FONT SIZE=2>> that 65536 is the magic roof of the length of member-lists in </FONT>
<BR><FONT SIZE=2>> service-descriptions. Perhaps there is an unsigned short somewhere in </FONT>
<BR><FONT SIZE=2>> there which causes this weird limit.</FONT>
</P>

<P><FONT SIZE=2>Got it. Actually, it is not mmap_fgets. Mmap_fgets returns a buffer of 80 K chars without problems. But, in xodtemplate_add_object_property, there is a f... line that says :</FONT></P>

<P>        <FONT SIZE=2>/* truncate if necessary */</FONT>
<BR>        <FONT SIZE=2>if(strlen(input)>MAX_XODTEMPLATE_INPUT_BUFFER)</FONT>
<BR>                <FONT SIZE=2>input[MAX_XODTEMPLATE_INPUT_BUFFER-1]='\x0';</FONT>
</P>

<P><FONT SIZE=2>And MAX_XODTEMPLATE_INPUT_BUFFER is defined as 65535 !</FONT>
</P>

<P><FONT SIZE=2>After defining it to 16*65535, everything works well...</FONT>
</P>

<P><FONT SIZE=2>This limit is right when we read from a primary config file and it was certainly put here when the cache file did not exist yet, but something should be done not to enforce it when we read from the objects cache file, because it contains some aggregation of host & service group members, and these lines can easily be longer than the limit of 64 K.</FONT></P>

<P><FONT SIZE=2>There is still a mistery : it is the fact that, after being truncated, the resulting string (used for registration) is not null-terminated, as the code above would suggest. I have already lost one day and I won't spend more on the subject but it can be interesting to investigate.</FONT></P>

</BODY>
</HTML>