summaryrefslogtreecommitdiff
path: root/src/regress
diff options
context:
space:
mode:
authorotto <>2004-10-25 15:10:36 +0000
committerotto <>2004-10-25 15:10:36 +0000
commit9e7378611290b0f24f7e6491d4fc76a2399cee62 (patch)
tree45a02e2244d7f5919d7228fe6a87703508c2ae93 /src/regress
parent42489d4b990a8793c837811c34a869ec16d055ba (diff)
downloadopenbsd-9e7378611290b0f24f7e6491d4fc76a2399cee62.tar.gz
openbsd-9e7378611290b0f24f7e6491d4fc76a2399cee62.tar.bz2
openbsd-9e7378611290b0f24f7e6491d4fc76a2399cee62.zip
basic regression test for some netdb functions
Diffstat (limited to 'src/regress')
-rw-r--r--src/regress/lib/libc/Makefile4
-rw-r--r--src/regress/lib/libc/netdb/Makefile5
-rw-r--r--src/regress/lib/libc/netdb/netdb.c182
3 files changed, 189 insertions, 2 deletions
diff --git a/src/regress/lib/libc/Makefile b/src/regress/lib/libc/Makefile
index 6dfe1cfe28..34d418e428 100644
--- a/src/regress/lib/libc/Makefile
+++ b/src/regress/lib/libc/Makefile
@@ -1,7 +1,7 @@
1# $OpenBSD: Makefile,v 1.17 2004/08/03 20:39:28 otto Exp $ 1# $OpenBSD: Makefile,v 1.18 2004/10/25 15:10:36 otto Exp $
2 2
3SUBDIR+= _setjmp alloca atexit db getaddrinfo getopt_long hsearch longjmp malloc 3SUBDIR+= _setjmp alloca atexit db getaddrinfo getopt_long hsearch longjmp malloc
4SUBDIR+= popen regex setjmp setjmp-signal sigreturn sigsetjmp 4SUBDIR+= netdb popen regex setjmp setjmp-signal sigreturn sigsetjmp
5SUBDIR+= sprintf strerror strtonum time 5SUBDIR+= sprintf strerror strtonum time
6 6
7.if (${MACHINE_ARCH} != "vax") 7.if (${MACHINE_ARCH} != "vax")
diff --git a/src/regress/lib/libc/netdb/Makefile b/src/regress/lib/libc/netdb/Makefile
new file mode 100644
index 0000000000..8254607227
--- /dev/null
+++ b/src/regress/lib/libc/netdb/Makefile
@@ -0,0 +1,5 @@
1# $OpenBSD: Makefile,v 1.1 2004/10/25 15:10:36 otto Exp $
2
3PROG= netdb
4
5.include <bsd.regress.mk>
diff --git a/src/regress/lib/libc/netdb/netdb.c b/src/regress/lib/libc/netdb/netdb.c
new file mode 100644
index 0000000000..0082c1bd1b
--- /dev/null
+++ b/src/regress/lib/libc/netdb/netdb.c
@@ -0,0 +1,182 @@
1/* $OpenBSD: netdb.c,v 1.1 2004/10/25 15:10:36 otto Exp $ */
2
3/*
4 * Public domain, 2004, Otto Moerbeek <otto@drijf.net>
5 */
6
7#include <err.h>
8#include <netdb.h>
9#include <stdarg.h>
10
11int ret = 0;
12
13void
14checkp(int n, struct protoent *p, int proto, const char *name, ...)
15{
16 va_list va;
17 char *a;
18 int i;
19
20 if (p == NULL) {
21 warnx("%d proto struct is NULL", n);
22 ret = 1;
23 return;
24 }
25 if (p->p_proto != proto) {
26 warnx("%d proto num mismatch %d %d", n, p->p_proto, proto);
27 ret = 1;
28 }
29 if (strcmp(p->p_name, name) != 0) {
30 warnx("%d proto name mismatch %s %s", n, p->p_name, name);
31 ret = 1;
32 }
33 va_start(va, name);
34 a = va_arg(va, char *);
35 i = 0;
36 while (a != NULL) {
37 if (strcmp(p->p_aliases[i], a) != 0) {
38 warnx("%d proto alias mismatch %s %s", n,
39 p->p_aliases[i], a);
40 ret = 1;
41 }
42 i++;
43 a = va_arg(va, char *);
44 }
45 if (p->p_aliases[i] != NULL) {
46 warnx("%d proto alias list does not end with NULL", n);
47 ret = 1;
48 }
49 va_end(va);
50}
51
52
53void
54checks(int n, struct servent *s, int port, const char *proto,
55 const char *name, ...)
56{
57 va_list va;
58 char *a;
59 int i;
60
61 if (s == NULL) {
62 warnx("%d serv struct is NULL", n);
63 ret = 1;
64 return;
65 }
66 if (s->s_port != ntohs(port)) {
67 warnx("%d port num mismatch %d %d", n, s->s_port, port);
68 ret = 1;
69 }
70 if (strcmp(s->s_name, name) != 0) {
71 warnx("%d serv name mismatch %s %s", n, s->s_name, name);
72 ret = 1;
73 }
74 if (strcmp(s->s_proto, proto) != 0) {
75 warnx("%d serv proto mismatch %s %s", n, s->s_proto, proto);
76 ret = 1;
77 }
78 va_start(va, name);
79 a = va_arg(va, char *);
80 i = 0;
81 while (a != NULL) {
82 if (strcmp(s->s_aliases[i], a) != 0) {
83 warnx("%d serv alias mismatch %s %s", n,
84 s->s_aliases[i], a);
85 ret = 1;
86 }
87 i++;
88 a = va_arg(va, char *);
89 }
90 if (s->s_aliases[i] != NULL) {
91 warnx("%d serv alias list does not end with NULL", n);
92 ret = 1;
93 }
94 va_end(va);
95}
96
97int
98main()
99{
100 struct protoent *p;
101 struct protoent protoent;
102 struct protoent_data protoent_data;
103 struct servent *s;
104 struct servent servent;
105 struct servent_data servent_data;
106 int r;
107
108 p = getprotobynumber(35);
109 checkp(1, p, 35, "idpr", "IDPR", (char *)NULL);
110
111 p = getprotobyname("igp");
112 checkp(2, p, 9, "igp", "IGP", (char *) NULL);
113
114 p = getprotobyname("RDP");
115 checkp(3, p, 27, "rdp", "RDP", (char *) NULL);
116
117 p = getprotobyname("vrrp");
118 checkp(4, p, 112, "carp", "CARP", "vrrp", (char *) NULL);
119
120 p = getprotobyname("nonexistent");
121 if (p != NULL)
122 err(1, "nonexistent proto found");
123
124 memset(&protoent_data, 0, sizeof(protoent_data));
125 r = getprotobynumber_r(35, &protoent, &protoent_data);
126 if (r != 0)
127 err(1, "proto not found");
128
129 checkp(5, &protoent, 35, "idpr", "IDPR", (char *)NULL);
130
131 r = getprotobyname_r("vrrp", &protoent, &protoent_data);
132 if (r != 0)
133 err(1, "proto not found");
134 checkp(6, &protoent, 112, "carp", "CARP", "vrrp", (char *) NULL);
135
136 r = getprotobyname_r("nonexistent", &protoent, &protoent_data);
137 if (r != -1)
138 err(1, "nonexistent proto found");
139
140 r = getprotobyname_r("", &protoent, &protoent_data);
141 if (r != -1)
142 err(1, "nonexistent proto found");
143
144
145 r = getprotobynumber_r(256, &protoent, &protoent_data);
146 if (r != -1)
147 err(1, "nonexistent proto found");
148
149 s = getservbyname("zip", NULL);
150 checks(7, s, 6, "ddp", "zip", (char *)NULL);
151
152 s = getservbyname("nicname", "tcp");
153 checks(8, s, 43, "tcp", "whois", "nicname", (char *)NULL);
154
155 s = getservbyport(htons(42), "tcp");
156 checks(9, s, 42, "tcp", "nameserver", "name", (char *)NULL);
157
158 memset(&servent_data, 0, sizeof(servent_data));
159 r = getservbyname_r("zip", "ddp", &servent, &servent_data);
160 if (r != 0)
161 err(1, "servent not found");
162 checks(10, &servent, 6, "ddp", "zip", (char *)NULL);
163
164 r = getservbyport_r(htons(520), NULL, &servent, &servent_data);
165 if (r != 0)
166 err(1, "servent not found");
167 checks(11, &servent, 520, "udp", "route", "router", "routed", (char *)NULL);
168
169 r = getservbyname_r("nonexistent", NULL, &servent, &servent_data);
170 if (r != -1)
171 err(1, "nonexiststent servent found");
172
173 r = getservbyport_r(htons(50000), NULL, &servent, &servent_data);
174 if (r != -1)
175 err(1, "nonexistent servent found");
176
177 r = getservbyport_r(htons(520), "tcp", &servent, &servent_data);
178 if (r != -1)
179 err(1, "nonexistent servent found");
180
181 return ret;
182}