prelude-lml/master: The Prelude-LML UDP server is now fully IPV6 compatible
[email protected] Thu, 16 Jul 2009 15:42:29 +0200 (CEST)
| Newsgroups | gmane.comp.security.ids.prelude.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit dbe81397cfaef323f44dcbe92d8c8c2f980b3d1b Author: Yoann Vandoorselaere <[email protected]> Date: Mon Jul 13 16:46:02 2009 +0200 The Prelude-LML UDP server is now fully IPV6 compatible ======================================== src/udp-server.c | 25 +++++++++++++++++++------ 1 files changed, 19 insertions(+), 6 deletions(-) ======================================== diff --git a/src/udp-server.c b/src/udp-server.c index d3a251d..fba5d2c 100644 --- a/src/udp-server.c +++ b/src/udp-server.c @@ -93,13 +93,22 @@ void udp_server_process_event(udp_server_t *server) { ssize_t ret; socklen_t len; - char src[512]; - struct sockaddr_in addr; - char buf[SYSLOG_MSG_MAX_SIZE], *ptr = NULL; + void *in_addr; + union { + struct sockaddr sa; + struct sockaddr_in sa4; +#ifdef HAVE_IPV6 + struct sockaddr_in6 sa6; +# define SOCKADDR_PORT_MEMBER(x) (x.sa6.sin6_port) +#else +# define SOCKADDR_PORT_MEMBER(x) (x.sa4.sin_port) +#endif + } addr; + char buf[SYSLOG_MSG_MAX_SIZE], *ptr = NULL, src[512]; - len = sizeof(struct sockaddr); + len = sizeof(addr); - ret = recvfrom(server->sockfd, buf, sizeof(buf) - 1, 0, (struct sockaddr *) &addr, &len); + ret = recvfrom(server->sockfd, buf, sizeof(buf) - 1, 0, &addr.sa, &len); if ( ret < 0 ) { prelude_log(PRELUDE_LOG_ERR, "error receiving syslog message.\n"); return; @@ -110,7 +119,11 @@ void udp_server_process_event(udp_server_t *server) buf[ret] = '\0'; - snprintf(src, sizeof(src), "%s:%d", inet_ntoa(addr.sin_addr), addr.sin_port); + in_addr = prelude_sockaddr_get_inaddr(&addr.sa); + prelude_return_if_fail(in_addr); + prelude_return_if_fail(inet_ntop(addr.sa.sa_family, in_addr, src, sizeof(src))); + + snprintf(src + strlen(src), sizeof(src) - strlen(src), ":%d", SOCKADDR_PORT_MEMBER(addr)); lml_log_source_set_name(server->ls, src); /* _______________________________________________ Prelude-cvslog site list [email protected] http://lists.prelude-ids.org/mailman/listinfo/prelude-cvslog