aboutsummaryrefslogtreecommitdiffstats
path: root/src/firejail/network.c
diff options
context:
space:
mode:
authorLibravatar netblue30 <netblue30@yahoo.com>2018-01-16 20:44:06 -0500
committerLibravatar netblue30 <netblue30@yahoo.com>2018-01-16 20:44:06 -0500
commit3cab64296a5e0739552f1d959c5efc7fd49cc1d5 (patch)
tree6eb0961cd038780ccd7d2cc630b9408e6855b09f /src/firejail/network.c
parentadded support for IPv6 DNS configuration - #1722 (diff)
downloadfirejail-3cab64296a5e0739552f1d959c5efc7fd49cc1d5.tar.gz
firejail-3cab64296a5e0739552f1d959c5efc7fd49cc1d5.tar.zst
firejail-3cab64296a5e0739552f1d959c5efc7fd49cc1d5.zip
add check for ipv6 address syntax
Diffstat (limited to 'src/firejail/network.c')
-rw-r--r--src/firejail/network.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/firejail/network.c b/src/firejail/network.c
index 5ebaf873c..7b84854d3 100644
--- a/src/firejail/network.c
+++ b/src/firejail/network.c
@@ -37,8 +37,27 @@ int check_ip46_address(const char *addr) {
37 37
38 // check ipv6 address 38 // check ipv6 address
39 struct in6_addr result; 39 struct in6_addr result;
40 if (inet_pton(AF_INET6, addr, &result) == 1) 40
41 char *tmpstr = strdup(addr);
42 if (!tmpstr)
43 errExit("strdup");
44 char *ptr = strchr(tmpstr, '/');
45 if (ptr) {
46 *ptr = '\0';
47 ptr++;
48 int mask = atoi(ptr);
49 // check the network mask
50 if (mask < 0 || mask > 128) {
51 free(tmpstr);
52 return 0;
53 }
54 }
55 if (inet_pton(AF_INET6, tmpstr, &result) == 1) {
56 free(tmpstr);
41 return 1; 57 return 1;
58 }
59
60 free(tmpstr);
42 61
43 // failed 62 // failed
44 return 0; 63 return 0;