1832dc76bSMariusz Zaborski /*-
2832dc76bSMariusz Zaborski * Copyright (c) 2020 Mariusz Zaborski <oshogbo@FreeBSD.org>
3832dc76bSMariusz Zaborski *
4832dc76bSMariusz Zaborski * Redistribution and use in source and binary forms, with or without
5832dc76bSMariusz Zaborski * modification, are permitted provided that the following conditions
6832dc76bSMariusz Zaborski * are met:
7832dc76bSMariusz Zaborski * 1. Redistributions of source code must retain the above copyright
8832dc76bSMariusz Zaborski * notice, this list of conditions and the following disclaimer.
9832dc76bSMariusz Zaborski * 2. Redistributions in binary form must reproduce the above copyright
10832dc76bSMariusz Zaborski * notice, this list of conditions and the following disclaimer in the
11832dc76bSMariusz Zaborski * documentation and/or other materials provided with the distribution.
12832dc76bSMariusz Zaborski *
13832dc76bSMariusz Zaborski * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
14832dc76bSMariusz Zaborski * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
15832dc76bSMariusz Zaborski * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16832dc76bSMariusz Zaborski * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
17832dc76bSMariusz Zaborski * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18832dc76bSMariusz Zaborski * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19832dc76bSMariusz Zaborski * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20832dc76bSMariusz Zaborski * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21832dc76bSMariusz Zaborski * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22832dc76bSMariusz Zaborski * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
23832dc76bSMariusz Zaborski * POSSIBILITY OF SUCH DAMAGE.
24832dc76bSMariusz Zaborski */
25832dc76bSMariusz Zaborski
26832dc76bSMariusz Zaborski #include <sys/param.h>
27832dc76bSMariusz Zaborski #include <sys/socket.h>
28832dc76bSMariusz Zaborski #include <netinet/in.h>
29832dc76bSMariusz Zaborski #include <arpa/inet.h>
30832dc76bSMariusz Zaborski
31832dc76bSMariusz Zaborski #include <errno.h>
32832dc76bSMariusz Zaborski #include <netdb.h>
33832dc76bSMariusz Zaborski
34832dc76bSMariusz Zaborski #include <atf-c.h>
35832dc76bSMariusz Zaborski
36832dc76bSMariusz Zaborski #include <libcasper.h>
37832dc76bSMariusz Zaborski #include <casper/cap_net.h>
38832dc76bSMariusz Zaborski
39832dc76bSMariusz Zaborski #define TEST_DOMAIN_0 "example.com"
40832dc76bSMariusz Zaborski #define TEST_DOMAIN_1 "freebsd.org"
41832dc76bSMariusz Zaborski #define TEST_IPV4 "1.1.1.1"
42832dc76bSMariusz Zaborski #define TEST_IPV6 "2001:4860:4860::8888"
43832dc76bSMariusz Zaborski #define TEST_BIND_IPV4 "127.0.0.1"
44179bffddSEric van Gyzen #define TEST_PORT 80
45179bffddSEric van Gyzen #define TEST_PORT_STR "80"
46832dc76bSMariusz Zaborski
47832dc76bSMariusz Zaborski static cap_channel_t *
create_network_service(void)48832dc76bSMariusz Zaborski create_network_service(void)
49832dc76bSMariusz Zaborski {
50832dc76bSMariusz Zaborski cap_channel_t *capcas, *capnet;
51832dc76bSMariusz Zaborski
52832dc76bSMariusz Zaborski capcas = cap_init();
53832dc76bSMariusz Zaborski ATF_REQUIRE(capcas != NULL);
54832dc76bSMariusz Zaborski
55832dc76bSMariusz Zaborski capnet = cap_service_open(capcas, "system.net");
56832dc76bSMariusz Zaborski ATF_REQUIRE(capnet != NULL);
57832dc76bSMariusz Zaborski
58832dc76bSMariusz Zaborski cap_close(capcas);
59832dc76bSMariusz Zaborski return (capnet);
60832dc76bSMariusz Zaborski }
61832dc76bSMariusz Zaborski
62832dc76bSMariusz Zaborski static int
test_getnameinfo_v4(cap_channel_t * chan,int family,const char * ip)63832dc76bSMariusz Zaborski test_getnameinfo_v4(cap_channel_t *chan, int family, const char *ip)
64832dc76bSMariusz Zaborski {
65832dc76bSMariusz Zaborski struct sockaddr_in ipaddr;
66832dc76bSMariusz Zaborski char capfn[MAXHOSTNAMELEN];
67832dc76bSMariusz Zaborski char origfn[MAXHOSTNAMELEN];
687ee4066dSMark Johnston int capret, sysret;
69832dc76bSMariusz Zaborski
70832dc76bSMariusz Zaborski memset(&ipaddr, 0, sizeof(ipaddr));
71832dc76bSMariusz Zaborski ipaddr.sin_family = family;
72832dc76bSMariusz Zaborski inet_pton(family, ip, &ipaddr.sin_addr);
73832dc76bSMariusz Zaborski
747ee4066dSMark Johnston capret = cap_getnameinfo(chan, (struct sockaddr *)&ipaddr, sizeof(ipaddr),
75832dc76bSMariusz Zaborski capfn, sizeof(capfn), NULL, 0, NI_NAMEREQD);
767ee4066dSMark Johnston if (capret != 0 && capret == ENOTCAPABLE)
777ee4066dSMark Johnston return (ENOTCAPABLE);
78832dc76bSMariusz Zaborski
797ee4066dSMark Johnston sysret = getnameinfo((struct sockaddr *)&ipaddr, sizeof(ipaddr), origfn,
80832dc76bSMariusz Zaborski sizeof(origfn), NULL, 0, NI_NAMEREQD);
817ee4066dSMark Johnston if (sysret != 0) {
827ee4066dSMark Johnston atf_tc_skip("getnameinfo(%s) failed: %s",
837ee4066dSMark Johnston ip, gai_strerror(sysret));
847ee4066dSMark Johnston }
857ee4066dSMark Johnston ATF_REQUIRE(capret == 0);
86832dc76bSMariusz Zaborski ATF_REQUIRE(strcmp(origfn, capfn) == 0);
87832dc76bSMariusz Zaborski
88832dc76bSMariusz Zaborski return (0);
89832dc76bSMariusz Zaborski }
90832dc76bSMariusz Zaborski
91832dc76bSMariusz Zaborski static int
test_getnameinfo_v6(cap_channel_t * chan,const char * ip)92832dc76bSMariusz Zaborski test_getnameinfo_v6(cap_channel_t *chan, const char *ip)
93832dc76bSMariusz Zaborski {
94832dc76bSMariusz Zaborski struct sockaddr_in6 ipaddr;
95832dc76bSMariusz Zaborski char capfn[MAXHOSTNAMELEN];
96832dc76bSMariusz Zaborski char origfn[MAXHOSTNAMELEN];
977ee4066dSMark Johnston int capret, sysret;
98832dc76bSMariusz Zaborski
99832dc76bSMariusz Zaborski memset(&ipaddr, 0, sizeof(ipaddr));
100832dc76bSMariusz Zaborski ipaddr.sin6_family = AF_INET6;
101832dc76bSMariusz Zaborski inet_pton(AF_INET6, ip, &ipaddr.sin6_addr);
102832dc76bSMariusz Zaborski
1037ee4066dSMark Johnston capret = cap_getnameinfo(chan, (struct sockaddr *)&ipaddr, sizeof(ipaddr),
104832dc76bSMariusz Zaborski capfn, sizeof(capfn), NULL, 0, NI_NAMEREQD);
1057ee4066dSMark Johnston if (capret != 0 && capret == ENOTCAPABLE)
1067ee4066dSMark Johnston return (ENOTCAPABLE);
107832dc76bSMariusz Zaborski
1087ee4066dSMark Johnston sysret = getnameinfo((struct sockaddr *)&ipaddr, sizeof(ipaddr), origfn,
109832dc76bSMariusz Zaborski sizeof(origfn), NULL, 0, NI_NAMEREQD);
1107ee4066dSMark Johnston if (sysret != 0) {
1117ee4066dSMark Johnston atf_tc_skip("getnameinfo(%s) failed: %s",
1127ee4066dSMark Johnston ip, gai_strerror(sysret));
1137ee4066dSMark Johnston }
1147ee4066dSMark Johnston ATF_REQUIRE(capret == 0);
115832dc76bSMariusz Zaborski ATF_REQUIRE(strcmp(origfn, capfn) == 0);
116832dc76bSMariusz Zaborski
117832dc76bSMariusz Zaborski return (0);
118832dc76bSMariusz Zaborski }
119832dc76bSMariusz Zaborski
120832dc76bSMariusz Zaborski static int
test_getnameinfo(cap_channel_t * chan,int family,const char * ip)121832dc76bSMariusz Zaborski test_getnameinfo(cap_channel_t *chan, int family, const char *ip)
122832dc76bSMariusz Zaborski {
123832dc76bSMariusz Zaborski
124832dc76bSMariusz Zaborski if (family == AF_INET6) {
125832dc76bSMariusz Zaborski return (test_getnameinfo_v6(chan, ip));
126832dc76bSMariusz Zaborski }
127832dc76bSMariusz Zaborski
128832dc76bSMariusz Zaborski return (test_getnameinfo_v4(chan, family, ip));
129832dc76bSMariusz Zaborski }
130832dc76bSMariusz Zaborski
131832dc76bSMariusz Zaborski static int
test_gethostbyaddr_v4(cap_channel_t * chan,int family,const char * ip)132832dc76bSMariusz Zaborski test_gethostbyaddr_v4(cap_channel_t *chan, int family, const char *ip)
133832dc76bSMariusz Zaborski {
134832dc76bSMariusz Zaborski struct in_addr ipaddr;
135832dc76bSMariusz Zaborski struct hostent *caphp, *orighp;
136832dc76bSMariusz Zaborski
137832dc76bSMariusz Zaborski memset(&ipaddr, 0, sizeof(ipaddr));
138832dc76bSMariusz Zaborski inet_pton(AF_INET, ip, &ipaddr);
139832dc76bSMariusz Zaborski
140832dc76bSMariusz Zaborski caphp = cap_gethostbyaddr(chan, &ipaddr, sizeof(ipaddr), family);
1417ee4066dSMark Johnston if (caphp == NULL && h_errno == ENOTCAPABLE)
1427ee4066dSMark Johnston return (ENOTCAPABLE);
143832dc76bSMariusz Zaborski
144832dc76bSMariusz Zaborski orighp = gethostbyaddr(&ipaddr, sizeof(ipaddr), family);
1457ee4066dSMark Johnston if (orighp == NULL)
1467ee4066dSMark Johnston atf_tc_skip("gethostbyaddr(%s) failed", ip);
1477ee4066dSMark Johnston ATF_REQUIRE(caphp != NULL);
1487ee4066dSMark Johnston ATF_REQUIRE(strcmp(orighp->h_name, caphp->h_name) == 0);
149832dc76bSMariusz Zaborski
150832dc76bSMariusz Zaborski return (0);
151832dc76bSMariusz Zaborski }
152832dc76bSMariusz Zaborski
153832dc76bSMariusz Zaborski static int
test_gethostbyaddr_v6(cap_channel_t * chan,const char * ip)154832dc76bSMariusz Zaborski test_gethostbyaddr_v6(cap_channel_t *chan, const char *ip)
155832dc76bSMariusz Zaborski {
156832dc76bSMariusz Zaborski struct in6_addr ipaddr;
157832dc76bSMariusz Zaborski struct hostent *caphp, *orighp;
158832dc76bSMariusz Zaborski
159832dc76bSMariusz Zaborski memset(&ipaddr, 0, sizeof(ipaddr));
160832dc76bSMariusz Zaborski inet_pton(AF_INET6, ip, &ipaddr);
161832dc76bSMariusz Zaborski
162832dc76bSMariusz Zaborski caphp = cap_gethostbyaddr(chan, &ipaddr, sizeof(ipaddr), AF_INET6);
1637ee4066dSMark Johnston if (caphp == NULL && h_errno == ENOTCAPABLE)
1647ee4066dSMark Johnston return (ENOTCAPABLE);
165832dc76bSMariusz Zaborski
166832dc76bSMariusz Zaborski orighp = gethostbyaddr(&ipaddr, sizeof(ipaddr), AF_INET6);
1677ee4066dSMark Johnston if (orighp == NULL)
1687ee4066dSMark Johnston atf_tc_skip("gethostbyaddr(%s) failed", ip);
1697ee4066dSMark Johnston ATF_REQUIRE(caphp != NULL);
1707ee4066dSMark Johnston ATF_REQUIRE(strcmp(orighp->h_name, caphp->h_name) == 0);
171832dc76bSMariusz Zaborski
172832dc76bSMariusz Zaborski return (0);
173832dc76bSMariusz Zaborski }
174832dc76bSMariusz Zaborski
175832dc76bSMariusz Zaborski static int
test_gethostbyaddr(cap_channel_t * chan,int family,const char * ip)176832dc76bSMariusz Zaborski test_gethostbyaddr(cap_channel_t *chan, int family, const char *ip)
177832dc76bSMariusz Zaborski {
178832dc76bSMariusz Zaborski
179832dc76bSMariusz Zaborski if (family == AF_INET6) {
180832dc76bSMariusz Zaborski return (test_gethostbyaddr_v6(chan, ip));
181832dc76bSMariusz Zaborski } else {
182832dc76bSMariusz Zaborski return (test_gethostbyaddr_v4(chan, family, ip));
183832dc76bSMariusz Zaborski }
184832dc76bSMariusz Zaborski }
185832dc76bSMariusz Zaborski
186832dc76bSMariusz Zaborski static int
test_getaddrinfo(cap_channel_t * chan,int family,const char * domain,const char * servname)187832dc76bSMariusz Zaborski test_getaddrinfo(cap_channel_t *chan, int family, const char *domain,
188832dc76bSMariusz Zaborski const char *servname)
189832dc76bSMariusz Zaborski {
190832dc76bSMariusz Zaborski struct addrinfo hints, *capres, *origres, *res0, *res1;
191832dc76bSMariusz Zaborski bool found;
1927ee4066dSMark Johnston int capret, sysret;
193832dc76bSMariusz Zaborski
194832dc76bSMariusz Zaborski memset(&hints, 0, sizeof(hints));
195832dc76bSMariusz Zaborski hints.ai_family = family;
196832dc76bSMariusz Zaborski hints.ai_socktype = SOCK_STREAM;
197832dc76bSMariusz Zaborski
1987ee4066dSMark Johnston capret = cap_getaddrinfo(chan, domain, servname, &hints, &capres);
1997ee4066dSMark Johnston if (capret != 0 && capret == ENOTCAPABLE)
2007ee4066dSMark Johnston return (capret);
201832dc76bSMariusz Zaborski
2027ee4066dSMark Johnston sysret = getaddrinfo(domain, servname, &hints, &origres);
2037ee4066dSMark Johnston if (sysret != 0)
2047ee4066dSMark Johnston atf_tc_skip("getaddrinfo(%s) failed: %s",
2057ee4066dSMark Johnston domain, gai_strerror(sysret));
2067ee4066dSMark Johnston ATF_REQUIRE(capret == 0);
207832dc76bSMariusz Zaborski
208832dc76bSMariusz Zaborski for (res0 = capres; res0 != NULL; res0 = res0->ai_next) {
209832dc76bSMariusz Zaborski found = false;
210832dc76bSMariusz Zaborski for (res1 = origres; res1 != NULL; res1 = res1->ai_next) {
211832dc76bSMariusz Zaborski if (res1->ai_addrlen == res0->ai_addrlen &&
212832dc76bSMariusz Zaborski memcmp(res1->ai_addr, res0->ai_addr,
213832dc76bSMariusz Zaborski res0->ai_addrlen) == 0) {
214832dc76bSMariusz Zaborski found = true;
215832dc76bSMariusz Zaborski break;
216832dc76bSMariusz Zaborski }
217832dc76bSMariusz Zaborski }
218832dc76bSMariusz Zaborski ATF_REQUIRE(found);
219832dc76bSMariusz Zaborski }
220832dc76bSMariusz Zaborski
221832dc76bSMariusz Zaborski freeaddrinfo(capres);
222832dc76bSMariusz Zaborski freeaddrinfo(origres);
223832dc76bSMariusz Zaborski return (0);
224832dc76bSMariusz Zaborski }
225832dc76bSMariusz Zaborski
226832dc76bSMariusz Zaborski static int
test_gethostbyname(cap_channel_t * chan,int family,const char * domain)227832dc76bSMariusz Zaborski test_gethostbyname(cap_channel_t *chan, int family, const char *domain)
228832dc76bSMariusz Zaborski {
229832dc76bSMariusz Zaborski struct hostent *caphp, *orighp;
230832dc76bSMariusz Zaborski
231832dc76bSMariusz Zaborski caphp = cap_gethostbyname2(chan, domain, family);
2327ee4066dSMark Johnston if (caphp == NULL && h_errno == ENOTCAPABLE)
233832dc76bSMariusz Zaborski return (h_errno);
234832dc76bSMariusz Zaborski
235832dc76bSMariusz Zaborski orighp = gethostbyname2(domain, family);
2367ee4066dSMark Johnston if (orighp == NULL)
2377ee4066dSMark Johnston atf_tc_skip("gethostbyname2(%s) failed", domain);
238832dc76bSMariusz Zaborski
2397ee4066dSMark Johnston ATF_REQUIRE(caphp != NULL);
2407ee4066dSMark Johnston ATF_REQUIRE(strcmp(caphp->h_name, orighp->h_name) == 0);
241832dc76bSMariusz Zaborski return (0);
242832dc76bSMariusz Zaborski }
243832dc76bSMariusz Zaborski
244832dc76bSMariusz Zaborski static int
test_bind(cap_channel_t * chan,const char * ip)245832dc76bSMariusz Zaborski test_bind(cap_channel_t *chan, const char *ip)
246832dc76bSMariusz Zaborski {
247832dc76bSMariusz Zaborski struct sockaddr_in ipv4;
248832dc76bSMariusz Zaborski int capfd, ret, serrno;
249832dc76bSMariusz Zaborski
250832dc76bSMariusz Zaborski capfd = socket(AF_INET, SOCK_STREAM, 0);
251832dc76bSMariusz Zaborski ATF_REQUIRE(capfd > 0);
252832dc76bSMariusz Zaborski
253832dc76bSMariusz Zaborski memset(&ipv4, 0, sizeof(ipv4));
254832dc76bSMariusz Zaborski ipv4.sin_family = AF_INET;
255832dc76bSMariusz Zaborski inet_pton(AF_INET, ip, &ipv4.sin_addr);
256832dc76bSMariusz Zaborski
257832dc76bSMariusz Zaborski ret = cap_bind(chan, capfd, (struct sockaddr *)&ipv4, sizeof(ipv4));
258832dc76bSMariusz Zaborski serrno = errno;
259832dc76bSMariusz Zaborski close(capfd);
260832dc76bSMariusz Zaborski
261832dc76bSMariusz Zaborski return (ret < 0 ? serrno : 0);
262832dc76bSMariusz Zaborski }
263832dc76bSMariusz Zaborski
264832dc76bSMariusz Zaborski static int
test_connect(cap_channel_t * chan,const char * ip,unsigned short port)265832dc76bSMariusz Zaborski test_connect(cap_channel_t *chan, const char *ip, unsigned short port)
266832dc76bSMariusz Zaborski {
267832dc76bSMariusz Zaborski struct sockaddr_in ipv4;
268832dc76bSMariusz Zaborski int capfd, ret, serrno;
269832dc76bSMariusz Zaborski
270832dc76bSMariusz Zaborski capfd = socket(AF_INET, SOCK_STREAM, 0);
2717ee4066dSMark Johnston ATF_REQUIRE(capfd >= 0);
272832dc76bSMariusz Zaborski
273832dc76bSMariusz Zaborski memset(&ipv4, 0, sizeof(ipv4));
274832dc76bSMariusz Zaborski ipv4.sin_family = AF_INET;
275832dc76bSMariusz Zaborski ipv4.sin_port = htons(port);
276832dc76bSMariusz Zaborski inet_pton(AF_INET, ip, &ipv4.sin_addr);
277832dc76bSMariusz Zaborski
278832dc76bSMariusz Zaborski ret = cap_connect(chan, capfd, (struct sockaddr *)&ipv4, sizeof(ipv4));
279832dc76bSMariusz Zaborski serrno = errno;
2807ee4066dSMark Johnston ATF_REQUIRE(close(capfd) == 0);
2817ee4066dSMark Johnston
2827ee4066dSMark Johnston if (ret < 0 && serrno != ENOTCAPABLE) {
2837ee4066dSMark Johnston int sd;
2847ee4066dSMark Johnston
2857ee4066dSMark Johnston /*
2867ee4066dSMark Johnston * If the connection failed, it might be because we can't reach
2877ee4066dSMark Johnston * the destination host. To check, try a plain connect() and
2887ee4066dSMark Johnston * see if it fails with the same error.
2897ee4066dSMark Johnston */
2907ee4066dSMark Johnston sd = socket(AF_INET, SOCK_STREAM, 0);
2917ee4066dSMark Johnston ATF_REQUIRE(sd >= 0);
2927ee4066dSMark Johnston
2937ee4066dSMark Johnston memset(&ipv4, 0, sizeof(ipv4));
2947ee4066dSMark Johnston ipv4.sin_family = AF_INET;
2957ee4066dSMark Johnston ipv4.sin_port = htons(port);
2967ee4066dSMark Johnston inet_pton(AF_INET, ip, &ipv4.sin_addr);
2977ee4066dSMark Johnston ret = connect(sd, (struct sockaddr *)&ipv4, sizeof(ipv4));
2987ee4066dSMark Johnston ATF_REQUIRE(ret < 0);
2997ee4066dSMark Johnston ATF_REQUIRE_MSG(errno == serrno, "errno %d != serrno %d",
3007ee4066dSMark Johnston errno, serrno);
3017ee4066dSMark Johnston ATF_REQUIRE(close(sd) == 0);
3027ee4066dSMark Johnston atf_tc_skip("connect(%s:%d) failed: %s",
3037ee4066dSMark Johnston ip, port, strerror(serrno));
3047ee4066dSMark Johnston }
305832dc76bSMariusz Zaborski
306832dc76bSMariusz Zaborski return (ret < 0 ? serrno : 0);
307832dc76bSMariusz Zaborski }
308832dc76bSMariusz Zaborski
309832dc76bSMariusz Zaborski static void
test_extend_mode(cap_channel_t * capnet,int current)310832dc76bSMariusz Zaborski test_extend_mode(cap_channel_t *capnet, int current)
311832dc76bSMariusz Zaborski {
312832dc76bSMariusz Zaborski cap_net_limit_t *limit;
313832dc76bSMariusz Zaborski const int rights[] = {
314832dc76bSMariusz Zaborski CAPNET_ADDR2NAME,
315832dc76bSMariusz Zaborski CAPNET_NAME2ADDR,
316832dc76bSMariusz Zaborski CAPNET_DEPRECATED_ADDR2NAME,
317832dc76bSMariusz Zaborski CAPNET_DEPRECATED_NAME2ADDR,
318832dc76bSMariusz Zaborski CAPNET_CONNECT,
319832dc76bSMariusz Zaborski CAPNET_BIND,
320832dc76bSMariusz Zaborski CAPNET_CONNECTDNS
321832dc76bSMariusz Zaborski };
322832dc76bSMariusz Zaborski size_t i;
323832dc76bSMariusz Zaborski
324832dc76bSMariusz Zaborski for (i = 0; i < nitems(rights); i++) {
325832dc76bSMariusz Zaborski if (current == rights[i])
326832dc76bSMariusz Zaborski continue;
327832dc76bSMariusz Zaborski
328832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, current | rights[i]);
329832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
330832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
331832dc76bSMariusz Zaborski }
332832dc76bSMariusz Zaborski }
333832dc76bSMariusz Zaborski
334*df88c711SSiva Mahadevan ATF_TC(capnet__getnameinfo);
ATF_TC_HEAD(capnet__getnameinfo,tc)335*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__getnameinfo, tc)
336*df88c711SSiva Mahadevan {
337*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
338*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__getnameinfo,tc)339b7876aecSMariusz Zaborski ATF_TC_BODY(capnet__getnameinfo, tc)
340b7876aecSMariusz Zaborski {
341b7876aecSMariusz Zaborski cap_channel_t *capnet;
342b7876aecSMariusz Zaborski
343b7876aecSMariusz Zaborski capnet = create_network_service();
344b7876aecSMariusz Zaborski
345b7876aecSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) == 0);
346b7876aecSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET6, TEST_IPV6) == 0);
347b7876aecSMariusz Zaborski
348b7876aecSMariusz Zaborski cap_close(capnet);
349b7876aecSMariusz Zaborski }
350b7876aecSMariusz Zaborski
351*df88c711SSiva Mahadevan ATF_TC(capnet__connect);
ATF_TC_HEAD(capnet__connect,tc)352*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__connect, tc)
353*df88c711SSiva Mahadevan {
354*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
355*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__connect,tc)356b7876aecSMariusz Zaborski ATF_TC_BODY(capnet__connect, tc)
357b7876aecSMariusz Zaborski {
358b7876aecSMariusz Zaborski cap_channel_t *capnet;
359b7876aecSMariusz Zaborski
360b7876aecSMariusz Zaborski capnet = create_network_service();
361b7876aecSMariusz Zaborski
362b7876aecSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, TEST_IPV4, 80) == 0);
363b7876aecSMariusz Zaborski
364b7876aecSMariusz Zaborski cap_close(capnet);
365b7876aecSMariusz Zaborski }
366b7876aecSMariusz Zaborski
367*df88c711SSiva Mahadevan ATF_TC(capnet__bind);
ATF_TC_HEAD(capnet__bind,tc)368*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__bind, tc)
369*df88c711SSiva Mahadevan {
370*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
371*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__bind,tc)372b7876aecSMariusz Zaborski ATF_TC_BODY(capnet__bind, tc)
373b7876aecSMariusz Zaborski {
374b7876aecSMariusz Zaborski cap_channel_t *capnet;
375b7876aecSMariusz Zaborski
376b7876aecSMariusz Zaborski capnet = create_network_service();
377b7876aecSMariusz Zaborski
378b7876aecSMariusz Zaborski ATF_REQUIRE(test_bind(capnet, TEST_BIND_IPV4) == 0);
379b7876aecSMariusz Zaborski
380b7876aecSMariusz Zaborski cap_close(capnet);
381b7876aecSMariusz Zaborski }
382b7876aecSMariusz Zaborski
383*df88c711SSiva Mahadevan ATF_TC(capnet__getaddrinfo);
ATF_TC_HEAD(capnet__getaddrinfo,tc)384*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__getaddrinfo, tc)
385*df88c711SSiva Mahadevan {
386*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
387*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__getaddrinfo,tc)388b7876aecSMariusz Zaborski ATF_TC_BODY(capnet__getaddrinfo, tc)
389b7876aecSMariusz Zaborski {
390b7876aecSMariusz Zaborski cap_channel_t *capnet;
391b7876aecSMariusz Zaborski struct addrinfo hints, *capres;
392b7876aecSMariusz Zaborski
393b7876aecSMariusz Zaborski capnet = create_network_service();
394b7876aecSMariusz Zaborski
395b7876aecSMariusz Zaborski memset(&hints, 0, sizeof(hints));
396b7876aecSMariusz Zaborski hints.ai_family = AF_INET;
397b7876aecSMariusz Zaborski hints.ai_socktype = SOCK_STREAM;
398b7876aecSMariusz Zaborski
399b7876aecSMariusz Zaborski ATF_REQUIRE(cap_getaddrinfo(capnet, TEST_IPV4, "80", &hints, &capres) ==
400b7876aecSMariusz Zaborski 0);
401b7876aecSMariusz Zaborski
402b7876aecSMariusz Zaborski cap_close(capnet);
403b7876aecSMariusz Zaborski }
404b7876aecSMariusz Zaborski
405*df88c711SSiva Mahadevan ATF_TC(capnet__gethostbyname);
ATF_TC_HEAD(capnet__gethostbyname,tc)406*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__gethostbyname, tc)
407*df88c711SSiva Mahadevan {
408*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
409*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__gethostbyname,tc)410b7876aecSMariusz Zaborski ATF_TC_BODY(capnet__gethostbyname, tc)
411b7876aecSMariusz Zaborski {
412b7876aecSMariusz Zaborski cap_channel_t *capnet;
413b7876aecSMariusz Zaborski
414b7876aecSMariusz Zaborski capnet = create_network_service();
415b7876aecSMariusz Zaborski
416b7876aecSMariusz Zaborski ATF_REQUIRE(test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) == 0);
417b7876aecSMariusz Zaborski
418b7876aecSMariusz Zaborski cap_close(capnet);
419b7876aecSMariusz Zaborski }
420b7876aecSMariusz Zaborski
421*df88c711SSiva Mahadevan ATF_TC(capnet__gethostbyaddr);
ATF_TC_HEAD(capnet__gethostbyaddr,tc)422*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__gethostbyaddr, tc)
423*df88c711SSiva Mahadevan {
424*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
425*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__gethostbyaddr,tc)426b7876aecSMariusz Zaborski ATF_TC_BODY(capnet__gethostbyaddr, tc)
427b7876aecSMariusz Zaborski {
428b7876aecSMariusz Zaborski cap_channel_t *capnet;
429b7876aecSMariusz Zaborski
430b7876aecSMariusz Zaborski capnet = create_network_service();
431b7876aecSMariusz Zaborski
432b7876aecSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) == 0);
433b7876aecSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET6, TEST_IPV6) == 0);
434b7876aecSMariusz Zaborski
435b7876aecSMariusz Zaborski cap_close(capnet);
436b7876aecSMariusz Zaborski }
437b7876aecSMariusz Zaborski
438*df88c711SSiva Mahadevan ATF_TC(capnet__getnameinfo_buffer);
ATF_TC_HEAD(capnet__getnameinfo_buffer,tc)439*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__getnameinfo_buffer, tc)
440*df88c711SSiva Mahadevan {
441*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
442*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__getnameinfo_buffer,tc)443179bffddSEric van Gyzen ATF_TC_BODY(capnet__getnameinfo_buffer, tc)
444179bffddSEric van Gyzen {
445179bffddSEric van Gyzen cap_channel_t *chan;
446179bffddSEric van Gyzen struct sockaddr_in sin;
447179bffddSEric van Gyzen int ret;
448179bffddSEric van Gyzen struct {
449179bffddSEric van Gyzen char host[sizeof(TEST_IPV4)];
450179bffddSEric van Gyzen char host_canary;
451179bffddSEric van Gyzen char serv[sizeof(TEST_PORT_STR)];
452179bffddSEric van Gyzen char serv_canary;
453179bffddSEric van Gyzen } buffers;
454179bffddSEric van Gyzen
455179bffddSEric van Gyzen memset(&sin, 0, sizeof(sin));
456179bffddSEric van Gyzen sin.sin_family = AF_INET;
457179bffddSEric van Gyzen sin.sin_port = htons(TEST_PORT);
458179bffddSEric van Gyzen ret = inet_pton(AF_INET, TEST_IPV4, &sin.sin_addr);
459179bffddSEric van Gyzen ATF_REQUIRE_EQ(1, ret);
460179bffddSEric van Gyzen
461179bffddSEric van Gyzen memset(&buffers, '!', sizeof(buffers));
462179bffddSEric van Gyzen
463179bffddSEric van Gyzen chan = create_network_service();
464179bffddSEric van Gyzen ret = cap_getnameinfo(chan, (struct sockaddr *)&sin, sizeof(sin),
465179bffddSEric van Gyzen buffers.host, sizeof(buffers.host),
466179bffddSEric van Gyzen buffers.serv, sizeof(buffers.serv),
467179bffddSEric van Gyzen NI_NUMERICHOST | NI_NUMERICSERV);
468179bffddSEric van Gyzen ATF_REQUIRE_EQ_MSG(0, ret, "%d", ret);
469179bffddSEric van Gyzen
470179bffddSEric van Gyzen // Verify that cap_getnameinfo worked with minimally sized buffers.
471179bffddSEric van Gyzen ATF_CHECK_EQ(0, strcmp(TEST_IPV4, buffers.host));
472179bffddSEric van Gyzen ATF_CHECK_EQ(0, strcmp(TEST_PORT_STR, buffers.serv));
473179bffddSEric van Gyzen
474179bffddSEric van Gyzen // Verify that cap_getnameinfo did not overflow the buffers.
475179bffddSEric van Gyzen ATF_CHECK_EQ('!', buffers.host_canary);
476179bffddSEric van Gyzen ATF_CHECK_EQ('!', buffers.serv_canary);
477179bffddSEric van Gyzen
478179bffddSEric van Gyzen cap_close(chan);
479179bffddSEric van Gyzen }
480179bffddSEric van Gyzen
481*df88c711SSiva Mahadevan ATF_TC(capnet__limits_addr2name_mode);
ATF_TC_HEAD(capnet__limits_addr2name_mode,tc)482*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_addr2name_mode, tc)
483*df88c711SSiva Mahadevan {
484*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
485*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_addr2name_mode,tc)486832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_addr2name_mode, tc)
487832dc76bSMariusz Zaborski {
488832dc76bSMariusz Zaborski cap_channel_t *capnet;
489832dc76bSMariusz Zaborski cap_net_limit_t *limit;
490832dc76bSMariusz Zaborski
491832dc76bSMariusz Zaborski capnet = create_network_service();
492832dc76bSMariusz Zaborski
493832dc76bSMariusz Zaborski /* LIMIT */
494832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_ADDR2NAME);
495832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
496832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
497832dc76bSMariusz Zaborski
498832dc76bSMariusz Zaborski /* ALLOWED */
499832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) == 0);
500832dc76bSMariusz Zaborski
501832dc76bSMariusz Zaborski /* DISALLOWED */
502832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) ==
503832dc76bSMariusz Zaborski ENOTCAPABLE);
504832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) ==
505832dc76bSMariusz Zaborski ENOTCAPABLE);
506832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
507832dc76bSMariusz Zaborski ENOTCAPABLE);
508832dc76bSMariusz Zaborski ATF_REQUIRE(test_bind(capnet, TEST_BIND_IPV4) == ENOTCAPABLE);
509832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, TEST_IPV4, 80) == ENOTCAPABLE);
510832dc76bSMariusz Zaborski
511832dc76bSMariusz Zaborski test_extend_mode(capnet, CAPNET_ADDR2NAME);
512832dc76bSMariusz Zaborski
513832dc76bSMariusz Zaborski cap_close(capnet);
514832dc76bSMariusz Zaborski }
515832dc76bSMariusz Zaborski
516*df88c711SSiva Mahadevan ATF_TC(capnet__limits_addr2name_family);
ATF_TC_HEAD(capnet__limits_addr2name_family,tc)517*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_addr2name_family, tc)
518*df88c711SSiva Mahadevan {
519*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
520*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_addr2name_family,tc)521832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_addr2name_family, tc)
522832dc76bSMariusz Zaborski {
523832dc76bSMariusz Zaborski cap_channel_t *capnet;
524832dc76bSMariusz Zaborski cap_net_limit_t *limit;
525832dc76bSMariusz Zaborski int family[] = { AF_INET6, AF_INET };
526832dc76bSMariusz Zaborski
527832dc76bSMariusz Zaborski capnet = create_network_service();
528832dc76bSMariusz Zaborski
529832dc76bSMariusz Zaborski /* Limit to AF_INET6 and AF_INET. */
530832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_ADDR2NAME);
531832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
532832dc76bSMariusz Zaborski cap_net_limit_addr2name_family(limit, family, nitems(family));
533832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
534832dc76bSMariusz Zaborski
535832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) == 0);
536832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET6, TEST_IPV6) == 0);
537832dc76bSMariusz Zaborski
538832dc76bSMariusz Zaborski /* Limit to AF_INET6 and AF_INET. */
539832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_ADDR2NAME);
540832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
541832dc76bSMariusz Zaborski cap_net_limit_addr2name_family(limit, &family[0], 1);
542832dc76bSMariusz Zaborski cap_net_limit_addr2name_family(limit, &family[1], 1);
543832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
544832dc76bSMariusz Zaborski
545832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) == 0);
546832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET6, TEST_IPV6) == 0);
547832dc76bSMariusz Zaborski
548832dc76bSMariusz Zaborski /* Limit to AF_INET6. */
549832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_ADDR2NAME);
550832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
551832dc76bSMariusz Zaborski cap_net_limit_addr2name_family(limit, family, 1);
552832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
553832dc76bSMariusz Zaborski
554832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) ==
555832dc76bSMariusz Zaborski ENOTCAPABLE);
556832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET6, TEST_IPV6) == 0);
557832dc76bSMariusz Zaborski
558832dc76bSMariusz Zaborski /* Unable to set empty limits. Empty limits means full access. */
559832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_ADDR2NAME);
560832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
561832dc76bSMariusz Zaborski
562832dc76bSMariusz Zaborski cap_close(capnet);
563832dc76bSMariusz Zaborski }
564832dc76bSMariusz Zaborski
565*df88c711SSiva Mahadevan ATF_TC(capnet__limits_addr2name);
ATF_TC_HEAD(capnet__limits_addr2name,tc)566*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_addr2name, tc)
567*df88c711SSiva Mahadevan {
568*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
569*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_addr2name,tc)570832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_addr2name, tc)
571832dc76bSMariusz Zaborski {
572832dc76bSMariusz Zaborski cap_channel_t *capnet;
573832dc76bSMariusz Zaborski cap_net_limit_t *limit;
574832dc76bSMariusz Zaborski struct sockaddr_in ipaddrv4;
575832dc76bSMariusz Zaborski struct sockaddr_in6 ipaddrv6;
576832dc76bSMariusz Zaborski
577832dc76bSMariusz Zaborski capnet = create_network_service();
578832dc76bSMariusz Zaborski
579832dc76bSMariusz Zaborski /* Limit to TEST_IPV4 and TEST_IPV6. */
580832dc76bSMariusz Zaborski memset(&ipaddrv4, 0, sizeof(ipaddrv4));
581832dc76bSMariusz Zaborski memset(&ipaddrv6, 0, sizeof(ipaddrv6));
582832dc76bSMariusz Zaborski
583832dc76bSMariusz Zaborski ipaddrv4.sin_family = AF_INET;
584832dc76bSMariusz Zaborski inet_pton(AF_INET, TEST_IPV4, &ipaddrv4.sin_addr);
585832dc76bSMariusz Zaborski
586832dc76bSMariusz Zaborski ipaddrv6.sin6_family = AF_INET6;
587832dc76bSMariusz Zaborski inet_pton(AF_INET6, TEST_IPV6, &ipaddrv6.sin6_addr);
588832dc76bSMariusz Zaborski
589832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_ADDR2NAME);
590832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
591832dc76bSMariusz Zaborski
592832dc76bSMariusz Zaborski cap_net_limit_addr2name(limit, (struct sockaddr *)&ipaddrv4,
593832dc76bSMariusz Zaborski sizeof(ipaddrv4));
594832dc76bSMariusz Zaborski cap_net_limit_addr2name(limit, (struct sockaddr *)&ipaddrv6,
595832dc76bSMariusz Zaborski sizeof(ipaddrv6));
596832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
597832dc76bSMariusz Zaborski
598832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) == 0);
599832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET6, TEST_IPV6) == 0);
600832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, "127.0.0.1") ==
601832dc76bSMariusz Zaborski ENOTCAPABLE);
602832dc76bSMariusz Zaborski
603832dc76bSMariusz Zaborski /* Limit to AF_INET. */
604832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_ADDR2NAME);
605832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
606832dc76bSMariusz Zaborski cap_net_limit_addr2name(limit, (struct sockaddr *)&ipaddrv4,
607832dc76bSMariusz Zaborski sizeof(ipaddrv4));
608832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
609832dc76bSMariusz Zaborski
610832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) == 0);
611832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET6, TEST_IPV6) ==
612832dc76bSMariusz Zaborski ENOTCAPABLE);
613832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, "127.0.0.1") ==
614832dc76bSMariusz Zaborski ENOTCAPABLE);
615832dc76bSMariusz Zaborski
616832dc76bSMariusz Zaborski /* Unable to set empty limits. Empty limits means full access. */
617832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_ADDR2NAME);
618832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
619832dc76bSMariusz Zaborski
620832dc76bSMariusz Zaborski cap_close(capnet);
621832dc76bSMariusz Zaborski }
622832dc76bSMariusz Zaborski
623*df88c711SSiva Mahadevan ATF_TC(capnet__limits_deprecated_addr2name_mode);
ATF_TC_HEAD(capnet__limits_deprecated_addr2name_mode,tc)624*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_deprecated_addr2name_mode, tc)
625*df88c711SSiva Mahadevan {
626*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
627*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_deprecated_addr2name_mode,tc)628832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_deprecated_addr2name_mode, tc)
629832dc76bSMariusz Zaborski {
630832dc76bSMariusz Zaborski cap_channel_t *capnet;
631832dc76bSMariusz Zaborski cap_net_limit_t *limit;
632832dc76bSMariusz Zaborski
633832dc76bSMariusz Zaborski capnet = create_network_service();
634832dc76bSMariusz Zaborski
635832dc76bSMariusz Zaborski /* LIMIT */
636832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_ADDR2NAME);
637832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
638832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
639832dc76bSMariusz Zaborski
640832dc76bSMariusz Zaborski /* ALLOWED */
641832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) == 0);
642832dc76bSMariusz Zaborski
643832dc76bSMariusz Zaborski /* DISALLOWED */
644832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) ==
645832dc76bSMariusz Zaborski ENOTCAPABLE);
646832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) ==
647832dc76bSMariusz Zaborski ENOTCAPABLE);
648832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
649832dc76bSMariusz Zaborski ENOTCAPABLE);
650832dc76bSMariusz Zaborski ATF_REQUIRE(test_bind(capnet, TEST_BIND_IPV4) == ENOTCAPABLE);
651832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, TEST_IPV4, 80) == ENOTCAPABLE);
652832dc76bSMariusz Zaborski
653832dc76bSMariusz Zaborski cap_close(capnet);
654832dc76bSMariusz Zaborski }
655832dc76bSMariusz Zaborski
656*df88c711SSiva Mahadevan ATF_TC(capnet__limits_deprecated_addr2name_family);
ATF_TC_HEAD(capnet__limits_deprecated_addr2name_family,tc)657*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_deprecated_addr2name_family, tc)
658*df88c711SSiva Mahadevan {
659*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
660*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_deprecated_addr2name_family,tc)661832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_deprecated_addr2name_family, tc)
662832dc76bSMariusz Zaborski {
663832dc76bSMariusz Zaborski cap_channel_t *capnet;
664832dc76bSMariusz Zaborski cap_net_limit_t *limit;
665832dc76bSMariusz Zaborski int family[] = { AF_INET6, AF_INET };
666832dc76bSMariusz Zaborski
667832dc76bSMariusz Zaborski capnet = create_network_service();
668832dc76bSMariusz Zaborski
669832dc76bSMariusz Zaborski /* Limit to AF_INET6 and AF_INET. */
670832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_ADDR2NAME);
671832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
672832dc76bSMariusz Zaborski cap_net_limit_addr2name_family(limit, family, nitems(family));
673832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
674832dc76bSMariusz Zaborski
675832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) == 0);
676832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET6, TEST_IPV6) == 0);
677832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, PF_LINK, TEST_IPV4) ==
678832dc76bSMariusz Zaborski ENOTCAPABLE);
679832dc76bSMariusz Zaborski
680832dc76bSMariusz Zaborski /* Limit to AF_INET6 and AF_INET. */
681832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_ADDR2NAME);
682832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
683832dc76bSMariusz Zaborski cap_net_limit_addr2name_family(limit, &family[0], 1);
684832dc76bSMariusz Zaborski cap_net_limit_addr2name_family(limit, &family[1], 1);
685832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
686832dc76bSMariusz Zaborski
687832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) == 0);
688832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET6, TEST_IPV6) == 0);
689832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, PF_LINK, TEST_IPV4) ==
690832dc76bSMariusz Zaborski ENOTCAPABLE);
691832dc76bSMariusz Zaborski
692832dc76bSMariusz Zaborski /* Limit to AF_INET6. */
693832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_ADDR2NAME);
694832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
695832dc76bSMariusz Zaborski cap_net_limit_addr2name_family(limit, family, 1);
696832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
697832dc76bSMariusz Zaborski
698832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) ==
699832dc76bSMariusz Zaborski ENOTCAPABLE);
700832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET6, TEST_IPV6) == 0);
701832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, PF_LINK, TEST_IPV4) ==
702832dc76bSMariusz Zaborski ENOTCAPABLE);
703832dc76bSMariusz Zaborski
704832dc76bSMariusz Zaborski /* Unable to set empty limits. Empty limits means full access. */
705832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_ADDR2NAME);
706832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
707832dc76bSMariusz Zaborski
708832dc76bSMariusz Zaborski cap_close(capnet);
709832dc76bSMariusz Zaborski }
710832dc76bSMariusz Zaborski
711*df88c711SSiva Mahadevan ATF_TC(capnet__limits_deprecated_addr2name);
ATF_TC_HEAD(capnet__limits_deprecated_addr2name,tc)712*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_deprecated_addr2name, tc)
713*df88c711SSiva Mahadevan {
714*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
715*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_deprecated_addr2name,tc)716832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_deprecated_addr2name, tc)
717832dc76bSMariusz Zaborski {
718832dc76bSMariusz Zaborski cap_channel_t *capnet;
719832dc76bSMariusz Zaborski cap_net_limit_t *limit;
720832dc76bSMariusz Zaborski struct in_addr ipaddrv4;
721832dc76bSMariusz Zaborski struct in6_addr ipaddrv6;
722832dc76bSMariusz Zaborski
723832dc76bSMariusz Zaborski capnet = create_network_service();
724832dc76bSMariusz Zaborski
725832dc76bSMariusz Zaborski /* Limit to TEST_IPV4 and TEST_IPV6. */
726832dc76bSMariusz Zaborski memset(&ipaddrv4, 0, sizeof(ipaddrv4));
727832dc76bSMariusz Zaborski memset(&ipaddrv6, 0, sizeof(ipaddrv6));
728832dc76bSMariusz Zaborski
729832dc76bSMariusz Zaborski inet_pton(AF_INET, TEST_IPV4, &ipaddrv4);
730832dc76bSMariusz Zaborski inet_pton(AF_INET6, TEST_IPV6, &ipaddrv6);
731832dc76bSMariusz Zaborski
732832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_ADDR2NAME);
733832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
734832dc76bSMariusz Zaborski
735832dc76bSMariusz Zaborski cap_net_limit_addr2name(limit, (struct sockaddr *)&ipaddrv4,
736832dc76bSMariusz Zaborski sizeof(ipaddrv4));
737832dc76bSMariusz Zaborski cap_net_limit_addr2name(limit, (struct sockaddr *)&ipaddrv6,
738832dc76bSMariusz Zaborski sizeof(ipaddrv6));
739832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
740832dc76bSMariusz Zaborski
741832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) == 0);
742832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET6, TEST_IPV6) == 0);
743832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, "127.0.0.1") ==
744832dc76bSMariusz Zaborski ENOTCAPABLE);
745832dc76bSMariusz Zaborski
746832dc76bSMariusz Zaborski /* Limit to AF_INET. */
747832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_ADDR2NAME);
748832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
749832dc76bSMariusz Zaborski cap_net_limit_addr2name(limit, (struct sockaddr *)&ipaddrv4,
750832dc76bSMariusz Zaborski sizeof(ipaddrv4));
751832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
752832dc76bSMariusz Zaborski
753832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) == 0);
754832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET6, TEST_IPV6) ==
755832dc76bSMariusz Zaborski ENOTCAPABLE);
756832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, "127.0.0.1") ==
757832dc76bSMariusz Zaborski ENOTCAPABLE);
758832dc76bSMariusz Zaborski
759832dc76bSMariusz Zaborski /* Unable to set empty limits. Empty limits means full access. */
760832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_ADDR2NAME);
761832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
762832dc76bSMariusz Zaborski
763832dc76bSMariusz Zaborski cap_close(capnet);
764832dc76bSMariusz Zaborski }
765832dc76bSMariusz Zaborski
766832dc76bSMariusz Zaborski
767*df88c711SSiva Mahadevan ATF_TC(capnet__limits_name2addr_mode);
ATF_TC_HEAD(capnet__limits_name2addr_mode,tc)768*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_name2addr_mode, tc)
769*df88c711SSiva Mahadevan {
770*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
771*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_name2addr_mode,tc)772832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_name2addr_mode, tc)
773832dc76bSMariusz Zaborski {
774832dc76bSMariusz Zaborski cap_channel_t *capnet;
775832dc76bSMariusz Zaborski cap_net_limit_t *limit;
776832dc76bSMariusz Zaborski
777832dc76bSMariusz Zaborski capnet = create_network_service();
778832dc76bSMariusz Zaborski
779832dc76bSMariusz Zaborski /* LIMIT */
780832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
781832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
782832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
783832dc76bSMariusz Zaborski
784832dc76bSMariusz Zaborski /* ALLOWED */
785832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
786832dc76bSMariusz Zaborski 0);
787832dc76bSMariusz Zaborski
788832dc76bSMariusz Zaborski /* DISALLOWED */
789832dc76bSMariusz Zaborski ATF_REQUIRE(
790832dc76bSMariusz Zaborski test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) == ENOTCAPABLE);
791832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) ==
792832dc76bSMariusz Zaborski ENOTCAPABLE);
793832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) ==
794832dc76bSMariusz Zaborski ENOTCAPABLE);
795832dc76bSMariusz Zaborski ATF_REQUIRE(test_bind(capnet, TEST_BIND_IPV4) == ENOTCAPABLE);
796832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, TEST_IPV4, 80) == ENOTCAPABLE);
797832dc76bSMariusz Zaborski
798832dc76bSMariusz Zaborski test_extend_mode(capnet, CAPNET_ADDR2NAME);
799832dc76bSMariusz Zaborski
800832dc76bSMariusz Zaborski cap_close(capnet);
801832dc76bSMariusz Zaborski }
802832dc76bSMariusz Zaborski
803*df88c711SSiva Mahadevan ATF_TC(capnet__limits_name2addr_hosts);
ATF_TC_HEAD(capnet__limits_name2addr_hosts,tc)804*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_name2addr_hosts, tc)
805*df88c711SSiva Mahadevan {
806*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
807*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_name2addr_hosts,tc)808832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_name2addr_hosts, tc)
809832dc76bSMariusz Zaborski {
810832dc76bSMariusz Zaborski cap_channel_t *capnet;
811832dc76bSMariusz Zaborski cap_net_limit_t *limit;
812832dc76bSMariusz Zaborski
813832dc76bSMariusz Zaborski capnet = create_network_service();
814832dc76bSMariusz Zaborski
815832dc76bSMariusz Zaborski /* Limit to TEST_DOMAIN_0 and localhost only. */
816832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
817832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
818832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, NULL);
819832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, "localhost", NULL);
820832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
821832dc76bSMariusz Zaborski
822832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
823832dc76bSMariusz Zaborski 0);
824832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, "localhost", NULL) == 0);
825832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_1, NULL) ==
826832dc76bSMariusz Zaborski ENOTCAPABLE);
827832dc76bSMariusz Zaborski
828832dc76bSMariusz Zaborski /* Limit to TEST_DOMAIN_0 only. */
829832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
830832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
831832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, NULL);
832832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
833832dc76bSMariusz Zaborski
834832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, "localhost", NULL) ==
835832dc76bSMariusz Zaborski ENOTCAPABLE);
836832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_1, NULL) ==
837832dc76bSMariusz Zaborski ENOTCAPABLE);
838832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
839832dc76bSMariusz Zaborski 0);
840832dc76bSMariusz Zaborski
841832dc76bSMariusz Zaborski /* Unable to set empty limits. Empty limits means full access. */
842832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
843832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
844832dc76bSMariusz Zaborski
845afd74c40SMariusz Zaborski /* Try to extend the limit. */
846afd74c40SMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
847afd74c40SMariusz Zaborski ATF_REQUIRE(limit != NULL);
848afd74c40SMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_1, NULL);
849afd74c40SMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
850afd74c40SMariusz Zaborski
851afd74c40SMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
852afd74c40SMariusz Zaborski ATF_REQUIRE(limit != NULL);
853afd74c40SMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, NULL);
854afd74c40SMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_1, NULL);
855afd74c40SMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
856afd74c40SMariusz Zaborski
857832dc76bSMariusz Zaborski cap_close(capnet);
858832dc76bSMariusz Zaborski }
859832dc76bSMariusz Zaborski
860*df88c711SSiva Mahadevan ATF_TC(capnet__limits_name2addr_hosts_servnames_strict);
ATF_TC_HEAD(capnet__limits_name2addr_hosts_servnames_strict,tc)861*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_name2addr_hosts_servnames_strict, tc)
862*df88c711SSiva Mahadevan {
863*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
864*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_name2addr_hosts_servnames_strict,tc)865832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_name2addr_hosts_servnames_strict, tc)
866832dc76bSMariusz Zaborski {
867832dc76bSMariusz Zaborski cap_channel_t *capnet;
868832dc76bSMariusz Zaborski cap_net_limit_t *limit;
869832dc76bSMariusz Zaborski
870832dc76bSMariusz Zaborski capnet = create_network_service();
871832dc76bSMariusz Zaborski
872832dc76bSMariusz Zaborski /*
873832dc76bSMariusz Zaborski * Limit to TEST_DOMAIN_0 and HTTP service.
874832dc76bSMariusz Zaborski */
875832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
876832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
877832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, "http");
878832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
879832dc76bSMariusz Zaborski
880832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, "http") ==
881832dc76bSMariusz Zaborski 0);
882832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
883832dc76bSMariusz Zaborski ENOTCAPABLE);
884832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, "snmp") ==
885832dc76bSMariusz Zaborski ENOTCAPABLE);
886832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_1, "http") ==
887832dc76bSMariusz Zaborski ENOTCAPABLE);
888832dc76bSMariusz Zaborski
889832dc76bSMariusz Zaborski /* Unable to set empty limits. Empty limits means full access. */
890832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
891832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
892832dc76bSMariusz Zaborski
893832dc76bSMariusz Zaborski cap_close(capnet);
894832dc76bSMariusz Zaborski }
895832dc76bSMariusz Zaborski
896*df88c711SSiva Mahadevan ATF_TC(capnet__limits_name2addr_hosts_servnames_mix);
ATF_TC_HEAD(capnet__limits_name2addr_hosts_servnames_mix,tc)897*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_name2addr_hosts_servnames_mix, tc)
898*df88c711SSiva Mahadevan {
899*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
900*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_name2addr_hosts_servnames_mix,tc)901832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_name2addr_hosts_servnames_mix, tc)
902832dc76bSMariusz Zaborski {
903832dc76bSMariusz Zaborski cap_channel_t *capnet;
904832dc76bSMariusz Zaborski cap_net_limit_t *limit;
905832dc76bSMariusz Zaborski
906832dc76bSMariusz Zaborski capnet = create_network_service();
907832dc76bSMariusz Zaborski
908832dc76bSMariusz Zaborski /*
909832dc76bSMariusz Zaborski * Limit to TEST_DOMAIN_0 and any servnamex, and any domain with
910832dc76bSMariusz Zaborski * servname HTTP.
911832dc76bSMariusz Zaborski */
912832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
913832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
914832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, NULL);
915832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, NULL, "http");
916832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
917832dc76bSMariusz Zaborski
918832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, "http") ==
919832dc76bSMariusz Zaborski 0);
920832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
921832dc76bSMariusz Zaborski 0);
922832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_1, "http") ==
923832dc76bSMariusz Zaborski 0);
924832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
925832dc76bSMariusz Zaborski 0);
926832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_1, "snmp") ==
927832dc76bSMariusz Zaborski ENOTCAPABLE);
928832dc76bSMariusz Zaborski
929b9bb04c1SJose Luis Duran /* Limit to HTTP servname only. */
930832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
931832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
932832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, NULL, "http");
933832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
934832dc76bSMariusz Zaborski
935832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, "http") ==
936832dc76bSMariusz Zaborski 0);
937832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
938832dc76bSMariusz Zaborski ENOTCAPABLE);
939832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_1, "http") ==
940832dc76bSMariusz Zaborski 0);
941832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
942832dc76bSMariusz Zaborski ENOTCAPABLE);
943832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_1, "snmp") ==
944832dc76bSMariusz Zaborski ENOTCAPABLE);
945832dc76bSMariusz Zaborski
946832dc76bSMariusz Zaborski /* Unable to set empty limits. Empty limits means full access. */
947832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
948832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
949832dc76bSMariusz Zaborski
950832dc76bSMariusz Zaborski cap_close(capnet);
951832dc76bSMariusz Zaborski }
952832dc76bSMariusz Zaborski
953*df88c711SSiva Mahadevan ATF_TC(capnet__limits_name2addr_family);
ATF_TC_HEAD(capnet__limits_name2addr_family,tc)954*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_name2addr_family, tc)
955*df88c711SSiva Mahadevan {
956*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
957*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_name2addr_family,tc)958832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_name2addr_family, tc)
959832dc76bSMariusz Zaborski {
960832dc76bSMariusz Zaborski cap_channel_t *capnet;
961832dc76bSMariusz Zaborski cap_net_limit_t *limit;
962832dc76bSMariusz Zaborski int family[] = { AF_INET6, AF_INET };
963832dc76bSMariusz Zaborski
964832dc76bSMariusz Zaborski capnet = create_network_service();
965832dc76bSMariusz Zaborski
966832dc76bSMariusz Zaborski /* Limit to AF_INET and AF_INET6. */
967832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
968832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
969832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, NULL);
970832dc76bSMariusz Zaborski cap_net_limit_name2addr_family(limit, family, nitems(family));
971832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
972832dc76bSMariusz Zaborski
973832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
974832dc76bSMariusz Zaborski 0);
975832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET6, TEST_DOMAIN_0, NULL) ==
976832dc76bSMariusz Zaborski 0);
977832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, PF_LINK, TEST_DOMAIN_0, NULL) ==
978832dc76bSMariusz Zaborski ENOTCAPABLE);
979832dc76bSMariusz Zaborski
980832dc76bSMariusz Zaborski /* Limit to AF_INET and AF_INET6. */
981832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
982832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
983832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, NULL);
984832dc76bSMariusz Zaborski cap_net_limit_name2addr_family(limit, &family[0], 1);
985832dc76bSMariusz Zaborski cap_net_limit_name2addr_family(limit, &family[1], 1);
986832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
987832dc76bSMariusz Zaborski
988832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
989832dc76bSMariusz Zaborski 0);
990832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET6, TEST_DOMAIN_0, NULL) ==
991832dc76bSMariusz Zaborski 0);
992832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, PF_LINK, TEST_DOMAIN_0, NULL) ==
993832dc76bSMariusz Zaborski ENOTCAPABLE);
994832dc76bSMariusz Zaborski
995832dc76bSMariusz Zaborski /* Limit to AF_INET6 only. */
996832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
997832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
998832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, NULL);
999832dc76bSMariusz Zaborski cap_net_limit_name2addr_family(limit, family, 1);
1000832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1001832dc76bSMariusz Zaborski
1002832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
1003832dc76bSMariusz Zaborski ENOTCAPABLE);
1004832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET6, TEST_DOMAIN_0, NULL) ==
1005832dc76bSMariusz Zaborski 0);
1006832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, PF_LINK, TEST_DOMAIN_0, NULL) ==
1007832dc76bSMariusz Zaborski ENOTCAPABLE);
1008832dc76bSMariusz Zaborski
1009832dc76bSMariusz Zaborski /* Unable to set empty limits. Empty limits means full access. */
1010832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_NAME2ADDR);
1011832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
1012832dc76bSMariusz Zaborski
1013832dc76bSMariusz Zaborski cap_close(capnet);
1014832dc76bSMariusz Zaborski }
1015832dc76bSMariusz Zaborski
1016*df88c711SSiva Mahadevan ATF_TC(capnet__limits_deprecated_name2addr_mode);
ATF_TC_HEAD(capnet__limits_deprecated_name2addr_mode,tc)1017*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_deprecated_name2addr_mode, tc)
1018*df88c711SSiva Mahadevan {
1019*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
1020*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_deprecated_name2addr_mode,tc)1021832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_deprecated_name2addr_mode, tc)
1022832dc76bSMariusz Zaborski {
1023832dc76bSMariusz Zaborski cap_channel_t *capnet;
1024832dc76bSMariusz Zaborski cap_net_limit_t *limit;
1025832dc76bSMariusz Zaborski
1026832dc76bSMariusz Zaborski capnet = create_network_service();
1027832dc76bSMariusz Zaborski
1028832dc76bSMariusz Zaborski /* LIMIT */
1029832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_NAME2ADDR);
1030832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
1031832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1032832dc76bSMariusz Zaborski
1033832dc76bSMariusz Zaborski /* ALLOWED */
1034832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) == 0);
1035832dc76bSMariusz Zaborski
1036832dc76bSMariusz Zaborski /* DISALLOWED */
1037832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) ==
1038832dc76bSMariusz Zaborski ENOTCAPABLE);
1039832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) ==
1040832dc76bSMariusz Zaborski ENOTCAPABLE);
1041832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
1042832dc76bSMariusz Zaborski ENOTCAPABLE);
1043832dc76bSMariusz Zaborski ATF_REQUIRE(test_bind(capnet, TEST_BIND_IPV4) == ENOTCAPABLE);
1044832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, TEST_IPV4, 80) == ENOTCAPABLE);
1045832dc76bSMariusz Zaborski
1046832dc76bSMariusz Zaborski test_extend_mode(capnet, CAPNET_ADDR2NAME);
1047832dc76bSMariusz Zaborski
1048832dc76bSMariusz Zaborski cap_close(capnet);
1049832dc76bSMariusz Zaborski }
1050832dc76bSMariusz Zaborski
1051*df88c711SSiva Mahadevan ATF_TC(capnet__limits_deprecated_name2addr_hosts);
ATF_TC_HEAD(capnet__limits_deprecated_name2addr_hosts,tc)1052*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_deprecated_name2addr_hosts, tc)
1053*df88c711SSiva Mahadevan {
1054*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
1055*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_deprecated_name2addr_hosts,tc)1056832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_deprecated_name2addr_hosts, tc)
1057832dc76bSMariusz Zaborski {
1058832dc76bSMariusz Zaborski cap_channel_t *capnet;
1059832dc76bSMariusz Zaborski cap_net_limit_t *limit;
1060832dc76bSMariusz Zaborski
1061832dc76bSMariusz Zaborski capnet = create_network_service();
1062832dc76bSMariusz Zaborski
1063832dc76bSMariusz Zaborski /* Limit to TEST_DOMAIN_0 and localhost only. */
1064832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_NAME2ADDR);
1065832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
1066832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, NULL);
1067832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, "localhost", NULL);
1068832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1069832dc76bSMariusz Zaborski
1070832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) == 0);
1071832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyname(capnet, AF_INET, "localhost") == 0);
1072832dc76bSMariusz Zaborski ATF_REQUIRE(
1073832dc76bSMariusz Zaborski test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_1) == ENOTCAPABLE);
1074832dc76bSMariusz Zaborski
1075832dc76bSMariusz Zaborski /* Limit to TEST_DOMAIN_0 only. */
1076832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_NAME2ADDR);
1077832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
1078832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, NULL);
1079832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1080832dc76bSMariusz Zaborski
1081832dc76bSMariusz Zaborski ATF_REQUIRE(
1082832dc76bSMariusz Zaborski test_gethostbyname(capnet, AF_INET, "localhost") == ENOTCAPABLE);
1083832dc76bSMariusz Zaborski ATF_REQUIRE(
1084832dc76bSMariusz Zaborski test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_1) == ENOTCAPABLE);
1085832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) == 0);
1086832dc76bSMariusz Zaborski
1087832dc76bSMariusz Zaborski /* Unable to set empty limits. Empty limits means full access. */
1088832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_NAME2ADDR);
1089832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
1090832dc76bSMariusz Zaborski
1091832dc76bSMariusz Zaborski cap_close(capnet);
1092832dc76bSMariusz Zaborski }
1093832dc76bSMariusz Zaborski
1094*df88c711SSiva Mahadevan ATF_TC(capnet__limits_deprecated_name2addr_family);
ATF_TC_HEAD(capnet__limits_deprecated_name2addr_family,tc)1095*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_deprecated_name2addr_family, tc)
1096*df88c711SSiva Mahadevan {
1097*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
1098*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_deprecated_name2addr_family,tc)1099832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_deprecated_name2addr_family, tc)
1100832dc76bSMariusz Zaborski {
1101832dc76bSMariusz Zaborski cap_channel_t *capnet;
1102832dc76bSMariusz Zaborski cap_net_limit_t *limit;
1103832dc76bSMariusz Zaborski int family[] = { AF_INET6, AF_INET };
1104832dc76bSMariusz Zaborski
1105832dc76bSMariusz Zaborski capnet = create_network_service();
1106832dc76bSMariusz Zaborski
1107832dc76bSMariusz Zaborski /* Limit to AF_INET and AF_INET6. */
1108832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_NAME2ADDR);
1109832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
1110832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, NULL);
1111832dc76bSMariusz Zaborski cap_net_limit_name2addr_family(limit, family, nitems(family));
1112832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1113832dc76bSMariusz Zaborski
1114832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) == 0);
1115832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyname(capnet, AF_INET6, TEST_DOMAIN_0) == 0);
1116832dc76bSMariusz Zaborski ATF_REQUIRE(
1117832dc76bSMariusz Zaborski test_gethostbyname(capnet, PF_LINK, TEST_DOMAIN_0) == ENOTCAPABLE);
1118832dc76bSMariusz Zaborski
1119832dc76bSMariusz Zaborski /* Limit to AF_INET and AF_INET6. */
1120832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_NAME2ADDR);
1121832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
1122832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, NULL);
1123832dc76bSMariusz Zaborski cap_net_limit_name2addr_family(limit, &family[0], 1);
1124832dc76bSMariusz Zaborski cap_net_limit_name2addr_family(limit, &family[1], 1);
1125832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1126832dc76bSMariusz Zaborski
1127832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) == 0);
1128832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyname(capnet, AF_INET6, TEST_DOMAIN_0) == 0);
1129832dc76bSMariusz Zaborski ATF_REQUIRE(
1130832dc76bSMariusz Zaborski test_gethostbyname(capnet, PF_LINK, TEST_DOMAIN_0) == ENOTCAPABLE);
1131832dc76bSMariusz Zaborski
1132832dc76bSMariusz Zaborski /* Limit to AF_INET6 only. */
1133832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_NAME2ADDR);
1134832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
1135832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_DOMAIN_0, NULL);
1136832dc76bSMariusz Zaborski cap_net_limit_name2addr_family(limit, family, 1);
1137832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1138832dc76bSMariusz Zaborski
1139832dc76bSMariusz Zaborski ATF_REQUIRE(
1140832dc76bSMariusz Zaborski test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) == ENOTCAPABLE);
1141832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyname(capnet, AF_INET6, TEST_DOMAIN_0) == 0);
1142832dc76bSMariusz Zaborski ATF_REQUIRE(
1143832dc76bSMariusz Zaborski test_gethostbyname(capnet, PF_LINK, TEST_DOMAIN_0) == ENOTCAPABLE);
1144832dc76bSMariusz Zaborski
1145832dc76bSMariusz Zaborski /* Unable to set empty limits. Empty limits means full access. */
1146832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_DEPRECATED_NAME2ADDR);
1147832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
1148832dc76bSMariusz Zaborski
1149832dc76bSMariusz Zaborski cap_close(capnet);
1150832dc76bSMariusz Zaborski }
1151832dc76bSMariusz Zaborski
1152*df88c711SSiva Mahadevan ATF_TC(capnet__limits_bind_mode);
ATF_TC_HEAD(capnet__limits_bind_mode,tc)1153*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_bind_mode, tc)
1154*df88c711SSiva Mahadevan {
1155*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
1156*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_bind_mode,tc)1157832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_bind_mode, tc)
1158832dc76bSMariusz Zaborski {
1159832dc76bSMariusz Zaborski cap_channel_t *capnet;
1160832dc76bSMariusz Zaborski cap_net_limit_t *limit;
1161832dc76bSMariusz Zaborski
1162832dc76bSMariusz Zaborski capnet = create_network_service();
1163832dc76bSMariusz Zaborski
1164832dc76bSMariusz Zaborski /* LIMIT */
1165832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_BIND);
1166832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
1167832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1168832dc76bSMariusz Zaborski
1169832dc76bSMariusz Zaborski /* ALLOWED */
1170832dc76bSMariusz Zaborski ATF_REQUIRE(test_bind(capnet, TEST_BIND_IPV4) == 0);
1171832dc76bSMariusz Zaborski
1172832dc76bSMariusz Zaborski /* DISALLOWED */
1173832dc76bSMariusz Zaborski ATF_REQUIRE(
1174832dc76bSMariusz Zaborski test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) == ENOTCAPABLE);
1175832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) ==
1176832dc76bSMariusz Zaborski ENOTCAPABLE);
1177832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) ==
1178832dc76bSMariusz Zaborski ENOTCAPABLE);
1179832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
1180832dc76bSMariusz Zaborski ENOTCAPABLE);
1181832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, TEST_IPV4, 80) == ENOTCAPABLE);
1182832dc76bSMariusz Zaborski
1183832dc76bSMariusz Zaborski test_extend_mode(capnet, CAPNET_ADDR2NAME);
1184832dc76bSMariusz Zaborski
1185832dc76bSMariusz Zaborski cap_close(capnet);
1186832dc76bSMariusz Zaborski }
1187832dc76bSMariusz Zaborski
1188*df88c711SSiva Mahadevan ATF_TC(capnet__limits_bind);
ATF_TC_HEAD(capnet__limits_bind,tc)1189*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_bind, tc)
1190*df88c711SSiva Mahadevan {
1191*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
1192*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_bind,tc)1193832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_bind, tc)
1194832dc76bSMariusz Zaborski {
1195832dc76bSMariusz Zaborski cap_channel_t *capnet;
1196832dc76bSMariusz Zaborski cap_net_limit_t *limit;
1197832dc76bSMariusz Zaborski struct sockaddr_in ipv4;
1198832dc76bSMariusz Zaborski
1199832dc76bSMariusz Zaborski capnet = create_network_service();
1200832dc76bSMariusz Zaborski
1201832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_BIND);
1202832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
1203832dc76bSMariusz Zaborski
1204832dc76bSMariusz Zaborski memset(&ipv4, 0, sizeof(ipv4));
1205832dc76bSMariusz Zaborski ipv4.sin_family = AF_INET;
1206832dc76bSMariusz Zaborski inet_pton(AF_INET, TEST_BIND_IPV4, &ipv4.sin_addr);
1207832dc76bSMariusz Zaborski
1208832dc76bSMariusz Zaborski cap_net_limit_bind(limit, (struct sockaddr *)&ipv4, sizeof(ipv4));
1209832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1210832dc76bSMariusz Zaborski
1211832dc76bSMariusz Zaborski ATF_REQUIRE(test_bind(capnet, TEST_BIND_IPV4) == 0);
1212832dc76bSMariusz Zaborski ATF_REQUIRE(test_bind(capnet, "127.0.0.2") == ENOTCAPABLE);
1213832dc76bSMariusz Zaborski
1214832dc76bSMariusz Zaborski cap_close(capnet);
1215832dc76bSMariusz Zaborski }
1216832dc76bSMariusz Zaborski
1217*df88c711SSiva Mahadevan ATF_TC(capnet__limits_connect_mode);
ATF_TC_HEAD(capnet__limits_connect_mode,tc)1218*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_connect_mode, tc)
1219*df88c711SSiva Mahadevan {
1220*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
1221*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_connect_mode,tc)1222832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_connect_mode, tc)
1223832dc76bSMariusz Zaborski {
1224832dc76bSMariusz Zaborski cap_channel_t *capnet;
1225832dc76bSMariusz Zaborski cap_net_limit_t *limit;
1226832dc76bSMariusz Zaborski
1227832dc76bSMariusz Zaborski capnet = create_network_service();
1228832dc76bSMariusz Zaborski
1229832dc76bSMariusz Zaborski /* LIMIT */
1230832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_CONNECT);
1231832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
1232832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1233832dc76bSMariusz Zaborski
1234832dc76bSMariusz Zaborski /* ALLOWED */
1235832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, TEST_IPV4, 80) == 0);
1236832dc76bSMariusz Zaborski
1237832dc76bSMariusz Zaborski /* DISALLOWED */
1238832dc76bSMariusz Zaborski ATF_REQUIRE(
1239832dc76bSMariusz Zaborski test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) == ENOTCAPABLE);
1240832dc76bSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) ==
1241832dc76bSMariusz Zaborski ENOTCAPABLE);
1242832dc76bSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) ==
1243832dc76bSMariusz Zaborski ENOTCAPABLE);
1244832dc76bSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
1245832dc76bSMariusz Zaborski ENOTCAPABLE);
1246832dc76bSMariusz Zaborski ATF_REQUIRE(test_bind(capnet, TEST_BIND_IPV4) == ENOTCAPABLE);
1247832dc76bSMariusz Zaborski
1248832dc76bSMariusz Zaborski test_extend_mode(capnet, CAPNET_ADDR2NAME);
1249832dc76bSMariusz Zaborski
1250832dc76bSMariusz Zaborski cap_close(capnet);
1251832dc76bSMariusz Zaborski }
1252832dc76bSMariusz Zaborski
1253*df88c711SSiva Mahadevan ATF_TC(capnet__limits_connect_dns_mode);
ATF_TC_HEAD(capnet__limits_connect_dns_mode,tc)1254*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_connect_dns_mode, tc)
1255*df88c711SSiva Mahadevan {
1256*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
1257*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_connect_dns_mode,tc)125834535dacSMariusz Zaborski ATF_TC_BODY(capnet__limits_connect_dns_mode, tc)
125934535dacSMariusz Zaborski {
126034535dacSMariusz Zaborski cap_channel_t *capnet;
126134535dacSMariusz Zaborski cap_net_limit_t *limit;
126234535dacSMariusz Zaborski
126334535dacSMariusz Zaborski capnet = create_network_service();
126434535dacSMariusz Zaborski
126534535dacSMariusz Zaborski /* LIMIT */
126634535dacSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_CONNECT | CAPNET_CONNECTDNS);
126734535dacSMariusz Zaborski ATF_REQUIRE(limit != NULL);
126834535dacSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
126934535dacSMariusz Zaborski
127034535dacSMariusz Zaborski /* ALLOWED */
127134535dacSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, TEST_IPV4, 80) == 0);
127234535dacSMariusz Zaborski
127334535dacSMariusz Zaborski /* DISALLOWED */
127434535dacSMariusz Zaborski ATF_REQUIRE(
127534535dacSMariusz Zaborski test_gethostbyname(capnet, AF_INET, TEST_DOMAIN_0) == ENOTCAPABLE);
127634535dacSMariusz Zaborski ATF_REQUIRE(test_getnameinfo(capnet, AF_INET, TEST_IPV4) ==
127734535dacSMariusz Zaborski ENOTCAPABLE);
127834535dacSMariusz Zaborski ATF_REQUIRE(test_gethostbyaddr(capnet, AF_INET, TEST_IPV4) ==
127934535dacSMariusz Zaborski ENOTCAPABLE);
128034535dacSMariusz Zaborski ATF_REQUIRE(test_getaddrinfo(capnet, AF_INET, TEST_DOMAIN_0, NULL) ==
128134535dacSMariusz Zaborski ENOTCAPABLE);
128234535dacSMariusz Zaborski ATF_REQUIRE(test_bind(capnet, TEST_BIND_IPV4) == ENOTCAPABLE);
128334535dacSMariusz Zaborski
128434535dacSMariusz Zaborski test_extend_mode(capnet, CAPNET_ADDR2NAME);
128534535dacSMariusz Zaborski
128634535dacSMariusz Zaborski cap_close(capnet);
128734535dacSMariusz Zaborski }
128834535dacSMariusz Zaborski
1289*df88c711SSiva Mahadevan ATF_TC(capnet__limits_connect);
ATF_TC_HEAD(capnet__limits_connect,tc)1290*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_connect, tc)
1291*df88c711SSiva Mahadevan {
1292*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
1293*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_connect,tc)1294832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_connect, tc)
1295832dc76bSMariusz Zaborski {
1296832dc76bSMariusz Zaborski cap_channel_t *capnet;
1297832dc76bSMariusz Zaborski cap_net_limit_t *limit;
1298832dc76bSMariusz Zaborski struct sockaddr_in ipv4;
1299832dc76bSMariusz Zaborski
1300832dc76bSMariusz Zaborski capnet = create_network_service();
1301832dc76bSMariusz Zaborski
1302832dc76bSMariusz Zaborski /* Limit only to TEST_IPV4 on port 80 and 443. */
1303832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_CONNECT);
1304832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
1305832dc76bSMariusz Zaborski memset(&ipv4, 0, sizeof(ipv4));
1306832dc76bSMariusz Zaborski ipv4.sin_family = AF_INET;
1307832dc76bSMariusz Zaborski ipv4.sin_port = htons(80);
1308832dc76bSMariusz Zaborski inet_pton(AF_INET, TEST_IPV4, &ipv4.sin_addr);
1309832dc76bSMariusz Zaborski cap_net_limit_connect(limit, (struct sockaddr *)&ipv4, sizeof(ipv4));
1310832dc76bSMariusz Zaborski
1311832dc76bSMariusz Zaborski ipv4.sin_port = htons(443);
1312832dc76bSMariusz Zaborski cap_net_limit_connect(limit, (struct sockaddr *)&ipv4, sizeof(ipv4));
1313832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1314832dc76bSMariusz Zaborski
1315832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, TEST_IPV4, 80) == 0);
1316832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, "8.8.8.8", 80) == ENOTCAPABLE);
1317832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, "8.8.8.8", 433) == ENOTCAPABLE);
1318832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, TEST_IPV4, 443) == 0);
1319832dc76bSMariusz Zaborski
1320832dc76bSMariusz Zaborski /* Limit only to TEST_IPV4 on port 443. */
1321832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_CONNECT);
1322832dc76bSMariusz Zaborski cap_net_limit_connect(limit, (struct sockaddr *)&ipv4, sizeof(ipv4));
1323832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1324832dc76bSMariusz Zaborski
1325832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, TEST_IPV4, 433) == ENOTCAPABLE);
1326832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, "8.8.8.8", 80) == ENOTCAPABLE);
1327832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, "8.8.8.8", 433) == ENOTCAPABLE);
1328832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, TEST_IPV4, 443) == 0);
1329832dc76bSMariusz Zaborski
1330832dc76bSMariusz Zaborski /* Unable to set empty limits. Empty limits means full access. */
1331832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_CONNECT);
1332832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) != 0);
1333832dc76bSMariusz Zaborski
1334832dc76bSMariusz Zaborski cap_close(capnet);
1335832dc76bSMariusz Zaborski }
1336832dc76bSMariusz Zaborski
1337*df88c711SSiva Mahadevan ATF_TC(capnet__limits_connecttodns);
ATF_TC_HEAD(capnet__limits_connecttodns,tc)1338*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_connecttodns, tc)
1339*df88c711SSiva Mahadevan {
1340*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
1341*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_connecttodns,tc)1342832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_connecttodns, tc)
1343832dc76bSMariusz Zaborski {
1344832dc76bSMariusz Zaborski cap_channel_t *capnet;
1345832dc76bSMariusz Zaborski cap_net_limit_t *limit;
1346832dc76bSMariusz Zaborski struct addrinfo hints, *capres, *res;
1347832dc76bSMariusz Zaborski int family[] = { AF_INET };
13487ee4066dSMark Johnston int error;
1349832dc76bSMariusz Zaborski
1350832dc76bSMariusz Zaborski capnet = create_network_service();
1351832dc76bSMariusz Zaborski
1352832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_CONNECTDNS |
1353832dc76bSMariusz Zaborski CAPNET_NAME2ADDR);
1354832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
1355832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_IPV4, "80");
1356832dc76bSMariusz Zaborski cap_net_limit_name2addr_family(limit, family, 1);
1357832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1358832dc76bSMariusz Zaborski
1359832dc76bSMariusz Zaborski memset(&hints, 0, sizeof(hints));
1360832dc76bSMariusz Zaborski hints.ai_family = AF_INET;
1361832dc76bSMariusz Zaborski hints.ai_socktype = SOCK_STREAM;
1362832dc76bSMariusz Zaborski
1363832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, "8.8.8.8", 433) == ENOTCAPABLE);
1364832dc76bSMariusz Zaborski ATF_REQUIRE(cap_getaddrinfo(capnet, TEST_IPV4, "80", &hints, &capres) ==
1365832dc76bSMariusz Zaborski 0);
1366832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, "8.8.8.8", 433) == ENOTCAPABLE);
1367832dc76bSMariusz Zaborski
1368832dc76bSMariusz Zaborski for (res = capres; res != NULL; res = res->ai_next) {
1369832dc76bSMariusz Zaborski int s;
1370832dc76bSMariusz Zaborski
1371832dc76bSMariusz Zaborski ATF_REQUIRE(res->ai_family == AF_INET);
1372832dc76bSMariusz Zaborski ATF_REQUIRE(res->ai_socktype == SOCK_STREAM);
1373832dc76bSMariusz Zaborski
1374832dc76bSMariusz Zaborski s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
1375832dc76bSMariusz Zaborski ATF_REQUIRE(s >= 0);
1376832dc76bSMariusz Zaborski
13777ee4066dSMark Johnston error = cap_connect(capnet, s, res->ai_addr,
13787ee4066dSMark Johnston res->ai_addrlen);
13797ee4066dSMark Johnston if (error != 0 && errno != ENOTCAPABLE)
13807ee4066dSMark Johnston atf_tc_skip("unable to connect: %s", strerror(errno));
13817ee4066dSMark Johnston ATF_REQUIRE(error == 0);
13827ee4066dSMark Johnston ATF_REQUIRE(close(s) == 0);
1383832dc76bSMariusz Zaborski }
1384832dc76bSMariusz Zaborski
1385832dc76bSMariusz Zaborski freeaddrinfo(capres);
1386832dc76bSMariusz Zaborski cap_close(capnet);
1387832dc76bSMariusz Zaborski }
1388832dc76bSMariusz Zaborski
1389832dc76bSMariusz Zaborski
1390*df88c711SSiva Mahadevan ATF_TC(capnet__limits_deprecated_connecttodns);
ATF_TC_HEAD(capnet__limits_deprecated_connecttodns,tc)1391*df88c711SSiva Mahadevan ATF_TC_HEAD(capnet__limits_deprecated_connecttodns, tc)
1392*df88c711SSiva Mahadevan {
1393*df88c711SSiva Mahadevan atf_tc_set_md_var(tc, "require.config", "allow_network_access");
1394*df88c711SSiva Mahadevan }
ATF_TC_BODY(capnet__limits_deprecated_connecttodns,tc)1395832dc76bSMariusz Zaborski ATF_TC_BODY(capnet__limits_deprecated_connecttodns, tc)
1396832dc76bSMariusz Zaborski {
1397832dc76bSMariusz Zaborski cap_channel_t *capnet;
1398832dc76bSMariusz Zaborski cap_net_limit_t *limit;
1399832dc76bSMariusz Zaborski struct hostent *caphp;
1400832dc76bSMariusz Zaborski struct in_addr ipaddr;
1401832dc76bSMariusz Zaborski struct sockaddr_in connaddr;
1402832dc76bSMariusz Zaborski int family[] = { AF_INET };
14037ee4066dSMark Johnston int error, i;
1404832dc76bSMariusz Zaborski
1405832dc76bSMariusz Zaborski capnet = create_network_service();
1406832dc76bSMariusz Zaborski
1407832dc76bSMariusz Zaborski limit = cap_net_limit_init(capnet, CAPNET_CONNECTDNS |
1408832dc76bSMariusz Zaborski CAPNET_DEPRECATED_NAME2ADDR);
1409832dc76bSMariusz Zaborski ATF_REQUIRE(limit != NULL);
1410832dc76bSMariusz Zaborski cap_net_limit_name2addr(limit, TEST_IPV4, NULL);
1411832dc76bSMariusz Zaborski cap_net_limit_name2addr_family(limit, family, 1);
1412832dc76bSMariusz Zaborski ATF_REQUIRE(cap_net_limit(limit) == 0);
1413832dc76bSMariusz Zaborski
1414832dc76bSMariusz Zaborski memset(&ipaddr, 0, sizeof(ipaddr));
1415832dc76bSMariusz Zaborski inet_pton(AF_INET, TEST_IPV4, &ipaddr);
1416832dc76bSMariusz Zaborski
1417832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, "8.8.8.8", 433) == ENOTCAPABLE);
1418832dc76bSMariusz Zaborski caphp = cap_gethostbyname2(capnet, TEST_IPV4, AF_INET);
1419832dc76bSMariusz Zaborski ATF_REQUIRE(caphp != NULL);
1420832dc76bSMariusz Zaborski ATF_REQUIRE(caphp->h_addrtype == AF_INET);
1421832dc76bSMariusz Zaborski ATF_REQUIRE(test_connect(capnet, "8.8.8.8", 433) == ENOTCAPABLE);
1422832dc76bSMariusz Zaborski
1423832dc76bSMariusz Zaborski for (i = 0; caphp->h_addr_list[i] != NULL; i++) {
1424832dc76bSMariusz Zaborski int s;
1425832dc76bSMariusz Zaborski
1426832dc76bSMariusz Zaborski s = socket(AF_INET, SOCK_STREAM, 0);
1427832dc76bSMariusz Zaborski ATF_REQUIRE(s >= 0);
1428832dc76bSMariusz Zaborski
1429832dc76bSMariusz Zaborski memset(&connaddr, 0, sizeof(connaddr));
1430832dc76bSMariusz Zaborski connaddr.sin_family = AF_INET;
1431832dc76bSMariusz Zaborski memcpy((char *)&connaddr.sin_addr.s_addr,
1432832dc76bSMariusz Zaborski (char *)caphp->h_addr_list[i], caphp->h_length);
1433832dc76bSMariusz Zaborski connaddr.sin_port = htons(80);
1434832dc76bSMariusz Zaborski
14357ee4066dSMark Johnston error = cap_connect(capnet, s, (struct sockaddr *)&connaddr,
14367ee4066dSMark Johnston sizeof(connaddr));
14377ee4066dSMark Johnston if (error != 0 && errno != ENOTCAPABLE)
14387ee4066dSMark Johnston atf_tc_skip("unable to connect: %s", strerror(errno));
14397ee4066dSMark Johnston ATF_REQUIRE(error == 0);
14407ee4066dSMark Johnston ATF_REQUIRE(close(s) == 0);
1441832dc76bSMariusz Zaborski }
1442832dc76bSMariusz Zaborski
1443832dc76bSMariusz Zaborski cap_close(capnet);
1444832dc76bSMariusz Zaborski }
1445832dc76bSMariusz Zaborski
ATF_TP_ADD_TCS(tp)1446832dc76bSMariusz Zaborski ATF_TP_ADD_TCS(tp)
1447832dc76bSMariusz Zaborski {
1448832dc76bSMariusz Zaborski
1449b7876aecSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__connect);
1450b7876aecSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__bind);
1451b7876aecSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__getnameinfo);
1452b7876aecSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__getaddrinfo);
1453b7876aecSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__gethostbyname);
1454b7876aecSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__gethostbyaddr);
1455b7876aecSMariusz Zaborski
1456179bffddSEric van Gyzen ATF_TP_ADD_TC(tp, capnet__getnameinfo_buffer);
1457179bffddSEric van Gyzen
1458832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_addr2name_mode);
1459832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_addr2name_family);
1460832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_addr2name);
1461832dc76bSMariusz Zaborski
1462832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_deprecated_addr2name_mode);
1463832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_deprecated_addr2name_family);
1464832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_deprecated_addr2name);
1465832dc76bSMariusz Zaborski
1466832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_name2addr_mode);
1467832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_name2addr_hosts);
1468832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_name2addr_hosts_servnames_strict);
1469832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_name2addr_hosts_servnames_mix);
1470832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_name2addr_family);
1471832dc76bSMariusz Zaborski
1472832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_deprecated_name2addr_mode);
1473832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_deprecated_name2addr_hosts);
1474832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_deprecated_name2addr_family);
1475832dc76bSMariusz Zaborski
1476832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_bind_mode);
1477832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_bind);
1478832dc76bSMariusz Zaborski
1479832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_connect_mode);
148034535dacSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_connect_dns_mode);
1481832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_connect);
1482832dc76bSMariusz Zaborski
1483832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_connecttodns);
1484832dc76bSMariusz Zaborski ATF_TP_ADD_TC(tp, capnet__limits_deprecated_connecttodns);
1485832dc76bSMariusz Zaborski
1486832dc76bSMariusz Zaborski return (atf_no_error());
1487832dc76bSMariusz Zaborski }
1488