Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Apr 2003 16:09:12 -0500
From:      "Jacques A. Vidrine" <nectar@FreeBSD.org>
To:        "Robin P. Blanchard" <Robin.Blanchard@gactr.uga.edu>
Cc:        current@freebsd.org
Subject:   Re: Latest world NIS woes
Message-ID:  <20030421210912.GA89777@madman.celabo.org>
In-Reply-To: <20030418164437.GD45899@madman.celabo.org>
References:  <EE3D3FBAFFCAED448C21C398FDAD91AC0107F7@EBE1.gc.nat> <20030418163352.GC45899@madman.celabo.org> <20030418164437.GD45899@madman.celabo.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Apr 18, 2003 at 11:44:37AM -0500, Jacques A. Vidrine wrote:
> On Fri, Apr 18, 2003 at 11:33:52AM -0500, Jacques A. Vidrine wrote:
> > One would suspect.  Is the YP server a FreeBSD box?  I guess not,
> > since your crypt'd password seems to be included in the standard map?
> 
> I built a map with the password included, same results:
> 
>   # ypcat passwd   
>   ypuser1:*:9001:9001:YP User 1:/nonexistent:/sbin/nologin
>   ypuser2:*:9002:9002:YP User 2:/nonexistent:/sbin/nologin
>   robin:wasCryptdPass:20292:30028::/home/robin:/bin/bash
>   # id -u robin
>   20292
>   # id -g robin
>   30028
>   # id robin
>   uid=20292(robin) gid=30028(NSS) groups=30028(NSS)
> 
> (I grabbed the `NSS' group line from the ktrace output.  I also
> saw that you had no nsswitch.conf, so I configured likewise to test.)
> 
> > Possibly I have a bug in passwd.adjunct map handling -- I haven't been
> > able to test that.
> 
> > I'll grab your ktrace, and also peek to see what I might have done
> > wrong with passwd.adjunct.
> 
> Well, I can see from your ktrace that passwd.adjunct is not involved.
> 
> I've not been able to reproduce the problem here.  Can you send me a
> backtrace?


For those that were following this thread, this is what I found:

I could not reproduce Robin's issue, despite using the same data for
the entries he was interested in.  So he let me jump on his machine to
look closer.  I found something very odd:


  Breakpoint 3, wrap_getpwnam_r (key={name = 0x28135d00 "", uid = 672357632}, pwd=0x28135d00, buffer=0x28135d00 "", bufsize=672357632, res=0x28135d00)
      at /usr/src/lib/libc/gen/getpwent.c:398
  398             return (getpwnam_r(key.name, pwd, buffer, bufsize, res));
  (gdb) bt    
  #0  wrap_getpwnam_r (key={name = 0x28135d00 "", uid = 672357632}, pwd=0x28135d00, buffer=0x28135d00 "", bufsize=672357632, res=0x28135d00)
      at /usr/src/lib/libc/gen/getpwent.c:398
  #1  0x280c912b in getpw (fn=0x280c91a0 <wrap_getpwnam_r>, key={name = 0xbfbffc71 "robin", uid = 3217030257}) at /usr/src/lib/libc/gen/getpwent.c:377
  #2  0x280c92a9 in getpwnam (name=0x28135d00 "") at /usr/src/lib/libc/gen/getpwent.c:424
  #3  0x08049164 in who (u=0x281307bc "øF\f") at /usr/src/usr.bin/id/id.c:331
  #4  0x08048b96 in main (argc=1, argv=0x281307bc) at /usr/src/usr.bin/id/id.c:135
  #5  0x080488f5 in _start (ap=0xbfbffc50 "/usr/obj.g/usr/src/usr.bin/id/id") at /usr/src/lib/csu/i386-elf/crt1.c:104
  (gdb) frame 1
  #1  0x280c912b in getpw (fn=0x280c91a0 <wrap_getpwnam_r>, key={name = 0xbfbffc71 "robin", uid = 3217030257}) at /usr/src/lib/libc/gen/getpwent.c:377
  377                     rv = fn(key, &pwd, pwd_storage, pwd_storage_size, &res);
  (gdb) frame 0
  #0  wrap_getpwnam_r (key={name = 0x28135d00 "", uid = 672357632}, pwd=0x28135d00, buffer=0x28135d00 "", bufsize=672357632, res=0x28135d00)
      at /usr/src/lib/libc/gen/getpwent.c:398
  398             return (getpwnam_r(key.name, pwd, buffer, bufsize, res));
  (gdb) print &key
  Address requested for identifier "key" which is in register $eax
  (gdb) print &pwd
  Address requested for identifier "pwd" which is in register $eax
  (gdb) 


It is as if the generated code had a register aliasing problem.  I
noticed that he was building with CPUTYPE=i686, and I asked him to
retry with NO_CPUTYPE_FLAGS.  The problem went away.

Nonetheless, I cannot reproduce the issue here, even with
CPUTYPE=i686.

Any GCC gurus have comments?  For some reason I want to suspect issues
with passing a `union' as an argument.  I'm going to have Robin try a
version that does not do that (it was only being used for type safety)
and see if we get similar results.

Cheers,
-- 
Jacques A. Vidrine <nectar@celabo.org>          http://www.celabo.org/
NTT/Verio SME          .     FreeBSD UNIX     .       Heimdal Kerberos
jvidrine@verio.net     .  nectar@FreeBSD.org  .          nectar@kth.se



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030421210912.GA89777>