diff options
author | netblue30 <netblue30@yahoo.com> | 2018-01-16 20:44:06 -0500 |
---|---|---|
committer | netblue30 <netblue30@yahoo.com> | 2018-01-16 20:44:06 -0500 |
commit | 3cab64296a5e0739552f1d959c5efc7fd49cc1d5 (patch) | |
tree | 6eb0961cd038780ccd7d2cc630b9408e6855b09f /src/firejail/network.c | |
parent | added support for IPv6 DNS configuration - #1722 (diff) | |
download | firejail-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.c | 21 |
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; |