1ad2afa8cSAlan Somers /*- 2ad2afa8cSAlan Somers * Copyright (c) 2018 Aniket Pandey 3ad2afa8cSAlan Somers * 4ad2afa8cSAlan Somers * Redistribution and use in source and binary forms, with or without 5ad2afa8cSAlan Somers * modification, are permitted provided that the following conditions 6ad2afa8cSAlan Somers * are met: 7ad2afa8cSAlan Somers * 1. Redistributions of source code must retain the above copyright 8ad2afa8cSAlan Somers * notice, this list of conditions and the following disclaimer. 9ad2afa8cSAlan Somers * 2. Redistributions in binary form must reproduce the above copyright 10ad2afa8cSAlan Somers * notice, this list of conditions and the following disclaimer in the 11ad2afa8cSAlan Somers * documentation and/or other materials provided with the distribution. 12ad2afa8cSAlan Somers * 13ad2afa8cSAlan Somers * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14ad2afa8cSAlan Somers * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15ad2afa8cSAlan Somers * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16ad2afa8cSAlan Somers * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17ad2afa8cSAlan Somers * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18ad2afa8cSAlan Somers * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19ad2afa8cSAlan Somers * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 20ad2afa8cSAlan Somers * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21ad2afa8cSAlan Somers * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22ad2afa8cSAlan Somers * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23ad2afa8cSAlan Somers * SUCH DAMAGE. 24ad2afa8cSAlan Somers * 25ad2afa8cSAlan Somers * $FreeBSD$ 26ad2afa8cSAlan Somers */ 27ad2afa8cSAlan Somers 28ad2afa8cSAlan Somers #include <sys/types.h> 29ad2afa8cSAlan Somers #include <sys/socket.h> 30*b92435ccSAlan Somers #include <sys/stat.h> 31*b92435ccSAlan Somers #include <sys/uio.h> 32babaf5cbSAlan Somers #include <sys/un.h> 33ad2afa8cSAlan Somers 34ad2afa8cSAlan Somers #include <atf-c.h> 35babaf5cbSAlan Somers #include <fcntl.h> 36ad2afa8cSAlan Somers #include <stdarg.h> 37*b92435ccSAlan Somers #include <unistd.h> 38ad2afa8cSAlan Somers 39ad2afa8cSAlan Somers #include "utils.h" 40ad2afa8cSAlan Somers 41*b92435ccSAlan Somers #define MAX_DATA 128 42babaf5cbSAlan Somers #define SERVER_PATH "server" 43babaf5cbSAlan Somers 44*b92435ccSAlan Somers static pid_t pid; 45*b92435ccSAlan Somers static mode_t mode = 0777; 46943f585cSAlan Somers static int sockfd, sockfd2, connectfd; 47943f585cSAlan Somers static ssize_t data_bytes; 48*b92435ccSAlan Somers static socklen_t len = sizeof(struct sockaddr_un); 49*b92435ccSAlan Somers static struct iovec io1, io2; 50ad2afa8cSAlan Somers static struct pollfd fds[1]; 51943f585cSAlan Somers static struct sockaddr_un server; 52*b92435ccSAlan Somers static struct msghdr sendbuf, recvbuf; 53*b92435ccSAlan Somers static char extregex[MAX_DATA]; 54943f585cSAlan Somers static char data[MAX_DATA]; 55943f585cSAlan Somers static char msgbuff[MAX_DATA] = "This message does not exist"; 56ad2afa8cSAlan Somers static const char *auclass = "nt"; 57*b92435ccSAlan Somers static const char *path = "fileforaudit"; 58babaf5cbSAlan Somers static const char *nosupregex = "return,failure : Address family " 59ad2afa8cSAlan Somers "not supported by protocol family"; 60b84a044bSAlan Somers static const char *invalregex = "return,failure : Bad file descriptor"; 61ad2afa8cSAlan Somers 62ad2afa8cSAlan Somers /* 63*b92435ccSAlan Somers * Initialize iovec structure to be used as a field of struct msghdr 64*b92435ccSAlan Somers */ 65*b92435ccSAlan Somers static void 66*b92435ccSAlan Somers init_iov(struct iovec *io, char msgbuf[], int datalen) 67*b92435ccSAlan Somers { 68*b92435ccSAlan Somers io->iov_base = msgbuf; 69*b92435ccSAlan Somers io->iov_len = datalen; 70*b92435ccSAlan Somers } 71*b92435ccSAlan Somers 72*b92435ccSAlan Somers /* 73*b92435ccSAlan Somers * Initialize msghdr structure for communication via datagram sockets 74*b92435ccSAlan Somers */ 75*b92435ccSAlan Somers static void 76*b92435ccSAlan Somers init_msghdr(struct msghdr *hdrbuf, struct iovec *io, struct sockaddr_un *addr) 77*b92435ccSAlan Somers { 78*b92435ccSAlan Somers socklen_t length; 79*b92435ccSAlan Somers 80*b92435ccSAlan Somers bzero(hdrbuf, sizeof(*hdrbuf)); 81*b92435ccSAlan Somers length = (socklen_t)sizeof(struct sockaddr_un); 82*b92435ccSAlan Somers hdrbuf->msg_name = addr; 83*b92435ccSAlan Somers hdrbuf->msg_namelen = length; 84*b92435ccSAlan Somers hdrbuf->msg_iov = io; 85*b92435ccSAlan Somers hdrbuf->msg_iovlen = 1; 86*b92435ccSAlan Somers } 87*b92435ccSAlan Somers 88*b92435ccSAlan Somers /* 89ad2afa8cSAlan Somers * Variadic function to close socket descriptors 90ad2afa8cSAlan Somers */ 91ad2afa8cSAlan Somers static void 92ad2afa8cSAlan Somers close_sockets(int count, ...) 93ad2afa8cSAlan Somers { 94ad2afa8cSAlan Somers int sockd; 95ad2afa8cSAlan Somers va_list socklist; 96ad2afa8cSAlan Somers va_start(socklist, count); 97ad2afa8cSAlan Somers for (sockd = 0; sockd < count; sockd++) { 98ad2afa8cSAlan Somers close(va_arg(socklist, int)); 99ad2afa8cSAlan Somers } 100ad2afa8cSAlan Somers va_end(socklist); 101ad2afa8cSAlan Somers } 102ad2afa8cSAlan Somers 103babaf5cbSAlan Somers /* 104babaf5cbSAlan Somers * Assign local filesystem address to a Unix domain socket 105babaf5cbSAlan Somers */ 106babaf5cbSAlan Somers static void 107943f585cSAlan Somers assign_address(struct sockaddr_un *serveraddr) 108babaf5cbSAlan Somers { 109943f585cSAlan Somers memset(serveraddr, 0, sizeof(*serveraddr)); 110943f585cSAlan Somers serveraddr->sun_family = AF_UNIX; 111943f585cSAlan Somers strcpy(serveraddr->sun_path, SERVER_PATH); 112babaf5cbSAlan Somers } 113babaf5cbSAlan Somers 114ad2afa8cSAlan Somers 115ad2afa8cSAlan Somers ATF_TC_WITH_CLEANUP(socket_success); 116ad2afa8cSAlan Somers ATF_TC_HEAD(socket_success, tc) 117ad2afa8cSAlan Somers { 118ad2afa8cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 119ad2afa8cSAlan Somers "socket(2) call"); 120ad2afa8cSAlan Somers } 121ad2afa8cSAlan Somers 122ad2afa8cSAlan Somers ATF_TC_BODY(socket_success, tc) 123ad2afa8cSAlan Somers { 124ad2afa8cSAlan Somers FILE *pipefd = setup(fds, auclass); 125ad2afa8cSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 126ad2afa8cSAlan Somers /* Check the presence of sockfd in audit record */ 127ad2afa8cSAlan Somers snprintf(extregex, sizeof(extregex), "socket.*ret.*success,%d", sockfd); 128ad2afa8cSAlan Somers check_audit(fds, extregex, pipefd); 129ad2afa8cSAlan Somers close(sockfd); 130ad2afa8cSAlan Somers } 131ad2afa8cSAlan Somers 132ad2afa8cSAlan Somers ATF_TC_CLEANUP(socket_success, tc) 133ad2afa8cSAlan Somers { 134ad2afa8cSAlan Somers cleanup(); 135ad2afa8cSAlan Somers } 136ad2afa8cSAlan Somers 137ad2afa8cSAlan Somers 138ad2afa8cSAlan Somers ATF_TC_WITH_CLEANUP(socket_failure); 139ad2afa8cSAlan Somers ATF_TC_HEAD(socket_failure, tc) 140ad2afa8cSAlan Somers { 141ad2afa8cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 142ad2afa8cSAlan Somers "socket(2) call"); 143ad2afa8cSAlan Somers } 144ad2afa8cSAlan Somers 145ad2afa8cSAlan Somers ATF_TC_BODY(socket_failure, tc) 146ad2afa8cSAlan Somers { 147babaf5cbSAlan Somers snprintf(extregex, sizeof(extregex), "socket.*%s", nosupregex); 148ad2afa8cSAlan Somers FILE *pipefd = setup(fds, auclass); 149ad2afa8cSAlan Somers /* Failure reason: Unsupported value of 'domain' argument: 0 */ 150ad2afa8cSAlan Somers ATF_REQUIRE_EQ(-1, socket(0, SOCK_STREAM, 0)); 151ad2afa8cSAlan Somers check_audit(fds, extregex, pipefd); 152ad2afa8cSAlan Somers } 153ad2afa8cSAlan Somers 154ad2afa8cSAlan Somers ATF_TC_CLEANUP(socket_failure, tc) 155ad2afa8cSAlan Somers { 156ad2afa8cSAlan Somers cleanup(); 157ad2afa8cSAlan Somers } 158ad2afa8cSAlan Somers 159ad2afa8cSAlan Somers 160ad2afa8cSAlan Somers ATF_TC_WITH_CLEANUP(socketpair_success); 161ad2afa8cSAlan Somers ATF_TC_HEAD(socketpair_success, tc) 162ad2afa8cSAlan Somers { 163ad2afa8cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 164ad2afa8cSAlan Somers "socketpair(2) call"); 165ad2afa8cSAlan Somers } 166ad2afa8cSAlan Somers 167ad2afa8cSAlan Somers ATF_TC_BODY(socketpair_success, tc) 168ad2afa8cSAlan Somers { 169ad2afa8cSAlan Somers int sv[2]; 170ad2afa8cSAlan Somers FILE *pipefd = setup(fds, auclass); 171ad2afa8cSAlan Somers ATF_REQUIRE_EQ(0, socketpair(PF_UNIX, SOCK_STREAM, 0, sv)); 172ad2afa8cSAlan Somers 173ad2afa8cSAlan Somers /* Check for 0x0 (argument 3: default protocol) in the audit record */ 174ad2afa8cSAlan Somers snprintf(extregex, sizeof(extregex), "socketpair.*0x0.*return,success"); 175ad2afa8cSAlan Somers check_audit(fds, extregex, pipefd); 176ad2afa8cSAlan Somers close_sockets(2, sv[0], sv[1]); 177ad2afa8cSAlan Somers } 178ad2afa8cSAlan Somers 179ad2afa8cSAlan Somers ATF_TC_CLEANUP(socketpair_success, tc) 180ad2afa8cSAlan Somers { 181ad2afa8cSAlan Somers cleanup(); 182ad2afa8cSAlan Somers } 183ad2afa8cSAlan Somers 184ad2afa8cSAlan Somers 185ad2afa8cSAlan Somers ATF_TC_WITH_CLEANUP(socketpair_failure); 186ad2afa8cSAlan Somers ATF_TC_HEAD(socketpair_failure, tc) 187ad2afa8cSAlan Somers { 188ad2afa8cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 189ad2afa8cSAlan Somers "socketpair(2) call"); 190ad2afa8cSAlan Somers } 191ad2afa8cSAlan Somers 192ad2afa8cSAlan Somers ATF_TC_BODY(socketpair_failure, tc) 193ad2afa8cSAlan Somers { 194babaf5cbSAlan Somers snprintf(extregex, sizeof(extregex), "socketpair.*%s", nosupregex); 195ad2afa8cSAlan Somers FILE *pipefd = setup(fds, auclass); 196ad2afa8cSAlan Somers /* Failure reason: Unsupported value of 'domain' argument: 0 */ 197ad2afa8cSAlan Somers ATF_REQUIRE_EQ(-1, socketpair(0, SOCK_STREAM, 0, NULL)); 198ad2afa8cSAlan Somers check_audit(fds, extregex, pipefd); 199ad2afa8cSAlan Somers } 200ad2afa8cSAlan Somers 201ad2afa8cSAlan Somers ATF_TC_CLEANUP(socketpair_failure, tc) 202ad2afa8cSAlan Somers { 203ad2afa8cSAlan Somers cleanup(); 204ad2afa8cSAlan Somers } 205ad2afa8cSAlan Somers 206ad2afa8cSAlan Somers 207ad2afa8cSAlan Somers ATF_TC_WITH_CLEANUP(setsockopt_success); 208ad2afa8cSAlan Somers ATF_TC_HEAD(setsockopt_success, tc) 209ad2afa8cSAlan Somers { 210ad2afa8cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 211ad2afa8cSAlan Somers "setsockopt(2) call"); 212ad2afa8cSAlan Somers } 213ad2afa8cSAlan Somers 214ad2afa8cSAlan Somers ATF_TC_BODY(setsockopt_success, tc) 215ad2afa8cSAlan Somers { 216ad2afa8cSAlan Somers int tr = 1; 217ad2afa8cSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 218ad2afa8cSAlan Somers /* Check the presence of sockfd in audit record */ 219ad2afa8cSAlan Somers snprintf(extregex, sizeof(extregex), 220ad2afa8cSAlan Somers "setsockopt.*0x%x.*return,success", sockfd); 221ad2afa8cSAlan Somers 222ad2afa8cSAlan Somers FILE *pipefd = setup(fds, auclass); 223ad2afa8cSAlan Somers ATF_REQUIRE_EQ(0, setsockopt(sockfd, SOL_SOCKET, 224ad2afa8cSAlan Somers SO_REUSEADDR, &tr, sizeof(int))); 225ad2afa8cSAlan Somers check_audit(fds, extregex, pipefd); 226ad2afa8cSAlan Somers close(sockfd); 227ad2afa8cSAlan Somers } 228ad2afa8cSAlan Somers 229ad2afa8cSAlan Somers ATF_TC_CLEANUP(setsockopt_success, tc) 230ad2afa8cSAlan Somers { 231ad2afa8cSAlan Somers cleanup(); 232ad2afa8cSAlan Somers } 233ad2afa8cSAlan Somers 234ad2afa8cSAlan Somers 235ad2afa8cSAlan Somers ATF_TC_WITH_CLEANUP(setsockopt_failure); 236ad2afa8cSAlan Somers ATF_TC_HEAD(setsockopt_failure, tc) 237ad2afa8cSAlan Somers { 238ad2afa8cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 239ad2afa8cSAlan Somers "setsockopt(2) call"); 240ad2afa8cSAlan Somers } 241ad2afa8cSAlan Somers 242ad2afa8cSAlan Somers ATF_TC_BODY(setsockopt_failure, tc) 243ad2afa8cSAlan Somers { 244babaf5cbSAlan Somers snprintf(extregex, sizeof(extregex), "setsockopt.*%s", invalregex); 245ad2afa8cSAlan Somers FILE *pipefd = setup(fds, auclass); 246babaf5cbSAlan Somers /* Failure reason: Invalid socket descriptor */ 247943f585cSAlan Somers ATF_REQUIRE_EQ(-1, setsockopt(-1, SOL_SOCKET, 0, NULL, 0)); 248babaf5cbSAlan Somers check_audit(fds, extregex, pipefd); 249ad2afa8cSAlan Somers } 250ad2afa8cSAlan Somers 251ad2afa8cSAlan Somers ATF_TC_CLEANUP(setsockopt_failure, tc) 252ad2afa8cSAlan Somers { 253ad2afa8cSAlan Somers cleanup(); 254ad2afa8cSAlan Somers } 255ad2afa8cSAlan Somers 256ad2afa8cSAlan Somers 257babaf5cbSAlan Somers ATF_TC_WITH_CLEANUP(bind_success); 258babaf5cbSAlan Somers ATF_TC_HEAD(bind_success, tc) 259babaf5cbSAlan Somers { 260babaf5cbSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 261babaf5cbSAlan Somers "bind(2) call"); 262babaf5cbSAlan Somers } 263babaf5cbSAlan Somers 264babaf5cbSAlan Somers ATF_TC_BODY(bind_success, tc) 265babaf5cbSAlan Somers { 266babaf5cbSAlan Somers assign_address(&server); 267babaf5cbSAlan Somers /* Preliminary socket setup */ 268babaf5cbSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 269babaf5cbSAlan Somers /* Check the presence of AF_UNIX address path in audit record */ 270babaf5cbSAlan Somers snprintf(extregex, sizeof(extregex), 271babaf5cbSAlan Somers "bind.*unix.*%s.*return,success", SERVER_PATH); 272babaf5cbSAlan Somers 273babaf5cbSAlan Somers FILE *pipefd = setup(fds, auclass); 274babaf5cbSAlan Somers ATF_REQUIRE_EQ(0, bind(sockfd, (struct sockaddr *)&server, len)); 275babaf5cbSAlan Somers check_audit(fds, extregex, pipefd); 276babaf5cbSAlan Somers close(sockfd); 277babaf5cbSAlan Somers } 278babaf5cbSAlan Somers 279babaf5cbSAlan Somers ATF_TC_CLEANUP(bind_success, tc) 280babaf5cbSAlan Somers { 281babaf5cbSAlan Somers cleanup(); 282babaf5cbSAlan Somers } 283babaf5cbSAlan Somers 284babaf5cbSAlan Somers 285babaf5cbSAlan Somers ATF_TC_WITH_CLEANUP(bind_failure); 286babaf5cbSAlan Somers ATF_TC_HEAD(bind_failure, tc) 287babaf5cbSAlan Somers { 288babaf5cbSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 289babaf5cbSAlan Somers "bind(2) call"); 290babaf5cbSAlan Somers } 291babaf5cbSAlan Somers 292babaf5cbSAlan Somers ATF_TC_BODY(bind_failure, tc) 293babaf5cbSAlan Somers { 294babaf5cbSAlan Somers assign_address(&server); 295babaf5cbSAlan Somers /* Check the presence of AF_UNIX path in audit record */ 296babaf5cbSAlan Somers snprintf(extregex, sizeof(extregex), 297babaf5cbSAlan Somers "bind.*%s.*return,failure", SERVER_PATH); 298babaf5cbSAlan Somers 299babaf5cbSAlan Somers FILE *pipefd = setup(fds, auclass); 300babaf5cbSAlan Somers /* Failure reason: Invalid socket descriptor */ 301babaf5cbSAlan Somers ATF_REQUIRE_EQ(-1, bind(0, (struct sockaddr *)&server, len)); 302babaf5cbSAlan Somers check_audit(fds, extregex, pipefd); 303babaf5cbSAlan Somers } 304babaf5cbSAlan Somers 305babaf5cbSAlan Somers ATF_TC_CLEANUP(bind_failure, tc) 306babaf5cbSAlan Somers { 307babaf5cbSAlan Somers cleanup(); 308babaf5cbSAlan Somers } 309babaf5cbSAlan Somers 310babaf5cbSAlan Somers 311babaf5cbSAlan Somers ATF_TC_WITH_CLEANUP(bindat_success); 312babaf5cbSAlan Somers ATF_TC_HEAD(bindat_success, tc) 313babaf5cbSAlan Somers { 314babaf5cbSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 315babaf5cbSAlan Somers "bindat(2) call"); 316babaf5cbSAlan Somers } 317babaf5cbSAlan Somers 318babaf5cbSAlan Somers ATF_TC_BODY(bindat_success, tc) 319babaf5cbSAlan Somers { 320babaf5cbSAlan Somers assign_address(&server); 321babaf5cbSAlan Somers /* Preliminary socket setup */ 322babaf5cbSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 323babaf5cbSAlan Somers /* Check the presence of socket descriptor in audit record */ 324babaf5cbSAlan Somers snprintf(extregex, sizeof(extregex), 325babaf5cbSAlan Somers "bindat.*0x%x.*return,success", sockfd); 326babaf5cbSAlan Somers 327babaf5cbSAlan Somers FILE *pipefd = setup(fds, auclass); 328babaf5cbSAlan Somers ATF_REQUIRE_EQ(0, bindat(AT_FDCWD, sockfd, 329babaf5cbSAlan Somers (struct sockaddr *)&server, len)); 330babaf5cbSAlan Somers check_audit(fds, extregex, pipefd); 331babaf5cbSAlan Somers close(sockfd); 332babaf5cbSAlan Somers } 333babaf5cbSAlan Somers 334babaf5cbSAlan Somers ATF_TC_CLEANUP(bindat_success, tc) 335babaf5cbSAlan Somers { 336babaf5cbSAlan Somers cleanup(); 337babaf5cbSAlan Somers } 338babaf5cbSAlan Somers 339babaf5cbSAlan Somers 340babaf5cbSAlan Somers ATF_TC_WITH_CLEANUP(bindat_failure); 341babaf5cbSAlan Somers ATF_TC_HEAD(bindat_failure, tc) 342babaf5cbSAlan Somers { 343babaf5cbSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 344babaf5cbSAlan Somers "bindat(2) call"); 345babaf5cbSAlan Somers } 346babaf5cbSAlan Somers 347babaf5cbSAlan Somers ATF_TC_BODY(bindat_failure, tc) 348babaf5cbSAlan Somers { 349babaf5cbSAlan Somers assign_address(&server); 350babaf5cbSAlan Somers snprintf(extregex, sizeof(extregex), "bindat.*%s", invalregex); 351babaf5cbSAlan Somers 352babaf5cbSAlan Somers FILE *pipefd = setup(fds, auclass); 353babaf5cbSAlan Somers /* Failure reason: Invalid socket descriptor */ 354b84a044bSAlan Somers ATF_REQUIRE_EQ(-1, bindat(AT_FDCWD, -1, 355babaf5cbSAlan Somers (struct sockaddr *)&server, len)); 356babaf5cbSAlan Somers check_audit(fds, extregex, pipefd); 357babaf5cbSAlan Somers } 358babaf5cbSAlan Somers 359babaf5cbSAlan Somers ATF_TC_CLEANUP(bindat_failure, tc) 360babaf5cbSAlan Somers { 361babaf5cbSAlan Somers cleanup(); 362babaf5cbSAlan Somers } 363babaf5cbSAlan Somers 364babaf5cbSAlan Somers 365babaf5cbSAlan Somers ATF_TC_WITH_CLEANUP(listen_success); 366babaf5cbSAlan Somers ATF_TC_HEAD(listen_success, tc) 367babaf5cbSAlan Somers { 368babaf5cbSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 369babaf5cbSAlan Somers "listen(2) call"); 370babaf5cbSAlan Somers } 371babaf5cbSAlan Somers 372babaf5cbSAlan Somers ATF_TC_BODY(listen_success, tc) 373babaf5cbSAlan Somers { 374babaf5cbSAlan Somers assign_address(&server); 375babaf5cbSAlan Somers /* Preliminary socket setup */ 376babaf5cbSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 377babaf5cbSAlan Somers ATF_REQUIRE_EQ(0, bind(sockfd, (struct sockaddr *)&server, len)); 378babaf5cbSAlan Somers /* Check the presence of socket descriptor in the audit record */ 379babaf5cbSAlan Somers snprintf(extregex, sizeof(extregex), 380babaf5cbSAlan Somers "listen.*0x%x.*return,success", sockfd); 381babaf5cbSAlan Somers 382babaf5cbSAlan Somers FILE *pipefd = setup(fds, auclass); 383babaf5cbSAlan Somers ATF_REQUIRE_EQ(0, listen(sockfd, 1)); 384babaf5cbSAlan Somers check_audit(fds, extregex, pipefd); 385babaf5cbSAlan Somers close(sockfd); 386babaf5cbSAlan Somers } 387babaf5cbSAlan Somers 388babaf5cbSAlan Somers ATF_TC_CLEANUP(listen_success, tc) 389babaf5cbSAlan Somers { 390babaf5cbSAlan Somers cleanup(); 391babaf5cbSAlan Somers } 392babaf5cbSAlan Somers 393babaf5cbSAlan Somers 394babaf5cbSAlan Somers ATF_TC_WITH_CLEANUP(listen_failure); 395babaf5cbSAlan Somers ATF_TC_HEAD(listen_failure, tc) 396babaf5cbSAlan Somers { 397babaf5cbSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 398babaf5cbSAlan Somers "listen(2) call"); 399babaf5cbSAlan Somers } 400babaf5cbSAlan Somers 401babaf5cbSAlan Somers ATF_TC_BODY(listen_failure, tc) 402babaf5cbSAlan Somers { 403babaf5cbSAlan Somers snprintf(extregex, sizeof(extregex), "listen.*%s", invalregex); 404babaf5cbSAlan Somers FILE *pipefd = setup(fds, auclass); 405babaf5cbSAlan Somers /* Failure reason: Invalid socket descriptor */ 406b84a044bSAlan Somers ATF_REQUIRE_EQ(-1, listen(-1, 1)); 407babaf5cbSAlan Somers check_audit(fds, extregex, pipefd); 408babaf5cbSAlan Somers } 409babaf5cbSAlan Somers 410babaf5cbSAlan Somers ATF_TC_CLEANUP(listen_failure, tc) 411babaf5cbSAlan Somers { 412babaf5cbSAlan Somers cleanup(); 413babaf5cbSAlan Somers } 414babaf5cbSAlan Somers 415babaf5cbSAlan Somers 416b84a044bSAlan Somers ATF_TC_WITH_CLEANUP(connect_success); 417b84a044bSAlan Somers ATF_TC_HEAD(connect_success, tc) 418b84a044bSAlan Somers { 419b84a044bSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 420b84a044bSAlan Somers "connect(2) call"); 421b84a044bSAlan Somers } 422b84a044bSAlan Somers 423b84a044bSAlan Somers ATF_TC_BODY(connect_success, tc) 424b84a044bSAlan Somers { 425b84a044bSAlan Somers assign_address(&server); 426943f585cSAlan Somers /* Setup a server socket and bind to the specified address */ 427943f585cSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 428b84a044bSAlan Somers ATF_REQUIRE_EQ(0, bind(sockfd, (struct sockaddr *)&server, len)); 429b84a044bSAlan Somers ATF_REQUIRE_EQ(0, listen(sockfd, 1)); 430b84a044bSAlan Somers 431b84a044bSAlan Somers /* Set up "blocking" client socket */ 432b84a044bSAlan Somers ATF_REQUIRE((sockfd2 = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 433b84a044bSAlan Somers 434b84a044bSAlan Somers /* Audit record must contain AF_UNIX address path & sockfd2 */ 435b84a044bSAlan Somers snprintf(extregex, sizeof(extregex), 436b84a044bSAlan Somers "connect.*0x%x.*%s.*success", sockfd2, SERVER_PATH); 437b84a044bSAlan Somers 438b84a044bSAlan Somers FILE *pipefd = setup(fds, auclass); 439b84a044bSAlan Somers ATF_REQUIRE_EQ(0, connect(sockfd2, (struct sockaddr *)&server, len)); 440b84a044bSAlan Somers check_audit(fds, extregex, pipefd); 441b84a044bSAlan Somers 442b84a044bSAlan Somers /* Close all socket descriptors */ 443b84a044bSAlan Somers close_sockets(2, sockfd, sockfd2); 444b84a044bSAlan Somers } 445b84a044bSAlan Somers 446b84a044bSAlan Somers ATF_TC_CLEANUP(connect_success, tc) 447b84a044bSAlan Somers { 448b84a044bSAlan Somers cleanup(); 449b84a044bSAlan Somers } 450b84a044bSAlan Somers 451b84a044bSAlan Somers 452b84a044bSAlan Somers ATF_TC_WITH_CLEANUP(connect_failure); 453b84a044bSAlan Somers ATF_TC_HEAD(connect_failure, tc) 454b84a044bSAlan Somers { 455b84a044bSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 456b84a044bSAlan Somers "connect(2) call"); 457b84a044bSAlan Somers } 458b84a044bSAlan Somers 459b84a044bSAlan Somers ATF_TC_BODY(connect_failure, tc) 460b84a044bSAlan Somers { 461b84a044bSAlan Somers assign_address(&server); 462b84a044bSAlan Somers /* Audit record must contain AF_UNIX address path */ 463b84a044bSAlan Somers snprintf(extregex, sizeof(extregex), 464b84a044bSAlan Somers "connect.*%s.*return,failure", SERVER_PATH); 465b84a044bSAlan Somers 466b84a044bSAlan Somers FILE *pipefd = setup(fds, auclass); 467b84a044bSAlan Somers /* Failure reason: Invalid socket descriptor */ 468b84a044bSAlan Somers ATF_REQUIRE_EQ(-1, connect(-1, (struct sockaddr *)&server, len)); 469b84a044bSAlan Somers check_audit(fds, extregex, pipefd); 470b84a044bSAlan Somers } 471b84a044bSAlan Somers 472b84a044bSAlan Somers ATF_TC_CLEANUP(connect_failure, tc) 473b84a044bSAlan Somers { 474b84a044bSAlan Somers cleanup(); 475b84a044bSAlan Somers } 476b84a044bSAlan Somers 477b84a044bSAlan Somers 478b84a044bSAlan Somers ATF_TC_WITH_CLEANUP(connectat_success); 479b84a044bSAlan Somers ATF_TC_HEAD(connectat_success, tc) 480b84a044bSAlan Somers { 481b84a044bSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 482b84a044bSAlan Somers "connectat(2) call"); 483b84a044bSAlan Somers } 484b84a044bSAlan Somers 485b84a044bSAlan Somers ATF_TC_BODY(connectat_success, tc) 486b84a044bSAlan Somers { 487b84a044bSAlan Somers assign_address(&server); 488943f585cSAlan Somers /* Setup a server socket and bind to the specified address */ 489943f585cSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 490b84a044bSAlan Somers ATF_REQUIRE_EQ(0, bind(sockfd, (struct sockaddr *)&server, len)); 491b84a044bSAlan Somers ATF_REQUIRE_EQ(0, listen(sockfd, 1)); 492b84a044bSAlan Somers 493b84a044bSAlan Somers /* Set up "blocking" client socket */ 494b84a044bSAlan Somers ATF_REQUIRE((sockfd2 = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 495b84a044bSAlan Somers 496b84a044bSAlan Somers /* Audit record must contain sockfd2 */ 497b84a044bSAlan Somers snprintf(extregex, sizeof(extregex), 498b84a044bSAlan Somers "connectat.*0x%x.*return,success", sockfd2); 499b84a044bSAlan Somers 500b84a044bSAlan Somers FILE *pipefd = setup(fds, auclass); 501b84a044bSAlan Somers ATF_REQUIRE_EQ(0, connectat(AT_FDCWD, sockfd2, 502b84a044bSAlan Somers (struct sockaddr *)&server, len)); 503b84a044bSAlan Somers check_audit(fds, extregex, pipefd); 504b84a044bSAlan Somers 505b84a044bSAlan Somers /* Close all socket descriptors */ 506b84a044bSAlan Somers close_sockets(2, sockfd, sockfd2); 507b84a044bSAlan Somers } 508b84a044bSAlan Somers 509b84a044bSAlan Somers ATF_TC_CLEANUP(connectat_success, tc) 510b84a044bSAlan Somers { 511b84a044bSAlan Somers cleanup(); 512b84a044bSAlan Somers } 513b84a044bSAlan Somers 514b84a044bSAlan Somers 515b84a044bSAlan Somers ATF_TC_WITH_CLEANUP(connectat_failure); 516b84a044bSAlan Somers ATF_TC_HEAD(connectat_failure, tc) 517b84a044bSAlan Somers { 518b84a044bSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 519b84a044bSAlan Somers "connectat(2) call"); 520b84a044bSAlan Somers } 521b84a044bSAlan Somers 522b84a044bSAlan Somers ATF_TC_BODY(connectat_failure, tc) 523b84a044bSAlan Somers { 524b84a044bSAlan Somers assign_address(&server); 525b84a044bSAlan Somers snprintf(extregex, sizeof(extregex), "connectat.*%s", invalregex); 526b84a044bSAlan Somers 527b84a044bSAlan Somers FILE *pipefd = setup(fds, auclass); 528b84a044bSAlan Somers /* Failure reason: Invalid socket descriptor */ 529b84a044bSAlan Somers ATF_REQUIRE_EQ(-1, connectat(AT_FDCWD, -1, 530b84a044bSAlan Somers (struct sockaddr *)&server, len)); 531b84a044bSAlan Somers check_audit(fds, extregex, pipefd); 532b84a044bSAlan Somers } 533b84a044bSAlan Somers 534b84a044bSAlan Somers ATF_TC_CLEANUP(connectat_failure, tc) 535b84a044bSAlan Somers { 536b84a044bSAlan Somers cleanup(); 537b84a044bSAlan Somers } 538b84a044bSAlan Somers 539b84a044bSAlan Somers 540b84a044bSAlan Somers ATF_TC_WITH_CLEANUP(accept_success); 541b84a044bSAlan Somers ATF_TC_HEAD(accept_success, tc) 542b84a044bSAlan Somers { 543b84a044bSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 544b84a044bSAlan Somers "accept(2) call"); 545b84a044bSAlan Somers } 546b84a044bSAlan Somers 547b84a044bSAlan Somers ATF_TC_BODY(accept_success, tc) 548b84a044bSAlan Somers { 549b84a044bSAlan Somers assign_address(&server); 550943f585cSAlan Somers /* Setup a server socket and bind to the specified address */ 551943f585cSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 552b84a044bSAlan Somers ATF_REQUIRE_EQ(0, bind(sockfd, (struct sockaddr *)&server, len)); 553b84a044bSAlan Somers ATF_REQUIRE_EQ(0, listen(sockfd, 1)); 554b84a044bSAlan Somers 555b84a044bSAlan Somers /* Set up "blocking" client socket */ 556b84a044bSAlan Somers ATF_REQUIRE((sockfd2 = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 557b84a044bSAlan Somers ATF_REQUIRE_EQ(0, connect(sockfd2, (struct sockaddr *)&server, len)); 558b84a044bSAlan Somers 559b84a044bSAlan Somers FILE *pipefd = setup(fds, auclass); 560943f585cSAlan Somers ATF_REQUIRE((connectfd = accept(sockfd, NULL, &len)) != -1); 561b84a044bSAlan Somers 562943f585cSAlan Somers /* Audit record must contain connectfd & sockfd */ 563b84a044bSAlan Somers snprintf(extregex, sizeof(extregex), 564943f585cSAlan Somers "accept.*0x%x.*return,success,%d", sockfd, connectfd); 565b84a044bSAlan Somers check_audit(fds, extregex, pipefd); 566b84a044bSAlan Somers 567b84a044bSAlan Somers /* Close all socket descriptors */ 568943f585cSAlan Somers close_sockets(3, sockfd, sockfd2, connectfd); 569b84a044bSAlan Somers } 570b84a044bSAlan Somers 571b84a044bSAlan Somers ATF_TC_CLEANUP(accept_success, tc) 572b84a044bSAlan Somers { 573b84a044bSAlan Somers cleanup(); 574b84a044bSAlan Somers } 575b84a044bSAlan Somers 576b84a044bSAlan Somers 577b84a044bSAlan Somers ATF_TC_WITH_CLEANUP(accept_failure); 578b84a044bSAlan Somers ATF_TC_HEAD(accept_failure, tc) 579b84a044bSAlan Somers { 580b84a044bSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 581b84a044bSAlan Somers "accept(2) call"); 582b84a044bSAlan Somers } 583b84a044bSAlan Somers 584b84a044bSAlan Somers ATF_TC_BODY(accept_failure, tc) 585b84a044bSAlan Somers { 586b84a044bSAlan Somers snprintf(extregex, sizeof(extregex), "accept.*%s", invalregex); 587b84a044bSAlan Somers FILE *pipefd = setup(fds, auclass); 588b84a044bSAlan Somers /* Failure reason: Invalid socket descriptor */ 589943f585cSAlan Somers ATF_REQUIRE_EQ(-1, accept(-1, NULL, NULL)); 590b84a044bSAlan Somers check_audit(fds, extregex, pipefd); 591b84a044bSAlan Somers } 592b84a044bSAlan Somers 593b84a044bSAlan Somers ATF_TC_CLEANUP(accept_failure, tc) 594b84a044bSAlan Somers { 595b84a044bSAlan Somers cleanup(); 596b84a044bSAlan Somers } 597b84a044bSAlan Somers 598b84a044bSAlan Somers 599943f585cSAlan Somers ATF_TC_WITH_CLEANUP(send_success); 600943f585cSAlan Somers ATF_TC_HEAD(send_success, tc) 601943f585cSAlan Somers { 602943f585cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 603943f585cSAlan Somers "send(2) call"); 604943f585cSAlan Somers } 605943f585cSAlan Somers 606943f585cSAlan Somers ATF_TC_BODY(send_success, tc) 607943f585cSAlan Somers { 608943f585cSAlan Somers assign_address(&server); 609943f585cSAlan Somers /* Setup a server socket and bind to the specified address */ 610943f585cSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 611943f585cSAlan Somers ATF_REQUIRE_EQ(0, bind(sockfd, (struct sockaddr *)&server, len)); 612943f585cSAlan Somers ATF_REQUIRE_EQ(0, listen(sockfd, 1)); 613943f585cSAlan Somers 614943f585cSAlan Somers /* Set up "blocking" client and connect with non-blocking server */ 615943f585cSAlan Somers ATF_REQUIRE((sockfd2 = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 616943f585cSAlan Somers ATF_REQUIRE_EQ(0, connect(sockfd2, (struct sockaddr *)&server, len)); 617943f585cSAlan Somers ATF_REQUIRE((connectfd = accept(sockfd, NULL, &len)) != -1); 618943f585cSAlan Somers 619943f585cSAlan Somers /* Send a sample message to the connected socket */ 620943f585cSAlan Somers FILE *pipefd = setup(fds, auclass); 621943f585cSAlan Somers ATF_REQUIRE((data_bytes = 622943f585cSAlan Somers send(sockfd2, msgbuff, strlen(msgbuff), 0)) != -1); 623943f585cSAlan Somers 624943f585cSAlan Somers /* Audit record must contain sockfd2 and data_bytes */ 625943f585cSAlan Somers snprintf(extregex, sizeof(extregex), 626943f585cSAlan Somers "send.*0x%x.*return,success,%zd", sockfd2, data_bytes); 627943f585cSAlan Somers check_audit(fds, extregex, pipefd); 628943f585cSAlan Somers 629943f585cSAlan Somers /* Close all socket descriptors */ 630943f585cSAlan Somers close_sockets(3, sockfd, sockfd2, connectfd); 631943f585cSAlan Somers } 632943f585cSAlan Somers 633943f585cSAlan Somers ATF_TC_CLEANUP(send_success, tc) 634943f585cSAlan Somers { 635943f585cSAlan Somers cleanup(); 636943f585cSAlan Somers } 637943f585cSAlan Somers 638943f585cSAlan Somers 639943f585cSAlan Somers ATF_TC_WITH_CLEANUP(send_failure); 640943f585cSAlan Somers ATF_TC_HEAD(send_failure, tc) 641943f585cSAlan Somers { 642943f585cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 643943f585cSAlan Somers "send(2) call"); 644943f585cSAlan Somers } 645943f585cSAlan Somers 646943f585cSAlan Somers ATF_TC_BODY(send_failure, tc) 647943f585cSAlan Somers { 648943f585cSAlan Somers snprintf(extregex, sizeof(extregex), "send.*%s", invalregex); 649943f585cSAlan Somers FILE *pipefd = setup(fds, auclass); 650943f585cSAlan Somers /* Failure reason: Invalid socket descriptor */ 651943f585cSAlan Somers ATF_REQUIRE_EQ(-1, send(-1, NULL, 0, 0)); 652943f585cSAlan Somers check_audit(fds, extregex, pipefd); 653943f585cSAlan Somers } 654943f585cSAlan Somers 655943f585cSAlan Somers ATF_TC_CLEANUP(send_failure, tc) 656943f585cSAlan Somers { 657943f585cSAlan Somers cleanup(); 658943f585cSAlan Somers } 659943f585cSAlan Somers 660943f585cSAlan Somers 661943f585cSAlan Somers ATF_TC_WITH_CLEANUP(recv_success); 662943f585cSAlan Somers ATF_TC_HEAD(recv_success, tc) 663943f585cSAlan Somers { 664943f585cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 665943f585cSAlan Somers "recv(2) call"); 666943f585cSAlan Somers } 667943f585cSAlan Somers 668943f585cSAlan Somers ATF_TC_BODY(recv_success, tc) 669943f585cSAlan Somers { 670943f585cSAlan Somers assign_address(&server); 671943f585cSAlan Somers /* Setup a server socket and bind to the specified address */ 672943f585cSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 673943f585cSAlan Somers ATF_REQUIRE_EQ(0, bind(sockfd, (struct sockaddr *)&server, len)); 674943f585cSAlan Somers ATF_REQUIRE_EQ(0, listen(sockfd, 1)); 675943f585cSAlan Somers 676943f585cSAlan Somers /* Set up "blocking" client and connect with non-blocking server */ 677943f585cSAlan Somers ATF_REQUIRE((sockfd2 = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 678943f585cSAlan Somers ATF_REQUIRE_EQ(0, connect(sockfd2, (struct sockaddr *)&server, len)); 679943f585cSAlan Somers ATF_REQUIRE((connectfd = accept(sockfd, NULL, &len)) != -1); 680943f585cSAlan Somers /* Send a sample message to the connected socket */ 681943f585cSAlan Somers ATF_REQUIRE(send(sockfd2, msgbuff, strlen(msgbuff), 0) != -1); 682943f585cSAlan Somers 683943f585cSAlan Somers /* Receive data once connectfd is ready for reading */ 684943f585cSAlan Somers FILE *pipefd = setup(fds, auclass); 685943f585cSAlan Somers ATF_REQUIRE((data_bytes = recv(connectfd, data, MAX_DATA, 0)) != 0); 686943f585cSAlan Somers 687943f585cSAlan Somers /* Audit record must contain connectfd and data_bytes */ 688943f585cSAlan Somers snprintf(extregex, sizeof(extregex), 689943f585cSAlan Somers "recv.*0x%x.*return,success,%zd", connectfd, data_bytes); 690943f585cSAlan Somers check_audit(fds, extregex, pipefd); 691943f585cSAlan Somers 692943f585cSAlan Somers /* Close all socket descriptors */ 693943f585cSAlan Somers close_sockets(3, sockfd, sockfd2, connectfd); 694943f585cSAlan Somers } 695943f585cSAlan Somers 696943f585cSAlan Somers ATF_TC_CLEANUP(recv_success, tc) 697943f585cSAlan Somers { 698943f585cSAlan Somers cleanup(); 699943f585cSAlan Somers } 700943f585cSAlan Somers 701943f585cSAlan Somers 702943f585cSAlan Somers ATF_TC_WITH_CLEANUP(recv_failure); 703943f585cSAlan Somers ATF_TC_HEAD(recv_failure, tc) 704943f585cSAlan Somers { 705943f585cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 706943f585cSAlan Somers "recv(2) call"); 707943f585cSAlan Somers } 708943f585cSAlan Somers 709943f585cSAlan Somers ATF_TC_BODY(recv_failure, tc) 710943f585cSAlan Somers { 711943f585cSAlan Somers snprintf(extregex, sizeof(extregex), "recv.*%s", invalregex); 712943f585cSAlan Somers FILE *pipefd = setup(fds, auclass); 713943f585cSAlan Somers /* Failure reason: Invalid socket descriptor */ 714943f585cSAlan Somers ATF_REQUIRE_EQ(-1, recv(-1, NULL, 0, 0)); 715943f585cSAlan Somers check_audit(fds, extregex, pipefd); 716943f585cSAlan Somers } 717943f585cSAlan Somers 718943f585cSAlan Somers ATF_TC_CLEANUP(recv_failure, tc) 719943f585cSAlan Somers { 720943f585cSAlan Somers cleanup(); 721943f585cSAlan Somers } 722943f585cSAlan Somers 723943f585cSAlan Somers 724943f585cSAlan Somers ATF_TC_WITH_CLEANUP(sendto_success); 725943f585cSAlan Somers ATF_TC_HEAD(sendto_success, tc) 726943f585cSAlan Somers { 727943f585cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 728943f585cSAlan Somers "sendto(2) call"); 729943f585cSAlan Somers } 730943f585cSAlan Somers 731943f585cSAlan Somers ATF_TC_BODY(sendto_success, tc) 732943f585cSAlan Somers { 733943f585cSAlan Somers assign_address(&server); 734943f585cSAlan Somers /* Setup a server socket and bind to the specified address */ 735943f585cSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_DGRAM, 0)) != -1); 736943f585cSAlan Somers ATF_REQUIRE_EQ(0, bind(sockfd, (struct sockaddr *)&server, len)); 737943f585cSAlan Somers 738943f585cSAlan Somers /* Set up client socket to be used for sending the data */ 739943f585cSAlan Somers ATF_REQUIRE((sockfd2 = socket(PF_UNIX, SOCK_DGRAM, 0)) != -1); 740943f585cSAlan Somers 741943f585cSAlan Somers /* Send a sample message to server's address */ 742943f585cSAlan Somers FILE *pipefd = setup(fds, auclass); 743943f585cSAlan Somers ATF_REQUIRE((data_bytes = sendto(sockfd2, msgbuff, 744943f585cSAlan Somers strlen(msgbuff), 0, (struct sockaddr *)&server, len)) != -1); 745943f585cSAlan Somers 746943f585cSAlan Somers /* Audit record must contain sockfd2 and data_bytes */ 747943f585cSAlan Somers snprintf(extregex, sizeof(extregex), 748943f585cSAlan Somers "sendto.*0x%x.*return,success,%zd", sockfd2, data_bytes); 749943f585cSAlan Somers check_audit(fds, extregex, pipefd); 750943f585cSAlan Somers 751943f585cSAlan Somers /* Close all socket descriptors */ 752943f585cSAlan Somers close_sockets(2, sockfd, sockfd2); 753943f585cSAlan Somers } 754943f585cSAlan Somers 755943f585cSAlan Somers ATF_TC_CLEANUP(sendto_success, tc) 756943f585cSAlan Somers { 757943f585cSAlan Somers cleanup(); 758943f585cSAlan Somers } 759943f585cSAlan Somers 760943f585cSAlan Somers 761943f585cSAlan Somers ATF_TC_WITH_CLEANUP(sendto_failure); 762943f585cSAlan Somers ATF_TC_HEAD(sendto_failure, tc) 763943f585cSAlan Somers { 764943f585cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 765943f585cSAlan Somers "sendto(2) call"); 766943f585cSAlan Somers } 767943f585cSAlan Somers 768943f585cSAlan Somers ATF_TC_BODY(sendto_failure, tc) 769943f585cSAlan Somers { 770943f585cSAlan Somers snprintf(extregex, sizeof(extregex), "sendto.*%s", invalregex); 771943f585cSAlan Somers FILE *pipefd = setup(fds, auclass); 772943f585cSAlan Somers /* Failure reason: Invalid socket descriptor */ 773943f585cSAlan Somers ATF_REQUIRE_EQ(-1, sendto(-1, NULL, 0, 0, NULL, 0)); 774943f585cSAlan Somers check_audit(fds, extregex, pipefd); 775943f585cSAlan Somers } 776943f585cSAlan Somers 777943f585cSAlan Somers ATF_TC_CLEANUP(sendto_failure, tc) 778943f585cSAlan Somers { 779943f585cSAlan Somers cleanup(); 780943f585cSAlan Somers } 781943f585cSAlan Somers 782943f585cSAlan Somers 783943f585cSAlan Somers ATF_TC_WITH_CLEANUP(recvfrom_success); 784943f585cSAlan Somers ATF_TC_HEAD(recvfrom_success, tc) 785943f585cSAlan Somers { 786943f585cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 787943f585cSAlan Somers "recvfrom(2) call"); 788943f585cSAlan Somers } 789943f585cSAlan Somers 790943f585cSAlan Somers ATF_TC_BODY(recvfrom_success, tc) 791943f585cSAlan Somers { 792943f585cSAlan Somers assign_address(&server); 793943f585cSAlan Somers /* Setup a server socket and bind to the specified address */ 794943f585cSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_DGRAM, 0)) != -1); 795943f585cSAlan Somers ATF_REQUIRE_EQ(0, bind(sockfd, (struct sockaddr *)&server, len)); 796943f585cSAlan Somers 797943f585cSAlan Somers /* Set up client socket to be used for sending the data */ 798943f585cSAlan Somers ATF_REQUIRE((sockfd2 = socket(PF_UNIX, SOCK_DGRAM, 0)) != -1); 799943f585cSAlan Somers ATF_REQUIRE(sendto(sockfd2, msgbuff, strlen(msgbuff), 0, 800943f585cSAlan Somers (struct sockaddr *)&server, len) != -1); 801943f585cSAlan Somers 802943f585cSAlan Somers /* Receive data once sockfd is ready for reading */ 803943f585cSAlan Somers FILE *pipefd = setup(fds, auclass); 804943f585cSAlan Somers ATF_REQUIRE((data_bytes = recvfrom(sockfd, data, 805943f585cSAlan Somers MAX_DATA, 0, NULL, &len)) != 0); 806943f585cSAlan Somers 807943f585cSAlan Somers /* Audit record must contain sockfd and data_bytes */ 808943f585cSAlan Somers snprintf(extregex, sizeof(extregex), 809943f585cSAlan Somers "recvfrom.*0x%x.*return,success,%zd", sockfd, data_bytes); 810943f585cSAlan Somers check_audit(fds, extregex, pipefd); 811943f585cSAlan Somers 812943f585cSAlan Somers /* Close all socket descriptors */ 813943f585cSAlan Somers close_sockets(2, sockfd, sockfd2); 814943f585cSAlan Somers } 815943f585cSAlan Somers 816943f585cSAlan Somers ATF_TC_CLEANUP(recvfrom_success, tc) 817943f585cSAlan Somers { 818943f585cSAlan Somers cleanup(); 819943f585cSAlan Somers } 820943f585cSAlan Somers 821943f585cSAlan Somers 822943f585cSAlan Somers ATF_TC_WITH_CLEANUP(recvfrom_failure); 823943f585cSAlan Somers ATF_TC_HEAD(recvfrom_failure, tc) 824943f585cSAlan Somers { 825943f585cSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 826943f585cSAlan Somers "recvfrom(2) call"); 827943f585cSAlan Somers } 828943f585cSAlan Somers 829943f585cSAlan Somers ATF_TC_BODY(recvfrom_failure, tc) 830943f585cSAlan Somers { 831943f585cSAlan Somers snprintf(extregex, sizeof(extregex), "recvfrom.*%s", invalregex); 832943f585cSAlan Somers FILE *pipefd = setup(fds, auclass); 833943f585cSAlan Somers /* Failure reason: Invalid socket descriptor */ 834943f585cSAlan Somers ATF_REQUIRE_EQ(-1, recvfrom(-1, NULL, 0, 0, NULL, NULL)); 835943f585cSAlan Somers check_audit(fds, extregex, pipefd); 836943f585cSAlan Somers } 837943f585cSAlan Somers 838943f585cSAlan Somers ATF_TC_CLEANUP(recvfrom_failure, tc) 839943f585cSAlan Somers { 840943f585cSAlan Somers cleanup(); 841943f585cSAlan Somers } 842943f585cSAlan Somers 843943f585cSAlan Somers 844*b92435ccSAlan Somers ATF_TC_WITH_CLEANUP(sendmsg_success); 845*b92435ccSAlan Somers ATF_TC_HEAD(sendmsg_success, tc) 846*b92435ccSAlan Somers { 847*b92435ccSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 848*b92435ccSAlan Somers "recvmsg(2) call"); 849*b92435ccSAlan Somers } 850*b92435ccSAlan Somers 851*b92435ccSAlan Somers ATF_TC_BODY(sendmsg_success, tc) 852*b92435ccSAlan Somers { 853*b92435ccSAlan Somers assign_address(&server); 854*b92435ccSAlan Somers /* Create a datagram server socket & bind to UNIX address family */ 855*b92435ccSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_DGRAM, 0)) != -1); 856*b92435ccSAlan Somers ATF_REQUIRE_EQ(0, bind(sockfd, (struct sockaddr *)&server, len)); 857*b92435ccSAlan Somers 858*b92435ccSAlan Somers /* Message buffer to be sent to the server */ 859*b92435ccSAlan Somers init_iov(&io1, msgbuff, sizeof(msgbuff)); 860*b92435ccSAlan Somers init_msghdr(&sendbuf, &io1, &server); 861*b92435ccSAlan Somers 862*b92435ccSAlan Somers /* Set up UDP client to communicate with the server */ 863*b92435ccSAlan Somers ATF_REQUIRE((sockfd2 = socket(PF_UNIX, SOCK_DGRAM, 0)) != -1); 864*b92435ccSAlan Somers 865*b92435ccSAlan Somers /* Send a sample message to the specified client address */ 866*b92435ccSAlan Somers FILE *pipefd = setup(fds, auclass); 867*b92435ccSAlan Somers ATF_REQUIRE((data_bytes = sendmsg(sockfd2, &sendbuf, 0)) != -1); 868*b92435ccSAlan Somers 869*b92435ccSAlan Somers /* Audit record must contain sockfd2 and data_bytes */ 870*b92435ccSAlan Somers snprintf(extregex, sizeof(extregex), 871*b92435ccSAlan Somers "sendmsg.*0x%x.*return,success,%zd", sockfd2, data_bytes); 872*b92435ccSAlan Somers check_audit(fds, extregex, pipefd); 873*b92435ccSAlan Somers 874*b92435ccSAlan Somers /* Close all socket descriptors */ 875*b92435ccSAlan Somers close_sockets(2, sockfd, sockfd2); 876*b92435ccSAlan Somers } 877*b92435ccSAlan Somers 878*b92435ccSAlan Somers ATF_TC_CLEANUP(sendmsg_success, tc) 879*b92435ccSAlan Somers { 880*b92435ccSAlan Somers cleanup(); 881*b92435ccSAlan Somers } 882*b92435ccSAlan Somers 883*b92435ccSAlan Somers 884*b92435ccSAlan Somers ATF_TC_WITH_CLEANUP(sendmsg_failure); 885*b92435ccSAlan Somers ATF_TC_HEAD(sendmsg_failure, tc) 886*b92435ccSAlan Somers { 887*b92435ccSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 888*b92435ccSAlan Somers "sendmsg(2) call"); 889*b92435ccSAlan Somers } 890*b92435ccSAlan Somers 891*b92435ccSAlan Somers ATF_TC_BODY(sendmsg_failure, tc) 892*b92435ccSAlan Somers { 893*b92435ccSAlan Somers snprintf(extregex, sizeof(extregex), 894*b92435ccSAlan Somers "sendmsg.*return,failure : Bad address"); 895*b92435ccSAlan Somers FILE *pipefd = setup(fds, auclass); 896*b92435ccSAlan Somers ATF_REQUIRE_EQ(-1, sendmsg(-1, NULL, 0)); 897*b92435ccSAlan Somers check_audit(fds, extregex, pipefd); 898*b92435ccSAlan Somers } 899*b92435ccSAlan Somers 900*b92435ccSAlan Somers ATF_TC_CLEANUP(sendmsg_failure, tc) 901*b92435ccSAlan Somers { 902*b92435ccSAlan Somers cleanup(); 903*b92435ccSAlan Somers } 904*b92435ccSAlan Somers 905*b92435ccSAlan Somers 906*b92435ccSAlan Somers ATF_TC_WITH_CLEANUP(recvmsg_success); 907*b92435ccSAlan Somers ATF_TC_HEAD(recvmsg_success, tc) 908*b92435ccSAlan Somers { 909*b92435ccSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 910*b92435ccSAlan Somers "recvmsg(2) call"); 911*b92435ccSAlan Somers } 912*b92435ccSAlan Somers 913*b92435ccSAlan Somers ATF_TC_BODY(recvmsg_success, tc) 914*b92435ccSAlan Somers { 915*b92435ccSAlan Somers assign_address(&server); 916*b92435ccSAlan Somers /* Create a datagram server socket & bind to UNIX address family */ 917*b92435ccSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_DGRAM, 0)) != -1); 918*b92435ccSAlan Somers ATF_REQUIRE_EQ(0, bind(sockfd, (struct sockaddr *)&server, len)); 919*b92435ccSAlan Somers 920*b92435ccSAlan Somers /* Message buffer to be sent to the server */ 921*b92435ccSAlan Somers init_iov(&io1, msgbuff, sizeof(msgbuff)); 922*b92435ccSAlan Somers init_msghdr(&sendbuf, &io1, &server); 923*b92435ccSAlan Somers 924*b92435ccSAlan Somers /* Prepare buffer to store the received data in */ 925*b92435ccSAlan Somers init_iov(&io2, data, sizeof(data)); 926*b92435ccSAlan Somers init_msghdr(&recvbuf, &io2, NULL); 927*b92435ccSAlan Somers 928*b92435ccSAlan Somers /* Set up UDP client to communicate with the server */ 929*b92435ccSAlan Somers ATF_REQUIRE((sockfd2 = socket(PF_UNIX, SOCK_DGRAM, 0)) != -1); 930*b92435ccSAlan Somers /* Send a sample message to the connected socket */ 931*b92435ccSAlan Somers ATF_REQUIRE(sendmsg(sockfd2, &sendbuf, 0) != -1); 932*b92435ccSAlan Somers 933*b92435ccSAlan Somers /* Receive data once clientfd is ready for reading */ 934*b92435ccSAlan Somers FILE *pipefd = setup(fds, auclass); 935*b92435ccSAlan Somers ATF_REQUIRE((data_bytes = recvmsg(sockfd, &recvbuf, 0)) != -1); 936*b92435ccSAlan Somers 937*b92435ccSAlan Somers /* Audit record must contain sockfd and data_bytes */ 938*b92435ccSAlan Somers snprintf(extregex, sizeof(extregex), 939*b92435ccSAlan Somers "recvmsg.*%#x.*return,success,%zd", sockfd, data_bytes); 940*b92435ccSAlan Somers check_audit(fds, extregex, pipefd); 941*b92435ccSAlan Somers 942*b92435ccSAlan Somers /* Close all socket descriptors */ 943*b92435ccSAlan Somers close_sockets(2, sockfd, sockfd2); 944*b92435ccSAlan Somers } 945*b92435ccSAlan Somers 946*b92435ccSAlan Somers ATF_TC_CLEANUP(recvmsg_success, tc) 947*b92435ccSAlan Somers { 948*b92435ccSAlan Somers cleanup(); 949*b92435ccSAlan Somers } 950*b92435ccSAlan Somers 951*b92435ccSAlan Somers 952*b92435ccSAlan Somers ATF_TC_WITH_CLEANUP(recvmsg_failure); 953*b92435ccSAlan Somers ATF_TC_HEAD(recvmsg_failure, tc) 954*b92435ccSAlan Somers { 955*b92435ccSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 956*b92435ccSAlan Somers "recvmsg(2) call"); 957*b92435ccSAlan Somers } 958*b92435ccSAlan Somers 959*b92435ccSAlan Somers ATF_TC_BODY(recvmsg_failure, tc) 960*b92435ccSAlan Somers { 961*b92435ccSAlan Somers snprintf(extregex, sizeof(extregex), 962*b92435ccSAlan Somers "recvmsg.*return,failure : Bad address"); 963*b92435ccSAlan Somers FILE *pipefd = setup(fds, auclass); 964*b92435ccSAlan Somers ATF_REQUIRE_EQ(-1, recvmsg(-1, NULL, 0)); 965*b92435ccSAlan Somers check_audit(fds, extregex, pipefd); 966*b92435ccSAlan Somers } 967*b92435ccSAlan Somers 968*b92435ccSAlan Somers ATF_TC_CLEANUP(recvmsg_failure, tc) 969*b92435ccSAlan Somers { 970*b92435ccSAlan Somers cleanup(); 971*b92435ccSAlan Somers } 972*b92435ccSAlan Somers 973*b92435ccSAlan Somers 974*b92435ccSAlan Somers ATF_TC_WITH_CLEANUP(shutdown_success); 975*b92435ccSAlan Somers ATF_TC_HEAD(shutdown_success, tc) 976*b92435ccSAlan Somers { 977*b92435ccSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 978*b92435ccSAlan Somers "shutdown(2) call"); 979*b92435ccSAlan Somers } 980*b92435ccSAlan Somers 981*b92435ccSAlan Somers ATF_TC_BODY(shutdown_success, tc) 982*b92435ccSAlan Somers { 983*b92435ccSAlan Somers assign_address(&server); 984*b92435ccSAlan Somers /* Setup server socket and bind to the specified address */ 985*b92435ccSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 986*b92435ccSAlan Somers ATF_REQUIRE_EQ(0, bind(sockfd, (struct sockaddr *)&server, len)); 987*b92435ccSAlan Somers ATF_REQUIRE_EQ(0, listen(sockfd, 1)); 988*b92435ccSAlan Somers 989*b92435ccSAlan Somers /* Setup client and connect with the blocking server */ 990*b92435ccSAlan Somers ATF_REQUIRE((sockfd2 = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 991*b92435ccSAlan Somers ATF_REQUIRE_EQ(0, connect(sockfd2, (struct sockaddr *)&server, len)); 992*b92435ccSAlan Somers ATF_REQUIRE((connectfd = accept(sockfd, NULL, &len)) != -1); 993*b92435ccSAlan Somers 994*b92435ccSAlan Somers /* Audit record must contain clientfd */ 995*b92435ccSAlan Somers snprintf(extregex, sizeof(extregex), 996*b92435ccSAlan Somers "shutdown.*%#x.*return,success", connectfd); 997*b92435ccSAlan Somers 998*b92435ccSAlan Somers FILE *pipefd = setup(fds, auclass); 999*b92435ccSAlan Somers ATF_REQUIRE_EQ(0, shutdown(connectfd, SHUT_RDWR)); 1000*b92435ccSAlan Somers check_audit(fds, extregex, pipefd); 1001*b92435ccSAlan Somers 1002*b92435ccSAlan Somers /* Close all socket descriptors */ 1003*b92435ccSAlan Somers close_sockets(3, sockfd, sockfd2, connectfd); 1004*b92435ccSAlan Somers } 1005*b92435ccSAlan Somers 1006*b92435ccSAlan Somers ATF_TC_CLEANUP(shutdown_success, tc) 1007*b92435ccSAlan Somers { 1008*b92435ccSAlan Somers cleanup(); 1009*b92435ccSAlan Somers } 1010*b92435ccSAlan Somers 1011*b92435ccSAlan Somers 1012*b92435ccSAlan Somers ATF_TC_WITH_CLEANUP(shutdown_failure); 1013*b92435ccSAlan Somers ATF_TC_HEAD(shutdown_failure, tc) 1014*b92435ccSAlan Somers { 1015*b92435ccSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 1016*b92435ccSAlan Somers "shutdown(2) call"); 1017*b92435ccSAlan Somers } 1018*b92435ccSAlan Somers 1019*b92435ccSAlan Somers ATF_TC_BODY(shutdown_failure, tc) 1020*b92435ccSAlan Somers { 1021*b92435ccSAlan Somers pid = getpid(); 1022*b92435ccSAlan Somers snprintf(extregex, sizeof(extregex), 1023*b92435ccSAlan Somers "shutdown.*%d.*return,failure", pid); 1024*b92435ccSAlan Somers 1025*b92435ccSAlan Somers FILE *pipefd = setup(fds, auclass); 1026*b92435ccSAlan Somers /* Failure reason: Invalid socket descriptor */ 1027*b92435ccSAlan Somers ATF_REQUIRE_EQ(-1, shutdown(-1, SHUT_RDWR)); 1028*b92435ccSAlan Somers check_audit(fds, extregex, pipefd); 1029*b92435ccSAlan Somers } 1030*b92435ccSAlan Somers 1031*b92435ccSAlan Somers ATF_TC_CLEANUP(shutdown_failure, tc) 1032*b92435ccSAlan Somers { 1033*b92435ccSAlan Somers cleanup(); 1034*b92435ccSAlan Somers } 1035*b92435ccSAlan Somers 1036*b92435ccSAlan Somers 1037*b92435ccSAlan Somers ATF_TC_WITH_CLEANUP(sendfile_success); 1038*b92435ccSAlan Somers ATF_TC_HEAD(sendfile_success, tc) 1039*b92435ccSAlan Somers { 1040*b92435ccSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful " 1041*b92435ccSAlan Somers "sendfile(2) call"); 1042*b92435ccSAlan Somers } 1043*b92435ccSAlan Somers 1044*b92435ccSAlan Somers ATF_TC_BODY(sendfile_success, tc) 1045*b92435ccSAlan Somers { 1046*b92435ccSAlan Somers int filedesc; 1047*b92435ccSAlan Somers ATF_REQUIRE((filedesc = open(path, O_CREAT | O_RDONLY, mode)) != -1); 1048*b92435ccSAlan Somers /* Create a simple UNIX socket to send out random data */ 1049*b92435ccSAlan Somers ATF_REQUIRE((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) != -1); 1050*b92435ccSAlan Somers /* Check the presence of sockfd, non-file in the audit record */ 1051*b92435ccSAlan Somers snprintf(extregex, sizeof(extregex), 1052*b92435ccSAlan Somers "sendfile.*%#x,non-file.*return,success", filedesc); 1053*b92435ccSAlan Somers 1054*b92435ccSAlan Somers FILE *pipefd = setup(fds, auclass); 1055*b92435ccSAlan Somers ATF_REQUIRE_EQ(0, sendfile(filedesc, sockfd, 0, 0, NULL, NULL, 0)); 1056*b92435ccSAlan Somers check_audit(fds, extregex, pipefd); 1057*b92435ccSAlan Somers 1058*b92435ccSAlan Somers /* Teardown socket and file descriptors */ 1059*b92435ccSAlan Somers close_sockets(2, sockfd, filedesc); 1060*b92435ccSAlan Somers } 1061*b92435ccSAlan Somers 1062*b92435ccSAlan Somers ATF_TC_CLEANUP(sendfile_success, tc) 1063*b92435ccSAlan Somers { 1064*b92435ccSAlan Somers cleanup(); 1065*b92435ccSAlan Somers } 1066*b92435ccSAlan Somers 1067*b92435ccSAlan Somers 1068*b92435ccSAlan Somers ATF_TC_WITH_CLEANUP(sendfile_failure); 1069*b92435ccSAlan Somers ATF_TC_HEAD(sendfile_failure, tc) 1070*b92435ccSAlan Somers { 1071*b92435ccSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful " 1072*b92435ccSAlan Somers "sendfile(2) call"); 1073*b92435ccSAlan Somers } 1074*b92435ccSAlan Somers 1075*b92435ccSAlan Somers ATF_TC_BODY(sendfile_failure, tc) 1076*b92435ccSAlan Somers { 1077*b92435ccSAlan Somers pid = getpid(); 1078*b92435ccSAlan Somers snprintf(extregex, sizeof(extregex), 1079*b92435ccSAlan Somers "sendfile.*%d.*return,failure", pid); 1080*b92435ccSAlan Somers FILE *pipefd = setup(fds, auclass); 1081*b92435ccSAlan Somers ATF_REQUIRE_EQ(-1, sendfile(-1, -1, 0, 0, NULL, NULL, 0)); 1082*b92435ccSAlan Somers check_audit(fds, extregex, pipefd); 1083*b92435ccSAlan Somers } 1084*b92435ccSAlan Somers 1085*b92435ccSAlan Somers ATF_TC_CLEANUP(sendfile_failure, tc) 1086*b92435ccSAlan Somers { 1087*b92435ccSAlan Somers cleanup(); 1088*b92435ccSAlan Somers } 1089*b92435ccSAlan Somers 1090*b92435ccSAlan Somers 1091ad2afa8cSAlan Somers ATF_TP_ADD_TCS(tp) 1092ad2afa8cSAlan Somers { 1093ad2afa8cSAlan Somers ATF_TP_ADD_TC(tp, socket_success); 1094ad2afa8cSAlan Somers ATF_TP_ADD_TC(tp, socket_failure); 1095ad2afa8cSAlan Somers ATF_TP_ADD_TC(tp, socketpair_success); 1096ad2afa8cSAlan Somers ATF_TP_ADD_TC(tp, socketpair_failure); 1097ad2afa8cSAlan Somers ATF_TP_ADD_TC(tp, setsockopt_success); 1098ad2afa8cSAlan Somers ATF_TP_ADD_TC(tp, setsockopt_failure); 1099ad2afa8cSAlan Somers 1100babaf5cbSAlan Somers ATF_TP_ADD_TC(tp, bind_success); 1101babaf5cbSAlan Somers ATF_TP_ADD_TC(tp, bind_failure); 1102babaf5cbSAlan Somers ATF_TP_ADD_TC(tp, bindat_success); 1103babaf5cbSAlan Somers ATF_TP_ADD_TC(tp, bindat_failure); 1104babaf5cbSAlan Somers ATF_TP_ADD_TC(tp, listen_success); 1105babaf5cbSAlan Somers ATF_TP_ADD_TC(tp, listen_failure); 1106babaf5cbSAlan Somers 1107b84a044bSAlan Somers ATF_TP_ADD_TC(tp, connect_success); 1108b84a044bSAlan Somers ATF_TP_ADD_TC(tp, connect_failure); 1109b84a044bSAlan Somers ATF_TP_ADD_TC(tp, connectat_success); 1110b84a044bSAlan Somers ATF_TP_ADD_TC(tp, connectat_failure); 1111b84a044bSAlan Somers ATF_TP_ADD_TC(tp, accept_success); 1112b84a044bSAlan Somers ATF_TP_ADD_TC(tp, accept_failure); 1113b84a044bSAlan Somers 1114943f585cSAlan Somers ATF_TP_ADD_TC(tp, send_success); 1115943f585cSAlan Somers ATF_TP_ADD_TC(tp, send_failure); 1116943f585cSAlan Somers ATF_TP_ADD_TC(tp, recv_success); 1117943f585cSAlan Somers ATF_TP_ADD_TC(tp, recv_failure); 1118943f585cSAlan Somers 1119943f585cSAlan Somers ATF_TP_ADD_TC(tp, sendto_success); 1120943f585cSAlan Somers ATF_TP_ADD_TC(tp, sendto_failure); 1121943f585cSAlan Somers ATF_TP_ADD_TC(tp, recvfrom_success); 1122943f585cSAlan Somers ATF_TP_ADD_TC(tp, recvfrom_failure); 1123943f585cSAlan Somers 1124*b92435ccSAlan Somers ATF_TP_ADD_TC(tp, sendmsg_success); 1125*b92435ccSAlan Somers ATF_TP_ADD_TC(tp, sendmsg_failure); 1126*b92435ccSAlan Somers ATF_TP_ADD_TC(tp, recvmsg_success); 1127*b92435ccSAlan Somers ATF_TP_ADD_TC(tp, recvmsg_failure); 1128*b92435ccSAlan Somers 1129*b92435ccSAlan Somers ATF_TP_ADD_TC(tp, shutdown_success); 1130*b92435ccSAlan Somers ATF_TP_ADD_TC(tp, shutdown_failure); 1131*b92435ccSAlan Somers ATF_TP_ADD_TC(tp, sendfile_success); 1132*b92435ccSAlan Somers ATF_TP_ADD_TC(tp, sendfile_failure); 1133*b92435ccSAlan Somers 1134ad2afa8cSAlan Somers return (atf_no_error()); 1135ad2afa8cSAlan Somers } 1136