[NETFILTER]: nf_conntrack_sip: use strlen/strcmp
authorPatrick McHardy <kaber@trash.net>
Wed, 26 Mar 2008 03:17:36 +0000 (20:17 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 26 Mar 2008 03:17:36 +0000 (20:17 -0700)
Replace sizeof/memcmp by strlen/strcmp. Use case-insensitive comparison
for SIP methods and the SIP/2.0 string, as specified in RFC 3261.

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/netfilter/nf_nat_sip.c
net/netfilter/nf_conntrack_sip.c

index acaa7d4569fa7955e3ce39a185c999c18619957f..dd1b2d86deee3f4ebf408d9e778396e898e9d8c4 100644 (file)
@@ -94,12 +94,12 @@ static int map_sip_addr(struct sk_buff *skb,
 
        if ((matchlen == map->addr[dir].srciplen ||
             matchlen == map->addr[dir].srclen) &&
-           memcmp(*dptr + matchoff, map->addr[dir].src, matchlen) == 0) {
+           strncmp(*dptr + matchoff, map->addr[dir].src, matchlen) == 0) {
                addr    = map->addr[!dir].dst;
                addrlen = map->addr[!dir].dstlen;
        } else if ((matchlen == map->addr[dir].dstiplen ||
                    matchlen == map->addr[dir].dstlen) &&
-                  memcmp(*dptr + matchoff, map->addr[dir].dst, matchlen) == 0) {
+                  strncmp(*dptr + matchoff, map->addr[dir].dst, matchlen) == 0) {
                addr    = map->addr[!dir].src;
                addrlen = map->addr[!dir].srclen;
        } else
@@ -117,20 +117,20 @@ static unsigned int ip_nat_sip(struct sk_buff *skb,
        enum sip_header_pos pos;
        struct addr_map map;
 
-       if (*datalen < sizeof("SIP/2.0") - 1)
+       if (*datalen < strlen("SIP/2.0"))
                return NF_ACCEPT;
 
        addr_map_init(ct, &map);
 
        /* Basic rules: requests and responses. */
-       if (strncmp(*dptr, "SIP/2.0", sizeof("SIP/2.0") - 1) != 0) {
+       if (strnicmp(*dptr, "SIP/2.0", strlen("SIP/2.0")) != 0) {
                /* 10.2: Constructing the REGISTER Request:
                 *
                 * The "userinfo" and "@" components of the SIP URI MUST NOT
                 * be present.
                 */
-               if (*datalen >= sizeof("REGISTER") - 1 &&
-                   strncmp(*dptr, "REGISTER", sizeof("REGISTER") - 1) == 0)
+               if (*datalen >= strlen("REGISTER") &&
+                   strnicmp(*dptr, "REGISTER", strlen("REGISTER")) == 0)
                        pos = POS_REG_REQ_URI;
                else
                        pos = POS_REQ_URI;
index 38e1e7a053349ed3d9de430bf42c1762441998cd..cf19a7082a759108b1b58fbd1912e2f57d66e645 100644 (file)
@@ -434,15 +434,15 @@ static int sip_help(struct sk_buff *skb,
        }
 
        datalen = skb->len - dataoff;
-       if (datalen < sizeof("SIP/2.0 200") - 1)
+       if (datalen < strlen("SIP/2.0 200"))
                goto out;
 
        /* RTP info only in some SDP pkts */
-       if (memcmp(dptr, "INVITE", sizeof("INVITE") - 1) != 0 &&
-           memcmp(dptr, "UPDATE", sizeof("UPDATE") - 1) != 0 &&
-           memcmp(dptr, "SIP/2.0 180", sizeof("SIP/2.0 180") - 1) != 0 &&
-           memcmp(dptr, "SIP/2.0 183", sizeof("SIP/2.0 183") - 1) != 0 &&
-           memcmp(dptr, "SIP/2.0 200", sizeof("SIP/2.0 200") - 1) != 0) {
+       if (strnicmp(dptr, "INVITE", strlen("INVITE")) != 0 &&
+           strnicmp(dptr, "UPDATE", strlen("UPDATE")) != 0 &&
+           strnicmp(dptr, "SIP/2.0 180", strlen("SIP/2.0 180")) != 0 &&
+           strnicmp(dptr, "SIP/2.0 183", strlen("SIP/2.0 183")) != 0 &&
+           strnicmp(dptr, "SIP/2.0 200", strlen("SIP/2.0 200")) != 0) {
                goto out;
        }
        /* Get address and port from SDP packet. */