Signed-off-by: Michael Granzow <mgranzow@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)); -- 1.5.6.3