From: Corinna Vinschen <[email protected]>

Do not only allow to override the (localized) group "None" as
primary group, but also the user account.  This occurs if the
user account is a Microsoft Account or a AzureAD account.

Fixes: dc7b67316d01 ("Cygwin: uinfo: prefer token primary group")
Signed-off-by: Corinna Vinschen <[email protected]>
---
 winsup/cygwin/uinfo.cc | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc
index 8e9b9e07de9d..fb4618b8a19e 100644
--- a/winsup/cygwin/uinfo.cc
+++ b/winsup/cygwin/uinfo.cc
@@ -170,13 +170,17 @@ internal_getlogin (cygheap_user &user)
         group of a local user ("None", localized), we have to find the SID
         of that group and try to override the token primary group.  Also
         makes sure we're not on a domain controller, where account_sid ()
-        == primary_sid (). */
+        == primary_sid ().
+        CV 2025-12-05: Microsoft Accounts as well as AzureAD accounts have
+        the primary group SID in their user token set to their own user SID.
+        Allow to override them as well. */
       gsid = cygheap->dom.account_sid ();
       gsid.append (DOMAIN_GROUP_RID_USERS);
       if (!pgrp
          || (pwd->pw_gid != pgrp->gr_gid
              && cygheap->dom.account_sid () != cygheap->dom.primary_sid ()
-             && RtlEqualSid (gsid, user.groups.pgsid)))
+             && (gsid == user.groups.pgsid
+                 || user.sid () == user.groups.pgsid)))
        {
          if (gsid.getfromgr (grp = internal_getgrgid (pwd->pw_gid, &cldap)))
            {
-- 
2.51.1

Reply via email to