diff options
| author | jvoisin | 2017-10-30 13:17:16 +0100 |
|---|---|---|
| committer | jvoisin | 2017-10-30 13:19:03 +0100 |
| commit | c44872c883cfb0e801a60a0bf5eb836b35ef2a96 (patch) | |
| tree | 341179aec377315e5aa68ee564f78cd82d73d466 /src/sp_network_utils.c | |
| parent | 1476b0ddbab0748c332fd9ee7bed1ba9d1f35d96 (diff) | |
Bump coverage and simplify some code
Diffstat (limited to 'src/sp_network_utils.c')
| -rw-r--r-- | src/sp_network_utils.c | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/src/sp_network_utils.c b/src/sp_network_utils.c index 4b78ca5..206ae5b 100644 --- a/src/sp_network_utils.c +++ b/src/sp_network_utils.c | |||
| @@ -32,9 +32,8 @@ static inline bool cidr6_match(const struct in6_addr address, | |||
| 32 | const uint32_t *n = network.__u6_addr.__u6_addr32; | 32 | const uint32_t *n = network.__u6_addr.__u6_addr32; |
| 33 | #endif | 33 | #endif |
| 34 | */ | 34 | */ |
| 35 | int bits_whole, bits_incomplete; | 35 | int bits_whole = bits >> 5; // number of whole u32 |
| 36 | bits_whole = bits >> 5; // number of whole u32 | 36 | int bits_incomplete = bits & 0x1F; // number of bits in incomplete u32 |
| 37 | bits_incomplete = bits & 0x1F; // number of bits in incomplete u32 | ||
| 38 | if (bits_whole) { | 37 | if (bits_whole) { |
| 39 | if (memcmp(a, n, bits_whole << 2)) { | 38 | if (memcmp(a, n, bits_whole << 2)) { |
| 40 | return false; | 39 | return false; |
| @@ -53,12 +52,8 @@ static inline int get_ip_version(const char *ip) { | |||
| 53 | struct in_addr out4; | 52 | struct in_addr out4; |
| 54 | struct in6_addr out6; | 53 | struct in6_addr out6; |
| 55 | int res = inet_pton(AF_INET, ip, &out4); | 54 | int res = inet_pton(AF_INET, ip, &out4); |
| 56 | if (0 == res) { | 55 | if ((0 == res) && (1 == inet_pton(AF_INET6, ip, &out6))) { |
| 57 | if (1 == inet_pton(AF_INET6, ip, &out6)) { | 56 | return AF_INET6; |
| 58 | return AF_INET6; | ||
| 59 | } else { | ||
| 60 | return -1; | ||
| 61 | } | ||
| 62 | } else if (1 == res) { | 57 | } else if (1 == res) { |
| 63 | return AF_INET; | 58 | return AF_INET; |
| 64 | } else { | 59 | } else { |
| @@ -66,7 +61,6 @@ static inline int get_ip_version(const char *ip) { | |||
| 66 | } | 61 | } |
| 67 | } | 62 | } |
| 68 | 63 | ||
| 69 | // TODO factorise a bit this function | ||
| 70 | bool cidr_match(const char *ip, const sp_cidr *cidr) { | 64 | bool cidr_match(const char *ip, const sp_cidr *cidr) { |
| 71 | struct in_addr out4; | 65 | struct in_addr out4; |
| 72 | struct in6_addr out6; | 66 | struct in6_addr out6; |
| @@ -86,7 +80,6 @@ bool cidr_match(const char *ip, const sp_cidr *cidr) { | |||
| 86 | return cidr6_match(out6, cidr->ip.ipv6, cidr->mask); | 80 | return cidr6_match(out6, cidr->ip.ipv6, cidr->mask); |
| 87 | default: | 81 | default: |
| 88 | sp_log_err("cidr_match", "Weird ip (%s) family", ip); | 82 | sp_log_err("cidr_match", "Weird ip (%s) family", ip); |
| 89 | break; | ||
| 90 | } | 83 | } |
| 91 | return false; | 84 | return false; |
| 92 | } | 85 | } |
| @@ -111,6 +104,8 @@ int get_ip_and_cidr(char *ip, sp_cidr *cidr) { | |||
| 111 | 104 | ||
| 112 | cidr->ip_version = get_ip_version(ip); | 105 | cidr->ip_version = get_ip_version(ip); |
| 113 | 106 | ||
| 107 | assert(cidr->ip_version == AF_INET6 || cidr->ip_version == AF_INET); | ||
| 108 | |||
| 114 | if (AF_INET == cidr->ip_version) { | 109 | if (AF_INET == cidr->ip_version) { |
| 115 | if (cidr->mask > 32) { | 110 | if (cidr->mask > 32) { |
| 116 | sp_log_err("config", "'%d' isn't a valid ipv4 mask.", cidr->mask); | 111 | sp_log_err("config", "'%d' isn't a valid ipv4 mask.", cidr->mask); |
| @@ -119,8 +114,6 @@ int get_ip_and_cidr(char *ip, sp_cidr *cidr) { | |||
| 119 | inet_pton(AF_INET, ip, &(cidr->ip.ipv4)); | 114 | inet_pton(AF_INET, ip, &(cidr->ip.ipv4)); |
| 120 | } else if (AF_INET6 == cidr->ip_version) { | 115 | } else if (AF_INET6 == cidr->ip_version) { |
| 121 | inet_pton(AF_INET6, ip, &(cidr->ip.ipv6)); | 116 | inet_pton(AF_INET6, ip, &(cidr->ip.ipv6)); |
| 122 | } else { | ||
| 123 | return -1; | ||
| 124 | } | 117 | } |
| 125 | 118 | ||
| 126 | ip[mask - ip] = '/'; | 119 | ip[mask - ip] = '/'; |
