From: Balazs Scheidler Date: Wed, 14 Dec 2011 14:21:05 +0000 (+0100) Subject: afunix: clarified error messages in case of a failure X-Git-Url: http://git.balabit.hu/?p=bazsi%2Fsyslog-ng-3.3.git;a=commitdiff_plain;h=606c8cc0b10aa4e877f70726b707402d100bb0f9 afunix: clarified error messages in case of a failure On Fedora systems, syslog-ng was configured to use unix-stream() /dev/log whereas systemd supplied a unix-dgram() one, which caused difficult to diagnose problems. This patch adds further logging to this case and causes syslog-ng to fail with an error message if it finds that /dev/log is using an incorrect socket type. Reported-By: Michal Schmidt Signed-off-by: Balazs Scheidler --- diff --git a/modules/afsocket/afunix.c b/modules/afsocket/afunix.c index cd86798..8145f1a 100644 --- a/modules/afsocket/afunix.c +++ b/modules/afsocket/afunix.c @@ -75,7 +75,7 @@ static gboolean afunix_sd_acquire_socket(AFSocketSourceDriver *s, gint *result_fd) { AFUnixSourceDriver *self = (AFUnixSourceDriver *) s; - gint fd, fds, t, r; + gint fd, fds; *result_fd = -1; fd = -1; @@ -100,13 +100,40 @@ afunix_sd_acquire_socket(AFSocketSourceDriver *s, gint *result_fd) { for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + fds; fd++) { - t = (self->super.flags & AFSOCKET_STREAM) ? SOCK_STREAM : SOCK_DGRAM; - r = sd_is_socket_unix(fd, t, -1, self->filename, 0); - if (r == 1) + /* check if any type is available */ + if (sd_is_socket_unix(fd, 0, -1, self->filename, 0)) { - *result_fd = fd; - break; - } + int type = (self->super.flags & AFSOCKET_STREAM) ? SOCK_STREAM : SOCK_DGRAM; + + /* check if it matches our idea of the socket type */ + if (sd_is_socket_unix(fd, type, -1, self->filename, 0)) + { + *result_fd = fd; + break; + } + else + { + msg_error("The systemd supplied UNIX domain socket is of a different type, check the configured driver and the matching systemd unit file", + evt_tag_str("filename", self->filename), + evt_tag_int("systemd-sock-fd", fd), + evt_tag_str("expecting", type == SOCK_STREAM ? "unix-stream()" : "unix-dgram()"), + NULL); + return FALSE; + } + } + else + { + + /* systemd passed an fd we didn't really care about. This is + * not an error, but might be worth mentioning it at the debug + * level. + */ + + msg_debug("Ignoring systemd supplied fd as it is not a UNIX domain socket", + evt_tag_str("filename", self->filename), + evt_tag_int("systemd-sock-fd", fd), + NULL); + } } } else @@ -123,7 +150,7 @@ afunix_sd_acquire_socket(AFSocketSourceDriver *s, gint *result_fd) } else { - msg_debug("Failed to acquire systemd socket, opening nevertheless", + msg_debug("Failed to acquire systemd socket, trying to open ourselves", evt_tag_str("filename", self->filename), NULL); }