Changeset 1844

Show
Ignore:
Timestamp:
04/26/07 19:42:36 (21 months ago)
Author:
aturner
Message:

change how check_ip_cidr and ip_in_cidr() return 1/0 not TCPR_DIR_*
which was just *ugly*! anyways, this fixes the issue where all TCPR_DIR_*
values were > 0 and hence always returned 'true' and caused us to rewrite all
IP addresses since it always matched.
refs #170 (need to commit big endian test case)

Location:
branches/3.0
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • branches/3.0/src/common/cidr.c

    r1757 r1844  
    375375} 
    376376 
    377 /* 
     377/*  
    378378 * checks to see if the ip address is in the cidr 
    379  * returns TCPR_DIR_C2S for true, TCPR_DIR_S2C for false 
    380  */ 
    381  
    382 tcpr_dir_t 
     379 * returns 1 for true, 0 for false 
     380 */ 
     381int 
    383382ip_in_cidr(const tcpr_cidr_t * mycidr, const unsigned long ip) 
    384383{ 
    385384    unsigned long ipaddr = 0, network = 0, mask = 0; 
    386     int ret; 
     385    int ret = 0; 
    387386     
    388387    /* always return 1 if 0.0.0.0/0 */ 
    389388    if (mycidr->masklen == 0 && mycidr->network == 0) 
    390         return TCPR_DIR_C2S; 
     389        return 1; 
    391390 
    392391    mask = ~0;                  /* turn on all the bits */ 
     
    407406            get_addr2name4(htonl(network), RESOLVE), mycidr->masklen); 
    408407 
    409         ret = TCPR_DIR_C2S; 
     408        ret = 1; 
    410409    } 
    411410    else { 
     
    415414            get_addr2name4(htonl(network), RESOLVE), mycidr->masklen); 
    416415 
    417         ret = TCPR_DIR_S2C; 
     416        ret = 0; 
    418417    } 
    419418    return ret; 
    420 } 
     419 
     420} 
     421 
    421422 
    422423/* 
    423424 * iterates over cidrdata to find if a given ip matches 
    424  * returns TCPR_DIR_C2S for true, TCPR_DIR_S2C for false 
    425  */ 
    426  
    427 tcpr_dir_t 
     425 * returns 1 for true, 0 for false 
     426 */ 
     427 
     428int 
    428429check_ip_cidr(tcpr_cidr_t * cidrdata, const unsigned long ip) 
    429430{ 
     
    434435     */ 
    435436    if (cidrdata == NULL) { 
    436         return TCPR_DIR_S2C; 
     437        return 1; 
    437438    } 
    438439 
     
    443444 
    444445        /* if match, return 1 */ 
    445         if (ip_in_cidr(mycidr, ip) == TCPR_DIR_C2S) { 
     446        if (ip_in_cidr(mycidr, ip)) { 
    446447            dbgx(3, "Found %s in cidr", get_addr2name4(ip, RESOLVE)); 
    447             return TCPR_DIR_C2S; 
     448            return 1; 
    448449        } 
    449450        /* check for next record */ 
     
    458459    /* if we get here, no match */ 
    459460    dbgx(3, "Didn't find %s in cidr", get_addr2name4(ip, RESOLVE)); 
    460     return TCPR_DIR_S2C; 
     461    return 0; 
    461462} 
    462463 
  • branches/3.0/src/common/cidr.h

    r1757 r1844  
    5151typedef struct tcpr_cidrmap_s tcpr_cidrmap_t; 
    5252 
    53 tcpr_dir_t ip_in_cidr(const tcpr_cidr_t *, const unsigned long); 
    54 tcpr_dir_t check_ip_cidr(tcpr_cidr_t *, const unsigned long); 
     53int ip_in_cidr(const tcpr_cidr_t *, const unsigned long); 
     54int check_ip_cidr(tcpr_cidr_t *, const unsigned long); 
    5555int parse_cidr(tcpr_cidr_t **, char *, char *delim); 
    5656int parse_cidr_map(tcpr_cidrmap_t **, const char *); 
  • branches/3.0/src/common/xX.c

    r1757 r1844  
    134134             * and NOT true/false or 1/0, etc! 
    135135             */ 
    136             return check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) == TCPR_DIR_C2S ? DONT_SEND : SEND; 
     136            return check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) ? DONT_SEND : SEND; 
    137137            break; 
    138138        case xXDest: 
    139             return check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr) == TCPR_DIR_C2S ? DONT_SEND : SEND; 
     139            return check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr) ? DONT_SEND : SEND; 
    140140        case xXBoth: 
    141             return (check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr) == TCPR_DIR_C2S && 
    142                     check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) == TCPR_DIR_C2S) ? DONT_SEND : SEND; 
     141            return (check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr) && 
     142                    check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) ) ? DONT_SEND : SEND; 
    143143            break; 
    144144        case xXEither: 
    145             return (check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr) == TCPR_DIR_C2S || 
    146                     check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) == TCPR_DIR_C2S) ? DONT_SEND : SEND; 
     145            return (check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr) || 
     146                    check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) ) ? DONT_SEND : SEND; 
    147147            break; 
    148148        } 
     
    152152        switch (mode) { 
    153153        case xXSource: 
    154             return check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) == TCPR_DIR_C2S ? SEND : DONT_SEND; 
     154            return check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) ? SEND : DONT_SEND; 
    155155            break; 
    156156        case xXDest: 
    157             return check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr) == TCPR_DIR_C2S ? SEND : DONT_SEND; 
     157            return check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr) ? SEND : DONT_SEND; 
    158158            break; 
    159159        case xXBoth: 
    160             return (check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr) == TCPR_DIR_C2S && 
    161                     check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) == TCPR_DIR_C2S) ? SEND : DONT_SEND; 
     160            return (check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr) && 
     161                    check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) ) ? SEND : DONT_SEND; 
    162162            break; 
    163163        case xXEither: 
    164             return (check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr) == TCPR_DIR_C2S || 
    165                     check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) == TCPR_DIR_C2S) ? SEND : DONT_SEND; 
     164            return (check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr) || 
     165                    check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) ) ? SEND : DONT_SEND; 
    166166            break; 
    167167        } 
  • branches/3.0/src/tcpprep.c

    r1820 r1844  
    365365            dbg(2, "processing cidr mode..."); 
    366366            cache_result = add_cache(&options.cachedata, SEND, 
    367                       check_ip_cidr(options.cidrdata, ip_hdr->ip_src.s_addr)); 
     367                      check_ip_cidr(options.cidrdata, ip_hdr->ip_src.s_addr) ? TCPR_DIR_C2S : TCPR_DIR_S2C ); 
    368368            break; 
    369369        case MAC_MODE: