[syslog-ng]Bug in unix_stream/dgram() dest drivers 1.6.0rc4

Andreas Schulze syslog-ng@lists.balabit.hu
Mon, 16 Feb 2004 19:09:39 +0100


Hi Bazi,

it seems I've found a bug in the unix_stream/unix_dgram
destination drivers.

The problem is, that running sysng with something like

	destination d_stream { unix-stream("/tmp/stream_sock"); };
	or
	destination d_dgram  { unix-dgram("/tmp/dgram_sock"); };

it doesn't create the socket in the file system, so the
connect() fails. Seems that bind_unix_socket() is never called.

The appended trace shows, that there isn't a bind() between
so_socket() = 4 and connect(4)

As far as I know, bind() must be called before connect() to create
the socket in the local filesys. It should be removed via unlink()
after all work is done.

Feedback or a hot-fix is very wellcome.

Thanks a lot --Andreas

Debug message:
> syslog-ng -d -v
> io.c: connecting using fd 4
> connecting fd 4, unixaddr: /tmp/dgram_sock
> Error connecting to AF_UNIX(/tmp/dgram_sock): Bad file number
> Error initializing configuration, exiting.

Strace:
> 18128:  so_socket(1, 1, 0, "", 1)                       = 4
> 18128:  fcntl(4, F_GETFL, 0x00000000)                   = 2
> 18128:  fstat64(4, 0xFFBEF348)                          = 0
> 18128:  getsockopt(4, 65535, 8192, 0xFFBEF448, 0xFFBEF440, 0) = 0
> 18128:  fstat64(4, 0xFFBEF348)                          = 0
> 18128:  getsockopt(4, 65535, 8192, 0xFFBEF448, 0xFFBEF444, 0) = 0
> 18128:  setsockopt(4, 65535, 8192, 0xFFBEF448, 4, 0)    = 0
> 18128:  fcntl(4, F_SETFL, 0x00000082)                   = 0
> 18128:  fcntl(4, F_SETFD, 0x00000001)                   = 0
> io.c: connecting using fd 4
> 18128:  write(2, " i o . c :   c o n n e c".., 28)      = 28
> connecting fd 4, unixaddr: /tmp/dgram_sock
> 18128:  write(2, " c o n n e c t i n g   f".., 47)      = 47
> 18128:  connect(4, 0xFFBEF4A8, 110, 1)                  Err#2 ENOENT
> 18128:  close(4)                                        = 0
> 18128:  close(4)                                        Err#9 EBADF
> Error connecting to AF_UNIX(/tmp/dgram_sock): Bad file number
> 18128:  write(2, " E r r o r   c o n n e c".., 66)      = 66
> Error initializing configuration, exiting.
> 18128:  write(2, " E r r o r   i n i t i a".., 43)      = 43
> 18128:  llseek(0, 0, SEEK_CUR)                          = 41406
> 18128:  lwp_mutex_wakeup(0xFF3E7CB0)                    = 0
> 18128:  lwp_mutex_lock(0xFF3E7CB0)                      = 0
> 18128:  lwp_sigredirect(0, SIGWAITING, 0x00000000)      Err#22 EINVAL
> 18128:  _exit(2)

-- 
Best regards --Andreas Schulze
                [phone: +49.5246.80.1275, fax: +49.5246.80.2275]

| I believe, it was Dennis Ritchie who said something like:
|   "C is rarely the best language for a given task,
|    but it's often the second-best".
| The implication being that: "[...]"
|     http://www.ioccc.org/1990/dds.c