[Pidgin] #12094: MSN Direct Connections not working

Pidgin trac at pidgin.im
Fri Jun 4 05:59:49 EDT 2010


#12094: MSN Direct Connections not working
----------------------+-----------------------------------------------------
 Reporter:  markuznw  |        Owner:  QuLogic
     Type:  defect    |       Status:  new    
Milestone:            |    Component:  MSN    
  Version:  2.7.1     |   Resolution:         
 Keywords:            |  
----------------------+-----------------------------------------------------

Comment(by kukkerman):

 Hi!

 The problem is, that if libpurple receives an ''application/x-msnmsgr-
 transreqbody'' SLP message with a ''Hashed-Nonce'' then around line 735 in
 slp.c the nonce and its type are parsed and the new
 ''!MsnDirectConnNonceType'' is stored into ''dc->ntpye'':
 {{{
 nonce = parse_dc_nonce(content, &ntype);
 ...
 if (ntype == DC_NONCE_PLAIN) {
    dc->nonce_type = ntype;
    memcpy(dc->nonce, nonce, 16);

 } else if (ntype == DC_NONCE_SHA1) {
    dc->nonce_type = ntype;
    strncpy(dc->remote_nonce, nonce, 36);
    dc->remote_nonce[36] = '\0';
 }
 }}}
 But if the remote side uses SHA1 hashing ''dc->nonce_hash'' should be
 recalculated because it's generated only once in ''msn_dc_new()'' using
 the plain method:
 {{{
 dc->nonce_type = DC_NONCE_PLAIN;
 msn_dc_generate_nonce(dc);
 }}}
 Because ''dc->ntype'' is set to DC_NONCE_SHA1 the plain nonce will be used
 in the ''Hashed-Nonce' field.

 So the soulution would be:
 {{{
 if (ntype == DC_NONCE_PLAIN) {
    dc->nonce_type = ntype;
    memcpy(dc->nonce, nonce, 16);

 } else if (ntype == DC_NONCE_SHA1) {
    dc->nonce_type = ntype;
    strncpy(dc->remote_nonce, nonce, 36);
    dc->remote_nonce[36] = '\0';

    msn_dc_calculate_nonce_hash(ntype, dc->nonce, dc->nonce_hash);
 }
 }}}
 I don't know if this is the whole story but it's a problem for sure.

 Hope this help.

 Cheers,
   Gabe

-- 
Ticket URL: <http://developer.pidgin.im/ticket/12094#comment:7>
Pidgin <http://pidgin.im>
Pidgin


More information about the Tracker mailing list