From 2897a294000fedb464f8c9539711c4022ac3a876 Mon Sep 17 00:00:00 2001 From: Ac_K Date: Wed, 10 Jul 2019 16:05:36 +0200 Subject: [PATCH] Change Permission to Parameter --- Ryujinx.HLE/HOS/Services/Bsd/IClient.cs | 14 +++++++------- Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs | 14 +++++++------- Ryujinx.HLE/HOS/Services/ServiceAttributes.cs | 10 ++++------ Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs | 4 ++-- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/Ryujinx.HLE/HOS/Services/Bsd/IClient.cs b/Ryujinx.HLE/HOS/Services/Bsd/IClient.cs index 669f42fdff..0d5775d588 100644 --- a/Ryujinx.HLE/HOS/Services/Bsd/IClient.cs +++ b/Ryujinx.HLE/HOS/Services/Bsd/IClient.cs @@ -8,8 +8,8 @@ using System.Text; namespace Ryujinx.HLE.HOS.Services.Bsd { - [Service("bsd:s", true, (int)BsdServicePermissionLevel.System)] - [Service("bsd:u", true, (int)BsdServicePermissionLevel.User)] + [Service("bsd:s", true)] + [Service("bsd:u", false)] class IClient : IpcService { private static Dictionary _errorMap = new Dictionary @@ -96,7 +96,7 @@ namespace Ryujinx.HLE.HOS.Services.Bsd {0, 0} }; - private BsdServicePermissionLevel _permissionLevel; + private bool _isPrivileged; private List _sockets = new List(); @@ -104,7 +104,7 @@ namespace Ryujinx.HLE.HOS.Services.Bsd public override IReadOnlyDictionary Commands => _commands; - public IClient(ServiceCtx context, int permission) + public IClient(ServiceCtx context, bool isPrivileged) { _commands = new Dictionary { @@ -138,7 +138,7 @@ namespace Ryujinx.HLE.HOS.Services.Bsd { 27, DuplicateSocket } }; - _permissionLevel = (BsdServicePermissionLevel)permission; + _isPrivileged = isPrivileged; } private LinuxError ConvertError(WsaError errorCode) @@ -207,7 +207,7 @@ namespace Ryujinx.HLE.HOS.Services.Bsd { return WriteBsdResult(context, -1, LinuxError.EPROTONOSUPPORT); } - else if ((type == SocketType.Seqpacket || type == SocketType.Raw) && _permissionLevel == BsdServicePermissionLevel.User) + else if ((type == SocketType.Seqpacket || type == SocketType.Raw) && !_isPrivileged) { if (domain != AddressFamily.InterNetwork || type != SocketType.Raw || protocol != ProtocolType.Icmp) { @@ -1173,7 +1173,7 @@ namespace Ryujinx.HLE.HOS.Services.Bsd LinuxError errno = LinuxError.ENOENT; int newSockFd = -1; - if (_permissionLevel == BsdServicePermissionLevel.System) + if (_isPrivileged) { errno = LinuxError.EBADF; diff --git a/Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs b/Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs index 7ab26b46cc..af97391d0d 100644 --- a/Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs +++ b/Ryujinx.HLE/HOS/Services/Friend/IServiceCreator.cs @@ -7,11 +7,11 @@ using static Ryujinx.HLE.HOS.ErrorCode; namespace Ryujinx.HLE.HOS.Services.Friend { - [Service("friend:a", true, (int)FriendServicePermissionLevel.Admin)] - [Service("friend:m", true, (int)FriendServicePermissionLevel.Manager)] - [Service("friend:s", true, (int)FriendServicePermissionLevel.System)] - [Service("friend:u", true, (int)FriendServicePermissionLevel.User)] - [Service("friend:v", true, (int)FriendServicePermissionLevel.Overlay)] + [Service("friend:a", FriendServicePermissionLevel.Admin)] + [Service("friend:m", FriendServicePermissionLevel.Manager)] + [Service("friend:s", FriendServicePermissionLevel.System)] + [Service("friend:u", FriendServicePermissionLevel.User)] + [Service("friend:v", FriendServicePermissionLevel.Overlay)] class IServiceCreator : IpcService { private FriendServicePermissionLevel _permissionLevel; @@ -20,7 +20,7 @@ namespace Ryujinx.HLE.HOS.Services.Friend public override IReadOnlyDictionary Commands => _commands; - public IServiceCreator(ServiceCtx context, int permission) + public IServiceCreator(ServiceCtx context, FriendServicePermissionLevel permissionLevel) { _commands = new Dictionary { @@ -29,7 +29,7 @@ namespace Ryujinx.HLE.HOS.Services.Friend { 2, CreateDaemonSuspendSessionService }, // 4.0.0+ }; - _permissionLevel = (FriendServicePermissionLevel)permission; + _permissionLevel = permissionLevel; } // CreateFriendService() -> object diff --git a/Ryujinx.HLE/HOS/Services/ServiceAttributes.cs b/Ryujinx.HLE/HOS/Services/ServiceAttributes.cs index a81f96b020..9ca775afe8 100644 --- a/Ryujinx.HLE/HOS/Services/ServiceAttributes.cs +++ b/Ryujinx.HLE/HOS/Services/ServiceAttributes.cs @@ -6,14 +6,12 @@ namespace Ryujinx.HLE.HOS.Services public class ServiceAttribute : Attribute { public readonly string Name; - public readonly bool UsePermission; - public readonly int Permission; + public readonly object Parameter; - public ServiceAttribute(string name, bool usePermission = false, int permission = 0) + public ServiceAttribute(string name, object parameter = null) { - Name = name; - UsePermission = usePermission; - Permission = permission; + Name = name; + Parameter = parameter; } } } \ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs b/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs index e439b2bb14..1768b09677 100644 --- a/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs +++ b/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs @@ -90,8 +90,8 @@ namespace Ryujinx.HLE.HOS.Services.Sm { ServiceAttribute serviceAttribute = (ServiceAttribute)type.GetCustomAttributes().First(service => ((ServiceAttribute)service).Name == name); - session.ClientSession.Service = serviceAttribute.UsePermission ? (IpcService)Activator.CreateInstance(type, context, serviceAttribute.Permission) - : (IpcService)Activator.CreateInstance(type, context); + session.ClientSession.Service = serviceAttribute.Parameter != null ? (IpcService)Activator.CreateInstance(type, context, serviceAttribute.Parameter) + : (IpcService)Activator.CreateInstance(type, context); } else {