Skip to content

Commit 6df5769

Browse files
authored
Merge pull request #12 from virot/YubiKeyPolicies
Added ETW message for XML faults, and unit tests
2 parents 1613942 + b78a370 commit 6df5769

File tree

8 files changed

+87
-8
lines changed

8 files changed

+87
-8
lines changed

TameMyCerts.Tests/XMLPolicyTests.cs

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public void Test_Unknown_XML_Element()
7070
Assert.Empty(cacheEntry.ErrorMessage);
7171
Assert.Equal(2, _listener.Events.Count);
7272
Assert.Equal(92, _listener.Events[0].EventId);
73-
73+
output.WriteLine(_listener.Events[0].Message);
7474
File.Delete(filename);
7575
}
7676

@@ -96,4 +96,58 @@ public void Test_Unknown_XML_Element2()
9696
File.Delete(filename);
9797
}
9898

99+
[Fact]
100+
public void Test_Yubikey_Policies()
101+
{
102+
var filename = Path.GetTempFileName();
103+
104+
string sampleXML = @"<CertificateRequestPolicy xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
105+
xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
106+
<YubikeyPolicies>
107+
<YubikeyPolicy>
108+
<Action>Allow</Action>
109+
<PinPolicy>
110+
<string>Always</string>
111+
<string>Once</string>
112+
</PinPolicy>
113+
<TouchPolicy>
114+
<string>Always</string>
115+
<string>Cached</string>
116+
</TouchPolicy>
117+
</YubikeyPolicy>
118+
</YubikeyPolicies>
119+
120+
</CertificateRequestPolicy>
121+
";
122+
File.WriteAllText(filename, sampleXML);
123+
_listener.ClearEvents();
124+
125+
CertificateRequestPolicyCacheEntry cacheEntry = new CertificateRequestPolicyCacheEntry(filename);
126+
127+
//Assert.Empty(cacheEntry.ErrorMessage);
128+
//Assert.Equal(2, _listener.Events.Count);
129+
Assert.DoesNotContain(92, _listener.Events.Select(e => e.EventId));
130+
File.Delete(filename);
131+
}
132+
133+
134+
[Fact]
135+
public void Broken_XML_Policies()
136+
{
137+
var filename = Path.GetTempFileName();
138+
139+
string sampleXML = @"<CertificateRequestPolicy xmlns:xsi=""""http://www.w3.org/2001/XMLSchema-instance""""
140+
xmlns:xsd=""""http://www.w3.org/2001/XMLSchema"""">
141+
</CertificateRequestPolicy>
142+
";
143+
File.WriteAllText(filename, sampleXML);
144+
_listener.ClearEvents();
145+
146+
CertificateRequestPolicyCacheEntry cacheEntry = new CertificateRequestPolicyCacheEntry(filename);
147+
148+
output.WriteLine(cacheEntry.ErrorMessage);
149+
Assert.Contains(94, _listener.Events.Select(e => e.EventId));
150+
File.Delete(filename);
151+
}
152+
99153
}

TameMyCerts.Tests/YubikeyValidatorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,7 @@ public void Validate_Slot_Allow_if_Wrong_slot_is_denied_10020()
738738
Assert.False(result.DeniedForIssuance);
739739
PrintResult(result);
740740

741-
741+
output.WriteLine(policy.SaveToString());
742742
}
743743
}
744744
}

TameMyCerts/EWTLogger.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,14 @@ public void TMC_93_Policy_Unknown_XML_Attribute(string attributeName, string att
107107
WriteEvent(93, attributeName, attributeValue, lineNumber, linePosition);
108108
}
109109
}
110+
[Event(94, Level = EventLevel.Critical, Channel = EventChannel.Admin, Task = Tasks.XMLParser, Keywords = EventKeywords.None)]
111+
public void TMC_94_XML_Parsing_error(string filename, string error)
112+
{
113+
if (IsEnabled())
114+
{
115+
WriteEvent(94, filename, error);
116+
}
117+
}
110118

111119
#endregion
112120

TameMyCerts/LocalizedStrings.Designer.cs

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

TameMyCerts/LocalizedStrings.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,4 +459,7 @@ with the content:
459459
<data name="DirVal_TokenGroupNames_Failed" xml:space="preserve">
460460
<value>Unable to determine the msds-TokenGroupNames attribute for {0}. Note that this attribute is only available on Windows Server 2016 and newer Domain Controllers.</value>
461461
</data>
462+
<data name="event_TMC_94_XML_Parsing_error" xml:space="preserve">
463+
<value>Unable to parse '{0}', {1}.</value>
464+
</data>
462465
</root>

TameMyCerts/Models/CertificateRequestPolicy.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ public class CertificateRequestPolicy
8484
[XmlElement(ElementName = "DirectoryServicesMapping")]
8585
public DirectoryServicesMapping DirectoryServicesMapping { get; set; }
8686

87-
[XmlArray(ElementName = "YubikeyPolicies")]
88-
public List<YubikeyPolicy> YubikeyPolicy { get; set; }
87+
[XmlArray(ElementName = "YubiKeyPolicies")]
88+
public List<YubikeyPolicy> YubikeyPolicy { get; set; } = new();
8989

9090
[XmlElement(ElementName = "SupplementDnsNames")]
9191
public bool SupplementDnsNames { get; set; }
@@ -164,7 +164,7 @@ public string SaveToString()
164164
}
165165
private static void UnknownElementHandler(object sender, XmlElementEventArgs e)
166166
{
167-
ETWLogger.Log.TMC_92_Policy_Unknown_XML_Element(e.Element.Name, e.LineNumber, e.LinePosition);
167+
ETWLogger.Log.TMC_92_Policy_Unknown_XML_Element(e.Element.Name, e.LineNumber, e.LinePosition);
168168
}
169169

170170
// Event handler for unknown attributes

TameMyCerts/Models/CertificateRequestPolicyCacheEntry.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public CertificateRequestPolicyCacheEntry(string fileName)
3030
ErrorMessage = ex.InnerException != null
3131
? $"{ex.Message} {ex.InnerException.Message}"
3232
: ex.Message;
33+
ETWLogger.Log.TMC_94_XML_Parsing_error(fileName, ErrorMessage);
3334
}
3435

3536
LastUpdate = DateTimeOffset.Now;

TameMyCerts/install.ps1

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -259,11 +259,15 @@ if (-not $Uninstall.IsPresent) {
259259
New-Item -Path $AppInstallDirectory -ItemType Directory -Force -ErrorAction SilentlyContinue | Out-Null
260260
New-Item -Path "$AppInstallDirectory\\runtimes\win\lib\net8.0" -ItemType Directory -Force -ErrorAction SilentlyContinue | Out-Null
261261

262-
$FileList | ForEach-Object -Process {
262+
# Only copy the files if .\install.ps1 is run from another folder than the AppInstallDirectory
263+
if ($BaseDirectory -ne $AppInstallDirectory)
264+
{
265+
$FileList | ForEach-Object -Process {
263266

264-
Write-Verbose -Message "Copying $_ to $AppInstallDirectory."
267+
Write-Verbose -Message "Copying $_ to $AppInstallDirectory."
265268

266-
Copy-Item -Path "$BaseDirectory\$_" -Destination "$AppInstallDirectory\$_" -Force
269+
Copy-Item -Path "$BaseDirectory\$_" -Destination "$AppInstallDirectory\$_" -Force
270+
}
267271
}
268272

269273
Write-Verbose -Message "Registering $PolicyModuleName policy module COM Object"

0 commit comments

Comments
 (0)