[762] in bugtraq

home help back first fref pref prev next nref lref last post

Re: accpet(3n) under SOlaris 2.4

daemon@ATHENA.MIT.EDU (Casper Dik)
Wed Jan 25 07:50:16 1995

To: matt@uts.EDU.AU (Jas (Matthew K))
Cc: bugtraq@fc.net (Bugtraq Mailing List)
In-Reply-To: Your message of "Wed, 25 Jan 1995 19:24:59 +1000."
             <9501250825.AA02464@lordmuck.itd.uts.edu.au> 
Date: Wed, 25 Jan 1995 12:01:50 +0100
From: Casper Dik <casper@fwi.uva.nl>


>i recently tried to install identd on my new Solaris 2.4 machine.. i have
>since found out it has a problem with accept(3n). now.. im not sure why it
>spits the dummy at it, but here is the truss dump, so that those with either
>the source or more knowledge than myself could explain why it is barfing..
>here below it starts right at the accept.. lines beginning with *** are from
>the source code..
>
>***             fd = accept(0, &sad, &sadlen);
>2428:   sigaction(SIGCLD, 0xEFFFFC50, 0xEFFFFD50)       = 0
>2428:   poll(0xEFFFDD90, 1, -1)                         = 1
>2428:   sigfillset(0xEF683BB0)                          = 0
>2428:   sigprocmask(SIG_SETMASK, 0xEFFFFC8C, 0xEFFFFCC0) = 0
>2428:   ioctl(0, I_STR, 0xEFFFFB10)                     = 0
>2428:   ioctl(0, I_GETSIG, 0xEFFFFB94)                  Err#22 EINVAL
>2428:   sigprocmask(SIG_SETMASK, 0xEFFFFCC0, 0xEFFFFC6C) = 0
>***            if (fd == -1)
>***                ERROR1("main: accept. errno = %d", errno);
>
>anyway... the ioctl(0,I_GETSIG,xxxxx) seems to be the problem.. fd 0 is a
>socket (which will probably make a difference), just a straight normal tcp
>listen socket with no options. so anyway there is the problem... if anyone
>has a fix or knows what the problem is, it would be appreciated.

There are several reasons why you can't run identd 2.4.x in daemon or
wait mode.

First, there's a general bug in indentd.  It uses a struct sockaddr
for accept, not a struct sockaddr_in.  But this really shouldn't
matter as both have the same size.  I did get EINVAL but after
chaging the type a no longer did.  I'll look into it a bit more.

Secondly, in Solaris 2.4, identd needs to use kvm_setproc()/kvm_nextproc().
Unfortunately, kvm_setproc() is broken, and you'll never see processes
started after kvm_open.  

I'm working on a fix that will either fix kvm_setproc() for identd
because it's cheaper or will put kvm_open in the child instead of the
parent.

So, identd under 2.4 will only run in nowait mode for now.

Casper

home help back first fref pref prev next nref lref last post