[JDEV] Is this bug fixed after 1.2 ? / workaround

Dennis Noordsij dennis.noordsij at wiral.com
Mon Jan 8 13:34:42 CST 2001


Hi,

For those interested :-) It's sort of in the jabber docs, every xdb component 
*has* to reply sensibly and the highest result is accepted. I'll blame the 
problem on the xdb_file.so and being linked into jabber for not obeying <ns> 
namespaces as using <ns> to single out namespaces works fine for the external 
program, so I just make the xdb_file.so reply either error's (the type=result 
from the external program should 'win' anyway) or empty result sets (a bigger 
result set from the external program should also 'win'). I also don't let the 
xdb_file.so write offline messages to the disk. 

I guess that is good enough to test individual namespace handling by my 
external program until I can handle enough namespaces to take out xdb_file 
altogether and use the external one.

Still, a better would explanation would be appreciated :-)

Regards,
Dennis




On Monday 08 January 2001 19:02, you wrote:
> >On Friday 01 December 2000 18:08, you wrote:
> > However, in the case where you have a xdb_get followed by a xdb_set
> > (eg. to store an offline message), the xdb_get will timeout nicely,
> > then the xdb_set will do a segfault on the following line :
> >
> > [jabberd/io/base_load.c:xdb_set()]
> >
> >         pth_mutex_acquire(&mutex, FALSE, NULL);
> >
> > But there I've no clue :(
> >
> > For now, handling correctly all namespaces seems the safest way ...
>
> Hello, sorry for the long email, but I have to tried to include as much
> information as possible, it appears to be a real problem (don't know if it
> has been fixed) with other people posting about it in the past.
>
>
> I am trying to split up the XDB section to have the original xdb_file.so
> module handle everything except the jabber:x:offline namespace.
>
> In jabber.xml, I add
>
> 	<ns>jabber:iq:auth</ns>
> 	<ns>jabber:iq:roster</ns>
> 	<ns>jabber:iq:register</ns>
> 	<ns>vcard-temp</ns>
>
> to the xdb section.
>
>
> I then add a new xdb entry, set <ns>jabber:x:offline</ns> and the
> appropriate <accept> tag. This program (external, uses libxode, libjabber
> and libpthread) connects and handshakes with jabber.
>
> I want this program to handle all offline messages.
>
> Events that happen:
>
> - jabber starts
> - offline program connects and handshakes
> - I try to log in using Gabber
> - offline program sees this:
>
>  RECEIVED:
>  <xdb type='get' to='dennis at host/jabber:x:offline'
>           from='host' id='4'/>
>
>  REPLIED:
>  <xdb type='result' from='dennis at host/jabber:x:offline'
>      to='host' id='4'><offline xmlns='jabber:x:offline'/></xdb>
>
>  CONNECTION TO JABBER LOST
>
> - In the mean time, jabber saw this:
>
> Mon Jan  8 19:13:50 2001  deliver.c:472 DELIVER 2:host <xdb
>      type='get' to='dennis at host/jabber:x:offline'
>      from='host' id='4'/>
> Mon Jan  8 19:13:50 2001  deliver.c:344 delivering to instance
> 'offlineagent' Mon Jan  8 19:13:50 2001  deliver.c:344 delivering to
> instance 'xdb' Mon Jan  8 19:13:50 2001  deliver.c:278 delivery failed
> (Server Configuration Error)
>
> (Note, the external program is called 'offlineagent', 'xdb' is the original
> xdb entry with <ns> tags added).
>
> - Even though jabber claims to deliver the xdb_get to instance 'xdb' I have
> patched the xdb_file.c file to log a notice when a jabber:x:offline request
> is received; in this case it never sees one. (as hoped :-)
>
> - Next, jabber notices the reply from the external program:
>
> Mon Jan  8 19:13:50 2001  base_accept.c:341 io incoming message event for
> 14
>
> Mon Jan  8 19:13:50 2001  base_accept.c:328 io read event for 14
>
> Mon Jan  8 19:13:50 2001  base_accept.c:213 base_accept: <xdb type='result'
>      from='dennis at host/jabber:x:offline' to='host'
>      id='4'><offline xmlns='jabber:x:offline'/></xdb>
>
> Mon Jan  8 19:13:50 2001  deliver.c:472 DELIVER 1:host <xdb
>      type='result' from='dennis at host/jabber:x:offline'
>      to='host' id='4'><offline xmlns='jabber:x:offline'/></xdb>
>
> Mon Jan  8 19:13:50 2001  deliver.c:344 delivering to instance 'sessions'
>
> Mon Jan  8 19:13:50 2001  base_load.c:167 xdb_results checking xdb packet
>      <xdb type='result' from='dennis at host/jabber:x:offline'
>      to='host' id='4'><offline xmlns='jabber:x:offline'/></xdb>
>
> Mon Jan  8 19:13:50 2001  base_load.c:327 xdb_get() done waiting for
>      dennis at host jabber:x:offline
>
> - Well, so far it all looked good.
>
> Mon Jan  8 19:13:50 2001  deliver.c:472 DELIVER 2:host <xdb
>      type='set' to='dennis at host/jabber:x:offline'
>      from='host' id='5'><offline xmlns='jabber:x:offline'/></xdb>
>
> Mon Jan  8 19:13:50 2001  deliver.c:344 delivering to instance
> 'offlineagent'
>
> Mon Jan  8 19:13:50 2001  deliver.c:344 delivering to instance 'xdb'
>
> Mon Jan  8 19:13:50 2001  deliver.c:278 delivery failed (Server
> Configuration Error)
>
> Mon Jan  8 19:13:50 2001  log.c:105 <log type='warn'
>      from='host'>dropping an xdb request for
>      dennis at host/jabber:x:offline</log>
>
> Mon Jan  8 19:13:50 2001  deliver.c:472 DELIVER 3:host <log
>      type='warn' from='host'>dropping an xdb request for
>      dennis at host/jabber:x:offline</log>
>
> Mon Jan  8 19:13:50 2001  deliver.c:344 delivering to instance 'logger'
>      20010108T17:13:50: [warn] (host): dropping an xdb request
>      for dennis at host/jabber:x:offline
>
> Mon Jan  8 19:13:50 2001  base_load.c:378 xdb_set() waiting for
>      dennis at host jabber:x:offline
>
>
>
> At this point jabber has segfaulted. The external component has never seen
> any data on the socket after this initial request, and shut down because
> the socket was closed.
>
> > However, in the case where you have a xdb_get followed by a xdb_set
> > (eg. to store an offline message), the xdb_get will timeout nicely,
> > then the xdb_set will do a segfault on the following line :
> >
> > [jabberd/io/base_load.c:xdb_set()]
> >
> >         pth_mutex_acquire(&mutex, FALSE, NULL);
> >
> > But there I've no clue :(
>
> Sounds like this is my problem :-)
>
> > For now, handling correctly all namespaces seems the safest way ...
>
> But I *am* handling all namespaces correctly as far as I know. For some
> reason the <ns> tags are not enough to tell jabber to not approach the
> xdb_file.so module for jabber:x:offline messages (but I guess it does, and
> then fails, hence the delivery failed (Server Configuration Error) - and
> then when no reply comes in from that component (even though there can't be
> one at all anyway) jabber segfaults.
>
>
> Also, when I don't put in the <ns> tags in the jabber.xml file my external
> component receives all jabber:x:offline messages, even replies to them, but
> the xdb_file.so module seems to 'win'. No crashes, but no point in my
> program either :-)
>
> If I patch the xdb_file.so module to ignore jabber:x:offline messages,
> there is no Server Configuration Error when sending the get request, the
> rest of the events are the same, ie the get is received and responded to
> properly, then a set is sent but jabber segfaults (external program never
> sees the set though).
>
>
> Does it help if I go to 1.4 ? :-)
>
>
> Kind regards,
> Dennis
>
> _______________________________________________
> jdev mailing list
> jdev at jabber.org
> http://mailman.jabber.org/listinfo/jdev




More information about the JDev mailing list