diff --git a/ChangeLog b/ChangeLog index da54a13..92d1ebe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,12 @@ 0.2.5 ===== -- 2-Dec-2002: - fixed a bug in check_vialoop. It wrongly claimed - to have detected a loop when using the old-style - IP address based inboud/outboud definitions. +- 6-Dec-2002: - released 0.2.5 (major bugfixes) + - Bugfix: MSN messenger 4.6 caused a segfault due to + non supplied username in contact header during + registration. (Credits to Dhiraj Bhuyan for the hint) + Included additional tests in that area. +- 4-Dec-2002: - fixed a major (but stupid) bug in check_vialoop. Siproxd + wrongly claimed to have detected a loop... 0.2.4 ===== diff --git a/RELNOTES b/RELNOTES index 48d8c5c..84ed4fa 100644 --- a/RELNOTES +++ b/RELNOTES @@ -1,5 +1,8 @@ Release Notes for siproxd-0.2.5 =============================== + This release mainly fixes some annoying (and stupid) bugs. + See the ChangeLog for details. + - supports Linux and FreeBSD (other BSD derivates not tested) - SIP Proxy for SIP based softphones hidden behind a masquerading firewall - Includes an RTP data stream proxy for *incomming* audio data @@ -30,17 +33,26 @@ Reported to build on: - OpenBSD 2.9 -Interoperability (tested with softphones): +Reported interoperability (tested with softphones): - Linphone (http://www.linphone.org) - Kphone (http://www.wirlab.net/kphone/) + - MSN messenger 4.6 + ----- -md5sum for siproxd-0.2.5.tar.gz: +md5sum for siproxd-0.2.5.tar.gz: 042986602efeaaa77a14bb0b1a416083 md5sum for siproxd-0.2.5-1rh60.i386.rpm: md5sum for siproxd-0.2.5-1rh72.i386.rpm: md5sum for siproxd-0.2.5-1.src.rpm: GnuPG signature for siproxd-0.2.5.tar.gz archive: +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.0.5 (GNU/Linux) + +iEYEABECAAYFAj3v6zkACgkQPOYHDi42pIppDACfc0Bw3vcNFE5+qSHIzMacdHow +kGgAn11c69ibc9bLd+la9j0otqxhAWIK +=OZ6c +-----END PGP SIGNATURE----- diff --git a/src/proxy.c b/src/proxy.c index ccca462..7ea90a3 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -170,7 +170,8 @@ int proxy_request (sip_t *request) { /* found a mapping entry */ if (i %s@%s", - contact->url->username, contact->url->host, + (contact->url->username) ? contact->url->username : "*NULL*", + (contact->url->host) ? contact->url->host : "*NULL*", urlmap[i].masq_url->username, urlmap[i].masq_url->host); /* remove old entry */ list_remove(request->contacts,0); @@ -365,7 +366,8 @@ int proxy_response (sip_t *response) { /* found a mapping entry */ if (i %s@%s", - contact->url->username, contact->url->host, + (contact->url->username) ? contact->url->username : "*NULL*", + (contact->url->host) ? contact->url->host : "*NULL*", urlmap[i].masq_url->username, urlmap[i].masq_url->host); /* remove old entry */ list_remove(response->contacts,0); diff --git a/src/register.c b/src/register.c index ea02bda..31f311e 100644 --- a/src/register.c +++ b/src/register.c @@ -128,10 +128,10 @@ int register_client(sip_t *my_msg) { url2_contact=urlmap[i].true_url; if ( (compare_url(url1_to, url2_to)==STS_SUCCESS) && - (strcmp(url1_contact->username, url2_contact->username)==0) && - (strcmp(url1_contact->host, url2_contact->host )==0) ) { + (compare_url(url1_contact, url2_contact)==STS_SUCCESS) ) { DEBUGC(DBCLASS_REG, "found entry for %s@%s at slot=%i, exp=%li", - url1_contact->username,url1_contact->host, + (url1_contact->username) ? url1_contact->username : "*NULL*", + (url1_contact->host) ? url1_contact->host : "*NULL*", i, urlmap[i].expires-time_now); break; } diff --git a/src/siproxd.c b/src/siproxd.c index 00e6b2b..0620397 100644 --- a/src/siproxd.c +++ b/src/siproxd.c @@ -196,7 +196,7 @@ int main (int argc, char *argv[]) /* integrity checks */ sts=security_check(buff, i); - if (sts != 0) continue; /* there are no resources to free */ + if (sts != STS_SUCCESS) continue; /* there are no resources to free */ /* parse the received message */ sts=msg_init(&my_msg); diff --git a/src/utils.c b/src/utils.c index c8d9a0c..d868cc6 100644 --- a/src/utils.c +++ b/src/utils.c @@ -118,7 +118,7 @@ int check_vialoop (sip_t *my_msg) { via_t *via; via = (via_t *) list_get (my_msg->vias, pos); sts = is_via_local (via); - if (sts == 1) found_own_via=1; + if (sts == STS_TRUE) found_own_via=1; pos++; } return (found_own_via)? STS_TRUE : STS_FALSE; @@ -307,17 +307,27 @@ int compare_url(url_t *url1, url_t *url2) { ERROR("compare_url: NULL ptr: url1=0x%p, url2=0x%p",url1, url2); return STS_FAILURE; } - if ((url1->username == NULL) || (url2->username == NULL)) { - ERROR("compare_url: NULL ptr: url1->username=0x%p, url2->username=0x%p", - url1->username, url2->username); - return STS_FAILURE; - } if ((url1->host == NULL) || (url2->host == NULL)) { ERROR("compare_url: NULL ptr: url1->host=0x%p, url2->host=0x%p", url1->host, url2->host); return STS_FAILURE; } + if ((url1->username == NULL) || (url2->username == NULL)) { + /* Broken(?) MSN messenger - does not supply a user name part. + So we simply compare the host part then */ + WARN("compare_url: NULL username pointer: MSN messenger is known to " + "trigger this one! [url1->username=0x%p, url2->username=0x%p]", + url1->username, url2->username); + DEBUGC(DBCLASS_BABBLE, "comparing broken urls (no user): %s -> %s", + url1->host, url2->host); + if (strcmp(url1->host, url2->host)==0) { + sts = STS_SUCCESS; + } else { + sts = STS_FAILURE; + } + } + /* we have a proper URL */ /* comparison of hosts should be based on IP addresses, no? */ DEBUGC(DBCLASS_BABBLE, "comparing urls: %s@%s -> %s@%s", url1->username, url1->host, url2->username, url2->host);