mirror of
https://gitlab.com/apparmor/apparmor.git
synced 2025-03-04 16:35:02 +01:00
tests: Don't call connect() for connectionless sockets
Use the sendto()/recvfrom() functions when dealing with dgram sockets in unix_socket_client. This allows us to test different interfaces besides the typical write()/read() and will allow for a smaller permissions set for unix_socket_client. Signed-off-by: Tyler Hicks <tyhicks@canonical.com> Acked-by: Steve Beattie <steve@nxnw.org>
This commit is contained in:
parent
f31b44ff2d
commit
12b09ecd9e
1 changed files with 22 additions and 17 deletions
|
@ -27,11 +27,18 @@
|
||||||
#define SUN_PATH_SUFFIX ".client"
|
#define SUN_PATH_SUFFIX ".client"
|
||||||
#define SUN_PATH_SUFFIX_LEN strlen(SUN_PATH_SUFFIX)
|
#define SUN_PATH_SUFFIX_LEN strlen(SUN_PATH_SUFFIX)
|
||||||
|
|
||||||
static int connection_based_messaging(int sock)
|
static int connection_based_messaging(int sock, struct sockaddr_un *peer_addr,
|
||||||
|
socklen_t peer_addr_len)
|
||||||
{
|
{
|
||||||
char msg_buf[MSG_BUF_MAX];
|
char msg_buf[MSG_BUF_MAX];
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
rc = connect(sock, (struct sockaddr *)peer_addr, peer_addr_len);
|
||||||
|
if (rc < 0) {
|
||||||
|
perror("FAIL CLIENT - connect");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
rc = read(sock, msg_buf, MSG_BUF_MAX);
|
rc = read(sock, msg_buf, MSG_BUF_MAX);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
perror("FAIL CLIENT - read");
|
perror("FAIL CLIENT - read");
|
||||||
|
@ -54,6 +61,7 @@ static int connectionless_messaging(int sock, struct sockaddr_un *peer_addr,
|
||||||
size_t peer_path_len = peer_addr_len - sizeof(addr.sun_family);
|
size_t peer_path_len = peer_addr_len - sizeof(addr.sun_family);
|
||||||
size_t path_len = peer_path_len + SUN_PATH_SUFFIX_LEN;
|
size_t path_len = peer_path_len + SUN_PATH_SUFFIX_LEN;
|
||||||
char msg_buf[MSG_BUF_MAX];
|
char msg_buf[MSG_BUF_MAX];
|
||||||
|
socklen_t len = peer_addr_len;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (path_len > sizeof(addr.sun_path)) {
|
if (path_len > sizeof(addr.sun_path)) {
|
||||||
|
@ -79,21 +87,22 @@ static int connectionless_messaging(int sock, struct sockaddr_un *peer_addr,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = write(sock, NULL, 0);
|
rc = sendto(sock, NULL, 0, 0, (struct sockaddr *)peer_addr, len);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
perror("FAIL CLIENT - write");
|
perror("FAIL CLIENT - sendto");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = read(sock, msg_buf, MSG_BUF_MAX);
|
rc = recvfrom(sock, msg_buf, MSG_BUF_MAX, 0,
|
||||||
|
(struct sockaddr *)peer_addr, &len);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
perror("FAIL CLIENT - read");
|
perror("FAIL CLIENT - recvfrom");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = write(sock, msg_buf, rc);
|
rc = sendto(sock, msg_buf, rc, 0, (struct sockaddr *)peer_addr, len);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
perror("FAIL CLIENT - write");
|
perror("FAIL CLIENT - sendto");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,7 +141,8 @@ static int get_set_sock_io_timeo(int sock)
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
struct sockaddr_un peer_addr;
|
struct sockaddr_un peer_addr, *pa;
|
||||||
|
socklen_t pa_len;
|
||||||
const char *sun_path;
|
const char *sun_path;
|
||||||
size_t sun_path_len;
|
size_t sun_path_len;
|
||||||
int sock, type, rc;
|
int sock, type, rc;
|
||||||
|
@ -187,17 +197,12 @@ int main(int argc, char *argv[])
|
||||||
if (rc)
|
if (rc)
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
||||||
rc = connect(sock, (struct sockaddr *)&peer_addr,
|
pa = &peer_addr;
|
||||||
sun_path_len + sizeof(peer_addr.sun_family));
|
pa_len = sun_path_len + sizeof(peer_addr.sun_family);
|
||||||
if (rc < 0) {
|
|
||||||
perror("FAIL CLIENT - connect");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = (type == SOCK_STREAM || type == SOCK_SEQPACKET) ?
|
rc = (type == SOCK_STREAM || type == SOCK_SEQPACKET) ?
|
||||||
connection_based_messaging(sock) :
|
connection_based_messaging(sock, pa, pa_len) :
|
||||||
connectionless_messaging(sock, &peer_addr,
|
connectionless_messaging(sock, pa, pa_len);
|
||||||
sun_path_len + sizeof(peer_addr.sun_family));
|
|
||||||
if (rc)
|
if (rc)
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue