xref: /minix3/tests/lib/libc/sys/t_bind.c (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc /*	$NetBSD: t_bind.c,v 1.3 2015/04/05 23:28:10 rtr Exp $	*/
2*0a6a1f1dSLionel Sambuc /*
3*0a6a1f1dSLionel Sambuc  * Copyright (c) 2015 The NetBSD Foundation, Inc.
4*0a6a1f1dSLionel Sambuc  * All rights reserved.
5*0a6a1f1dSLionel Sambuc  *
6*0a6a1f1dSLionel Sambuc  * Redistribution and use in source and binary forms, with or without
7*0a6a1f1dSLionel Sambuc  * modification, are permitted provided that the following conditions
8*0a6a1f1dSLionel Sambuc  * are met:
9*0a6a1f1dSLionel Sambuc  * 1. Redistributions of source code must retain the above copyright
10*0a6a1f1dSLionel Sambuc  *    notice, this list of conditions and the following disclaimer.
11*0a6a1f1dSLionel Sambuc  * 2. Redistributions in binary form must reproduce the above copyright
12*0a6a1f1dSLionel Sambuc  *    notice, this list of conditions and the following disclaimer in the
13*0a6a1f1dSLionel Sambuc  *    documentation and/or other materials provided with the distribution.
14*0a6a1f1dSLionel Sambuc  *
15*0a6a1f1dSLionel Sambuc  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
16*0a6a1f1dSLionel Sambuc  * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
17*0a6a1f1dSLionel Sambuc  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18*0a6a1f1dSLionel Sambuc  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19*0a6a1f1dSLionel Sambuc  * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
20*0a6a1f1dSLionel Sambuc  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21*0a6a1f1dSLionel Sambuc  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
22*0a6a1f1dSLionel Sambuc  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23*0a6a1f1dSLionel Sambuc  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
24*0a6a1f1dSLionel Sambuc  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25*0a6a1f1dSLionel Sambuc  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26*0a6a1f1dSLionel Sambuc  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27*0a6a1f1dSLionel Sambuc  */
28*0a6a1f1dSLionel Sambuc 
29*0a6a1f1dSLionel Sambuc #include <errno.h>
30*0a6a1f1dSLionel Sambuc #include <stdlib.h>
31*0a6a1f1dSLionel Sambuc #include <string.h>
32*0a6a1f1dSLionel Sambuc 
33*0a6a1f1dSLionel Sambuc #include <unistd.h>
34*0a6a1f1dSLionel Sambuc 
35*0a6a1f1dSLionel Sambuc #include <sys/socket.h>
36*0a6a1f1dSLionel Sambuc #include <arpa/inet.h>
37*0a6a1f1dSLionel Sambuc #include <netinet/in.h>
38*0a6a1f1dSLionel Sambuc 
39*0a6a1f1dSLionel Sambuc #include <atf-c.h>
40*0a6a1f1dSLionel Sambuc 
41*0a6a1f1dSLionel Sambuc ATF_TC(bind_foreign_family);
42*0a6a1f1dSLionel Sambuc 
ATF_TC_HEAD(bind_foreign_family,tc)43*0a6a1f1dSLionel Sambuc ATF_TC_HEAD(bind_foreign_family, tc)
44*0a6a1f1dSLionel Sambuc {
45*0a6a1f1dSLionel Sambuc 	atf_tc_set_md_var(tc, "descr", "Checks that binding a socket "
46*0a6a1f1dSLionel Sambuc 	    "with a different address family fails");
47*0a6a1f1dSLionel Sambuc }
48*0a6a1f1dSLionel Sambuc 
ATF_TC_BODY(bind_foreign_family,tc)49*0a6a1f1dSLionel Sambuc ATF_TC_BODY(bind_foreign_family, tc)
50*0a6a1f1dSLionel Sambuc {
51*0a6a1f1dSLionel Sambuc 	struct sockaddr_in addr;
52*0a6a1f1dSLionel Sambuc 
53*0a6a1f1dSLionel Sambuc 	/* addr.sin_family = AF_UNSPEC = 0 */
54*0a6a1f1dSLionel Sambuc 	memset(&addr, 0, sizeof(addr));
55*0a6a1f1dSLionel Sambuc 
56*0a6a1f1dSLionel Sambuc 	/*
57*0a6a1f1dSLionel Sambuc 	 * it is not necessary to initialize sin_{addr,port} since
58*0a6a1f1dSLionel Sambuc 	 * those structure members shall not be accessed if bind
59*0a6a1f1dSLionel Sambuc 	 * fails correctly.
60*0a6a1f1dSLionel Sambuc 	 */
61*0a6a1f1dSLionel Sambuc 
62*0a6a1f1dSLionel Sambuc 	int sock = socket(AF_LOCAL, SOCK_STREAM, 0);
63*0a6a1f1dSLionel Sambuc 	ATF_REQUIRE(sock != -1);
64*0a6a1f1dSLionel Sambuc 
65*0a6a1f1dSLionel Sambuc 	/* should fail but currently doesn't */
66*0a6a1f1dSLionel Sambuc 	ATF_REQUIRE(-1 == bind(sock, (struct sockaddr *)&addr, sizeof(addr)));
67*0a6a1f1dSLionel Sambuc 	ATF_REQUIRE(EAFNOSUPPORT == errno);
68*0a6a1f1dSLionel Sambuc 
69*0a6a1f1dSLionel Sambuc 	close(sock);
70*0a6a1f1dSLionel Sambuc }
71*0a6a1f1dSLionel Sambuc 
ATF_TP_ADD_TCS(tp)72*0a6a1f1dSLionel Sambuc ATF_TP_ADD_TCS(tp)
73*0a6a1f1dSLionel Sambuc {
74*0a6a1f1dSLionel Sambuc 
75*0a6a1f1dSLionel Sambuc 	ATF_TP_ADD_TC(tp, bind_foreign_family);
76*0a6a1f1dSLionel Sambuc 
77*0a6a1f1dSLionel Sambuc 	return atf_no_error();
78*0a6a1f1dSLionel Sambuc }
79