xref: /lighttpd1.4/src/t/test_configfile.c (revision 672891a7)
1 #include "first.h"
2 
3 #undef NDEBUG
4 #include <assert.h>
5 #include <stdlib.h>
6 #include <stdio.h>
7 
8 #include "configfile-glue.c"
9 
10 const struct {
11     const char *string;
12     const char *rmtstr;
13     int rmtfamily;
14     int expect;
15 } rmtmask[] = {
16     { "1.0.0.1/1",          "1.0.0.1",         AF_INET, 1 }
17    ,{ "254.254.254.254/1",  "254.0.0.1",       AF_INET, 1 }
18    ,{ "254.254.254.252/31", "254.254.254.253", AF_INET, 1 }
19    ,{ "254.254.254.253/31", "254.254.254.254", AF_INET, 0 }
20    ,{ "254.254.254.253/32", "254.254.254.254", AF_INET, 0 }
21    ,{ "254.254.254.254/32", "254.254.254.254", AF_INET, 1 }
22   #ifdef HAVE_IPV6
23    ,{ "2001::/3",           "2001::1",         AF_INET6, 1 }
24    ,{ "2f01::/5",           "2701::1",         AF_INET6, 0 }
25    ,{ "2f01::/32",          "2f01::1",         AF_INET6, 1 }
26    ,{ "2f01::/32",          "2f02::1",         AF_INET6, 0 }
27    ,{ "2001::1/127",        "2001::1",         AF_INET6, 1 }
28    ,{ "2001::1/127",        "2001::2",         AF_INET6, 0 }
29    ,{ "2001::2/128",        "2001::2",         AF_INET6, 1 }
30    ,{ "2001::2/128",        "2001::3",         AF_INET6, 0 }
31    ,{ "1.0.0.1/1",          "::ffff:1.0.0.1",          AF_INET6, 1 }
32    ,{ "254.254.254.254/1",  "::ffff:254.0.0.1",        AF_INET6, 1 }
33    ,{ "254.254.254.252/31", "::ffff:254.254.254.253",  AF_INET6, 1 }
34    ,{ "254.254.254.253/31", "::ffff:254.254.254.254",  AF_INET6, 0 }
35    ,{ "254.254.254.253/32", "::ffff:254.254.254.254",  AF_INET6, 0 }
36    ,{ "254.254.254.254/32", "::ffff:254.254.254.254",  AF_INET6, 1 }
37    ,{ "::ffff:1.0.0.1/97",          "1.0.0.1",         AF_INET, 1 }
38    ,{ "::ffff:254.254.254.254/97",  "254.0.0.1",       AF_INET, 1 }
39    ,{ "::ffff:254.254.254.252/127", "254.254.254.253", AF_INET, 1 }
40    ,{ "::ffff:254.254.254.253/127", "254.254.254.254", AF_INET, 0 }
41    ,{ "::ffff:254.254.254.253/128", "254.254.254.254", AF_INET, 0 }
42    ,{ "::ffff:254.254.254.254/128", "254.254.254.254", AF_INET, 1 }
43   #endif
44 };
45 
46 static void test_configfile_addrbuf_eq_remote_ip_mask (void) {
47 	request_st r;
48 	memset(&r, 0, sizeof(request_st));
49 	r.conf.errh              = log_error_st_init();
50 	r.conf.errh->errorlog_fd = -1; /* (disable) */
51 
52 	int i, m;
53 	buffer * const s = buffer_init();
54 	char *slash;
55 	sock_addr rmt;
56 
57 	for (i = 0; i < (int)(sizeof(rmtmask)/sizeof(rmtmask[0])); ++i) {
58 		if (1 != sock_addr_inet_pton(&rmt, rmtmask[i].rmtstr, rmtmask[i].rmtfamily, 0)) exit(-1); /*(bad test)*/
59 		buffer_copy_string(s, rmtmask[i].string);
60 		slash = strchr(s->ptr,'/'); assert(slash);
61 		m = config_addrbuf_eq_remote_ip_mask(&r, s, slash, &rmt);
62 		if (m != rmtmask[i].expect) {
63 			fprintf(stderr, "failed assertion: %s %s %s\n",
64 				rmtmask[i].string,
65 				rmtmask[i].expect ? "==" : "!=",
66 				rmtmask[i].rmtstr);
67 			exit(-1);
68 		}
69 	}
70 
71 	buffer_free(s);
72 	log_error_st_free(r.conf.errh);
73 }
74 
75 int main (void) {
76 	test_configfile_addrbuf_eq_remote_ip_mask();
77 
78 	return 0;
79 }
80