• Marco Angaroni's avatar
    netfilter: nf_ct_sip: allow tab character in SIP headers · 1bcabc81
    Marco Angaroni authored
    Current parsing methods for SIP headers do not allow the presence of
    tab characters between header name and header value. As a result Call-ID
    SIP headers like the following are discarded by IPVS SIP persistence
    engine:
    
    "Call-ID\t: mycallid@abcde"
    "Call-ID:\tmycallid@abcde"
    
    In above examples Call-IDs are represented as strings in C language.
    Obviously in real message we have byte "09" before/after colon (":").
    
    Proposed fix is in nf_conntrack_sip module.
    Function sip_skip_whitespace() should skip tabs in addition to spaces,
    since in SIP grammar whitespace (WSP) corresponds to space or tab.
    
    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: default avatarMarco Angaroni <marcoangaroni@gmail.com>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    1bcabc81
nf_conntrack_sip.c 45.1 KB