[newlib-cygwin/main] Cygwin: uinfo: handle NT VIRTUAL MACHINE\Virtual Machines account

Corinna Vinschen corinna@sourceware.org
Wed Mar 11 14:52:35 GMT 2026


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=78af62e5a5f9526d1c82a5661dd18e13894e2f8e

commit 78af62e5a5f9526d1c82a5661dd18e13894e2f8e
Author:     Corinna Vinschen <corinna@vinschen.de>
AuthorDate: Wed Mar 11 15:41:10 2026 +0100
Commit:     Corinna Vinschen <corinna@vinschen.de>
CommitDate: Wed Mar 11 15:41:32 2026 +0100

    Cygwin: uinfo: handle NT VIRTUAL MACHINE\Virtual Machines account
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 winsup/cygwin/uinfo.cc | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc
index 57bb6d098d8b..5c0616a8ac69 100644
--- a/winsup/cygwin/uinfo.cc
+++ b/winsup/cygwin/uinfo.cc
@@ -2123,13 +2123,16 @@ pwdgrp::fetch_account_from_windows (fetch_user_arg_t &arg, bool ugid_caching, cy
 	       sid_sub_auth (sid, 0) == SECURITY_APPPOOL_ID_BASE_RID))
 	    break;
 	  /* Otherwise, no fully_qualified for builtin accounts, except for
-	     NT SERVICE, for which we require the prefix.  Note that there's
-	     no equivalent test in the `if (!fq_name)' branch above, because
-	     LookupAccountName never returns NT SERVICE accounts if they are
-	     not prependend with the domain anyway. */
+	     NT SERVICE and NT VIRTUAL MACHINE, for which we require the
+	     prefix.
+	     Note that there's no equivalent test in the `if (!fq_name)'
+	     branch above, because LookupAccountName never returns NT SERVICE
+	     or NT VIRTUAL MACHINE accounts if they are not prependend with
+	     the domain. */
 	  if (sid_id_auth (sid) != 5 /* SECURITY_NT_AUTHORITY */
 	      || (sid_sub_auth (sid, 0) != SECURITY_NT_NON_UNIQUE
-		  && sid_sub_auth (sid, 0) != SECURITY_SERVICE_ID_BASE_RID))
+		  && sid_sub_auth (sid, 0) != SECURITY_SERVICE_ID_BASE_RID
+		  && sid_sub_auth (sid, 0) != SECURITY_VIRTUALSERVER_ID_BASE_RID))
 	    {
 	      debug_printf ("Invalid account name <%s> (fully qualified/"
 			    "not NON_UNIQUE or NT_SERVICE)", arg.name);
@@ -2243,6 +2246,11 @@ pwdgrp::fetch_account_from_windows (fetch_user_arg_t &arg, bool ugid_caching, cy
 	  csid = cygheap->dom.account_sid ();
 	  csid.append (arg.id & 0xffff);
 	}
+      else if (arg.id == 0x53000)
+	{
+	  /* NT VIRTUAL MACHINE\Virtual Machines */
+	  csid.create (5, 2, 83, 0);
+	}
       else if (arg.id < 0x60000)
 	{
 	  /* Builtin Alias */
@@ -2603,9 +2611,10 @@ pwdgrp::fetch_account_from_windows (fetch_user_arg_t &arg, bool ugid_caching, cy
 	  break;
 	case SidTypeWellKnownGroup:
 	  fully_qualified_name = (
-		  /* NT SERVICE Account */
+		  /* NT SERVICE or NT VIRTUAL MACHINE Account */
 		  (sid_id_auth (sid) == 5 /* SECURITY_NT_AUTHORITY */
-		      && sid_sub_auth (sid, 0) == SECURITY_SERVICE_ID_BASE_RID)
+		   && (sid_sub_auth (sid, 0) == SECURITY_SERVICE_ID_BASE_RID
+		       || sid_sub_auth (sid, 0) == SECURITY_VIRTUALSERVER_ID_BASE_RID))
 		  /* Microsoft Account */
 		  || sid_id_auth (sid) == 11);
 #ifdef INTERIX_COMPATIBLE


More information about the Cygwin-cvs mailing list