From 3978c243a079d5ed6201a2743a36ea0c966ca4e0 Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Sat, 22 Feb 2020 15:54:27 +0000 Subject: [PATCH] Unix socket struct naming: avoid "sun" due to conflict on Solaris --- src/src/daemon.c | 28 ++++++++++++++-------------- src/src/expand.c | 22 +++++++++++----------- src/src/queue.c | 10 +++++----- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/src/daemon.c b/src/src/daemon.c index b4629bad5..12e3413a0 100644 --- a/src/src/daemon.c +++ b/src/src/daemon.c @@ -995,7 +995,7 @@ daemon_notifier_socket(void) { int fd; const uschar * where; -struct sockaddr_un sun = {.sun_family = AF_UNIX}; +struct sockaddr_un sa_un = {.sun_family = AF_UNIX}; int len; DEBUG(D_any) debug_printf("creating notifier socket "); @@ -1011,19 +1011,19 @@ if ((fd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) #endif #ifdef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS -sun.sun_path[0] = 0; /* Abstract local socket addr - Linux-specific? */ +sa_un.sun_path[0] = 0; /* Abstract local socket addr - Linux-specific? */ len = offsetof(struct sockaddr_un, sun_path) + 1 - + snprintf(sun.sun_path+1, sizeof(sun.sun_path)-1, "%s", NOTIFIER_SOCKET_NAME); -DEBUG(D_any) debug_printf("@%s\n", sun.sun_path+1); + + snprintf(sa_un.sun_path+1, sizeof(sa_un.sun_path)-1, "%s", NOTIFIER_SOCKET_NAME); +DEBUG(D_any) debug_printf("@%s\n", sa_un.sun_path+1); #else /* filesystem-visible and persistent; will neeed removal */ len = offsetof(struct sockaddr_un, sun_path) - + snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/%s", + + snprintf(sa_un.sun_path, sizeof(sa_un.sun_path), "%s/%s", spool_directory, NOTIFIER_SOCKET_NAME); -DEBUG(D_any) debug_printf("%s\n", sun.sun_path); +DEBUG(D_any) debug_printf("%s\n", sa_un.sun_path); #endif where = US"bind"; -if (bind(fd, (const struct sockaddr *)&sun, len) < 0) +if (bind(fd, (const struct sockaddr *)&sa_un, len) < 0) goto bad; #ifdef SO_PASSCRED /* Linux */ @@ -1053,10 +1053,10 @@ static BOOL daemon_notification(void) { uschar buf[256], cbuf[256]; -struct sockaddr_un sun; +struct sockaddr_un sa_un; struct iovec iov = {.iov_base = buf, .iov_len = sizeof(buf)-1}; -struct msghdr msg = { .msg_name = &sun, - .msg_namelen = sizeof(sun), +struct msghdr msg = { .msg_name = &sa_un, + .msg_namelen = sizeof(sa_un), .msg_iov = &iov, .msg_iovlen = 1, .msg_control = cbuf, @@ -1073,9 +1073,9 @@ if (sz >= sizeof(buf)) return FALSE; debug_printf("addrlen %d\n", msg.msg_namelen); #endif DEBUG(D_queue_run) debug_printf("%s from addr '%s%.*s'\n", __FUNCTION__, - *sun.sun_path ? "" : "@", - (int)msg.msg_namelen - (*sun.sun_path ? 0 : 1), - sun.sun_path + (*sun.sun_path ? 0 : 1)); + *sa_un.sun_path ? "" : "@", + (int)msg.msg_namelen - (*sa_un.sun_path ? 0 : 1), + sa_un.sun_path + (*sa_un.sun_path ? 0 : 1)); /* Refuse to handle the item unless the peer has good credentials */ #ifdef SCM_CREDENTIALS @@ -1135,7 +1135,7 @@ switch (buf[0]) debug_printf("%s: queue size request: %s\n", __FUNCTION__, buf); if (sendto(daemon_notifier_fd, buf, len, 0, - (const struct sockaddr *)&sun, msg.msg_namelen) < 0) + (const struct sockaddr *)&sa_un, msg.msg_namelen) < 0) log_write(0, LOG_MAIN|LOG_PANIC, "%s: sendto: %s\n", __FUNCTION__, strerror(errno)); return FALSE; diff --git a/src/src/expand.c b/src/src/expand.c index 4af4a3652..426e40e73 100644 --- a/src/src/expand.c +++ b/src/src/expand.c @@ -1750,7 +1750,7 @@ return g ? g->s : NULL; static uschar * fn_queue_size(void) { -struct sockaddr_un sun = {.sun_family = AF_UNIX}; +struct sockaddr_un sa_un = {.sun_family = AF_UNIX}; uschar buf[16]; int fd; ssize_t len; @@ -1766,35 +1766,35 @@ if ((fd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) } #ifdef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS -sun.sun_path[0] = 0; /* Abstract local socket addr - Linux-specific? */ +sa_un.sun_path[0] = 0; /* Abstract local socket addr - Linux-specific? */ len = offsetof(struct sockaddr_un, sun_path) + 1 - + snprintf(sun.sun_path+1, sizeof(sun.sun_path)-1, "exim_%d", getpid()); + + snprintf(sa_un.sun_path+1, sizeof(sa_un.sun_path)-1, "exim_%d", getpid()); #else sname = string_sprintf("%s/p_%d", spool_directory, getpid()); len = offsetof(struct sockaddr_un, sun_path) - + snprintf(sun.sun_path, sizeof(sun.sun_path), "%s", sname); + + snprintf(sa_un.sun_path, sizeof(sa_un.sun_path), "%s", sname); #endif -if (bind(fd, (const struct sockaddr *)&sun, len) < 0) +if (bind(fd, (const struct sockaddr *)&sa_un, len) < 0) { where = US"bind"; goto bad; } #ifdef notdef debug_printf("local addr '%s%s'\n", - *sun.sun_path ? "" : "@", - sun.sun_path + (*sun.sun_path ? 0 : 1)); + *sa_un.sun_path ? "" : "@", + sa_un.sun_path + (*sa_un.sun_path ? 0 : 1)); #endif #ifdef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS -sun.sun_path[0] = 0; /* Abstract local socket addr - Linux-specific? */ +sa_un.sun_path[0] = 0; /* Abstract local socket addr - Linux-specific? */ len = offsetof(struct sockaddr_un, sun_path) + 1 - + snprintf(sun.sun_path+1, sizeof(sun.sun_path)-1, "%s", NOTIFIER_SOCKET_NAME); + + snprintf(sa_un.sun_path+1, sizeof(sa_un.sun_path)-1, "%s", NOTIFIER_SOCKET_NAME); #else len = offsetof(struct sockaddr_un, sun_path) - + snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/%s", + + snprintf(sa_un.sun_path, sizeof(sa_un.sun_path), "%s/%s", spool_directory, NOTIFIER_SOCKET_NAME); #endif -if (connect(fd, (const struct sockaddr *)&sun, len) < 0) +if (connect(fd, (const struct sockaddr *)&sa_un, len) < 0) { where = US"connect"; goto bad; } buf[0] = NOTIFY_QUEUE_SIZE_REQ; diff --git a/src/src/queue.c b/src/src/queue.c index 4452163d0..0cd6fcca2 100644 --- a/src/src/queue.c +++ b/src/src/queue.c @@ -1523,21 +1523,21 @@ memcpy(buf+1, msgid, MESSAGE_ID_LENGTH+1); if ((fd = socket(AF_UNIX, SOCK_DGRAM, 0)) >= 0) { - struct sockaddr_un sun = {.sun_family = AF_UNIX}; + struct sockaddr_un sa_un = {.sun_family = AF_UNIX}; int slen; #ifdef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS int len = offsetof(struct sockaddr_un, sun_path) + 1 - + snprintf(sun.sun_path+1, sizeof(sun.sun_path)-1, "%s", + + snprintf(sa_un.sun_path+1, sizeof(sa_un.sun_path)-1, "%s", NOTIFIER_SOCKET_NAME); - sun.sun_path[0] = 0; + sa_un.sun_path[0] = 0; #else int len = offsetof(struct sockaddr_un, sun_path) - + snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/%s", + + snprintf(sa_un.sun_path, sizeof(sa_un.sun_path), "%s/%s", spool_directory, NOTIFIER_SOCKET_NAME); #endif - if (sendto(fd, buf, sizeof(buf), 0, (struct sockaddr *)&sun, len) < 0) + if (sendto(fd, buf, sizeof(buf), 0, (struct sockaddr *)&sa_un, len) < 0) DEBUG(D_queue_run) debug_printf("%s: sendto %s\n", __FUNCTION__, strerror(errno)); close(fd); -- 2.30.2