• M
    netfilter: nf_ct_sip: correct allowed characters in Call-ID SIP header · f0608cea
    Marco Angaroni 提交于
    Current parsing methods for SIP header Call-ID do not check correctly all
    characters allowed by RFC 3261. In particular "," character is allowed
    instead of "'" character. As a result Call-ID headers like the following
    are discarded by IPVS SIP persistence engine.
    
    Call-ID: -.!%*_+`'~()<>:\"/[]?{}
    
    Above example is composed using all non-alphanumeric characters listed
    in RFC 3261 for Call-ID header syntax.
    
    Proposed fix is in nf_conntrack_sip module; function iswordc() checks this
    range: (c >= '(' && c <= '/') which includes these characters: ()*+,-./
    They are all allowed except ",". Instead "'" is not included in the list.
    
    Below is an extract of relevant SIP ABNF syntax.
    
    Call-ID  =  ( "Call-ID" / "i" ) HCOLON callid
    callid   =  word [ "@" word ]
    
    HCOLON  =  *( SP / HTAB ) ":" SWS
    SWS     =  [LWS] ; sep whitespace
    LWS     =  [*WSP CRLF] 1*WSP ; linear whitespace
    WSP     =  SP / HTAB
    word    =  1*(alphanum / "-" / "." / "!" / "%" / "*" /
               "_" / "+" / "`" / "'" / "~" /
               "(" / ")" / "<" / ">" /
               ":" / "\" / DQUOTE /
               "/" / "[" / "]" / "?" /
               "{" / "}" )
    Signed-off-by: NMarco Angaroni <marcoangaroni@gmail.com>
    Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
    f0608cea
nf_conntrack_sip.c 45.1 KB