diff --git a/src/gsudo/Helpers/ServiceHelper.cs b/src/gsudo/Helpers/ServiceHelper.cs index c777e6f8..c615c0be 100644 --- a/src/gsudo/Helpers/ServiceHelper.cs +++ b/src/gsudo/Helpers/ServiceHelper.cs @@ -71,9 +71,12 @@ private static ServiceLocation FindServiceByIntegrity(int? clientPid, string use var anyIntegrity = InputArguments.UserName != null; var tryHighIntegrity = !InputArguments.IntegrityLevel.HasValue || InputArguments.IntegrityLevel.Value >= IntegrityLevel.High; var tryLowIntegrity = !InputArguments.IntegrityLevel.HasValue || InputArguments.IntegrityLevel.Value < IntegrityLevel.High; + + var targetUserSid = InputArguments.RunAsSystem ? "S-1-5-18" : InputArguments.UserSid; + if (tryHighIntegrity) { - var pipeName = NamedPipeClient.TryGetServicePipe(user, clientPid.Value, true); + var pipeName = NamedPipeClient.TryGetServicePipe(user, clientPid.Value, true, null); if (pipeName != null) { return new ServiceLocation diff --git a/src/gsudo/Rpc/NamedPipeNameFactory.cs b/src/gsudo/Rpc/NamedPipeNameFactory.cs index 362b5b6c..d0484279 100644 --- a/src/gsudo/Rpc/NamedPipeNameFactory.cs +++ b/src/gsudo/Rpc/NamedPipeNameFactory.cs @@ -13,9 +13,10 @@ public static string GetPipeName(string allowedSid, int allowedPid, string targe if (allowedPid < 0) allowedPid = 0; var ti = InputArguments.TrustedInstaller ? "_TI" : string.Empty; - var admin = !isAdmin ? "_NonAdmin" : string.Empty; + var s = InputArguments.RunAsSystem ? "_S" : string.Empty; + var admin = !isAdmin ? "_NonAdmin" : string.Empty; - var data = $"{allowedSid}_{targetSid}_{allowedPid}_{ti}{admin}"; + var data = $"allowedSid-{allowedSid}_targetSid-{targetSid}{allowedPid}{s}{ti}{admin}"; #if !DEBUG data = GetHash(data); #endif