• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

proftpd / proftpd / 26127302613

19 May 2026 09:51PM UTC coverage: 93.024% (+0.4%) from 92.635%
26127302613

push

github

51329 of 55178 relevant lines covered (93.02%)

215.14 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

99.65
/tests/api/netaddr.c
1
/*
2
 * ProFTPD - FTP server testsuite
3
 * Copyright (c) 2008-2026 The ProFTPD Project team
4
 *
5
 * This program is free software; you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation; either version 2 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, see <https://www.gnu.org/licenses/>.
17
 *
18
 * As a special exemption, The ProFTPD Project team and other respective
19
 * copyright holders give permission to link this program with OpenSSL, and
20
 * distribute the resulting executable, without including the source code for
21
 * OpenSSL in the source distribution.
22
 */
23

24
/* NetAddr API tests */
25

26
#include "tests.h"
27

28
static pool *p = NULL;
29

30
/* Fixtures */
31

32
static void set_up(void) {
33
  if (p == NULL) {
34✔
34
    p = permanent_pool = make_sub_pool(NULL);
34✔
35
  }
34✔
36

37
  init_netaddr();
38

34✔
39
  if (getenv("TEST_VERBOSE") != NULL) {
40
    pr_trace_set_levels("dns", 1, 20);
34✔
41
  }
34✔
42
}
43

34✔
44
static void tear_down(void) {
45
  if (getenv("TEST_VERBOSE") != NULL) {
34✔
46
    pr_trace_set_levels("dns", 0, 0);
34✔
47
  }
34✔
48

49
  if (p) {
50
    destroy_pool(p);
34✔
51
    p = permanent_pool = NULL;
34✔
52
  }
34✔
53
}
54

34✔
55
/* Tests */
56

57
START_TEST (netaddr_alloc_test) {
58
  pr_netaddr_t *res;
1✔
59

1✔
60
  res = pr_netaddr_alloc(NULL);
61
  ck_assert_msg(res == NULL, "Failed to handle null arguments");
1✔
62
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1✔
63

1✔
64
  res = pr_netaddr_alloc(p);
65
  ck_assert_msg(res != NULL, "Failed to allocate netaddr: %s", strerror(errno));
1✔
66
  ck_assert_msg(res->na_family == 0, "Allocated netaddr is not zeroed");
1✔
67
}
1✔
68
END_TEST
1✔
69

70
START_TEST (netaddr_dup_test) {
71
  pr_netaddr_t *res, *addr;
1✔
72
  int port;
1✔
73

1✔
74
  res = pr_netaddr_dup(NULL, NULL);
75
  ck_assert_msg(res == NULL, "Failed to handle null arguments");
1✔
76
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1✔
77

1✔
78
  res = pr_netaddr_dup(p, NULL);
79
  ck_assert_msg(res == NULL, "Failed to handle null addr");
1✔
80
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1✔
81

1✔
82
  addr = pr_netaddr_alloc(p);
83
  pr_netaddr_set_family(addr, AF_INET);
1✔
84

1✔
85
  port = 7654;
86
  pr_netaddr_set_port2(addr, port);
1✔
87

1✔
88
  res = pr_netaddr_dup(NULL, addr);
89
  ck_assert_msg(res == NULL, "Failed to handle null pool");
1✔
90
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1✔
91

1✔
92
  res = pr_netaddr_dup(p, addr);
93
  ck_assert_msg(res != NULL, "Failed to dup netaddr: %s", strerror(errno));
1✔
94
  ck_assert_msg(res->na_family == addr->na_family, "Expected family %d, got %d",
1✔
95
    addr->na_family, res->na_family);
1✔
96
  ck_assert_msg(ntohs(pr_netaddr_get_port(res)) == port,
97
    "Expected port %d, got %d", port, ntohs(pr_netaddr_get_port(res)));
1✔
98
}
99
END_TEST
1✔
100

101
START_TEST (netaddr_clear_test) {
102
  pr_netaddr_t *addr;
1✔
103

1✔
104
  mark_point();
105
  pr_netaddr_clear(NULL);
1✔
106

1✔
107
  addr = pr_netaddr_alloc(p);
108
  addr->na_family = 1;
1✔
109

1✔
110
  pr_netaddr_clear(addr);
111
  ck_assert_msg(addr->na_family == 0, "Failed to clear addr");
1✔
112
}
1✔
113
END_TEST
1✔
114

115
START_TEST (netaddr_get_addr_test) {
116
  const pr_netaddr_t *res;
1✔
117
  const char *name;
1✔
118
  array_header *addrs = NULL;
1✔
119

1✔
120
  res = pr_netaddr_get_addr(NULL, NULL, NULL);
121
  ck_assert_msg(res == NULL, "Failed to handle null arguments");
1✔
122
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1✔
123

1✔
124
  res = pr_netaddr_get_addr(p, NULL, NULL);
125
  ck_assert_msg(res == NULL, "Failed to handle null name");
1✔
126
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1✔
127

1✔
128
  name = "134.289.999.0";
129

1✔
130
  res = pr_netaddr_get_addr(NULL, name, NULL);
131
  ck_assert_msg(res == NULL, "Failed to handle null pool");
1✔
132
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
133
    strerror(errno), errno);
1✔
134

135
  res = pr_netaddr_get_addr(p, name, NULL);
136
  ck_assert_msg(res == NULL, "Unexpected got address for '%s'", name);
1✔
137
  ck_assert_msg(errno == ENOENT || errno == EAGAIN,
1✔
138
    "Expected ENOENT (%d) or EAGAIN (%d), got %s (%d)", ENOENT, EAGAIN,
1✔
139
    strerror(errno), errno);
140

141
  name = "localhost";
142

1✔
143
  res = pr_netaddr_get_addr(p, name, NULL);
144
  ck_assert_msg(res != NULL, "Failed to get addr for '%s': %s", name,
1✔
145
    strerror(errno));
1✔
146
  ck_assert_msg(res->na_family == AF_INET, "Expected family %d, got %d",
147
    AF_INET, res->na_family);
1✔
148

149
  res = pr_netaddr_get_addr(p, name, &addrs);
150
  ck_assert_msg(res != NULL, "Failed to get addr for '%s': %s", name,
1✔
151
    strerror(errno));
1✔
152
  ck_assert_msg(res->na_family == AF_INET, "Expected family %d, got %d",
153
    AF_INET, res->na_family);
1✔
154

155
#if defined(PR_USE_NETWORK_TESTS)
156
  /* Google: the Dial Tone of the Internet. */
157
  name = "www.google.com";
158

1✔
159
  res = pr_netaddr_get_addr(p, name, &addrs);
160
  ck_assert_msg(res != NULL, "Failed to get addr for '%s': %s", name,
1✔
161
    strerror(errno));
1✔
162
  ck_assert_msg(res->na_family == AF_INET, "Expected family %d, got %d",
163
    AF_INET, res->na_family);
1✔
164
  ck_assert_msg(addrs != NULL, "Expected additional addresses for '%s'", name);
165

1✔
166
  res = pr_netaddr_get_addr(p, name, NULL);
167
  ck_assert_msg(res != NULL, "Failed to get addr for '%s': %s", name,
1✔
168
    strerror(errno));
1✔
169
  ck_assert_msg(res->na_family == AF_INET, "Expected family %d, got %d",
170
    AF_INET, res->na_family);
1✔
171
#endif
172

173
  name = "127.0.0.1";
174

1✔
175
  res = pr_netaddr_get_addr(p, name, NULL);
176
  ck_assert_msg(res != NULL, "Failed to get addr for '%s': %s", name,
1✔
177
    strerror(errno));
1✔
178
  ck_assert_msg(res->na_family == AF_INET, "Expected family %d, got %d",
179
    AF_INET, res->na_family);
1✔
180

181
  res = pr_netaddr_get_addr(p, name, &addrs);
182
  ck_assert_msg(res != NULL, "Failed to get addr for '%s': %s", name,
1✔
183
    strerror(errno));
1✔
184
  ck_assert_msg(res->na_family == AF_INET, "Expected family %d, got %d",
185
    AF_INET, res->na_family);
1✔
186
  ck_assert_msg(addrs == NULL, "Expected no additional addresses for '%s'", name);
187

1✔
188
  /* Deliberately test an unresolvable name (related to Bug#4104). */
189
  name = "foo.bar.castaglia.example.com";
190

1✔
191
  res = pr_netaddr_get_addr(p, name, NULL);
192
  ck_assert_msg(res == NULL, "Resolved '%s' unexpectedly", name);
1✔
193
  ck_assert_msg(errno == ENOENT || errno == EAGAIN,
1✔
194
    "Expected ENOENT (%d) or EAGAIN (%d), got %s (%d)", ENOENT, EAGAIN,
1✔
195
    strerror(errno), errno);
196

197
#if defined(PR_USE_IPV6)
198
  name = "::1";
199

1✔
200
  res = pr_netaddr_get_addr(p, name, NULL);
201
  ck_assert_msg(res != NULL, "Failed to get addr for '%s': %s", name,
1✔
202
    strerror(errno));
1✔
203
  ck_assert_msg(res->na_family == AF_INET6, "Expected family %d, got %d",
204
    AF_INET6, res->na_family);
1✔
205

206
  res = pr_netaddr_get_addr(p, name, &addrs);
207
  ck_assert_msg(res != NULL, "Failed to get addr for '%s': %s", name,
1✔
208
    strerror(errno));
1✔
209
  ck_assert_msg(res->na_family == AF_INET6, "Expected family %d, got %d",
210
    AF_INET6, res->na_family);
1✔
211
  ck_assert_msg(addrs == NULL, "Expected no additional addresses for '%s'", name);
212
#endif /* PR_USE_IPV6 */
1✔
213
}
214
END_TEST
1✔
215

216
START_TEST (netaddr_get_addr2_test) {
217
  const pr_netaddr_t *res;
1✔
218
  const char *name;
1✔
219
  int flags;
1✔
220

1✔
221
  flags = PR_NETADDR_GET_ADDR_FL_INCL_DEVICE;
222
  name = "foobarbaz";
1✔
223
  res = pr_netaddr_get_addr2(p, name, NULL, flags);
1✔
224
  ck_assert_msg(res == NULL, "Failed to handle unknown device '%s'", name);
1✔
225
  ck_assert_msg(errno == ENOENT, "Expected ENOENT (%d), got %s (%d)", ENOENT,
1✔
226
    strerror(errno), errno);
1✔
227

228
  name = "lo0";
229
  res = pr_netaddr_get_addr2(p, name, NULL, flags);
1✔
230
  if (res == NULL) {
1✔
231
    /* Fallback to using a device name of "lo". */
1✔
232
    name = "lo";
233
    res = pr_netaddr_get_addr2(p, name, NULL, flags);
1✔
234
  }
1✔
235

236
  ck_assert_msg(res != NULL,
237
    "Expected to resolve name '%s' to an address via INCL_DEVICE", name);
1✔
238

239
  flags = PR_NETADDR_GET_ADDR_FL_EXCL_DNS;
240
  name = "localhost";
1✔
241
  res = pr_netaddr_get_addr2(p, name, NULL, flags);
1✔
242
  ck_assert_msg(res == NULL, "Resolved name '%s' to IP address unexpectedly",
1✔
243
    name);
1✔
244
  ck_assert_msg(errno == ENOENT, "Expected ENOENT (%d), got %d (%s)", ENOENT,
245
    errno, strerror(errno));
1✔
246

247
  flags = PR_NETADDR_GET_ADDR_FL_EXCL_CACHE;
248
  name = "127.0.0.1";
1✔
249
  res = pr_netaddr_get_addr2(p, name, NULL, flags);
1✔
250
  ck_assert_msg(res != NULL, "Failed to resolve name '%s' to IP address: %s",
1✔
251
    name, strerror(errno));
1✔
252
}
253
END_TEST
1✔
254

255
START_TEST (netaddr_get_family_test) {
256
  const pr_netaddr_t *addr;
1✔
257
  int res;
1✔
258

1✔
259
  res = pr_netaddr_get_family(NULL);
260
  ck_assert_msg(res == -1, "Failed to handle null argument");
1✔
261
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1✔
262

1✔
263
  addr = pr_netaddr_get_addr(p, "localhost", NULL);
264
  ck_assert_msg(addr != NULL, "Failed to get addr for 'localhost': %s",
1✔
265
    strerror(errno));
1✔
266

267
  res = pr_netaddr_get_family(addr);
268
  ck_assert_msg(res == AF_INET, "Expected family %d, got %d", AF_INET,
1✔
269
    res);
1✔
270
}
271
END_TEST
1✔
272

273
START_TEST (netaddr_set_family_test) {
274
  pr_netaddr_t *addr;
1✔
275
  int res;
1✔
276

1✔
277
  res = pr_netaddr_set_family(NULL, 0);
278
  ck_assert_msg(res == -1, "Failed to handle null arguments");
1✔
279
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1✔
280

1✔
281
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, "127.0.0.1", NULL);
282
  ck_assert_msg(addr != NULL, "Failed to get addr for '127.0.0.1': %s",
1✔
283
    strerror(errno));
1✔
284

285
  res = pr_netaddr_set_family(addr, -1);
286
  ck_assert_msg(res == -1, "Failed to handle bad family");
1✔
287
#if defined(EAFNOSUPPORT)
1✔
288
  ck_assert_msg(errno == EAFNOSUPPORT, "Failed to set errno to EAFNOSUPPORT");
289
#else
1✔
290
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
291
#endif /* EAFNOSUPPORT */
292

293
  res = pr_netaddr_set_family(addr, AF_INET);
294
  ck_assert_msg(res == 0, "Failed to set family to AF_INET: %s", strerror(errno));
1✔
295
}
1✔
296
END_TEST
1✔
297

298
START_TEST (netaddr_cmp_test) {
299
  const pr_netaddr_t *addr;
1✔
300
#if defined(PR_USE_IPV6)
1✔
301
  const pr_netaddr_t *addr2;
1✔
302
#endif /* PR_USE_IPV6 */
1✔
303
  int res;
304
  const char *name;
1✔
305

1✔
306
  res = pr_netaddr_cmp(NULL, NULL);
307
  ck_assert_msg(res == 0, "Expected 0, got %d", res);
1✔
308

1✔
309
  name = "127.0.0.1";
1✔
310
  addr = pr_netaddr_get_addr(p, name, NULL);
311
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
312
    strerror(errno));
1✔
313

1✔
314
  res = pr_netaddr_cmp(addr, NULL);
315
  ck_assert_msg(res == 1, "Expected 1, got %d", res);
1✔
316

1✔
317
  res = pr_netaddr_cmp(NULL, addr);
318
  ck_assert_msg(res == -1, "Expected -1, got %d", res);
1✔
319

1✔
320
#if defined(PR_USE_IPV6)
1✔
321
  name = "::1";
322
  addr2 = pr_netaddr_get_addr(p, name, NULL);
323
  ck_assert_msg(addr2 != NULL, "Failed to resolve '%s': %s", name,
1✔
324
    strerror(errno));
1✔
325

326
  res = pr_netaddr_cmp(addr, addr2);
1✔
327
  ck_assert_msg(res == -1, "Expected -1, got %d", res);
1✔
328

329
  res = pr_netaddr_cmp(addr2, addr);
1✔
330
  ck_assert_msg(res == -1, "Expected -1, got %d", res);
1✔
331

1✔
332
  name = "::ffff:127.0.0.1";
333
  addr2 = pr_netaddr_get_addr(p, name, NULL);
334
  ck_assert_msg(addr2 != NULL, "Failed to resolve '%s': %s", name,
1✔
335
    strerror(errno));
1✔
336

337
  res = pr_netaddr_cmp(addr, addr2);
1✔
338
  ck_assert_msg(res == 0, "Expected 0, got %d", res);
1✔
339

1✔
340
  res = pr_netaddr_cmp(addr2, addr);
341
  ck_assert_msg(res == 0, "Expected 0, got %d", res);
342
#endif /* PR_USE_IPV6 */
1✔
343
}
1✔
344
END_TEST
1✔
345

1✔
346
START_TEST (netaddr_ncmp_test) {
1✔
347
  const pr_netaddr_t *addr;
348
#if defined(PR_USE_IPV6)
1✔
349
  const pr_netaddr_t *addr2;
1✔
350
#endif /* PR_USE_IPV6 */
351
  int res;
1✔
352
  unsigned int nbits = 0;
1✔
353
  const char *name;
1✔
354

355
  res = pr_netaddr_ncmp(NULL, NULL, nbits);
356
  ck_assert_msg(res == 0, "Expected 0, got %d", res);
1✔
357

1✔
358
  name = "127.0.0.1";
359
  addr = pr_netaddr_get_addr(p, name, NULL);
1✔
360
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1✔
361
    strerror(errno));
362

1✔
363
  res = pr_netaddr_ncmp(addr, NULL, nbits);
1✔
364
  ck_assert_msg(res == 1, "Expected 1, got %d", res);
365

1✔
366
  res = pr_netaddr_ncmp(NULL, addr, nbits);
1✔
367
  ck_assert_msg(res == -1, "Expected -1, got %d", res);
1✔
368

1✔
369
  res = pr_netaddr_ncmp(NULL, addr, nbits);
370
  ck_assert_msg(res == -1, "Expected -1, got %d", res);
371

1✔
372
  nbits = 48;
1✔
373
  res = pr_netaddr_ncmp(addr, addr, nbits);
1✔
374
  ck_assert_msg(res == -1, "Expected -1, got %d", res);
375
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
376
    strerror(errno), errno);
1✔
377

1✔
378
#if defined(PR_USE_IPV6)
1✔
379
  name = "::1";
380
  addr2 = pr_netaddr_get_addr(p, name, NULL);
1✔
381
  ck_assert_msg(addr2 != NULL, "Failed to resolve '%s': %s", name,
1✔
382
    strerror(errno));
383

1✔
384
  nbits = 0;
1✔
385
  res = pr_netaddr_ncmp(addr, addr2, nbits);
1✔
386
  ck_assert_msg(res == -1, "Expected -1, got %d", res);
387

388
  res = pr_netaddr_ncmp(addr2, addr, nbits);
1✔
389
  ck_assert_msg(res == -1, "Expected -1, got %d", res);
1✔
390

391
  name = "::ffff:127.0.0.1";
1✔
392
  addr2 = pr_netaddr_get_addr(p, name, NULL);
1✔
393
  ck_assert_msg(addr2 != NULL, "Failed to resolve '%s': %s", name,
394
    strerror(errno));
1✔
395

1✔
396
  res = pr_netaddr_ncmp(addr, addr2, nbits);
1✔
397
  ck_assert_msg(res == 0, "Expected 0, got %d", res);
1✔
398

399
  res = pr_netaddr_ncmp(addr2, addr, nbits);
400
  ck_assert_msg(res == 0, "Expected 0, got %d", res);
1✔
401

1✔
402
  nbits = 24;
1✔
403
  res = pr_netaddr_ncmp(addr2, addr, nbits);
1✔
404
  ck_assert_msg(res == 0, "Expected 0, got %d", res);
405
#endif /* PR_USE_IPV6 */
1✔
406
}
1✔
407
END_TEST
1✔
408

409
START_TEST (netaddr_fnmatch_test) {
410
  const pr_netaddr_t *addr;
1✔
411
  int flags, res;
1✔
412
  const char *name;
1✔
413

414
  res = pr_netaddr_fnmatch(NULL, NULL, 0);
415
  ck_assert_msg(res < 0, "Failed to handle null address");
1✔
416
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
417
    strerror(errno), errno);
1✔
418

419
  name = "localhost";
420
  addr = pr_netaddr_get_addr(p, name, NULL);
1✔
421
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1✔
422
    strerror(errno));
1✔
423

424
  res = pr_netaddr_fnmatch(addr, NULL, 0);
1✔
425
  ck_assert_msg(res < 0, "Failed to handle null pattern");
1✔
426
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
427
    strerror(errno), errno);
×
428

429
  flags = PR_NETADDR_MATCH_DNS;
430
  res = pr_netaddr_fnmatch(addr, "foo", flags);
1✔
431
  ck_assert_msg(res == FALSE, "Expected FALSE, got %d", res);
1✔
432

1✔
433
  res = pr_netaddr_fnmatch(addr, "LOCAL*", flags);
434
  if (getenv("CI") == NULL) {
1✔
435
    /* This test is sensitive the environment. */
1✔
436
    ck_assert_msg(res == TRUE, "Expected TRUE, got %d", res);
437
  }
438

1✔
439
  flags = PR_NETADDR_MATCH_IP;
1✔
440
  res = pr_netaddr_fnmatch(addr, "foo", flags);
1✔
441
  ck_assert_msg(res == FALSE, "Expected FALSE, got %d", res);
442

443
  res = pr_netaddr_fnmatch(addr, "127.0*", flags);
1✔
444
  ck_assert_msg(res == TRUE, "Expected TRUE, got %d", res);
1✔
445

446
#if defined(PR_USE_IPV6)
1✔
447
  name = "::ffff:127.0.0.1";
1✔
448
  addr = pr_netaddr_get_addr(p, name, NULL);
449
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1✔
450
    strerror(errno));
451

452
  res = pr_netaddr_fnmatch(addr, "foo", flags);
1✔
453
  ck_assert_msg(res == FALSE, "Expected FALSE, got %d", res);
1✔
454

1✔
455
  res = pr_netaddr_fnmatch(addr, "127.0.*", flags);
1✔
456
  ck_assert_msg(res == TRUE, "Expected TRUE, got %d", res);
457
#endif /* PR_USE_IPV6 */
1✔
458
}
459
END_TEST
460

1✔
461
START_TEST (netaddr_get_sockaddr_test) {
1✔
462
  pr_netaddr_t *addr;
1✔
463
  struct sockaddr *sockaddr;
464
  const char *name;
465
#if defined(PR_USE_IPV6)
1✔
466
  int family;
1✔
467
#endif /* PR_USE_IPV6 */
1✔
468

469
  sockaddr = pr_netaddr_get_sockaddr(NULL);
470
  ck_assert_msg(sockaddr == NULL, "Failed to handle null argument");
1✔
471
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
472
    strerror(errno), errno);
473

474
  name = "127.0.0.1";
1✔
475
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, name, NULL);
1✔
476
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1✔
477
    strerror(errno));
478

479
  sockaddr = pr_netaddr_get_sockaddr(addr);
1✔
480
  ck_assert_msg(sockaddr != NULL, "Failed to get sock addr: %s", strerror(errno));
1✔
481

482
#if defined(PR_USE_IPV6)
1✔
483
  name = "::1";
1✔
484
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, name, NULL);
1✔
485
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1✔
486
    strerror(errno));
487

488
  sockaddr = pr_netaddr_get_sockaddr(addr);
1✔
489
  ck_assert_msg(sockaddr != NULL, "Failed to get sock addr: %s", strerror(errno));
1✔
490

1✔
491
  pr_netaddr_disable_ipv6();
1✔
492
  sockaddr = pr_netaddr_get_sockaddr(addr);
1✔
493
  ck_assert_msg(sockaddr == NULL, "Got sock addr for IPv6 addr: %s", strerror(errno));
1✔
494
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
495
    strerror(errno), errno);
1✔
496

497
  pr_netaddr_enable_ipv6();
1✔
498
  family = addr->na_family;
499
  addr->na_family = 777;
500
  sockaddr = pr_netaddr_get_sockaddr(addr);
1✔
501
  ck_assert_msg(sockaddr == NULL, "Got sock addr for IPv6 addr: %s", strerror(errno));
1✔
502
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
1✔
503
    strerror(errno), errno);
1✔
504
  addr->na_family = family;
505
#endif /* PR_USE_IPV6 */
1✔
506
}
507
END_TEST
508

1✔
509
START_TEST (netaddr_get_sockaddr_len_test) {
1✔
510
  pr_netaddr_t *addr;
1✔
511
  size_t res;
512
  const char *name;
513
#if defined(PR_USE_IPV6)
1✔
514
  int family;
1✔
515
#endif /* PR_USE_IPV6 */
1✔
516

517
  res = pr_netaddr_get_sockaddr_len(NULL);
518
  ck_assert_msg(res == (size_t) -1, "Failed to handle null arguments");
1✔
519
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
520
    strerror(errno), errno);
521

522
  name = "127.0.0.1";
1✔
523
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, name, NULL);
1✔
524
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1✔
525
    strerror(errno));
526

527
  res = pr_netaddr_get_sockaddr_len(addr);
1✔
528
  ck_assert_msg(res > 0, "Failed to get sockaddr len: %s", strerror(errno));
1✔
529

530
#if defined(PR_USE_IPV6)
1✔
531
  name = "::1";
1✔
532
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, name, NULL);
1✔
533
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1✔
534
    strerror(errno));
535

536
  res = pr_netaddr_get_sockaddr_len(addr);
1✔
537
  ck_assert_msg(res > 0, "Failed to get sockaddr len: %s", strerror(errno));
538

1✔
539
  pr_netaddr_disable_ipv6();
1✔
540
  res = pr_netaddr_get_sockaddr_len(addr);
1✔
541
  ck_assert_msg(res == (size_t) -1, "Got sockaddr len unexpectedly");
1✔
542
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
543
    strerror(errno), errno);
1✔
544

1✔
545
  pr_netaddr_enable_ipv6();
546

547
  family = addr->na_family;
1✔
548
  addr->na_family = 777;
549
  res = pr_netaddr_get_sockaddr_len(addr);
550
  addr->na_family = family;
1✔
551

1✔
552
  ck_assert_msg(res == (size_t) -1, "Got sockaddr len unexpectedly");
1✔
553
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
1✔
554
    strerror(errno), errno);
1✔
555
#endif /* PR_USE_IPV6 */
556
}
1✔
557
END_TEST
558

1✔
559
START_TEST (netaddr_set_sockaddr_test) {
560
  pr_netaddr_t *addr;
561
  int res;
562
  struct sockaddr sa;
1✔
563
  const char *name;
1✔
564
#if defined(PR_USE_IPV6)
1✔
565
  int family;
566
# if defined(HAVE_GETADDRINFO)
567
  struct addrinfo hints, *info = NULL;
1✔
568
# endif /* HAVE_GETADDRINFO */
1✔
569
#endif /* PR_USE_IPV6 */
1✔
570

571
  res = pr_netaddr_set_sockaddr(NULL, NULL);
572
  ck_assert_msg(res < 0, "Failed to handle null arguments");
1✔
573
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
574
    strerror(errno), errno);
1✔
575

576
  name = "127.0.0.1";
577
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, name, NULL);
1✔
578
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
579
    strerror(errno));
1✔
580

1✔
581
  res = pr_netaddr_set_sockaddr(addr, NULL);
582
  ck_assert_msg(res < 0, "Failed to handle null sockaddr");
583
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
584
    strerror(errno), errno);
1✔
585

1✔
586
  memset(&sa, 0, sizeof(sa));
587

588
  res = pr_netaddr_set_sockaddr(addr, &sa);
589
  ck_assert_msg(res == 0, "Failed to set sockaddr: %s", strerror(errno));
1✔
590

1✔
591
#if defined(PR_USE_IPV6)
1✔
592
  name = "::1";
1✔
593
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, name, NULL);
594
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1✔
595
    strerror(errno));
596

1✔
597
# if defined(HAVE_GETADDRINFO)
1✔
598
  memset(&hints, 0, sizeof(hints));
599
  hints.ai_family = AF_INET6;
1✔
600
  hints.ai_socktype = SOCK_STREAM;
1✔
601
  hints.ai_flags = AI_NUMERICHOST;
602
#  if defined(AI_V4MAPPED)
1✔
603
  hints.ai_flags |= AI_V4MAPPED;
1✔
604
#  endif /* AI_V4MAPPED */
1✔
605
  res = getaddrinfo("::1", NULL, &hints, &info);
1✔
606
  ck_assert_msg(res == 0, "getaddrinfo('::1') failed: %s", gai_strerror(res));
607

608
  res = pr_netaddr_set_sockaddr(addr, info->ai_addr);
1✔
609
  ck_assert_msg(res == 0, "Failed to set sockaddr: %s", strerror(errno));
1✔
610

611
  pr_netaddr_disable_ipv6();
612
  res = pr_netaddr_set_sockaddr(addr, info->ai_addr);
1✔
613
  ck_assert_msg(res < 0, "Set sockaddr unexpectedly");
1✔
614
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
1✔
615
    strerror(errno), errno);
1✔
616

617
  freeaddrinfo(info);
1✔
618
  pr_netaddr_enable_ipv6();
1✔
619
# endif /* HAVE_GETADDRINFO */
620

621
  family = addr->na_family;
1✔
622
  addr->na_family = 777;
623
  res = pr_netaddr_set_sockaddr(addr, &sa);
624
  addr->na_family = family;
1✔
625

1✔
626
  ck_assert_msg(res < 0, "Set sockaddr unexpectedly");
1✔
627
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
1✔
628
    strerror(errno), errno);
629
#endif /* PR_USE_IPV6 */
1✔
630
}
631
END_TEST
632

1✔
633
START_TEST (netaddr_set_sockaddr_any_test) {
1✔
634
  pr_netaddr_t *addr;
1✔
635
  int res;
636
  const char *name;
637
#if defined(PR_USE_IPV6)
1✔
638
  int family;
1✔
639
#endif /* PR_USE_IPV6 */
1✔
640

641
  res = pr_netaddr_set_sockaddr_any(NULL);
642
  ck_assert_msg(res < 0, "Failed to handle null arguments");
1✔
643
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
644
    strerror(errno), errno);
645

646
  name = "127.0.0.1";
1✔
647
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, name, NULL);
1✔
648
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1✔
649
    strerror(errno));
650

651
  res = pr_netaddr_set_sockaddr_any(addr);
1✔
652
  ck_assert_msg(res == 0, "Failed to set sockaddr any: %s", strerror(errno));
1✔
653

654
#if defined(PR_USE_IPV6)
1✔
655
  name = "::1";
1✔
656
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, name, NULL);
1✔
657
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1✔
658
    strerror(errno));
659

660
  res = pr_netaddr_set_sockaddr_any(addr);
1✔
661
  ck_assert_msg(res == 0, "Failed to set sockaddr any: %s", strerror(errno));
662

1✔
663
  pr_netaddr_disable_ipv6();
1✔
664
  res = pr_netaddr_set_sockaddr_any(addr);
1✔
665
  ck_assert_msg(res < 0, "Set sockaddr any unexpectedly");
1✔
666
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
667
    strerror(errno), errno);
1✔
668

1✔
669
  pr_netaddr_enable_ipv6();
670

671
  family = addr->na_family;
1✔
672
  addr->na_family = 777;
673
  res = pr_netaddr_set_sockaddr_any(addr);
674
  addr->na_family = family;
1✔
675

1✔
676
  ck_assert_msg(res < 0, "Set sockaddr any unexpectedly");
1✔
677
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
1✔
678
    strerror(errno), errno);
1✔
679
#endif /* PR_USE_IPV6 */
680
}
1✔
681
END_TEST
1✔
682

1✔
683
START_TEST (netaddr_get_inaddr_test) {
684
  pr_netaddr_t *addr;
685
  void *inaddr;
1✔
686
  const char *name;
1✔
687
#if defined(PR_USE_IPV6)
1✔
688
  int family;
1✔
689
#endif /* PR_USE_IPV6 */
690

691
  inaddr = pr_netaddr_get_inaddr(NULL);
1✔
692
  ck_assert_msg(inaddr == NULL, "Failed to handle null arguments");
1✔
693
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
694
    strerror(errno), errno);
695

1✔
696
  name = "127.0.0.1";
1✔
697
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, name, NULL);
1✔
698
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1✔
699
    strerror(errno));
700

701
  inaddr = pr_netaddr_get_inaddr(addr);
1✔
702
  ck_assert_msg(inaddr != NULL, "Failed to get inaddr: %s", strerror(errno));
1✔
703

704
#if defined(PR_USE_IPV6)
1✔
705
  family = AF_INET6;
1✔
706
  name = "::1";
1✔
707
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, name, NULL);
1✔
708
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
709
    strerror(errno));
710

1✔
711
  inaddr = pr_netaddr_get_inaddr(addr);
712
  ck_assert_msg(inaddr != NULL, "Failed to get inaddr: %s", strerror(errno));
1✔
713

1✔
714
  pr_netaddr_disable_ipv6();
1✔
715
  inaddr = pr_netaddr_get_inaddr(addr);
1✔
716
  ck_assert_msg(inaddr == NULL, "Got inaddr unexpectedly");
717
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
1✔
718
    strerror(errno), errno);
1✔
719

720
  pr_netaddr_enable_ipv6();
721

1✔
722
  family = addr->na_family;
723
  addr->na_family = 777;
724
  inaddr = pr_netaddr_get_inaddr(addr);
1✔
725
  addr->na_family = family;
1✔
726

1✔
727
  ck_assert_msg(inaddr == NULL, "Got inaddr unexpectedly");
1✔
728
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
729
    strerror(errno), errno);
1✔
730
#endif /* PR_USE_IPV6 */
731
}
732
END_TEST
1✔
733

1✔
734
START_TEST (netaddr_get_inaddr_len_test) {
1✔
735
  pr_netaddr_t *addr;
736
  size_t res;
737
  const char *name;
1✔
738
#if defined(PR_USE_IPV6)
1✔
739
  int family;
1✔
740
#endif /* PR_USE_IPV6 */
741

742
  res = pr_netaddr_get_inaddr_len(NULL);
1✔
743
  ck_assert_msg(res == (size_t) -1, "Failed to handle null arguments");
1✔
744
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
745
    strerror(errno), errno);
746

1✔
747
  name = "127.0.0.1";
1✔
748
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, name, NULL);
1✔
749
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
750
    strerror(errno));
751

1✔
752
  res = pr_netaddr_get_inaddr_len(addr);
1✔
753
  ck_assert_msg(res > 0, "Failed to get inaddr len: %s", strerror(errno));
754

1✔
755
#if defined(PR_USE_IPV6)
1✔
756
  name = "::1";
1✔
757
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, name, NULL);
1✔
758
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
759
    strerror(errno));
1✔
760

1✔
761
  res = pr_netaddr_get_inaddr_len(addr);
762
  ck_assert_msg(res > 0, "Failed to get inaddr len: %s", strerror(errno));
763

1✔
764
  family = addr->na_family;
765
  addr->na_family = 777;
766
  res = pr_netaddr_get_inaddr_len(addr);
1✔
767
  addr->na_family = family;
1✔
768

1✔
769
  ck_assert_msg(res == (size_t) -1, "Got inaddr len unexpectedly");
770
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
1✔
771
    strerror(errno), errno);
1✔
772
#endif /* PR_USE_IPV6 */
1✔
773
}
774
END_TEST
1✔
775

1✔
776
START_TEST (netaddr_get_port_test) {
777
  pr_netaddr_t *addr;
778
  unsigned int res;
1✔
779

1✔
780
  res = pr_netaddr_get_port(NULL);
781
  ck_assert_msg(res == 0, "Failed to handle null addr");
1✔
782
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1✔
783

1✔
784
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, "127.0.0.1", NULL);
1✔
785
  ck_assert_msg(addr != NULL, "Failed to get addr for '127.0.0.1': %s",
1✔
786
    strerror(errno));
787

788
  res = pr_netaddr_get_port(addr);
1✔
789
  ck_assert_msg(res == 0, "Expected port %u, got %u", 0, res);
1✔
790

1✔
791
  addr->na_family = -1;
1✔
792
  res = pr_netaddr_get_port(addr);
793
  ck_assert_msg(res == 0, "Expected port %u, got %u", 0, res);
1✔
794
  ck_assert_msg(errno == EPERM, "Failed to set errno to EPERM");
1✔
795
}
1✔
796
END_TEST
797

1✔
798
START_TEST (netaddr_set_port_test) {
1✔
799
  pr_netaddr_t *addr;
800
  unsigned int port;
801
  int res;
1✔
802

1✔
803
  res = pr_netaddr_set_port(NULL, 0);
1✔
804
  ck_assert_msg(res == -1, "Failed to handle null addr");
1✔
805
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
806

1✔
807
  addr = (pr_netaddr_t *) pr_netaddr_get_addr(p, "127.0.0.1", NULL);
1✔
808
  ck_assert_msg(addr != NULL, "Failed to get addr for '127.0.0.1': %s",
1✔
809
    strerror(errno));
810

1✔
811
  addr->na_family = -1;
1✔
812
  res = pr_netaddr_set_port(addr, 1);
1✔
813
  ck_assert_msg(res == -1, "Failed to handle bad family");
814
  ck_assert_msg(errno == EPERM, "Failed to set errno to EPERM");
815

1✔
816
  addr->na_family = AF_INET;
1✔
817
  res = pr_netaddr_set_port(addr, 1);
818
  ck_assert_msg(res == 0, "Failed to set port: %s", strerror(errno));
1✔
819

1✔
820
  port = pr_netaddr_get_port(addr);
821
  ck_assert_msg(port == 1, "Expected port %u, got %u", 1, port);
1✔
822
}
1✔
823
END_TEST
1✔
824

825
START_TEST (netaddr_set_reverse_dns_test) {
826
  int res;
1✔
827

1✔
828
  res = pr_netaddr_set_reverse_dns(FALSE);
1✔
829
  ck_assert_msg(res == 1, "Expected reverse %d, got %d", 1, res);
830

1✔
831
  res = pr_netaddr_set_reverse_dns(TRUE);
832
  ck_assert_msg(res == 0, "Expected reverse %d, got %d", 0, res);
1✔
833
}
1✔
834
END_TEST
1✔
835

836
START_TEST (netaddr_get_dnsstr_test) {
1✔
837
  const pr_netaddr_t *addr;
1✔
838
  const char *ip, *res;
839

840
  ip = "127.0.0.1";
1✔
841

842
  res = pr_netaddr_get_dnsstr(NULL);
1✔
843
  ck_assert_msg(res == NULL, "Failed to handle null argument");
1✔
844
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
845

1✔
846
  addr = pr_netaddr_get_addr(p, ip, NULL);
847
  ck_assert_msg(addr != NULL, "Failed to get addr for '%s': %s", ip,
1✔
848
    strerror(errno));
849

850
  pr_netaddr_set_reverse_dns(FALSE);
851

852
  res = pr_netaddr_get_dnsstr(addr);
1✔
853
  ck_assert_msg(res != NULL, "Failed to get DNS str for addr: %s",
1✔
854
    strerror(errno));
855
  ck_assert_msg(strcmp(res, ip) == 0, "Expected '%s', got '%s'", ip, res);
1✔
856

857
  pr_netaddr_set_reverse_dns(TRUE);
1✔
858

859
  /* Even though we should expect a DNS name, not an IP address, the
860
   * previous call to pr_netaddr_get_dnsstr() cached the IP address.
861
   */
862
  res = pr_netaddr_get_dnsstr(addr);
1✔
863
  ck_assert_msg(res != NULL, "Failed to get DNS str for addr: %s",
1✔
864
    strerror(errno));
865
  ck_assert_msg(strcmp(res, ip) == 0, "Expected '%s', got '%s'", ip, res);
1✔
866

867
  pr_netaddr_clear((pr_netaddr_t *) addr);
868

1✔
869
  /* Clearing the address doesn't work, since that removes even the address
1✔
870
   * info, in addition to the cached strings.
1✔
871
   */
872
  res = pr_netaddr_get_dnsstr(addr);
873
  ck_assert_msg(res != NULL, "Failed to get DNS str for addr: %s",
1✔
874
    strerror(errno));
1✔
875
  ck_assert_msg(strcmp(res, "") == 0, "Expected '%s', got '%s'", "", res);
876

1✔
877
  /* We need to clear the netaddr internal cache as well. */
1✔
878
  pr_netaddr_clear_ipcache(ip);
1✔
879
  addr = pr_netaddr_get_addr(p, ip, NULL);
880
  ck_assert_msg(addr != NULL, "Failed to get addr for '%s': %s", ip,
881
    strerror(errno));
1✔
882

883
  mark_point();
884
  ck_assert_msg(addr->na_have_dnsstr == 0, "addr already has cached DNS str");
885

886
  mark_point();
887
  res = pr_netaddr_get_dnsstr(addr);
1✔
888
  ck_assert_msg(res != NULL, "Failed to get DNS str for addr: %s",
889
    strerror(errno));
×
890

891
  mark_point();
892

893
  /* Depending on the contents of /etc/hosts, resolving 127.0.0.1 could
1✔
894
   * return either "localhost" or "localhost.localdomain".  Perhaps even
895
   * other variations, although these should be the most common.
896
   */
1✔
897
  if (getenv("CI") == NULL) {
1✔
898
    /* This test is sensitive the environment. */
1✔
899
    ck_assert_msg(strcmp(res, "localhost") == 0 ||
1✔
900
                strcmp(res, "localhost.localdomain") == 0,
1✔
901
      "Expected '%s', got '%s'", "localhost or localhost.localdomain", res);
902
  }
1✔
903
}
1✔
904
END_TEST
1✔
905

906
START_TEST (netaddr_get_dnsstr_list_test) {
907
  array_header *res, *addrs = NULL;
1✔
908
  const pr_netaddr_t *addr;
1✔
909
  int reverse_dns;
1✔
910
  const char *dnsstr;
911

912
  res = pr_netaddr_get_dnsstr_list(NULL, NULL);
1✔
913
  ck_assert_msg(res == NULL, "Failed to handle null pool");
1✔
914
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
915
    strerror(errno), errno);
916

1✔
917
  res = pr_netaddr_get_dnsstr_list(p, NULL);
1✔
918
  ck_assert_msg(res == NULL, "Failed to handle null address");
919
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
920
    strerror(errno), errno);
921

1✔
922
  addr = pr_netaddr_get_addr(p, "localhost", NULL);
923
  ck_assert_msg(addr != NULL, "Failed to resolve 'localhost': %s",
924
    strerror(errno));
1✔
925

1✔
926
  res = pr_netaddr_get_dnsstr_list(p, addr);
927
  ck_assert_msg(res != NULL, "Failed to get DNS list: %s", strerror(errno));
928

1✔
929
  reverse_dns = pr_netaddr_set_reverse_dns(TRUE);
1✔
930

931
  pr_netaddr_clear_cache();
932

933
#if defined(PR_USE_NETWORK_TESTS)
934
  addr = pr_netaddr_get_addr(p, "www.google.com", &addrs);
935
  ck_assert_msg(addr != NULL, "Failed to resolve 'www.google.com': %s",
936
    strerror(errno));
1✔
937

1✔
938
  dnsstr = pr_netaddr_get_dnsstr(addr);
939
  ck_assert_msg(dnsstr != NULL, "Failed to get DNS string for '%s': %s",
940
    pr_netaddr_get_ipstr(addr), strerror(errno));
941

942
  /* We may get a DNS name, but there is no guarantee that the reverse
943
   * DNS lookup will return the original "www.google.com" we requested.
944
   */
1✔
945

1✔
946
  res = pr_netaddr_get_dnsstr_list(p, addr);
947
  ck_assert_msg(res != NULL, "Failed to get DNS list: %s", strerror(errno));
948

949
  /* Ideally we would check that res->nelts > 0, BUT this turns out to
1✔
950
   * a fragile test condition, dependent on DNS vagaries.
1✔
951
   */
1✔
952
#endif /* PR_USE_NETWORK_TESTS */
953

1✔
954
  pr_netaddr_set_reverse_dns(reverse_dns);
955
}
1✔
956
END_TEST
1✔
957

1✔
958
#if defined(PR_USE_IPV6)
959
START_TEST (netaddr_get_dnsstr_ipv6_test) {
1✔
960
  const pr_netaddr_t *addr;
1✔
961
  const char *ip, *res;
962

963
  ip = "::1";
1✔
964

965
  res = pr_netaddr_get_dnsstr(NULL);
1✔
966
  ck_assert_msg(res == NULL, "Failed to handle null argument");
1✔
967
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
968

1✔
969
  addr = pr_netaddr_get_addr(p, ip, NULL);
970
  ck_assert_msg(addr != NULL, "Failed to get addr for '%s': %s", ip,
1✔
971
    strerror(errno));
972

973
  pr_netaddr_set_reverse_dns(FALSE);
974

975
  res = pr_netaddr_get_dnsstr(addr);
1✔
976
  ck_assert_msg(res != NULL, "Failed to get DNS str for addr: %s",
1✔
977
    strerror(errno));
978
  ck_assert_msg(strcmp(res, ip) == 0, "Expected '%s', got '%s'", ip, res);
1✔
979

980
  pr_netaddr_set_reverse_dns(TRUE);
1✔
981

982
  /* Even though we should expect a DNS name, not an IP address, the
983
   * previous call to pr_netaddr_get_dnsstr() cached the IP address.
984
   */
985
  res = pr_netaddr_get_dnsstr(addr);
1✔
986
  ck_assert_msg(res != NULL, "Failed to get DNS str for addr: %s",
1✔
987
    strerror(errno));
988
  ck_assert_msg(strcmp(res, ip) == 0, "Expected '%s', got '%s'", ip, res);
1✔
989

990
  pr_netaddr_clear((pr_netaddr_t *) addr);
991

1✔
992
  /* Clearing the address doesn't work, since that removes even the address
1✔
993
   * info, in addition to the cached strings.
1✔
994
   */
995
  res = pr_netaddr_get_dnsstr(addr);
996
  ck_assert_msg(res != NULL, "Failed to get DNS str for addr: %s",
1✔
997
    strerror(errno));
1✔
998
  ck_assert_msg(strcmp(res, "") == 0, "Expected '%s', got '%s'", "", res);
999

1✔
1000
  /* We need to clear the netaddr internal cache as well. */
1✔
1001
  pr_netaddr_clear_ipcache(ip);
1✔
1002
  addr = pr_netaddr_get_addr(p, ip, NULL);
1003
  ck_assert_msg(addr != NULL, "Failed to get addr for '%s': %s", ip,
1004
    strerror(errno));
1✔
1005

1006
  mark_point();
1007
  ck_assert_msg(addr->na_have_dnsstr == 0, "addr already has cached DNS str");
1008

1009
  mark_point();
1010
  res = pr_netaddr_get_dnsstr(addr);
1✔
1011
  ck_assert_msg(res != NULL, "Failed to get DNS str for addr: %s",
×
1012
    strerror(errno));
1013

1014
  mark_point();
1015

1016
  /* Depending on the contents of /etc/hosts, resolving ::1 could
1017
   * return either "localhost" or "localhost.localdomain".  Perhaps even
1018
   * other variations, although these should be the most common.
1019
   */
1020
  if (getenv("CI") == NULL) {
1✔
1021
    ck_assert_msg(strcmp(res, "localhost") == 0 ||
1022
                  strcmp(res, "localhost.localdomain") == 0 ||
1023
                  strcmp(res, "localhost6") == 0 ||
1024
                  strcmp(res, "localhost6.localdomain") == 0 ||
1✔
1025
                  strcmp(res, "ip6-localhost") == 0 ||
1✔
1026
                  strcmp(res, "ip6-loopback") == 0 ||
1✔
1027
                  strcmp(res, ip) == 0,
1028
      "Expected '%s', got '%s'", "localhost, localhost.localdomain et al", res);
1✔
1029
  }
1✔
1030
}
1✔
1031
END_TEST
1032
#endif /* PR_USE_IPV6 */
1✔
1033

1✔
1034
START_TEST (netaddr_get_ipstr_test) {
1035
  const pr_netaddr_t *addr;
1036
  const char *res;
1✔
1037

1✔
1038
  res = pr_netaddr_get_ipstr(NULL);
1039
  ck_assert_msg(res == NULL, "Failed to handle null argument");
1✔
1040
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1041

1✔
1042
  addr = pr_netaddr_get_addr(p, "localhost", NULL);
1043
  ck_assert_msg(addr != NULL, "Failed to get addr for 'localhost': %s",
1✔
1044
    strerror(errno));
1✔
1045

1✔
1046
  res = pr_netaddr_get_ipstr(addr);
1✔
1047
  ck_assert_msg(res != NULL, "Failed to get IP str for addr: %s",
1048
    strerror(errno));
1049
  ck_assert_msg(strcmp(res, "127.0.0.1") == 0, "Expected '%s', got '%s'",
1✔
1050
    "127.0.0.1", res);
1✔
1051
  ck_assert_msg(addr->na_have_ipstr == 1, "addr should have cached IP str");
1052

1✔
1053
  pr_netaddr_clear((pr_netaddr_t *) addr);
1✔
1054
  res = pr_netaddr_get_ipstr(addr);
1✔
1055
  ck_assert_msg(res == NULL, "Expected null, got '%s'", res);
1056
}
1✔
1057
END_TEST
1✔
1058

1✔
1059
START_TEST (netaddr_validate_dns_str_test) {
1060
  char *res, *str;
1✔
1061

1✔
1062
  res = pr_netaddr_validate_dns_str(NULL);
1✔
1063
  ck_assert_msg(res == NULL, "Failed to handle null argument");
1064
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1065

1✔
1066
  str = pstrdup(p, "foo");
1✔
1067
  res = pr_netaddr_validate_dns_str(str);
1✔
1068
  ck_assert_msg(strcmp(res, str) == 0, "Expected '%s', got '%s'", str, res);
1069

1070
  str = pstrdup(p, "[foo]");
1✔
1071
  res = pr_netaddr_validate_dns_str(str);
1✔
1072
  ck_assert_msg(strcmp(res, "_foo_") == 0, "Expected '%s', got '%s'",
1073
    "_foo_", res);
1✔
1074

1075
  str = pstrdup(p, "foo.");
1076
  res = pr_netaddr_validate_dns_str(str);
1077
  ck_assert_msg(strcmp(res, str) == 0, "Expected '%s', got '%s'",
1078
    str, res);
1079

1✔
1080
  str = pstrdup(p, "foo:");
1081
  res = pr_netaddr_validate_dns_str(str);
1082
#if defined(PR_USE_IPV6)
1✔
1083
  ck_assert_msg(strcmp(res, str) == 0, "Expected '%s', got '%s'",
1✔
1084
    str, res);
1085
#else
1✔
1086
  ck_assert_msg(strcmp(res, "foo_") == 0, "Expected '%s', got '%s'",
1✔
1087
    "foo_", res);
1✔
1088
#endif /* PR_USE_IPV6 */
1089
}
1✔
1090
END_TEST
1✔
1091

1✔
1092
START_TEST (netaddr_get_localaddr_str_test) {
1093
  const char *res;
1094

1✔
1095
  res = pr_netaddr_get_localaddr_str(NULL);
1✔
1096
  ck_assert_msg(res == NULL, "Failed to handle null argument");
1✔
1097
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1✔
1098

1099
  res = pr_netaddr_get_localaddr_str(p);
1✔
1100
  ck_assert_msg(res != NULL, "Failed to get local addr: %s", strerror(errno));
1✔
1101
}
1✔
1102
END_TEST
1103

1104
START_TEST (netaddr_is_loopback_test) {
1105
  const pr_netaddr_t *addr;
1✔
1106
  int res;
1✔
1107
  const char *name;
1✔
1108

1109
  res = pr_netaddr_is_loopback(NULL);
1110
  ck_assert_msg(res < 0, "Failed to handle null arguments");
1✔
1111
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
1112
    strerror(errno), errno);
1113

1114
#if defined(PR_USE_NETWORK_TESTS)
1✔
1115
  name = "www.google.com";
1✔
1116
  addr = pr_netaddr_get_addr(p, name, NULL);
1✔
1117
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1118
    strerror(errno));
1119

1✔
1120
  res = pr_netaddr_is_loopback(addr);
1✔
1121
  ck_assert_msg(res == FALSE, "Expected FALSE, got %d", res);
1122
#endif /* PR_USE_NETWORK_TESTS */
1123

1✔
1124
  name = "127.0.0.1";
1✔
1125
  addr = pr_netaddr_get_addr(p, name, NULL);
1✔
1126
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1127
    strerror(errno));
1128

1✔
1129
  res = pr_netaddr_is_loopback(addr);
1✔
1130
  ck_assert_msg(res == TRUE, "Expected TRUE, got %d", res);
1131

1✔
1132
#if defined(PR_USE_IPV6)
1✔
1133
  name = "::1";
1✔
1134
  addr = pr_netaddr_get_addr(p, name, NULL);
1135
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1136
    strerror(errno));
1✔
1137

1✔
1138
  res = pr_netaddr_is_loopback(addr);
1139
  ck_assert_msg(res == TRUE, "Expected TRUE, got %d", res);
1✔
1140

1141
  name = "::ffff:127.0.0.1";
1142
  addr = pr_netaddr_get_addr(p, name, NULL);
1✔
1143
  ck_assert_msg(addr != NULL, "Failed to resolve '%s': %s", name,
1✔
1144
    strerror(errno));
1✔
1145

1146
  res = pr_netaddr_is_loopback(addr);
1✔
1147
  ck_assert_msg(res == TRUE, "Expected TRUE, got %d", res);
1✔
1148
#endif /* PR_USE_IPV6 */
1✔
1149
}
1150
END_TEST
1✔
1151

1✔
1152
START_TEST (netaddr_is_v4_test) {
1✔
1153
  int res;
1154
  const char *name;
1155

1✔
1156
  res = pr_netaddr_is_v4(NULL);
1✔
1157
  ck_assert_msg(res == -1, "Failed to handle null arguments");
1✔
1158
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1159

1160
  name = "::1";
1✔
1161
  res = pr_netaddr_is_v4(name);
1✔
1162
  ck_assert_msg(res == FALSE, "Expected 'false' for IPv6 address '%s', got %d",
1✔
1163
    name, res);
1164

1✔
1165
  name = "localhost";
1166
  res = pr_netaddr_is_v4(name);
1167
  ck_assert_msg(res == FALSE, "Expected 'false' for DNS name '%s', got %d",
1✔
1168
    name, res);
1✔
1169

1✔
1170
  name = "127.0.0.1";
1171
  res = pr_netaddr_is_v4(name);
1✔
1172
  ck_assert_msg(res == TRUE, "Expected 'true' for IPv4 address '%s', got %d",
1✔
1173
    name, res);
1✔
1174
}
1175
END_TEST
1✔
1176

1✔
1177
START_TEST (netaddr_is_v6_test) {
1✔
1178
  int res;
1179
  const char *name;
1180

1✔
1181
  res = pr_netaddr_is_v6(NULL);
1✔
1182
  ck_assert_msg(res == -1, "Failed to handle null arguments");
1✔
1183
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1184

1185
  name = "127.0.0.1";
1✔
1186
  res = pr_netaddr_is_v6(name);
1187
  ck_assert_msg(res == FALSE, "Expected 'false' for IPv4 address '%s', got %d",
1✔
1188
    name, res);
1✔
1189

1✔
1190
  name = "localhost";
1✔
1191
  res = pr_netaddr_is_v6(name);
1192
  ck_assert_msg(res == FALSE, "Expected 'false' for DNS name '%s', got %d",
1193
    name, res);
1✔
1194

1195
  pr_netaddr_enable_ipv6();
1196

1✔
1197
  if (pr_netaddr_use_ipv6() == TRUE) {
1✔
1198
    name = "::1";
1✔
1199
    res = pr_netaddr_is_v6(name);
1✔
1200
    ck_assert_msg(res == TRUE, "Expected 'true' for IPv6 address '%s', got %d",
1201
      name, res);
1✔
1202
  }
1✔
1203
}
1✔
1204
END_TEST
1205

1✔
1206
START_TEST (netaddr_is_v4mappedv6_test) {
1✔
1207
  int res;
1✔
1208
  const char *name;
1209
  const pr_netaddr_t *addr;
1✔
1210

1✔
1211
  res = pr_netaddr_is_v4mappedv6(NULL);
1212
  ck_assert_msg(res == -1, "Failed to handle null arguments");
1✔
1213
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1214

1215
  name = "127.0.0.1";
1✔
1216
  addr = pr_netaddr_get_addr(p, name, NULL);
1✔
1217
  ck_assert_msg(addr != NULL, "Failed to get addr for '%s': %s", name,
1218
    strerror(errno));
1✔
1219
  res = pr_netaddr_is_v4mappedv6(addr);
1220
  ck_assert_msg(res == -1, "Expected -1 for IPv4 address '%s', got %d",
1✔
1221
    name, res);
1✔
1222
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL; got %d [%s]",
1223
    errno, strerror(errno));
1✔
1224

1225
  name = "::1";
1226
  addr = pr_netaddr_get_addr(p, name, NULL);
1227
#if defined(PR_USE_IPV6)
1228
  ck_assert_msg(addr != NULL, "Failed to get addr for '%s': %s", name,
1229
    strerror(errno));
1230
  res = pr_netaddr_is_v4mappedv6(addr);
1✔
1231
  ck_assert_msg(res == FALSE, "Expected 'false' for IPv6 address '%s', got %d",
1✔
1232
    name, res);
1✔
1233
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL; got %d [%s]",
1234
    errno, strerror(errno));
1✔
1235
#else
1236
  ck_assert_msg(addr == NULL,
1✔
1237
    "IPv6 support disabled, should not be able to get addr for '%s'", name);
1238
#endif /* PR_USE_IPV6 */
1239

1240
  name = "::ffff:127.0.0.1";
1241
  addr = pr_netaddr_get_addr(p, name, NULL);
1242
#if defined(PR_USE_IPV6)
1243
  ck_assert_msg(addr != NULL, "Failed to get addr for '%s': %s", name,
1244
    strerror(errno));
1✔
1245
  res = pr_netaddr_is_v4mappedv6(addr);
1246
  ck_assert_msg(res == TRUE,
1247
    "Expected 'true' for IPv4-mapped IPv6 address '%s', got %d", name, res);
1✔
1248
#else
1✔
1249
  if (addr != NULL) {
1✔
1250
    ck_assert_msg(res == -1,
1✔
1251
      "Expected -1 for IPv4-mapped IPv6 address '%s' (--disable-ipv6 used)",
1252
      name);
1✔
1253
    ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL; got %d [%s]",
1✔
1254
      errno, strerror(errno));
1✔
1255
  }
1256
#endif /* PR_USE_IPV6 */
1✔
1257
}
1✔
1258
END_TEST
1✔
1259

1260
START_TEST (netaddr_is_rfc1918_test) {
1✔
1261
  int res;
1✔
1262
  const char *name;
1✔
1263
  const pr_netaddr_t *addr;
1264

1265
  res = pr_netaddr_is_rfc1918(NULL);
1✔
1266
  ck_assert_msg(res == -1, "Failed to handle null arguments");
1✔
1267
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1268

1✔
1269
  name = "127.0.0.1";
1270
  addr = pr_netaddr_get_addr(p, name, NULL);
1✔
1271
  ck_assert_msg(addr != NULL, "Failed to get addr for '%s': %s", name,
1✔
1272
    strerror(errno));
1✔
1273
  res = pr_netaddr_is_rfc1918(addr);
1274
  ck_assert_msg(res == FALSE, "Failed to handle non-RFC1918 IPv4 address");
1275
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL, got %s (%d)",
1276
    strerror(errno), errno);
1277

1278
  name = "::1";
1✔
1279
  addr = pr_netaddr_get_addr(p, name, NULL);
1✔
1280
#if defined(PR_USE_IPV6)
1✔
1281
  ck_assert_msg(addr != NULL, "Failed to get addr for '%s': %s", name,
1282
    strerror(errno));
1✔
1283
  res = pr_netaddr_is_rfc1918(addr);
1✔
1284
  ck_assert_msg(res == FALSE, "Failed to handle IPv6 address");
1285
  ck_assert_msg(errno == EINVAL, "Failed to set errno to EINVAL");
1✔
1286
#else
1✔
1287
  ck_assert_msg(addr == NULL,
1✔
1288
    "IPv6 support disabled, should not be able to get addr for '%s'", name);
1289
#endif /* PR_USE_IPV6 */
1✔
1290

1✔
1291
  name = "10.0.0.1";
1292
  addr = pr_netaddr_get_addr(p, name, NULL);
1✔
1293
  ck_assert_msg(addr != NULL, "Failed to get addr for '%s': %s", name,
1✔
1294
    strerror(errno));
1✔
1295
  res = pr_netaddr_is_rfc1918(addr);
1296
  ck_assert_msg(res == TRUE, "Expected 'true' for address '%s'", name);
1✔
1297

1✔
1298
  name = "192.168.0.1";
1✔
1299
  addr = pr_netaddr_get_addr(p, name, NULL);
1300
  ck_assert_msg(addr != NULL, "Failed to get addr for '%s': %s", name,
1301
    strerror(errno));
1✔
1302
  res = pr_netaddr_is_rfc1918(addr);
1✔
1303
  ck_assert_msg(res == TRUE, "Expected 'true' for address '%s'", name);
1✔
1304

1305
  name = "172.31.200.55";
1✔
1306
  addr = pr_netaddr_get_addr(p, name, NULL);
1✔
1307
  ck_assert_msg(addr != NULL, "Failed to get addr for '%s': %s", name,
1✔
1308
    strerror(errno));
1309
  res = pr_netaddr_is_rfc1918(addr);
1310
  ck_assert_msg(res == TRUE, "Expected 'true' for address '%s'", name);
1✔
1311
}
1✔
1312
END_TEST
1✔
1313

1314
START_TEST (netaddr_v6tov4_test) {
1315
  const pr_netaddr_t *addr, *addr2;
1✔
1316
  const char *name;
1✔
1317
#if defined(PR_USE_IPV6)
1✔
1318
  const char *ipstr;
1319
#endif /* PR_USE_IPV6 */
1320

1✔
1321
  addr = pr_netaddr_v6tov4(NULL, NULL);
1✔
1322
  ck_assert_msg(addr == NULL, "Failed to handle null arguments");
1323
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
1324
    strerror(errno), errno);
1325

1326
  addr = pr_netaddr_v6tov4(p, NULL);
1✔
1327
  ck_assert_msg(addr == NULL, "Failed to handle null address");
1✔
1328
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
1329
    strerror(errno), errno);
1330

1331
  name = "127.0.0.1";
1✔
1332
  addr2 = pr_netaddr_get_addr(p, name, NULL);
1✔
1333
  ck_assert_msg(addr2 != NULL, "Failed to resolve '%s': %s", name,
1334
    strerror(errno));
1✔
1335

1336
  addr = pr_netaddr_v6tov4(p, addr2);
1337
  ck_assert_msg(addr == NULL, "Converted '%s' to IPv4 address unexpectedly",
1✔
1338
    name);
1✔
1339
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
1340
    strerror(errno), errno);
1✔
1341

1342
#if defined(PR_USE_IPV6)
1343
  name = "::ffff:127.0.0.1";
1✔
1344
  addr2 = pr_netaddr_get_addr(p, name, NULL);
1✔
1345
  ck_assert_msg(addr2 != NULL, "Failed to resolve '%s': %s", name,
1✔
1346
    strerror(errno));
1347

1✔
1348
  addr = pr_netaddr_v6tov4(p, addr2);
1✔
1349
  ck_assert_msg(addr != NULL, "Failed to convert '%s' to IPv4 address: %s",
1✔
1350
    name, strerror(errno));
1351
  ck_assert_msg(pr_netaddr_get_family(addr) == AF_INET,
1352
    "Expected %d, got %d", AF_INET, pr_netaddr_get_family(addr));
1✔
1353

1✔
1354
  ipstr = pr_netaddr_get_ipstr(addr);
1✔
1355
  ck_assert_msg(strcmp(ipstr, "127.0.0.1") == 0,
1356
    "Expected '127.0.0.1', got '%s'", ipstr);
1357
#endif /* PR_USE_IPV6 */
1✔
1358
}
1✔
1359
END_TEST
1✔
1360

1361
#if defined(PR_USE_IPV6)
1362
START_TEST (netaddr_v4tov6_test) {
1✔
1363
  const pr_netaddr_t *addr, *addr2;
1✔
1364
  const char *name, *ipstr;
1365

1✔
1366
  addr = pr_netaddr_v4tov6(NULL, NULL);
1367
  ck_assert_msg(addr == NULL, "Failed to handle null arguments");
1368
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
1369
    strerror(errno), errno);
1✔
1370

1✔
1371
  addr = pr_netaddr_v4tov6(p, NULL);
1372
  ck_assert_msg(addr == NULL, "Failed to handle null address");
1373
  ck_assert_msg(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
1✔
1374
    strerror(errno), errno);
1375

1✔
1376
  name = "::ffff:127.0.0.1";
1377
  addr2 = pr_netaddr_get_addr(p, name, NULL);
1✔
1378
  ck_assert_msg(addr2 != NULL, "Failed to resolve '%s': %s", name,
1379
    strerror(errno));
1380

1✔
1381
  addr = pr_netaddr_v4tov6(p, addr2);
1✔
1382
  ck_assert_msg(addr == NULL, "Converted '%s' to IPv6 address unexpectedly",
1383
    name);
1384
  ck_assert_msg(errno == EPERM, "Expected EPERM (%d), got %s (%d)", EPERM,
1385
    strerror(errno), errno);
1386

1387
  name = "127.0.0.1";
1388
  addr2 = pr_netaddr_get_addr(p, name, NULL);
1389
  ck_assert_msg(addr2 != NULL, "Failed to resolve '%s': %s", name,
1390
    strerror(errno));
1✔
1391

1392
  addr = pr_netaddr_v4tov6(p, addr2);
1393
  ck_assert_msg(addr != NULL, "Failed to convert '%s' to IPv6 address: %s",
1✔
1394
    name, strerror(errno));
1✔
1395
  ck_assert_msg(pr_netaddr_get_family(addr) == AF_INET6,
1396
    "Expected %d, got %d", AF_INET6, pr_netaddr_get_family(addr));
1✔
1397

1398
  ipstr = pr_netaddr_get_ipstr(addr);
1399
  ck_assert_msg(strcmp(ipstr, "::ffff:127.0.0.1") == 0,
1✔
1400
    "Expected '::ffff:127.0.0.1', got '%s'", ipstr);
1401
}
1402
END_TEST
1403
#endif /* PR_USE_IPV6 */
1404

1✔
1405
START_TEST (netaddr_disable_ipv6_test) {
1406
  unsigned char use_ipv6;
1✔
1407

1✔
1408
  use_ipv6 = pr_netaddr_use_ipv6();
1✔
1409

1410
#if defined(PR_USE_IPV6)
1411
  ck_assert_msg(use_ipv6 == TRUE, "Expected %d, got %d", TRUE, use_ipv6);
1✔
1412
#else
1✔
1413
  ck_assert_msg(use_ipv6 == FALSE, "Expected %d, got %d", FALSE, use_ipv6);
1414
#endif /* PR_USE_IPV6 */
1✔
1415

1416
  pr_netaddr_disable_ipv6();
1✔
1417

1418
  use_ipv6 = pr_netaddr_use_ipv6();
1✔
1419
  ck_assert_msg(use_ipv6 == FALSE, "Expected %d, got %d", FALSE, use_ipv6);
1420
}
1421
END_TEST
1422

1✔
1423
START_TEST (netaddr_enable_ipv6_test) {
1424
  unsigned char use_ipv6;
1425

889✔
1426
  pr_netaddr_enable_ipv6();
889✔
1427

889✔
1428
  use_ipv6 = pr_netaddr_use_ipv6();
1429
#if defined(PR_USE_IPV6)
889✔
1430
  ck_assert_msg(use_ipv6 == TRUE, "Expected %d, got %d", TRUE, use_ipv6);
1431
#else
889✔
1432
  ck_assert_msg(use_ipv6 == FALSE, "Expected %d, got %d", FALSE, use_ipv6);
889✔
1433
#endif /* PR_USE_IPV6 */
1434
}
889✔
1435
END_TEST
889✔
1436

889✔
1437
Suite *tests_get_netaddr_suite(void) {
889✔
1438
  Suite *suite;
889✔
1439
  TCase *testcase;
889✔
1440

889✔
1441
  suite = suite_create("netaddr");
889✔
1442

889✔
1443
  testcase = tcase_create("base");
889✔
1444
  tcase_add_checked_fixture(testcase, set_up, tear_down);
889✔
1445

889✔
1446
  tcase_add_test(testcase, netaddr_alloc_test);
889✔
1447
  tcase_add_test(testcase, netaddr_dup_test);
889✔
1448
  tcase_add_test(testcase, netaddr_clear_test);
889✔
1449
  tcase_add_test(testcase, netaddr_get_addr_test);
889✔
1450
  tcase_add_test(testcase, netaddr_get_addr2_test);
889✔
1451
  tcase_add_test(testcase, netaddr_get_family_test);
889✔
1452
  tcase_add_test(testcase, netaddr_set_family_test);
889✔
1453
  tcase_add_test(testcase, netaddr_cmp_test);
889✔
1454
  tcase_add_test(testcase, netaddr_ncmp_test);
889✔
1455
  tcase_add_test(testcase, netaddr_fnmatch_test);
1456
  tcase_add_test(testcase, netaddr_get_sockaddr_test);
889✔
1457
  tcase_add_test(testcase, netaddr_get_sockaddr_len_test);
1458
  tcase_add_test(testcase, netaddr_set_sockaddr_test);
889✔
1459
  tcase_add_test(testcase, netaddr_set_sockaddr_any_test);
889✔
1460
  tcase_add_test(testcase, netaddr_get_inaddr_test);
889✔
1461
  tcase_add_test(testcase, netaddr_get_inaddr_len_test);
889✔
1462
  tcase_add_test(testcase, netaddr_get_port_test);
889✔
1463
  tcase_add_test(testcase, netaddr_set_port_test);
889✔
1464
  tcase_add_test(testcase, netaddr_set_reverse_dns_test);
889✔
1465
  tcase_add_test(testcase, netaddr_get_dnsstr_test);
889✔
1466
  tcase_add_test(testcase, netaddr_get_dnsstr_list_test);
889✔
1467
#if defined(PR_USE_IPV6)
889✔
1468
  tcase_add_test(testcase, netaddr_get_dnsstr_ipv6_test);
889✔
1469
#endif /* PR_USE_IPV6 */
889✔
1470
  tcase_add_test(testcase, netaddr_get_ipstr_test);
1471
  tcase_add_test(testcase, netaddr_validate_dns_str_test);
1472
  tcase_add_test(testcase, netaddr_get_localaddr_str_test);
889✔
1473
  tcase_add_test(testcase, netaddr_is_loopback_test);
1474
  tcase_add_test(testcase, netaddr_is_v4_test);
889✔
1475
  tcase_add_test(testcase, netaddr_is_v6_test);
889✔
1476
  tcase_add_test(testcase, netaddr_is_v4mappedv6_test);
1477
  tcase_add_test(testcase, netaddr_is_rfc1918_test);
1478
  tcase_add_test(testcase, netaddr_v6tov4_test);
1479
#if defined(PR_USE_IPV6)
1480
  tcase_add_test(testcase, netaddr_v4tov6_test);
1481
#endif /* PR_USE_IPV6 */
1482
  tcase_add_test(testcase, netaddr_disable_ipv6_test);
1483
  tcase_add_test(testcase, netaddr_enable_ipv6_test);
1484

1485
  /* Some of the DNS-related tests may take a little longer. */
1486
  tcase_set_timeout(testcase, 30);
1487

1488
  suite_add_tcase(suite, testcase);
1489
  return suite;
1490
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc