cache warming: close the socket when done.
Also handle errors in open(), don't try to use
a non-existent socket.
Fixes b/32677877
Change-Id: I075c96d2744bee44fd1fdce4db3b52e6c63ca8b2
diff --git a/src/forward.c b/src/forward.c
index 829f9d2..c9d1eb8 100644
--- a/src/forward.c
+++ b/src/forward.c
@@ -1315,18 +1315,22 @@
access("/config/experiments/CacheWarming.active", R_OK) == 0)
{
int sock;
- if ((sock = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0)
+ if ((sock = socket(AF_UNIX, SOCK_DGRAM, 0)) >= 0)
+ {
+ struct sockaddr_un server_address = {AF_UNIX, "/tmp/dns_query_log_socket"};
+ char msg[128];
+ snprintf(msg, sizeof(msg), "%lu %s", now, daemon->namebuff);
+ if (sendto(sock, msg, strlen(msg), 0, (struct sockaddr *)&server_address,
+ sizeof(server_address)) < 0)
+ {
+ my_syslog(LOG_ERR, "failed to send message on query log socket: %s", strerror(errno));
+ }
+ close(sock);
+ }
+ else
{
my_syslog(LOG_ERR, "failed to create query log socket: %s", strerror(errno));
}
- struct sockaddr_un server_address = {AF_UNIX, "/tmp/dns_query_log_socket"};
- char msg[128];
- snprintf(msg, sizeof(msg), "%lu %s", now, daemon->namebuff);
- if (sendto(sock, msg, strlen(msg), 0, (struct sockaddr *)&server_address,
- sizeof(server_address)) < 0)
- {
- my_syslog(LOG_ERR, "failed to send message on query log socket: %s", strerror(errno));
- }
}
#ifdef HAVE_AUTH
/* find queries for zones we're authoritative for, and answer them directly */