On 2018-07-05 09:29, Takashi Yano wrote:
> On Wed, 4 Jul 2018 16:52:47 +0200 Corinna Vinschen wrote:
>> Hang on.  /dev/kmsg was implemented using a mailslot and it was never
>> accessible via the syslog(3) interface.  The code you removed has
>> nothing to do with /dev/kmsg.
> 
> First of all, /dev/kmsg was not guilty. The real culprit is the code
> I had removed by the previous patch.
> 
> However, the patch I posted was based on mis-understanding regarding
> AF_UNIX implementation. I had checked fhandler_socket_unix.cc and
> thought cygwin AF_UNIX socket is implemented not using AF_INET socket.
> On the other hand, the code, I removed, checks existence of UDP socket
> to determine whether syslogd is activated. So I thought this is no
> longer correct and should be removed.
> 
> As a matter of fact, cygwin AF_UNIX socket usually use fhandler_socket_
> local.cc, in which AF_UNIX socket is implemented using AF_INET socket.
> That is, the obove understanding was incorrect.
> 
>> What the code does is to check if we have a listener on the /dev/msg UDP
>> socket, otherwise log data may get lost or, IIRC, the syslog call may
>> even hang.  So removing this code sounds like a bad idea.
> 
> In the case of syslogd is not activated, /dev/log does not exist.
> So connect() results in an error. Therefore log data is directed to 
> windows event logging mechanism even without the removed code. In
> usual case, no problem happens. However if syslogd is killed by signal
> 9 or died accidently, /dev/log remains without listener. In this case,
> the problem you mentioned may happen.
> 
>> Can you please explain *why* removing this code helps and what happens
>> if syslogd is not running after removing the code?
> 
> OK. First, connect_syslogd() tries to connect to syslogd via /dev/log
> which is created by syslogd. However, the code which I removed can not
> perform checking existence of syslogd as expected.
> Previously, get_inet_addr() is used to get name information of the socket
> opened by syslogd. This was working correctly at that time. Currently,
> getsockname() is used instead. This does not return name infomation of
> the socket on syslogd side but returns that of client side. Since no
> listener exists for this socket, it is not listed in the table returned
> by GetUdpTable(). Therefore this check results in false.
> 
> As a result, current connect_syslogd() code gives up to connect to syslogd.
> 
> To fix this, I made a new patch attached. In this patch, get_inet_addr_local()
> is used instead of getsockname() as in the past.
> 
> I will appreciate any comments.

Isn't this moot as the supported package is syslog-ng, which seems to work okay?

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

Reply via email to