1*81ed1247Srillig /* $NetBSD: t_inet_addr.c,v 1.2 2022/01/16 10:38:59 rillig Exp $ */
2679713aaSginsbach
3679713aaSginsbach /*
4679713aaSginsbach * Copyright (c) 2011 The NetBSD Foundation, Inc.
5679713aaSginsbach * All rights reserved.
6679713aaSginsbach *
7679713aaSginsbach * This code is derived from software contributed to The NetBSD Foundation
8679713aaSginsbach *
9679713aaSginsbach * Redistribution and use in source and binary forms, with or without
10679713aaSginsbach * modification, are permitted provided that the following conditions
11679713aaSginsbach * are met:
12679713aaSginsbach * 1. Redistributions of source code must retain the above copyright
13679713aaSginsbach * notice, this list of conditions and the following disclaimer.
14679713aaSginsbach * 2. Redistributions in binary form must reproduce the above copyright
15679713aaSginsbach * notice, this list of conditions and the following disclaimer in the
16679713aaSginsbach * documentation and/or other materials provided with the distribution.
17679713aaSginsbach *
18679713aaSginsbach * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19679713aaSginsbach * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20679713aaSginsbach * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21679713aaSginsbach * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22679713aaSginsbach * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23679713aaSginsbach * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24679713aaSginsbach * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25679713aaSginsbach * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26679713aaSginsbach * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27679713aaSginsbach * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28679713aaSginsbach * POSSIBILITY OF SUCH DAMAGE.
29679713aaSginsbach */
30679713aaSginsbach
31679713aaSginsbach #include <sys/cdefs.h>
32679713aaSginsbach __COPYRIGHT("@(#) Copyright (c) 2011\
33679713aaSginsbach The NetBSD Foundation, inc. All rights reserved.");
34*81ed1247Srillig __RCSID("$NetBSD: t_inet_addr.c,v 1.2 2022/01/16 10:38:59 rillig Exp $");
35679713aaSginsbach
36679713aaSginsbach #include <arpa/inet.h>
37679713aaSginsbach
38679713aaSginsbach #include <atf-c.h>
39679713aaSginsbach #include <stdio.h>
40679713aaSginsbach #include <string.h>
41679713aaSginsbach
42679713aaSginsbach ATF_TC(inet_addr_basic);
ATF_TC_HEAD(inet_addr_basic,tc)43679713aaSginsbach ATF_TC_HEAD(inet_addr_basic, tc)
44679713aaSginsbach {
45679713aaSginsbach atf_tc_set_md_var(tc, "descr", "Checks inet_addr(3)");
46679713aaSginsbach }
47679713aaSginsbach
ATF_TC_BODY(inet_addr_basic,tc)48679713aaSginsbach ATF_TC_BODY(inet_addr_basic, tc)
49679713aaSginsbach {
50679713aaSginsbach static const char *addrs[] = {
51679713aaSginsbach "127.0.0.1", "99.99.99.99", "0.0.0.0", "255.255.255.255" };
52679713aaSginsbach
53679713aaSginsbach struct in_addr ia;
54679713aaSginsbach const char *ian;
55679713aaSginsbach in_addr_t addr;
56679713aaSginsbach size_t i;
57679713aaSginsbach
58679713aaSginsbach for (i = 0; i < __arraycount(addrs); i++) {
59679713aaSginsbach
60*81ed1247Srillig (void)fprintf(stderr, "checking %s\n", addrs[i]);
61679713aaSginsbach
62679713aaSginsbach addr = inet_addr(addrs[i]);
63679713aaSginsbach ia.s_addr = addr;
64679713aaSginsbach ian = inet_ntoa(ia);
65679713aaSginsbach
66679713aaSginsbach ATF_REQUIRE(ian != NULL);
67679713aaSginsbach ATF_CHECK(strcmp(ian, addrs[i]) == 0);
68679713aaSginsbach }
69679713aaSginsbach }
70679713aaSginsbach
71679713aaSginsbach ATF_TC(inet_addr_err);
ATF_TC_HEAD(inet_addr_err,tc)72679713aaSginsbach ATF_TC_HEAD(inet_addr_err, tc)
73679713aaSginsbach {
74679713aaSginsbach atf_tc_set_md_var(tc, "descr", "Invalid addresses with inet_addr(3)");
75679713aaSginsbach }
76679713aaSginsbach
ATF_TC_BODY(inet_addr_err,tc)77679713aaSginsbach ATF_TC_BODY(inet_addr_err, tc)
78679713aaSginsbach {
79679713aaSginsbach static const char *addrs[] = {
80679713aaSginsbach ". . . .", "1.2.3.", "0.0.0.256", "255.255.255.256",
81679713aaSginsbach "................................................",
82679713aaSginsbach "a.b.c.d", "0x0.0x1.0x2.0x3", "-1.-1.-1.-1", "", " "};
83679713aaSginsbach
84679713aaSginsbach struct in_addr ia;
85679713aaSginsbach const char *ian;
86679713aaSginsbach in_addr_t addr;
87679713aaSginsbach size_t i;
88679713aaSginsbach
89679713aaSginsbach for (i = 0; i < __arraycount(addrs); i++) {
90679713aaSginsbach
91*81ed1247Srillig (void)fprintf(stderr, "checking %s\n", addrs[i]);
92679713aaSginsbach
93679713aaSginsbach addr = inet_addr(addrs[i]);
94679713aaSginsbach ia.s_addr = addr;
95679713aaSginsbach ian = inet_ntoa(ia);
96679713aaSginsbach
97679713aaSginsbach ATF_REQUIRE(ian != NULL);
98679713aaSginsbach ATF_CHECK(strcmp(ian, addrs[i]) != 0);
99679713aaSginsbach }
100679713aaSginsbach }
101679713aaSginsbach
ATF_TP_ADD_TCS(tp)102679713aaSginsbach ATF_TP_ADD_TCS(tp)
103679713aaSginsbach {
104679713aaSginsbach
105679713aaSginsbach ATF_TP_ADD_TC(tp, inet_addr_basic);
106679713aaSginsbach ATF_TP_ADD_TC(tp, inet_addr_err);
107679713aaSginsbach
108679713aaSginsbach return atf_no_error();
109679713aaSginsbach }
110