Thanks for your effort Cade, I applied your patches on latest from svn - version 4.3.0 <br>and it has been working for 3days now.<br><br><br><br>Best Regards,<br>Steinar M.<br><br><br><br><br><div class="gmail_quote">On Mon, Feb 15, 2010 at 4:21 PM, Cade Robinson <span dir="ltr"><<a href="mailto:cade.robinson@gmail.com">cade.robinson@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
I have been having some issues with hobbitfetch and have modified a few<br>
files to fix them.  At least my definition of fixed in that hobbitfetch<br>
now works - but the way they are fixed may not be right.<br>
<br>
include/libbbgen.h<br>
Change IP_ADDR_STRLEN from 16 to 22.<br>
The reason is that I was getting reports from IP:port and that is 22<br>
chars with the trailing NULL.  At 16 I was getting multi-source reports<br>
and the the host shown in "Status message received from" was truncated<br>
otherwise.<br>
<br>
hobbitd/hobbitd.c<br>
Again related to the above - took out he %16s because my host could be<br>
22 chars.<br>
<br>
hobbitd/hobbitfetch.c<br>
Lowered res from 100 to 25 - same as above so it could really be 22. Not<br>
much of a change but save a bit of mem.<br>
<br>
Change the read to read two less bytes than sizeof(buf) and set buf[n-1]<br>
to NULL.  This is in case 8192 bytes are sent/read.  Since buf is 8192<br>
elements long the last element is 8191 not 8192 so buf[n]=\0; when 8192<br>
bytes are read causes a segfault.  I think the same should be done in<br>
msgcache.c as well but I haven't seen anything over 100 bytes be sent to<br>
msgcache.<br>
<br>
<br>
<br>
<br>
Here are the patches:<br>
Index: include/libbbgen.h<br>
===================================================================<br>
--- include/libbbgen.h  (revision 6223)<br>
+++ include/libbbgen.h  (working copy)<br>
@@ -27,7 +27,7 @@<br>
#define STRBUF(buf) (buf->s)<br>
#define STRBUFLEN(buf) (buf->used)<br>
<br>
-#define IP_ADDR_STRLEN 16<br>
+#define IP_ADDR_STRLEN 22<br>
<br>
#include "version.h"<br>
#include "config.h"<br>
Index: hobbitd/hobbitd.c<br>
===================================================================<br>
--- hobbitd/hobbitd.c   (revision 6223)<br>
+++ hobbitd/hobbitd.c   (working copy)<br>
@@ -2789,7 +2789,7 @@<br>
                        /* Pick out the real sender of this message */<br>
                        msgfrom = strstr(currmsg, "\nStatus message<br>
received from ");<br>
                        if (msgfrom) {<br>
-                               sscanf(msgfrom, "\nStatus message<br>
received from %16s\n", sender);<br>
+                               sscanf(msgfrom, "\nStatus message<br>
received from %s\n", sender);<br>
                                *msgfrom = '\0';<br>
                        }<br>
<br>
@@ -2866,7 +2866,7 @@<br>
        else if (strncmp(msg->buf, "status", 6) == 0) {<br>
                msgfrom = strstr(msg->buf, "\nStatus message received<br>
from ");<br>
                if (msgfrom) {<br>
-                       sscanf(msgfrom, "\nStatus message received from<br>
%16s\n", sender);<br>
+                       sscanf(msgfrom, "\nStatus message received from<br>
%s\n", sender);<br>
                        *msgfrom = '\0';<br>
                }<br>
<br>
@@ -2907,7 +2907,7 @@<br>
<br>
                msgfrom = strstr(msg->buf, "\nStatus message received<br>
from ");<br>
                if (msgfrom) {<br>
-                       sscanf(msgfrom, "\nStatus message received from<br>
%16s\n", sender);<br>
+                       sscanf(msgfrom, "\nStatus message received from<br>
%s\n", sender);<br>
                        *msgfrom = '\0';<br>
                }<br>
<br>
@@ -3668,7 +3668,7 @@<br>
                if (msgfrom) {<br>
                        char *ipline = strstr(msgfrom, "\nClientIP:");<br>
                        if (ipline) {<br>
-                               sscanf(ipline, "\nClientIP:%16s\n",<br>
sender);<br>
+                               sscanf(ipline, "\nClientIP:%s\n",<br>
sender);<br>
                        }<br>
                }<br>
<br>
Index: hobbitd/hobbitfetch.c<br>
===================================================================<br>
--- hobbitd/hobbitfetch.c       (revision 6223)<br>
+++ hobbitd/hobbitfetch.c       (working copy)<br>
@@ -100,7 +100,7 @@<br>
<br>
char *addrstring(struct sockaddr_in *addr)<br>
{<br>
-       static char res[100];<br>
+       static char res[25];<br>
<br>
        sprintf(res, "%s:%d", inet_ntoa(addr->sin_addr),<br>
ntohs(addr->sin_port));<br>
        return res;<br>
@@ -346,7 +346,7 @@<br>
        char buf[8192];<br>
<br>
        /* Read data from a peer connection (client or server) */<br>
-        n = read(conn->sockfd, buf, sizeof(buf));<br>
+        n = read(conn->sockfd, buf, sizeof(buf)-2);<br>
        if (n == -1) {<br>
                /* Read failure */<br>
                time_t now = gettimer();<br>
@@ -361,7 +361,7 @@<br>
                /* Save the data */<br>
                dbgprintf("Got %d bytes of data from %s (req %lu)\n",<br>
                        n, addrstring(&conn->caddr), conn->seq);<br>
-               buf[n] = '\0';<br>
+               buf[n+1] = '\0';<br>
                addtobuffer(conn->msgbuf, buf);<br>
        }<br>
        else if (n == 0) {<br>
<br>
<br>
<br>
To unsubscribe from the hobbit list, send an e-mail to<br>
<a href="mailto:hobbit-unsubscribe@hswn.dk">hobbit-unsubscribe@hswn.dk</a><br>
<br>
<br>
</blockquote></div><br>