From 7f87f8ff28ec8c4be8aa094a4f74da55e91073d3 Mon Sep 17 00:00:00 2001 From: Rabit Date: Wed, 17 Feb 2021 12:09:51 -0800 Subject: [PATCH] Support compile with clang on BSD A couple of changes to make the code compile on BSD systems with clang --- src/server.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/server.c b/src/server.c index 66e57727f..f51e725fa 100644 --- a/src/server.c +++ b/src/server.c @@ -211,10 +211,11 @@ int dqlite_node_set_bind_address(dqlite_node *t, const char *address) len += sizeof(sa_family_t); addr = (struct sockaddr *)&addr_un; } - fd = socket(domain, SOCK_STREAM | SOCK_CLOEXEC, 0); + fd = socket(domain, SOCK_STREAM, 0); if (fd == -1) { return DQLITE_ERROR; } + fcntl(fd, O_CLOEXEC); if (domain == AF_INET) { int reuse = 1; rv = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, @@ -431,10 +432,20 @@ static void listenCb(uv_stream_t *listener, int status) /* We accept unix socket connections only from the same process. */ if (listener->type == UV_NAMED_PIPE) { + int fd = stream->io_watcher.fd; +#if defined(__FreeBSD__) || defined(__APPLE__) + pid_t pid = -1; + socklen_t len = sizeof(pid); + rv = getsockopt(fd, SOL_SOCKET, LOCAL_PEERPID, &pid, &len); + if (rv != 0) { + goto err; + } + if (pid != getpid()) { + goto err; + } +#else struct ucred cred; socklen_t len; - int fd; - fd = stream->io_watcher.fd; len = sizeof cred; rv = getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cred, &len); if (rv != 0) { @@ -443,6 +454,7 @@ static void listenCb(uv_stream_t *listener, int status) if (cred.pid != getpid()) { goto err; } +#endif } conn = sqlite3_malloc(sizeof *conn);