struct listen_socket_s
{
int fd;
- char addr[PATH_MAX + 1];
+ char *addr;
int family;
/* state for BATCH processing */
free(sock->rbuf); sock->rbuf = NULL;
free(sock->wbuf); sock->wbuf = NULL;
+ free(sock->addr); sock->addr = NULL;
free(sock);
} /* }}} void free_listen_socket */
listen_fds[listen_fds_num].fd = fd;
listen_fds[listen_fds_num].family = PF_UNIX;
- strncpy(listen_fds[listen_fds_num].addr, path,
- sizeof (listen_fds[listen_fds_num].addr) - 1);
+ listen_fds[listen_fds_num].addr = strdup(path);
listen_fds_num++;
return (0);
}
else
{
- strncpy(default_socket.addr, RRDCACHED_DEFAULT_ADDRESS,
- sizeof(default_socket.addr) - 1);
- default_socket.addr[sizeof(default_socket.addr) - 1] = '\0';
+ default_socket.addr = strdup(RRDCACHED_DEFAULT_ADDRESS);
if (default_socket.permissions == 0)
socket_permission_set_all (&default_socket);
if (listen_fds[i].family == PF_UNIX)
unlink(listen_fds[i].addr);
+ free(listen_fds[i].addr);
}
free (listen_fds);
continue;
}
memcpy(client_sock, &listen_fds[i], sizeof(listen_fds[0]));
+ client_sock->addr = strdup(listen_fds[i].addr);
+ if (client_sock->addr == NULL)
+ {
+ RRDD_LOG (LOG_ERR, "listen_thread_main: strdup failed.");
+ continue;
+ }
client_sa_size = sizeof (client_sa);
client_sock->fd = accept (pollfds[i].fd,
if (client_sock->fd < 0)
{
RRDD_LOG (LOG_ERR, "listen_thread_main: accept(2) failed.");
+ free(client_sock->addr);
free(client_sock);
continue;
}
memset(new, 0, sizeof(listen_socket_t));
if ('L' == option)
- new->addr[0] = 0;
+ new->addr = strdup("");
else
- strncpy(new->addr, optarg, sizeof(new->addr)-1);
+ new->addr = strdup(optarg);
/* Add permissions to the socket {{{ */
if (default_socket.permissions != 0)