File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / lighttpd / src / test_configfile.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Nov 2 10:35:00 2016 UTC (7 years, 8 months ago) by misho
Branches: lighttpd, MAIN
CVS tags: v1_4_41p8, HEAD
lighttpd 1.4.41

    1: #include "configfile-glue.c"
    2: 
    3: #include <assert.h>
    4: #include <stdlib.h>
    5: #include <stdio.h>
    6: 
    7: const struct {
    8:     const char *string;
    9:     const char *rmtstr;
   10:     int rmtfamily;
   11:     int expect;
   12: } rmtmask[] = {
   13:     { "1.0.0.1/1",          "1.0.0.1",         AF_INET, 1 }
   14:    ,{ "254.254.254.254/1",  "254.0.0.1",       AF_INET, 1 }
   15:    ,{ "254.254.254.252/31", "254.254.254.253", AF_INET, 1 }
   16:    ,{ "254.254.254.253/31", "254.254.254.254", AF_INET, 0 }
   17:    ,{ "254.254.254.253/32", "254.254.254.254", AF_INET, 0 }
   18:    ,{ "254.254.254.254/32", "254.254.254.254", AF_INET, 1 }
   19:   #ifdef HAVE_IPV6
   20:    ,{ "2001::/3",           "2001::1",         AF_INET6, 1 }
   21:    ,{ "2f01::/5",           "2701::1",         AF_INET6, 0 }
   22:    ,{ "2f01::/32",          "2f01::1",         AF_INET6, 1 }
   23:    ,{ "2f01::/32",          "2f02::1",         AF_INET6, 0 }
   24:    ,{ "2001::1/127",        "2001::1",         AF_INET6, 1 }
   25:    ,{ "2001::1/127",        "2001::2",         AF_INET6, 0 }
   26:    ,{ "2001::2/128",        "2001::2",         AF_INET6, 1 }
   27:    ,{ "2001::2/128",        "2001::3",         AF_INET6, 0 }
   28:    ,{ "1.0.0.1/1",          "::ffff:1.0.0.1",          AF_INET6, 1 }
   29:    ,{ "254.254.254.254/1",  "::ffff:254.0.0.1",        AF_INET6, 1 }
   30:    ,{ "254.254.254.252/31", "::ffff:254.254.254.253",  AF_INET6, 1 }
   31:    ,{ "254.254.254.253/31", "::ffff:254.254.254.254",  AF_INET6, 0 }
   32:    ,{ "254.254.254.253/32", "::ffff:254.254.254.254",  AF_INET6, 0 }
   33:    ,{ "254.254.254.254/32", "::ffff:254.254.254.254",  AF_INET6, 1 }
   34:    ,{ "::ffff:1.0.0.1/97",          "1.0.0.1",         AF_INET, 1 }
   35:    ,{ "::ffff:254.254.254.254/97",  "254.0.0.1",       AF_INET, 1 }
   36:    ,{ "::ffff:254.254.254.252/127", "254.254.254.253", AF_INET, 1 }
   37:    ,{ "::ffff:254.254.254.253/127", "254.254.254.254", AF_INET, 0 }
   38:    ,{ "::ffff:254.254.254.253/128", "254.254.254.254", AF_INET, 0 }
   39:    ,{ "::ffff:254.254.254.254/128", "254.254.254.254", AF_INET, 1 }
   40:   #endif
   41: };
   42: 
   43: static void test_configfile_addrbuf_eq_remote_ip_mask (void) {
   44: 	int i, m;
   45: 	buffer * const s = buffer_init();
   46: 	char *slash;
   47: 	sock_addr rmt;
   48: 
   49: 	for (i = 0; i < (int)(sizeof(rmtmask)/sizeof(rmtmask[0])); ++i) {
   50: 	      #ifndef HAVE_INET_PTON
   51: 		rmt.ipv4.sin_family = AF_INET;
   52: 		rmt.ipv4.sin_addr.s_addr = inet_addr(rmtmask[i].rmtstr);
   53: 	      #else
   54: 		if (rmtmask[i].rmtfamily == AF_INET) {
   55: 			rmt.ipv4.sin_family = AF_INET;
   56: 			inet_pton(AF_INET, rmtmask[i].rmtstr, &rmt.ipv4.sin_addr);
   57: 		#ifdef HAVE_IPV6
   58: 		} else if (rmtmask[i].rmtfamily == AF_INET6) {
   59: 			rmt.ipv6.sin6_family = AF_INET6;
   60: 			inet_pton(AF_INET6, rmtmask[i].rmtstr, &rmt.ipv6.sin6_addr);
   61: 		#endif
   62: 		} else {
   63: 			continue;
   64: 		}
   65: 	      #endif
   66: 		buffer_copy_string(s, rmtmask[i].string);
   67: 		slash = strchr(s->ptr,'/'); assert(slash);
   68: 		m = config_addrbuf_eq_remote_ip_mask(NULL, s, slash, &rmt);
   69: 		if (m != rmtmask[i].expect) {
   70: 			fprintf(stderr, "failed assertion: %s %s %s\n",
   71: 				rmtmask[i].string,
   72: 				rmtmask[i].expect ? "==" : "!=",
   73: 				rmtmask[i].rmtstr);
   74: 			exit(-1);
   75: 		}
   76: 	}
   77: 
   78: 	buffer_free(s);
   79: }
   80: 
   81: int main (void) {
   82: 	test_configfile_addrbuf_eq_remote_ip_mask();
   83: 
   84: 	return 0;
   85: }
   86: 
   87: /*
   88:  * stub functions (for linking)
   89:  */
   90: void fd_close_on_exec(int fd) { UNUSED(fd); }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>