[Kamailio-Devel] [ openser-Feature Requests-2047019 ] special cases for comparison: URI userinfo is case sensitive

SourceForge.net noreply at sourceforge.net
Mon Jan 19 21:57:48 CET 2009


Feature Requests item #2047019, was opened at 2008-08-12 00:59
Message generated for change (Comment added) made by miconda
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=743023&aid=2047019&group_id=139143

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: core
Group: ver devel
>Status: Closed
>Resolution: Fixed
Priority: 5
Private: No
Submitted By: Iñaki Baz (ibc_sf)
>Assigned to: Daniel-Constantin Mierla (miconda)
Summary: special cases for comparison: URI userinfo is case sensitive

Initial Comment:
Hi, Kamailio matches the following when RURI="sip:aa at domain.com":

  if ($rU == "Aa")  => returns true

But this is not valid since userinfo part of an URI is case *sensitive* (but not the protocol, domain, uri parameters and header parameters):

--------------
19.1.4 URI Comparison

      o  Comparison of the userinfo of SIP and SIPS URIs is case-
         sensitive.  This includes userinfo containing passwords or
         formatted as telephone-subscribers.  Comparison of all other
         components of the URI is case-insensitive unless explicitly
         defined otherwise.
--------------


Also, URI parameters matching in Kamailio is wrong since it compares all the parameters in URI A with all parameters in URI B. For example, Kamamilio says those two URI's are not equal when in fact they are:

  URI A = sip:aa at domain;kk
  URI A = sip:aa at domain;qq

--------------
      o  URI uri-parameter components are compared as follows:

         -  Any uri-parameter appearing in both URIs must match.

         -  A user, ttl, or method uri-parameter appearing in only one
            URI never matches, even if it contains the default value.

         -  A URI that includes an maddr parameter will not match a URI
            that contains no maddr parameter.

         -  All other uri-parameters appearing in only one URI are
            ignored when comparing the URIs.
--------------

Well, I think this is a pain, but near 60% in SIP is a pain XD

----------------------------------------------------------------------

>Comment By: Daniel-Constantin Mierla (miconda)
Date: 2009-01-19 22:57

Message:
siputils module includes now functions to compare uri and aor.

----------------------------------------------------------------------

Comment By: Daniel-Constantin Mierla (miconda)
Date: 2008-08-15 12:21

Message:
Logged In: YES 
user_id=1246013
Originator: NO

Moved this discussion to feature requests, as seems that special functions
are required for dedicated cases

----------------------------------------------------------------------

Comment By: Daniel-Constantin Mierla (miconda)
Date: 2008-08-12 11:19

Message:
Logged In: YES 
user_id=1246013
Originator: NO

The comparisons make no difference of what pseudo-variable is compared.
The evaluation of the expressions is getting the values for left and right
side operands and then compare as string. That maybe dedicated functions
will bring something much more clear.

----------------------------------------------------------------------

Comment By: Iñaki Baz (ibc_sf)
Date: 2008-08-12 11:10

Message:
Logged In: YES 
user_id=1844020
Originator: YES

@miconda:
> The string operations in script are case insensitive. avp_check() can
do
> case sensitive comparisons.

I can sure that the following comparisions are case insensitive in
Kamailio so I assume they are not "normal" string operations:

  1) $rU == "Aa"
  2) $rd == "doMAin.cOM"
  3) uri == "SIp:AA at DOMAin.com"

Al of those comparisions return true if the RURI = "sip:aa at domain.com",
but 1) is wrong since userinfo MUST be case sensitive as per RFC 3261.


@oej:
> URI comparision is a bit more complicated than strcmp, so in that case 
> we need a uricmp() function. However, the username part only is a bit
more
> easy.

Also take in count that:

- URI protocol: case insensitive ("sip" == "SIp")

- URI userinfo: case sensitive, allows hexadecimal escaping ("alice" ==
"%61alice != "Alice")

- URI host: case insensitive ("kamailio.org" == "KAMAIlio.org")

- URI parameters (key and value): case insensitive, allows hexadecimal
escaping ("tag=alice" == "T%61G=%61aliCE")
Also note that if the host is a IPv4 or IPv6 then binary matching must be
permormed ("1.2.3.4 == 1.002.03.4").

- URI headers: (I prefer to forget those useles URI components...).

----------------------------------------------------------------------

Comment By: Olle E. Johansson (oej)
Date: 2008-08-12 10:50

Message:
Logged In: YES 
user_id=7341
Originator: NO

URI comparision is a bit more complicated than strcmp, so in that case we
need a uricmp() function. However, the username part only is a bit more
easy.


----------------------------------------------------------------------

Comment By: Daniel-Constantin Mierla (miconda)
Date: 2008-08-12 10:40

Message:
Logged In: YES 
user_id=1246013
Originator: NO

The string operations in script are case insensitive. avp_check() can do
case sensitive comparisons.

As operations flexibility give configuration file power, we would need a
new set of operators to differentiate between case sensitive and
insensitive. Alternative is to introduce function in core like
strcmp/strcasecmp.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=743023&aid=2047019&group_id=139143



More information about the Devel mailing list