Signed-off-by: Tyler Hicks <[email protected]>
---
 tests/regression/apparmor/unix_socket.c        | 22 ++++++++++++++++++----
 tests/regression/apparmor/unix_socket_client.c | 19 ++++++++++++++++---
 2 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/tests/regression/apparmor/unix_socket.c 
b/tests/regression/apparmor/unix_socket.c
index 76a4eb8..b6dc0dd 100644
--- a/tests/regression/apparmor/unix_socket.c
+++ b/tests/regression/apparmor/unix_socket.c
@@ -87,17 +87,33 @@ int main (int argc, char *argv[])
        struct pollfd pfd;
        char msg_buf[MSG_BUF_MAX];
        size_t msg_buf_len;
+       const char *sun_path;
+       size_t sun_path_len;
        pid_t pid;
        int sock, type, rc;
 
        if (argc != 5) {
                fprintf(stderr,
                        "Usage: %s <socket> <type> <message> <client>\n\n"
+                       "  socket\t\ta path for a bound socket or a name 
prepended with '@' for an abstract socket\n"
                        "  type\t\tstream, dgram, or seqpacket\n",
                        argv[0]);
                exit(1);
        }
 
+       addr.sun_family = AF_UNIX;
+       memset(addr.sun_path, 0, sizeof(addr.sun_path));
+
+       sun_path = argv[1];
+       sun_path_len = strlen(sun_path);
+       if (sun_path[0] == '@') {
+               memcpy(addr.sun_path, sun_path, sun_path_len);
+               addr.sun_path[0] = '\0';
+               sun_path_len = sizeof(addr.sun_path);
+       } else {
+               memcpy(addr.sun_path, sun_path, sun_path_len + 1);
+       }
+
        if (!strcmp(argv[2], "stream")) {
                type = SOCK_STREAM;
        } else if (!strcmp(argv[2], "dgram")) {
@@ -122,10 +138,8 @@ int main (int argc, char *argv[])
                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));
+                 sun_path_len + sizeof(addr.sun_family));
        if (rc < 0) {
                perror("FAIL - bind");
                exit(1);
@@ -144,7 +158,7 @@ int main (int argc, char *argv[])
                perror("FAIL - fork");
                exit(1);
        } else if (!pid) {
-               execl(argv[4], argv[4], argv[1], argv[2], NULL);
+               execl(argv[4], argv[4], sun_path, argv[2], NULL);
                exit(0);
        }
 
diff --git a/tests/regression/apparmor/unix_socket_client.c 
b/tests/regression/apparmor/unix_socket_client.c
index 73aa8ba..ac53ecd 100644
--- a/tests/regression/apparmor/unix_socket_client.c
+++ b/tests/regression/apparmor/unix_socket_client.c
@@ -81,6 +81,8 @@ static int connectionless_messaging(int sock)
 int main(int argc, char *argv[])
 {
        struct sockaddr_un peer_addr;
+       const char *sun_path;
+       size_t sun_path_len;
        int sock, type, rc;
 
        if (argc != 3) {
@@ -90,6 +92,19 @@ int main(int argc, char *argv[])
                exit(1);
        }
 
+       peer_addr.sun_family = AF_UNIX;
+       memset(peer_addr.sun_path, 0, sizeof(peer_addr.sun_path));
+
+       sun_path = argv[1];
+       sun_path_len = strlen(sun_path);
+       if (sun_path[0] == '@') {
+               memcpy(peer_addr.sun_path, sun_path, sun_path_len);
+               peer_addr.sun_path[0] = '\0';
+               sun_path_len = sizeof(peer_addr.sun_path);
+       } else {
+               memcpy(peer_addr.sun_path, sun_path, sun_path_len + 1);
+       }
+
        if (!strcmp(argv[2], "stream")) {
                type = SOCK_STREAM;
        } else if (!strcmp(argv[2], "dgram")) {
@@ -107,10 +122,8 @@ int main(int argc, char *argv[])
                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));
+                    sun_path_len + sizeof(peer_addr.sun_family));
        if (rc < 0) {
                perror("FAIL CLIENT - connect");
                exit(1);
-- 
2.1.0.rc1


-- 
AppArmor mailing list
[email protected]
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/apparmor

Reply via email to