diff --git a/SMBLibrary/Server/INTLMAuthenticationProvider.cs b/SMBLibrary/Server/INTLMAuthenticationProvider.cs index 336b95a..38f6f8c 100644 --- a/SMBLibrary/Server/INTLMAuthenticationProvider.cs +++ b/SMBLibrary/Server/INTLMAuthenticationProvider.cs @@ -29,7 +29,5 @@ namespace SMBLibrary.Server /// The password is correct but 'limitblankpassworduse' is set to 1 (logon over a network is disabled for accounts without a password). /// bool FallbackToGuest(string userName); - - List ListUsers(); } } diff --git a/SMBServer/ServerUI.cs b/SMBServer/ServerUI.cs index 25f4632..e2fa21f 100644 --- a/SMBServer/ServerUI.cs +++ b/SMBServer/ServerUI.cs @@ -84,11 +84,10 @@ namespace SMBServer } - List allUsers = provider.ListUsers(); ShareCollection shares; try { - shares = ReadShareSettings(allUsers); + shares = ReadShareSettings(); } catch (Exception) { @@ -150,7 +149,7 @@ namespace SMBServer return users; } - private ShareCollection ReadShareSettings(List allUsers) + private ShareCollection ReadShareSettings() { ShareCollection shares = new ShareCollection(); XmlDocument document = GetSettingsXML(); @@ -162,23 +161,25 @@ namespace SMBServer string sharePath = shareNode.Attributes["Path"].Value; XmlNode readAccessNode = shareNode.SelectSingleNode("ReadAccess"); - List readAccess = ReadAccessList(readAccessNode, allUsers); + List readAccess = ReadAccessList(readAccessNode); XmlNode writeAccessNode = shareNode.SelectSingleNode("WriteAccess"); - List writeAccess = ReadAccessList(writeAccessNode, allUsers); + List writeAccess = ReadAccessList(writeAccessNode); FileSystemShare share = new FileSystemShare(shareName, new DirectoryFileSystem(sharePath)); share.OnAccessRequest += delegate(object sender, AccessRequestArgs args) { + bool hasReadAccess = Contains(readAccess, "Users") || Contains(readAccess, args.UserName); + bool hasWriteAccess = Contains(writeAccess, "Users") || Contains(writeAccess, args.UserName); if (args.RequestedAccess == FileAccess.Read) { - args.Allow = Contains(readAccess, args.UserName); + args.Allow = hasReadAccess; } else if (args.RequestedAccess == FileAccess.Write) { - args.Allow = Contains(writeAccess, args.UserName); + args.Allow = hasWriteAccess; } else // FileAccess.ReadWrite { - args.Allow = Contains(readAccess, args.UserName) && Contains(writeAccess, args.UserName); + args.Allow = hasReadAccess && hasWriteAccess; } }; shares.Add(share); @@ -186,7 +187,7 @@ namespace SMBServer return shares; } - private List ReadAccessList(XmlNode node, List allUsers) + private List ReadAccessList(XmlNode node) { List result = new List(); if (node != null) @@ -194,7 +195,7 @@ namespace SMBServer string accounts = node.Attributes["Accounts"].Value; if (accounts == "*") { - result.AddRange(allUsers); + result.Add("Users"); } else {