From: Corinna Vinschen <[email protected]>

Commit 29b7313d2225 ("* cygheap.h (enum cygheap_pwdgrp::cache_t):
Remove.") changed an initial conditional to skip calling
internal_getgroups() if we're running with cygserver account caching
in place.  This breaks changing the primary group.

Unfortunately the commit message doesn't explain why the change was
made.

Just calling internal_getgroups() all the time fixes this behaviour.

Fixes: 29b7313d2225 ("* cygheap.h (enum cygheap_pwdgrp::cache_t): Remove.")
Addresses: https://cygwin.com/pipermail/cygwin/2026-January/259250.html
Signed-off-by: Corinna Vinschen <[email protected]>
---
 winsup/cygwin/release/3.6.7 | 4 ++++
 winsup/cygwin/uinfo.cc      | 3 +--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/winsup/cygwin/release/3.6.7 b/winsup/cygwin/release/3.6.7
index defe55ffe75e..050f6008084e 100644
--- a/winsup/cygwin/release/3.6.7
+++ b/winsup/cygwin/release/3.6.7
@@ -3,3 +3,7 @@ Fixes:
 
 - Guard c32rtomb against invalid input characters.
   Addresses a testsuite error in current gawk git master.
+
+- Allow changing primary group even when running with cygserver account
+  caching.
+  Addresses: https://cygwin.com/pipermail/cygwin/2026-January/259250.html
diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc
index 1eb52f14578c..73e61cbffc82 100644
--- a/winsup/cygwin/uinfo.cc
+++ b/winsup/cygwin/uinfo.cc
@@ -153,8 +153,7 @@ internal_getlogin (cygheap_user &user)
      and the primary group in the token. */
   pwd = internal_getpwsid (user.sid (), &cldap);
   pgrp = internal_getgrsid (user.groups.pgsid, &cldap);
-  if (!cygheap->pg.nss_cygserver_caching ())
-    internal_getgroups (0, NULL, &cldap);
+  internal_getgroups (0, NULL, &cldap);
   if (!pwd)
     debug_printf ("user not found in passwd DB");
   else
-- 
2.52.0

Reply via email to