Skip to content

Commit 7f5c4b5

Browse files
committed
Allow for multiple userdns
1 parent 4d21d99 commit 7f5c4b5

7 files changed

Lines changed: 28 additions & 14 deletions

File tree

RutaHttpModule/AdInteraction.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ internal AdInteraction()
2727
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
2828
using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, usernameOnly))
2929
{
30-
if (user?.DistinguishedName.EndsWith(this.settings.AdUserBaseDn, StringComparison.OrdinalIgnoreCase) != true)
30+
if (user == null || !MatchesOneUserDn(user.DistinguishedName))
3131
{
3232
return (null, null, null, null);
3333
}
@@ -40,5 +40,15 @@ internal AdInteraction()
4040
return (login, name, email, groups);
4141
}
4242
}
43+
44+
private bool MatchesOneUserDn(string userDn)
45+
{
46+
if (this.settings.AdUserBaseDns.Length == 0)
47+
{
48+
return true;
49+
}
50+
51+
return this.settings.AdUserBaseDns.Any(x => userDn.EndsWith(x, StringComparison.OrdinalIgnoreCase));
52+
}
4353
}
4454
}

RutaHttpModule/ISettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ internal interface ISettings
99
bool DowncaseUsers { get; }
1010
bool DowncaseGroups { get; }
1111
string AppendString { get; }
12-
string AdUserBaseDn { get; }
12+
string[] AdUserBaseDns { get; }
1313
string AdGroupBaseDn { get; }
1414
string[] PassThruUserAgents { get; }
1515
}

RutaHttpModule/Properties/Settings.Designer.cs

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

RutaHttpModule/Properties/Settings.settings

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@
1717
<Setting Name="DowncaseUsers" Type="System.Boolean" Scope="Application">
1818
<Value Profile="(Default)">True</Value>
1919
</Setting>
20-
<Setting Name="AdUserBaseDn" Type="System.String" Scope="Application">
21-
<Value Profile="(Default)" />
20+
<Setting Name="AdUserBaseDns" Type="System.Collections.Specialized.StringCollection" Scope="Application">
21+
<Value Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
22+
&lt;ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /&gt;</Value>
2223
</Setting>
2324
<Setting Name="AdGroupBaseDn" Type="System.String" Scope="Application">
2425
<Value Profile="(Default)" />

RutaHttpModule/SettingsWrapper.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,15 @@
66
[ExcludeFromCodeCoverage]
77
internal class SettingsWrapper : ISettings
88
{
9-
private readonly string[] passThruUserAgents = Properties.Settings.Default.PassThruAgents.Cast<string>().ToArray();
109
public string AdGroupBaseDn => Properties.Settings.Default.AdGroupBaseDn;
11-
public string AdUserBaseDn => Properties.Settings.Default.AdUserBaseDn;
10+
public string[] AdUserBaseDns => Properties.Settings.Default.AdUserBaseDns.Cast<string>().ToArray();
1211
public bool DowncaseUsers => Properties.Settings.Default.DowncaseUsers;
1312
public bool DowncaseGroups => Properties.Settings.Default.DowncaseGroups;
1413
public string EmailHeader => Properties.Settings.Default.EmailHeader;
1514
public string GroupsHeader => Properties.Settings.Default.GroupsHeader;
1615
public string LoginHeader => Properties.Settings.Default.LoginHeader;
1716
public string NameHeader => Properties.Settings.Default.NameHeader;
1817
public string AppendString => Properties.Settings.Default.AppendString;
19-
public string[] PassThruUserAgents => passThruUserAgents;
18+
public string[] PassThruUserAgents { get; } = Properties.Settings.Default.PassThruAgents.Cast<string>().ToArray();
2019
}
2120
}

RutaHttpModule/app.config

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,11 @@
2222
<setting name="DowncaseUsers" serializeAs="String">
2323
<value>True</value>
2424
</setting>
25-
<setting name="AdUserBaseDn" serializeAs="String">
26-
<value />
25+
<setting name="AdUserBaseDns" serializeAs="Xml">
26+
<value>
27+
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
28+
xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
29+
</value>
2730
</setting>
2831
<setting name="AdGroupBaseDn" serializeAs="String">
2932
<value />

RutaHttpModuleTest/AdInteractionTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public void Init()
2323
{
2424
this.settings = new Mock<ISettings>();
2525
this.settings.SetupGet(x => x.AdGroupBaseDn).Returns(string.Empty);
26-
this.settings.SetupGet(x => x.AdUserBaseDn).Returns(string.Empty);
26+
this.settings.SetupGet(x => x.AdUserBaseDns).Returns(new string[0]);
2727
this.settings.SetupGet(x => x.DowncaseUsers).Returns(true);
2828
this.settings.SetupGet(x => x.DowncaseGroups).Returns(true);
2929
this.settings.SetupGet(x => x.AppendString).Returns(string.Empty);
@@ -81,7 +81,7 @@ public void GroupDnFilterTest()
8181
[TestMethod]
8282
public void UserDnFilterTest()
8383
{
84-
this.settings.SetupGet(x => x.AdUserBaseDn).Returns("DON'T MATCH");
84+
this.settings.SetupGet(x => x.AdUserBaseDns).Returns(new[] {"DON'T MATCH"});
8585
var result = this.adInteraction.GetUserInformation(WindowsIdentity.GetCurrent().Name);
8686

8787
Assert.IsNull(result.login);

0 commit comments

Comments
 (0)