aboutsummaryrefslogtreecommitdiff
path: root/src/tun
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2013-10-26 17:20:02 +0000
committerChristian Grothoff <christian@grothoff.org>2013-10-26 17:20:02 +0000
commit84b11c83de28c606157a210e679f3519a41921b9 (patch)
treea2893eee89ff2d3731cdcd13edb030f22b1c9fbc /src/tun
parent5272b27b9373a21884fde643a7d582df6b3b421b (diff)
downloadgnunet-84b11c83de28c606157a210e679f3519a41921b9.tar.gz
gnunet-84b11c83de28c606157a210e679f3519a41921b9.zip
-improvements to parsers
Diffstat (limited to 'src/tun')
-rw-r--r--src/tun/regex.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/tun/regex.c b/src/tun/regex.c
index 478132f4e..5baad60ee 100644
--- a/src/tun/regex.c
+++ b/src/tun/regex.c
@@ -126,7 +126,7 @@ nibble_to_regex (uint8_t value,
126 return ret; 126 return ret;
127 default: 127 default:
128 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 128 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
129 "Bad mask: %d\n", 129 _("Bad mask: %d\n"),
130 mask); 130 mask);
131 GNUNET_break (0); 131 GNUNET_break (0);
132 return NULL; 132 return NULL;
@@ -203,6 +203,8 @@ port_to_regex (const struct GNUNET_STRINGS_PortPolicy *pp)
203 pp->start_port); 203 pp->start_port);
204 return ret; 204 return ret;
205 } 205 }
206 if (pp->end_port < pp->start_port)
207 return NULL;
206 cnt = pp->end_port - pp->start_port + 1; 208 cnt = pp->end_port - pp->start_port + 1;
207 if (GNUNET_YES == pp->negate_portrange) 209 if (GNUNET_YES == pp->negate_portrange)
208 cnt = 0xFFFF - cnt; 210 cnt = 0xFFFF - cnt;
@@ -305,6 +307,11 @@ ipv4_to_regex (const struct GNUNET_STRINGS_IPv4NetworkPolicy *v4)
305 if (NULL == reg) 307 if (NULL == reg)
306 return NULL; 308 return NULL;
307 pp = port_to_regex (&v4->pp); 309 pp = port_to_regex (&v4->pp);
310 if (NULL == pp)
311 {
312 GNUNET_free (reg);
313 return NULL;
314 }
308 GNUNET_asprintf (&ret, 315 GNUNET_asprintf (&ret,
309 "4-%s-%s", 316 "4-%s-%s",
310 pp, reg); 317 pp, reg);
@@ -333,6 +340,11 @@ ipv6_to_regex (const struct GNUNET_STRINGS_IPv6NetworkPolicy *v6)
333 if (NULL == reg) 340 if (NULL == reg)
334 return NULL; 341 return NULL;
335 pp = port_to_regex (&v6->pp); 342 pp = port_to_regex (&v6->pp);
343 if (NULL == pp)
344 {
345 GNUNET_free (reg);
346 return NULL;
347 }
336 GNUNET_asprintf (&ret, 348 GNUNET_asprintf (&ret,
337 "6-%s-%s", 349 "6-%s-%s",
338 pp, reg); 350 pp, reg);
@@ -364,7 +376,7 @@ GNUNET_TUN_ipv4policy2regex (const char *policy)
364 if (NULL == np) 376 if (NULL == np)
365 return NULL; 377 return NULL;
366 reg = NULL; 378 reg = NULL;
367 for (i=0; 0 != np[i].network.s_addr; i++) 379 for (i=0; (0 == i) || (0 != np[i].network.s_addr); i++)
368 { 380 {
369 line = ipv4_to_regex (&np[i]); 381 line = ipv4_to_regex (&np[i]);
370 if (NULL == line) 382 if (NULL == line)
@@ -385,6 +397,8 @@ GNUNET_TUN_ipv4policy2regex (const char *policy)
385 GNUNET_free (line); 397 GNUNET_free (line);
386 reg = tmp; 398 reg = tmp;
387 } 399 }
400 if (0 == np[i].network.s_addr)
401 break;
388 } 402 }
389 return reg; 403 return reg;
390} 404}
@@ -414,7 +428,7 @@ GNUNET_TUN_ipv6policy2regex (const char *policy)
414 return NULL; 428 return NULL;
415 reg = NULL; 429 reg = NULL;
416 memset (&zero, 0, sizeof (struct in6_addr)); 430 memset (&zero, 0, sizeof (struct in6_addr));
417 for (i=0; 0 != memcmp (&zero, &np[i].network, sizeof (struct in6_addr)); i++) 431 for (i=0; (0 == i) || (0 != memcmp (&zero, &np[i].network, sizeof (struct in6_addr))); i++)
418 { 432 {
419 line = ipv6_to_regex (&np[i]); 433 line = ipv6_to_regex (&np[i]);
420 if (NULL == line) 434 if (NULL == line)
@@ -435,6 +449,8 @@ GNUNET_TUN_ipv6policy2regex (const char *policy)
435 GNUNET_free (line); 449 GNUNET_free (line);
436 reg = tmp; 450 reg = tmp;
437 } 451 }
452 if (0 == memcmp (&zero, &np[i].network, sizeof (struct in6_addr)))
453 break;
438 } 454 }
439 return reg; 455 return reg;
440} 456}