[syslog-ng] [PATCH] Fix logging of IPv6 addresses in template format M_SOURCE_IP
Balazs Scheidler
bazsi at balabit.hu
Wed Apr 22 13:22:11 CEST 2009
Hi,
Thanks for your report. I've committed this patch to fix the issue:
commit da4fbcd19371ad091094faa929dae7032ebc2508
Author: Balazs Scheidler <bazsi at balabit.hu>
Date: Wed Apr 22 13:20:57 2009 +0200
[templates] fix SOURCEIP macro expansion for IPv6 addresses
Reported-By: Michael Granzow
It is not the same as the patch you originally submitted, but quite
similar.
On Wed, 2009-04-15 at 14:09 +0100, Michael Granzow wrote:
> Signed-off-by: Michael Granzow <mgranzow at zeus.com>
> ---
> src/gsockaddr.c | 12 ++++++++++++
> src/gsockaddr.h | 1 +
> src/templates.c | 22 +++++++++++-----------
> 3 files changed, 24 insertions(+), 11 deletions(-)
>
> diff --git a/src/gsockaddr.c b/src/gsockaddr.c
> index 8216426..5d1de84 100644
> --- a/src/gsockaddr.c
> +++ b/src/gsockaddr.c
> @@ -627,3 +627,15 @@ g_sockaddr_unix_format(GSockAddr *addr, gchar *text, gulong n, gint format)
> return text;
> }
>
> +gboolean g_sockaddr_ip46_check(GSockAddr *a)
> +{
> + if( !a )
> + return 0;
> +
> + return a->sa_funcs == &inet_sockaddr_funcs
> +#ifdef ENABLE_IPV6
> + || a->sa_funcs == &inet6_sockaddr_funcs
> +#endif
> + ;
> +
> +}
> diff --git a/src/gsockaddr.h b/src/gsockaddr.h
> index 9678409..ff74d7b 100644
> --- a/src/gsockaddr.h
> +++ b/src/gsockaddr.h
> @@ -220,5 +220,6 @@ g_sockaddr_inet6_set_port(GSockAddr *s, guint16 port)
> GSockAddr *g_sockaddr_unix_new(const gchar *name);
> GSockAddr *g_sockaddr_unix_new2(struct sockaddr_un *s_un, int sunlen);
>
> +gboolean g_sockaddr_ip46_check(GSockAddr *a);
>
> #endif
> diff --git a/src/templates.c b/src/templates.c
> index 723db95..15793bc 100644
> --- a/src/templates.c
> +++ b/src/templates.c
> @@ -390,17 +390,17 @@ log_macro_expand(GString *result, gint id, guint32 flags, gint ts_format, TimeZo
> break;
> case M_SOURCE_IP:
> {
> - gchar *ip;
> -
> - if (msg->saddr && g_sockaddr_inet_check(msg->saddr))
> - {
> - gchar buf[16];
> -
> - g_inet_ntoa(buf, sizeof(buf), ((struct sockaddr_in *) &msg->saddr->sa)->sin_addr);
> - ip = buf;
> - }
> - else
> - {
> + gchar ipaddr[256];
> + char const* ip;
> + if( msg && g_sockaddr_ip46_check( msg->saddr ) ) {
> + msg->saddr->sa_funcs->sa_format(
> + msg->saddr,
> + ipaddr,
> + sizeof(ipaddr),
> + GSA_ADDRESS_ONLY
> + );
> + ip = ipaddr;
> + } else { // comes from local host
> ip = "127.0.0.1";
> }
> result_append(result, ip, strlen(ip), !!(flags & LT_ESCAPE));
--
Bazsi
More information about the syslog-ng
mailing list