On Mon, Aug 11, 2014 at 03:08:10PM -0500, Tyler Hicks wrote: > Rename the test in preparation for expanding its capabilities to cover > all UNIX domain socket address format types. > > Signed-off-by: Tyler Hicks <[email protected]>
Acked-by: Seth Arnold <[email protected]> Thanks > --- > tests/regression/apparmor/Makefile | 6 +- > tests/regression/apparmor/unix_socket.c | 177 > +++++++++++++++++++++ > tests/regression/apparmor/unix_socket.sh | 106 ++++++++++++ > tests/regression/apparmor/unix_socket_client.c | 126 +++++++++++++++ > tests/regression/apparmor/unix_socket_file.c | 177 > --------------------- > tests/regression/apparmor/unix_socket_file.sh | 106 ------------ > .../regression/apparmor/unix_socket_file_client.c | 126 --------------- > 7 files changed, 412 insertions(+), 412 deletions(-) > create mode 100644 tests/regression/apparmor/unix_socket.c > create mode 100755 tests/regression/apparmor/unix_socket.sh > create mode 100644 tests/regression/apparmor/unix_socket_client.c > delete mode 100644 tests/regression/apparmor/unix_socket_file.c > delete mode 100755 tests/regression/apparmor/unix_socket_file.sh > delete mode 100644 tests/regression/apparmor/unix_socket_file_client.c > > diff --git a/tests/regression/apparmor/Makefile > b/tests/regression/apparmor/Makefile > index 2a420b8..13bc5d3 100644 > --- a/tests/regression/apparmor/Makefile > +++ b/tests/regression/apparmor/Makefile > @@ -114,8 +114,8 @@ SRC=access.c \ > tcp.c \ > unix_fd_client.c \ > unix_fd_server.c \ > - unix_socket_file.c \ > - unix_socket_file_client.c \ > + unix_socket.c \ > + unix_socket_client.c \ > unlink.c \ > xattrs.c > > @@ -183,7 +183,7 @@ TESTS=access \ > syscall \ > tcp \ > unix_fd_server \ > - unix_socket_file \ > + unix_socket \ > unlink\ > xattrs\ > longpath > diff --git a/tests/regression/apparmor/unix_socket.c > b/tests/regression/apparmor/unix_socket.c > new file mode 100644 > index 0000000..76a4eb8 > --- /dev/null > +++ b/tests/regression/apparmor/unix_socket.c > @@ -0,0 +1,177 @@ > +/* > + * Copyright (C) 2013 Canonical, Ltd. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of version 2 of the GNU General Public > + * License published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, contact Canonical Ltd. > + */ > + > +#include <poll.h> > +#include <stdio.h> > +#include <stdlib.h> > +#include <string.h> > +#include <sys/socket.h> > +#include <sys/types.h> > +#include <sys/un.h> > +#include <unistd.h> > + > +#define MSG_BUF_MAX 1024 > + > +static int connection_based_messaging(int sock, char *msg_buf, > + size_t msg_buf_len) > +{ > + int peer_sock, rc; > + > + peer_sock = accept(sock, NULL, NULL); > + if (peer_sock < 0) { > + perror("FAIL - accept"); > + return 1; > + } > + > + rc = write(peer_sock, msg_buf, msg_buf_len); > + if (rc < 0) { > + perror("FAIL - write"); > + return 1; > + } > + > + rc = read(peer_sock, msg_buf, msg_buf_len); > + if (rc < 0) { > + perror("FAIL - read"); > + return 1; > + } > + > + return 0; > +} > + > +static int connectionless_messaging(int sock, char *msg_buf, size_t > msg_buf_len) > +{ > + struct sockaddr_un peer_addr; > + socklen_t peer_addr_len = sizeof(peer_addr); > + int rc; > + > + peer_addr.sun_family = AF_UNIX; > + rc = recvfrom(sock, NULL, 0, 0, (struct sockaddr *)&peer_addr, > + &peer_addr_len); > + if (rc < 0) { > + perror("FAIL - recvfrom"); > + return 1; > + } > + > + rc = sendto(sock, msg_buf, msg_buf_len, 0, > + (struct sockaddr *)&peer_addr, peer_addr_len); > + if (rc < 0) { > + perror("FAIL - sendto"); > + return 1; > + } > + > + rc = recv(sock, msg_buf, msg_buf_len, 0); > + if (rc < 0) { > + perror("FAIL - recv"); > + return 1; > + } > + > + return 0; > +} > + > +int main (int argc, char *argv[]) > +{ > + struct sockaddr_un addr; > + struct pollfd pfd; > + char msg_buf[MSG_BUF_MAX]; > + size_t msg_buf_len; > + pid_t pid; > + int sock, type, rc; > + > + if (argc != 5) { > + fprintf(stderr, > + "Usage: %s <socket> <type> <message> <client>\n\n" > + " type\t\tstream, dgram, or seqpacket\n", > + argv[0]); > + exit(1); > + } > + > + if (!strcmp(argv[2], "stream")) { > + type = SOCK_STREAM; > + } else if (!strcmp(argv[2], "dgram")) { > + type = SOCK_DGRAM; > + } else if (!strcmp(argv[2], "seqpacket")) { > + type = SOCK_SEQPACKET; > + } else { > + fprintf(stderr, "FAIL - bad socket type: %s\n", argv[2]); > + exit(1); > + } > + > + msg_buf_len = strlen(argv[3]) + 1; > + if (msg_buf_len > MSG_BUF_MAX) { > + fprintf(stderr, "FAIL - message too big\n"); > + exit(1); > + } > + memcpy(msg_buf, argv[3], msg_buf_len); > + > + sock = socket(AF_UNIX, type | SOCK_CLOEXEC, 0); > + if (sock == -1) { > + perror("FAIL - socket"); > + exit(1); > + } > + > + addr.sun_family = AF_UNIX; > + strcpy(addr.sun_path, argv[1]); > + rc = bind(sock, (struct sockaddr *)&addr, > + strlen(addr.sun_path) + sizeof(addr.sun_family)); > + if (rc < 0) { > + perror("FAIL - bind"); > + exit(1); > + } > + > + if (type & SOCK_STREAM || type & SOCK_SEQPACKET) { > + rc = listen(sock, 2); > + if (rc < 0) { > + perror("FAIL - listen"); > + exit(1); > + } > + } > + > + pid = fork(); > + if (pid < 0) { > + perror("FAIL - fork"); > + exit(1); > + } else if (!pid) { > + execl(argv[4], argv[4], argv[1], argv[2], NULL); > + exit(0); > + } > + > + pfd.fd = sock; > + pfd.events = POLLIN; > + rc = poll(&pfd, 1, 500); > + if (rc < 0) { > + perror("FAIL - poll"); > + exit(1); > + } else if (!rc) { > + fprintf(stderr, "FAIL - poll timed out\n"); > + exit(1); > + } > + > + rc = (type & SOCK_STREAM || type & SOCK_SEQPACKET) ? > + connection_based_messaging(sock, msg_buf, msg_buf_len) : > + connectionless_messaging(sock, msg_buf, msg_buf_len); > + if (rc) > + exit(1); > + > + if (memcmp(argv[3], msg_buf, msg_buf_len)) { > + msg_buf[msg_buf_len] = '\0'; > + fprintf(stderr, "FAIL - buffer comparison. Got \"%s\", expected > \"%s\"\n", > + msg_buf, argv[3]); > + exit(1); > + } > + > + printf("PASS\n"); > + exit(0); > +} > diff --git a/tests/regression/apparmor/unix_socket.sh > b/tests/regression/apparmor/unix_socket.sh > new file mode 100755 > index 0000000..470ea29 > --- /dev/null > +++ b/tests/regression/apparmor/unix_socket.sh > @@ -0,0 +1,106 @@ > +#! /bin/bash > +# > +# Copyright (C) 2013 Canonical, Ltd. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of version 2 of the GNU General Public > +# License published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, contact Canonical Ltd. > + > +#=NAME unix_socket > +#=DESCRIPTION > +# This tests file access to path-based unix domain sockets. The server > +# opens a socket, forks a client with it's own profile, sends a message > +# to the client over the socket, and sees what happens. > +#=END > + > +pwd=`dirname $0` > +pwd=`cd $pwd ; /bin/pwd` > + > +bin=$pwd > + > +. $bin/prologue.inc > +requires_features policy/versions/v6 > + > +client=$bin/unix_socket_client > +socket=${tmpdir}/unix_socket.sock > +message=4a0c83d87aaa7afa2baab5df3ee4df630f0046d5bfb7a3080c550b721f401b3b\ > +8a738e1435a3b77aa6482a70fb51c44f20007221b85541b0184de66344d46a4c > +okserver=w > +badserver=r > + > +okclient=rw > +badclient1=r > +badclient2=w > + > +removesocket() > +{ > + rm -f ${socket} > +} > + > +testsocktype() > +{ > + local socktype=$1 # socket type - stream, dgram, or seqpacket > + local args="$socket $socktype $message $client" > + > + # PASS - unconfined > + > + runchecktest "socket file ($socktype); unconfined" pass $args > + removesocket > + > + # PASS - server w/ access to the file > + > + genprofile $socket:$okserver $client:Ux > + runchecktest "socket file ($socktype); confined server w/ access > ($okserver)" pass $args > + removesocket > + > + # FAIL - server w/o access to the file > + > + genprofile $client:Ux > + runchecktest "socket file ($socktype); confined server w/o access" fail > $args > + removesocket > + > + # FAIL - server w/ bad access to the file > + > + genprofile $socket:$badserver $client:Ux > + runchecktest "socket file ($socktype); confined server w/ bad access > ($badserver)" fail $args > + removesocket > + > + # PASS - client w/ access to the file > + > + genprofile $socket:$okserver $client:px -- image=$client > $socket:$okclient > + runchecktest "socket file ($socktype); confined client w/ access > ($okclient)" pass $args > + removesocket > + > + # FAIL - client w/o access to the file > + > + genprofile $socket:$okserver $client:px -- image=$client > + runchecktest "socket file ($socktype); confined client w/o access" fail > $args > + removesocket > + > + # FAIL - client w/ bad access to the file > + > + genprofile $socket:$okserver $client:px -- image=$client > $socket:$badclient1 > + runchecktest "socket file ($socktype); confined client w/ bad access > ($badclient1)" fail $args > + removesocket > + > + # FAIL - client w/ bad access to the file > + > + genprofile $socket:$okserver $client:px -- image=$client > $socket:$badclient2 > + runchecktest "socket file ($socktype); confined client w/ bad access > ($badclient2)" fail $args > + removesocket > + > + removeprofile > +} > + > +removesocket > +testsocktype stream > +testsocktype dgram > +testsocktype seqpacket > diff --git a/tests/regression/apparmor/unix_socket_client.c > b/tests/regression/apparmor/unix_socket_client.c > new file mode 100644 > index 0000000..73aa8ba > --- /dev/null > +++ b/tests/regression/apparmor/unix_socket_client.c > @@ -0,0 +1,126 @@ > +/* > + * Copyright (C) 2013 Canonical, Ltd. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of version 2 of the GNU General Public > + * License published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, contact Canonical Ltd. > + */ > + > +#include <stdio.h> > +#include <stdlib.h> > +#include <string.h> > +#include <sys/socket.h> > +#include <sys/types.h> > +#include <sys/un.h> > +#include <unistd.h> > + > +#define MSG_BUF_MAX 1024 > + > +static int connection_based_messaging(int sock) > +{ > + char msg_buf[MSG_BUF_MAX]; > + int rc; > + > + rc = read(sock, msg_buf, MSG_BUF_MAX); > + if (rc < 0) { > + perror("FAIL CLIENT - read"); > + return 1; > + } > + > + rc = write(sock, msg_buf, rc); > + if (rc < 0) { > + perror("FAIL CLIENT - write"); > + return 1; > + } > + > + return 0; > +} > + > +static int connectionless_messaging(int sock) > +{ > + struct sockaddr_un addr; > + char msg_buf[MSG_BUF_MAX]; > + int rc; > + > + addr.sun_family = AF_UNIX; > + rc = bind(sock, (struct sockaddr *)&addr, sizeof(sa_family_t)); > + if (rc < 0) { > + perror("FAIL CLIENT - bind"); > + return 1; > + } > + > + rc = write(sock, NULL, 0); > + if (rc < 0) { > + perror("FAIL CLIENT - write"); > + return 1; > + } > + > + rc = read(sock, msg_buf, MSG_BUF_MAX); > + if (rc < 0) { > + perror("FAIL CLIENT - read"); > + return 1; > + } > + > + rc = write(sock, msg_buf, rc); > + if (rc < 0) { > + perror("FAIL CLIENT - write"); > + return 1; > + } > + > + return 0; > +} > + > +int main(int argc, char *argv[]) > +{ > + struct sockaddr_un peer_addr; > + int sock, type, rc; > + > + if (argc != 3) { > + fprintf(stderr, "Usage: %s <socket> <type>\n\n" > + " type\t\tstream, dgram, or seqpacket\n", > + argv[0]); > + exit(1); > + } > + > + if (!strcmp(argv[2], "stream")) { > + type = SOCK_STREAM; > + } else if (!strcmp(argv[2], "dgram")) { > + type = SOCK_DGRAM; > + } else if (!strcmp(argv[2], "seqpacket")) { > + type = SOCK_SEQPACKET; > + } else { > + fprintf(stderr, "FAIL CLIENT - bad socket type: %s\n", argv[2]); > + exit(1); > + } > + > + sock = socket(AF_UNIX, type, 0); > + if (sock < 0) { > + perror("FAIL CLIENT - socket"); > + exit(1); > + } > + > + peer_addr.sun_family = AF_UNIX; > + strcpy(peer_addr.sun_path, argv[1]); > + rc = connect(sock, (struct sockaddr *)&peer_addr, > + strlen(peer_addr.sun_path) + sizeof(peer_addr.sun_family)); > + if (rc < 0) { > + perror("FAIL CLIENT - connect"); > + exit(1); > + } > + > + rc = (type == SOCK_STREAM || type == SOCK_SEQPACKET) ? > + connection_based_messaging(sock) : > + connectionless_messaging(sock); > + if (rc) > + exit(1); > + > + exit(0); > +} > diff --git a/tests/regression/apparmor/unix_socket_file.c > b/tests/regression/apparmor/unix_socket_file.c > deleted file mode 100644 > index 76a4eb8..0000000 > --- a/tests/regression/apparmor/unix_socket_file.c > +++ /dev/null > @@ -1,177 +0,0 @@ > -/* > - * Copyright (C) 2013 Canonical, Ltd. > - * > - * This program is free software; you can redistribute it and/or > - * modify it under the terms of version 2 of the GNU General Public > - * License published by the Free Software Foundation. > - * > - * This program is distributed in the hope that it will be useful, > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > - * GNU General Public License for more details. > - * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, contact Canonical Ltd. > - */ > - > -#include <poll.h> > -#include <stdio.h> > -#include <stdlib.h> > -#include <string.h> > -#include <sys/socket.h> > -#include <sys/types.h> > -#include <sys/un.h> > -#include <unistd.h> > - > -#define MSG_BUF_MAX 1024 > - > -static int connection_based_messaging(int sock, char *msg_buf, > - size_t msg_buf_len) > -{ > - int peer_sock, rc; > - > - peer_sock = accept(sock, NULL, NULL); > - if (peer_sock < 0) { > - perror("FAIL - accept"); > - return 1; > - } > - > - rc = write(peer_sock, msg_buf, msg_buf_len); > - if (rc < 0) { > - perror("FAIL - write"); > - return 1; > - } > - > - rc = read(peer_sock, msg_buf, msg_buf_len); > - if (rc < 0) { > - perror("FAIL - read"); > - return 1; > - } > - > - return 0; > -} > - > -static int connectionless_messaging(int sock, char *msg_buf, size_t > msg_buf_len) > -{ > - struct sockaddr_un peer_addr; > - socklen_t peer_addr_len = sizeof(peer_addr); > - int rc; > - > - peer_addr.sun_family = AF_UNIX; > - rc = recvfrom(sock, NULL, 0, 0, (struct sockaddr *)&peer_addr, > - &peer_addr_len); > - if (rc < 0) { > - perror("FAIL - recvfrom"); > - return 1; > - } > - > - rc = sendto(sock, msg_buf, msg_buf_len, 0, > - (struct sockaddr *)&peer_addr, peer_addr_len); > - if (rc < 0) { > - perror("FAIL - sendto"); > - return 1; > - } > - > - rc = recv(sock, msg_buf, msg_buf_len, 0); > - if (rc < 0) { > - perror("FAIL - recv"); > - return 1; > - } > - > - return 0; > -} > - > -int main (int argc, char *argv[]) > -{ > - struct sockaddr_un addr; > - struct pollfd pfd; > - char msg_buf[MSG_BUF_MAX]; > - size_t msg_buf_len; > - pid_t pid; > - int sock, type, rc; > - > - if (argc != 5) { > - fprintf(stderr, > - "Usage: %s <socket> <type> <message> <client>\n\n" > - " type\t\tstream, dgram, or seqpacket\n", > - argv[0]); > - exit(1); > - } > - > - if (!strcmp(argv[2], "stream")) { > - type = SOCK_STREAM; > - } else if (!strcmp(argv[2], "dgram")) { > - type = SOCK_DGRAM; > - } else if (!strcmp(argv[2], "seqpacket")) { > - type = SOCK_SEQPACKET; > - } else { > - fprintf(stderr, "FAIL - bad socket type: %s\n", argv[2]); > - exit(1); > - } > - > - msg_buf_len = strlen(argv[3]) + 1; > - if (msg_buf_len > MSG_BUF_MAX) { > - fprintf(stderr, "FAIL - message too big\n"); > - exit(1); > - } > - memcpy(msg_buf, argv[3], msg_buf_len); > - > - sock = socket(AF_UNIX, type | SOCK_CLOEXEC, 0); > - if (sock == -1) { > - perror("FAIL - socket"); > - exit(1); > - } > - > - addr.sun_family = AF_UNIX; > - strcpy(addr.sun_path, argv[1]); > - rc = bind(sock, (struct sockaddr *)&addr, > - strlen(addr.sun_path) + sizeof(addr.sun_family)); > - if (rc < 0) { > - perror("FAIL - bind"); > - exit(1); > - } > - > - if (type & SOCK_STREAM || type & SOCK_SEQPACKET) { > - rc = listen(sock, 2); > - if (rc < 0) { > - perror("FAIL - listen"); > - exit(1); > - } > - } > - > - pid = fork(); > - if (pid < 0) { > - perror("FAIL - fork"); > - exit(1); > - } else if (!pid) { > - execl(argv[4], argv[4], argv[1], argv[2], NULL); > - exit(0); > - } > - > - pfd.fd = sock; > - pfd.events = POLLIN; > - rc = poll(&pfd, 1, 500); > - if (rc < 0) { > - perror("FAIL - poll"); > - exit(1); > - } else if (!rc) { > - fprintf(stderr, "FAIL - poll timed out\n"); > - exit(1); > - } > - > - rc = (type & SOCK_STREAM || type & SOCK_SEQPACKET) ? > - connection_based_messaging(sock, msg_buf, msg_buf_len) : > - connectionless_messaging(sock, msg_buf, msg_buf_len); > - if (rc) > - exit(1); > - > - if (memcmp(argv[3], msg_buf, msg_buf_len)) { > - msg_buf[msg_buf_len] = '\0'; > - fprintf(stderr, "FAIL - buffer comparison. Got \"%s\", expected > \"%s\"\n", > - msg_buf, argv[3]); > - exit(1); > - } > - > - printf("PASS\n"); > - exit(0); > -} > diff --git a/tests/regression/apparmor/unix_socket_file.sh > b/tests/regression/apparmor/unix_socket_file.sh > deleted file mode 100755 > index dbb923c..0000000 > --- a/tests/regression/apparmor/unix_socket_file.sh > +++ /dev/null > @@ -1,106 +0,0 @@ > -#! /bin/bash > -# > -# Copyright (C) 2013 Canonical, Ltd. > -# > -# This program is free software; you can redistribute it and/or > -# modify it under the terms of version 2 of the GNU General Public > -# License published by the Free Software Foundation. > -# > -# This program is distributed in the hope that it will be useful, > -# but WITHOUT ANY WARRANTY; without even the implied warranty of > -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > -# GNU General Public License for more details. > -# > -# You should have received a copy of the GNU General Public License > -# along with this program; if not, contact Canonical Ltd. > - > -#=NAME unix_socket_file > -#=DESCRIPTION > -# This tests file access to path-based unix domain sockets. The server > -# opens a socket, forks a client with it's own profile, sends a message > -# to the client over the socket, and sees what happens. > -#=END > - > -pwd=`dirname $0` > -pwd=`cd $pwd ; /bin/pwd` > - > -bin=$pwd > - > -. $bin/prologue.inc > -requires_features policy/versions/v6 > - > -client=$bin/unix_socket_file_client > -socket=${tmpdir}/unix_socket_file.sock > -message=4a0c83d87aaa7afa2baab5df3ee4df630f0046d5bfb7a3080c550b721f401b3b\ > -8a738e1435a3b77aa6482a70fb51c44f20007221b85541b0184de66344d46a4c > -okserver=w > -badserver=r > - > -okclient=rw > -badclient1=r > -badclient2=w > - > -removesocket() > -{ > - rm -f ${socket} > -} > - > -testsocktype() > -{ > - local socktype=$1 # socket type - stream, dgram, or seqpacket > - local args="$socket $socktype $message $client" > - > - # PASS - unconfined > - > - runchecktest "socket file ($socktype); unconfined" pass $args > - removesocket > - > - # PASS - server w/ access to the file > - > - genprofile $socket:$okserver $client:Ux > - runchecktest "socket file ($socktype); confined server w/ access > ($okserver)" pass $args > - removesocket > - > - # FAIL - server w/o access to the file > - > - genprofile $client:Ux > - runchecktest "socket file ($socktype); confined server w/o access" fail > $args > - removesocket > - > - # FAIL - server w/ bad access to the file > - > - genprofile $socket:$badserver $client:Ux > - runchecktest "socket file ($socktype); confined server w/ bad access > ($badserver)" fail $args > - removesocket > - > - # PASS - client w/ access to the file > - > - genprofile $socket:$okserver $client:px -- image=$client > $socket:$okclient > - runchecktest "socket file ($socktype); confined client w/ access > ($okclient)" pass $args > - removesocket > - > - # FAIL - client w/o access to the file > - > - genprofile $socket:$okserver $client:px -- image=$client > - runchecktest "socket file ($socktype); confined client w/o access" fail > $args > - removesocket > - > - # FAIL - client w/ bad access to the file > - > - genprofile $socket:$okserver $client:px -- image=$client > $socket:$badclient1 > - runchecktest "socket file ($socktype); confined client w/ bad access > ($badclient1)" fail $args > - removesocket > - > - # FAIL - client w/ bad access to the file > - > - genprofile $socket:$okserver $client:px -- image=$client > $socket:$badclient2 > - runchecktest "socket file ($socktype); confined client w/ bad access > ($badclient2)" fail $args > - removesocket > - > - removeprofile > -} > - > -removesocket > -testsocktype stream > -testsocktype dgram > -testsocktype seqpacket > diff --git a/tests/regression/apparmor/unix_socket_file_client.c > b/tests/regression/apparmor/unix_socket_file_client.c > deleted file mode 100644 > index 73aa8ba..0000000 > --- a/tests/regression/apparmor/unix_socket_file_client.c > +++ /dev/null > @@ -1,126 +0,0 @@ > -/* > - * Copyright (C) 2013 Canonical, Ltd. > - * > - * This program is free software; you can redistribute it and/or > - * modify it under the terms of version 2 of the GNU General Public > - * License published by the Free Software Foundation. > - * > - * This program is distributed in the hope that it will be useful, > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > - * GNU General Public License for more details. > - * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, contact Canonical Ltd. > - */ > - > -#include <stdio.h> > -#include <stdlib.h> > -#include <string.h> > -#include <sys/socket.h> > -#include <sys/types.h> > -#include <sys/un.h> > -#include <unistd.h> > - > -#define MSG_BUF_MAX 1024 > - > -static int connection_based_messaging(int sock) > -{ > - char msg_buf[MSG_BUF_MAX]; > - int rc; > - > - rc = read(sock, msg_buf, MSG_BUF_MAX); > - if (rc < 0) { > - perror("FAIL CLIENT - read"); > - return 1; > - } > - > - rc = write(sock, msg_buf, rc); > - if (rc < 0) { > - perror("FAIL CLIENT - write"); > - return 1; > - } > - > - return 0; > -} > - > -static int connectionless_messaging(int sock) > -{ > - struct sockaddr_un addr; > - char msg_buf[MSG_BUF_MAX]; > - int rc; > - > - addr.sun_family = AF_UNIX; > - rc = bind(sock, (struct sockaddr *)&addr, sizeof(sa_family_t)); > - if (rc < 0) { > - perror("FAIL CLIENT - bind"); > - return 1; > - } > - > - rc = write(sock, NULL, 0); > - if (rc < 0) { > - perror("FAIL CLIENT - write"); > - return 1; > - } > - > - rc = read(sock, msg_buf, MSG_BUF_MAX); > - if (rc < 0) { > - perror("FAIL CLIENT - read"); > - return 1; > - } > - > - rc = write(sock, msg_buf, rc); > - if (rc < 0) { > - perror("FAIL CLIENT - write"); > - return 1; > - } > - > - return 0; > -} > - > -int main(int argc, char *argv[]) > -{ > - struct sockaddr_un peer_addr; > - int sock, type, rc; > - > - if (argc != 3) { > - fprintf(stderr, "Usage: %s <socket> <type>\n\n" > - " type\t\tstream, dgram, or seqpacket\n", > - argv[0]); > - exit(1); > - } > - > - if (!strcmp(argv[2], "stream")) { > - type = SOCK_STREAM; > - } else if (!strcmp(argv[2], "dgram")) { > - type = SOCK_DGRAM; > - } else if (!strcmp(argv[2], "seqpacket")) { > - type = SOCK_SEQPACKET; > - } else { > - fprintf(stderr, "FAIL CLIENT - bad socket type: %s\n", argv[2]); > - exit(1); > - } > - > - sock = socket(AF_UNIX, type, 0); > - if (sock < 0) { > - perror("FAIL CLIENT - socket"); > - exit(1); > - } > - > - peer_addr.sun_family = AF_UNIX; > - strcpy(peer_addr.sun_path, argv[1]); > - rc = connect(sock, (struct sockaddr *)&peer_addr, > - strlen(peer_addr.sun_path) + sizeof(peer_addr.sun_family)); > - if (rc < 0) { > - perror("FAIL CLIENT - connect"); > - exit(1); > - } > - > - rc = (type == SOCK_STREAM || type == SOCK_SEQPACKET) ? > - connection_based_messaging(sock) : > - connectionless_messaging(sock); > - if (rc) > - exit(1); > - > - exit(0); > -} > -- > 2.1.0.rc1 > > > -- > AppArmor mailing list > [email protected] > Modify settings or unsubscribe at: > https://lists.ubuntu.com/mailman/listinfo/apparmor >
signature.asc
Description: Digital signature
-- AppArmor mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor
