Skip to content

Commit

Permalink
Use octal number's actual value in socket permission
Browse files Browse the repository at this point in the history
  • Loading branch information
arenekosreal committed Nov 16, 2024
1 parent ec69c6e commit 5f9a738
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 42 deletions.
43 changes: 43 additions & 0 deletions E5Renewer.Tests/Models/UintExtendsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using E5Renewer.Models;

namespace E5Renewer.Tests.Models;

/// <summary>Test
/// <see cref="UintExtends"/>
/// </summary>
[TestClass]
public class UintExtendsTests
{
/// <summary>
/// Test
/// <see cref="UintExtends.ToUnixFileMode(uint)" />
/// </summary>
[TestMethod]
[DataRow(0b000000000, UnixFileMode.None)]
[DataRow(0b000000001, UnixFileMode.OtherExecute)]
[DataRow(0b000000010, UnixFileMode.OtherWrite)]
[DataRow(0b000000011, UnixFileMode.OtherWrite | UnixFileMode.OtherExecute)]
[DataRow(0b000000100, UnixFileMode.OtherRead)]
[DataRow(0b000000101, UnixFileMode.OtherRead | UnixFileMode.OtherExecute)]
[DataRow(0b000000110, UnixFileMode.OtherRead | UnixFileMode.OtherWrite)]
[DataRow(0b000000111, UnixFileMode.OtherRead | UnixFileMode.OtherWrite | UnixFileMode.OtherExecute)]
[DataRow(0b000001000, UnixFileMode.GroupExecute)]
[DataRow(0b000010000, UnixFileMode.GroupWrite)]
[DataRow(0b000011000, UnixFileMode.GroupWrite | UnixFileMode.GroupExecute)]
[DataRow(0b000100000, UnixFileMode.GroupRead)]
[DataRow(0b000101000, UnixFileMode.GroupRead | UnixFileMode.GroupExecute)]
[DataRow(0b000110000, UnixFileMode.GroupRead | UnixFileMode.GroupWrite)]
[DataRow(0b000111000, UnixFileMode.GroupRead | UnixFileMode.GroupWrite | UnixFileMode.GroupExecute)]
[DataRow(0b001000000, UnixFileMode.UserExecute)]
[DataRow(0b010000000, UnixFileMode.UserWrite)]
[DataRow(0b011000000, UnixFileMode.UserWrite | UnixFileMode.UserExecute)]
[DataRow(0b100000000, UnixFileMode.UserRead)]
[DataRow(0b101000000, UnixFileMode.UserRead | UnixFileMode.UserExecute)]
[DataRow(0b110000000, UnixFileMode.UserRead | UnixFileMode.UserWrite)]
[DataRow(0b111000000, UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute)]
[DataRow(0b100100100, UnixFileMode.UserRead | UnixFileMode.GroupRead | UnixFileMode.OtherRead)]
public void TestToUnixFileMode(int permission, UnixFileMode mode)
{
Assert.AreEqual(mode, ((uint)permission).ToUnixFileMode());
}
}
2 changes: 1 addition & 1 deletion E5Renewer/Models/Config/Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public Config()
this.listenAddr = "127.0.0.1";
this.listenPort = 8888;
this.listenSocket = "/run/e5renewer/e5renewer.socket";
this.listenSocketPermission = 666;
this.listenSocketPermission = Convert.ToUInt32("666", 8);
this.users = new();
}
}
Expand Down
53 changes: 12 additions & 41 deletions E5Renewer/Models/UintExtends.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,57 +5,28 @@ namespace E5Renewer.Models
/// </summary>
public static class UintExtends
{
private const uint minPermission = 0; // 0o000
private const uint maxPermission = 511; // 0o777

/// <summary>Convert
/// <see cref="uint">uint</see>
/// to
/// <see cref="UnixFileMode">UnixFileMode</see>.
/// </summary>
public static UnixFileMode ToUnixFileMode(this uint permission)
{
if (permission > 777)

if (permission < UintExtends.minPermission)
{
permission = 777;
permission = UintExtends.minPermission;
}
uint user = permission / 100;
uint group = (permission - user * 100) / 10;
uint other = permission - user * 100 - group * 10;
UnixFileMode userFileMode = user switch

if (permission > UintExtends.maxPermission)
{
0 => UnixFileMode.None,
1 => UnixFileMode.UserExecute,
2 => UnixFileMode.UserWrite,
3 => UnixFileMode.UserWrite | UnixFileMode.UserExecute,
4 => UnixFileMode.UserRead,
5 => UnixFileMode.UserRead | UnixFileMode.UserExecute,
6 => UnixFileMode.UserRead | UnixFileMode.UserWrite,
7 => UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute,
_ => throw new ArgumentOutOfRangeException(nameof(user), string.Format("Invalid unix user permission value {0}", user))
};
UnixFileMode groupFileMode = group switch
{
0 => UnixFileMode.None,
1 => UnixFileMode.GroupExecute,
2 => UnixFileMode.GroupWrite,
3 => UnixFileMode.GroupWrite | UnixFileMode.GroupExecute,
4 => UnixFileMode.GroupRead,
5 => UnixFileMode.GroupRead | UnixFileMode.GroupExecute,
6 => UnixFileMode.GroupRead | UnixFileMode.GroupWrite,
7 => UnixFileMode.GroupRead | UnixFileMode.GroupWrite | UnixFileMode.GroupExecute,
_ => throw new ArgumentOutOfRangeException(nameof(group), string.Format("Invalid unix group permission value {0}", group))
};
UnixFileMode otherFileMode = other switch
{
0 => UnixFileMode.None,
1 => UnixFileMode.OtherExecute,
2 => UnixFileMode.OtherWrite,
3 => UnixFileMode.OtherWrite | UnixFileMode.OtherExecute,
4 => UnixFileMode.OtherRead,
5 => UnixFileMode.OtherRead | UnixFileMode.OtherExecute,
6 => UnixFileMode.OtherRead | UnixFileMode.OtherWrite,
7 => UnixFileMode.OtherRead | UnixFileMode.OtherWrite | UnixFileMode.OtherExecute,
_ => throw new ArgumentOutOfRangeException(nameof(other), string.Format("Invalid unix other permission {0}", other))
};
return userFileMode | groupFileMode | otherFileMode;
permission = UintExtends.maxPermission;
}

return (UnixFileMode)permission;
}
}
}
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ A tool to renew e5 subscription by calling msgraph APIs
If you want to use certificate instead secret, which is better for security, you can write a `certificate` key with path to your certificate file instead `secret` key.

Tips: We support json, yaml and toml formats, just let their contents be equal, the configuration result is same.

> [!NOTE]
> Due to that C# does not have a native octal number support, we use the `listen_socket_permission` as unix permission directly.
> For example, if you are using json format, you need to set it to `438` in order to see socket mode is `rw-rw-rw-`.

3. Install .NET

Expand Down

0 comments on commit 5f9a738

Please sign in to comment.