diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index e3d14635a..676aea8a2 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2008-10-21 Corinna Vinschen + + * passwd.cc (pwdgrp::read_passwd): Check if we're called within + user_shared initialization and ignore myself, if so. Reformat + conditional expression. + 2008-10-20 Corinna Vinschen * ntdll.h (NtSetAttributesFile): New inline function. diff --git a/winsup/cygwin/passwd.cc b/winsup/cygwin/passwd.cc index 1773de507..b034cf412 100644 --- a/winsup/cygwin/passwd.cc +++ b/winsup/cygwin/passwd.cc @@ -19,6 +19,7 @@ details. */ #include "pinfo.h" #include "cygheap.h" #include "pwdgrp.h" +#include "shared_info.h" /* Read /etc/passwd only once for better performance. This is done on the first call that needs information from it. */ @@ -62,20 +63,22 @@ pwdgrp::read_passwd () add_line (pretty_ls); cygsid tu = cygheap->user.sid (); tu.string (strbuf); - if (myself->uid == ILLEGAL_UID) + if (!user_shared->cb || myself->uid == ILLEGAL_UID) searchentry = !internal_getpwsid (tu); - if (searchentry && - (!(pw = internal_getpwnam (cygheap->user.name ())) || - (myself->uid != ILLEGAL_UID && - myself->uid != (__uid32_t) pw->pw_uid && - !internal_getpwuid (myself->uid)))) + if (searchentry + && (!(pw = internal_getpwnam (cygheap->user.name ())) + || !user_shared->cb + || (myself->uid != ILLEGAL_UID + && myself->uid != (__uid32_t) pw->pw_uid + && !internal_getpwuid (myself->uid)))) { static char linebuf[1024]; // must be static and // should not be NO_COPY snprintf (linebuf, sizeof (linebuf), "%s:*:%lu:%lu:,%s:%s:/bin/sh", cygheap->user.name (), - myself->uid == ILLEGAL_UID ? UNKNOWN_UID : myself->uid, - myself->gid, + (!user_shared->cb || myself->uid == ILLEGAL_UID) + ? UNKNOWN_UID : myself->uid, + !user_shared->cb ? UNKNOWN_GID : myself->gid, strbuf, getenv ("HOME") ?: ""); debug_printf ("Completing /etc/passwd: %s", linebuf); add_line (linebuf);