Skip to content

Commit 85f8db6

Browse files
committed
PingCastle 3.2 beta1
1 parent 51412bf commit 85f8db6

36 files changed

+1053
-96
lines changed

ADWS/ADItem.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,8 @@ static ADItem()
161161
public string[] Keywords { get; set; }
162162
[ADAttributeAttribute("gPLink", ADAttributeValueKind.StringValue)]
163163
public string GPLink { get; set; }
164+
[ADAttributeAttribute("lastLogon", ADAttributeValueKind.DateValue)]
165+
public DateTime LastLogon { get; set; }
164166
[ADAttributeAttribute("lastLogonTimestamp", ADAttributeValueKind.DateValue)]
165167
public DateTime LastLogonTimestamp { get; set; }
166168
[ADAttributeAttribute("lDAPDisplayName", ADAttributeValueKind.StringValue)]

ADWS/ADWSConnection.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -239,11 +239,20 @@ public override void Enumerate(string distinguishedName, string filter, string[]
239239
{
240240
Console.WriteLine("Warning: unable to process element (" + ex.Message + ")\r\n" + item.OuterXml);
241241
Trace.WriteLine("Warning: unable to process element\r\n" + item.OuterXml);
242-
Trace.WriteLine("Exception: " + ex.Message);
243-
Trace.WriteLine(ex.StackTrace);
242+
Trace.WriteLine("Exception: " + ex.ToString());
244243
}
245-
if (aditem != null)
246-
callback(aditem);
244+
if (aditem != null)
245+
{
246+
try
247+
{
248+
callback(aditem);
249+
}
250+
catch
251+
{
252+
Trace.WriteLine("Exception while working on " + aditem.DistinguishedName);
253+
throw;
254+
}
255+
}
247256
}
248257
}
249258
}

ADWS/LDAPConnection.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,21 @@ private void EnumerateInternalWithLDAP(string distinguishedName, string filter,
119119
{
120120
Console.WriteLine("Warning: unable to process element (" + ex.Message + ")\r\n" + sr.Path);
121121
Trace.WriteLine("Warning: unable to process element\r\n" + sr.Path);
122-
Trace.WriteLine("Exception: " + ex.Message);
123-
Trace.WriteLine(ex.StackTrace);
122+
Trace.WriteLine("Exception: " + ex.ToString());
124123
}
124+
125125
if (aditem != null)
126-
callback(aditem);
126+
{
127+
try
128+
{
129+
callback(aditem);
130+
}
131+
catch
132+
{
133+
Trace.WriteLine("Exception while working on " + aditem.DistinguishedName);
134+
throw;
135+
}
136+
}
127137
numberOfObjectAlreadyExtracted++;
128138
}
129139
Trace.WriteLine("[" + DateTime.Now.ToLongTimeString() + "]Enumeration successful");

Data/HealthcheckData.cs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ public class HealthCheckGroupMemberData
202202
public bool IsInProtectedUser { get; set; }
203203

204204
public string Email { get; set; }
205+
206+
public string Class { get; set; }
205207
}
206208

207209
[DebuggerDisplay("{GroupName}")]
@@ -811,7 +813,7 @@ public HealthcheckOSVersionData()
811813
public HealthcheckOSVersionData(PingCastle.ADWS.ADItem x)
812814
{
813815
IsServer = x.OperatingSystem.Contains("Server");
814-
IsLTSC = x.OperatingSystem.Contains("LTSC") || x.OperatingSystem.Contains("LTSB");
816+
IsLTSC = x.OperatingSystem.IndexOf("LTSC", StringComparison.OrdinalIgnoreCase) >= 0 || x.OperatingSystem.IndexOf("LTSB", StringComparison.OrdinalIgnoreCase) >= 0;
815817
OSVersion = x.OperatingSystemVersion;
816818
data = new HealthcheckAccountData();
817819
data.DotNotRecordDetail = true;
@@ -1006,6 +1008,22 @@ public enum SMBSecurityModeEnum
10061008
SmbSigningRequired = 4,
10071009
}
10081010

1011+
[DebuggerDisplay("{DCName}")]
1012+
public class HealthcheckDCRPCInterface
1013+
{
1014+
[XmlAttribute]
1015+
public string IP { get; set; }
1016+
1017+
[XmlAttribute]
1018+
public string Interface { get; set; }
1019+
1020+
[XmlAttribute]
1021+
public int OpNum { get; set; }
1022+
1023+
[XmlAttribute]
1024+
public string Function { get; set; }
1025+
}
1026+
10091027
[DebuggerDisplay("{DCName}")]
10101028
public class HealthcheckDomainController
10111029
{
@@ -1079,6 +1097,11 @@ public class HealthcheckDomainController
10791097
[XmlAttribute]
10801098
[DefaultValue(false)]
10811099
public bool WebClientEnabled { get; set; }
1100+
1101+
[XmlAttribute]
1102+
public DateTime AdminLocalLogin { get; set; }
1103+
1104+
public List<HealthcheckDCRPCInterface> RPCInterfacesOpen { get; set; }
10821105
}
10831106

10841107
[XmlType("delegation")]
@@ -1165,10 +1188,20 @@ public static void UseDateInFileName()
11651188

11661189
public string GetHumanReadableFileName()
11671190
{
1168-
return "ad_hc_" + DomainFQDN + (UseDateInFileNameValue ? "_" + GenerationDate.ToString("yyyyMMddTHHmmss") : null) + ".html";
1191+
return GetHumanReadableFileName(DomainFQDN, GenerationDate);
11691192
}
11701193

11711194
public string GetMachineReadableFileName()
1195+
{
1196+
return GetMachineReadableFileName(DomainFQDN, GenerationDate);
1197+
}
1198+
1199+
public static string GetHumanReadableFileName(string DomainFQDN, DateTime GenerationDate)
1200+
{
1201+
return "ad_hc_" + DomainFQDN + (UseDateInFileNameValue ? "_" + GenerationDate.ToString("yyyyMMddTHHmmss") : null) + ".html";
1202+
}
1203+
1204+
public static string GetMachineReadableFileName(string DomainFQDN, DateTime GenerationDate)
11721205
{
11731206
return "ad_hc_" + DomainFQDN + (UseDateInFileNameValue ? "_" + GenerationDate.ToString("yyyyMMddTHHmmss") : null) + ".xml";
11741207
}

Exports/ExportComputers.cs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,15 @@ public override void Export(string filename)
4747
header.AddRange(hcprop);
4848
header.Add("OperatingSystem");
4949
header.Add("OperatingSystemVersion");
50+
header.Add("IsCluster");
5051
header.Add("PC OS 1");
5152
header.Add("PC OS 2");
5253
header.Add("LAPS last update (legacy LAPS)");
5354
header.Add("LAPS last update (Ms LAPS)");
54-
55+
5556
sw.WriteLine(string.Join("\t", header.ToArray()));
56-
57-
57+
58+
5859
WorkOnReturnedObjectByADWS callback =
5960
(ADItem x) =>
6061
{
@@ -100,6 +101,26 @@ public override void Export(string filename)
100101
data.Add(string.Empty);
101102
data.Add(string.Empty);
102103
}
104+
if (x.ServicePrincipalName != null)
105+
{
106+
bool isCluster = false;
107+
if (x.ServicePrincipalName != null)
108+
{
109+
foreach (var sp in x.ServicePrincipalName)
110+
{
111+
if (sp.StartsWith("MSClusterVirtualServer/"))
112+
{
113+
isCluster = true;
114+
break;
115+
}
116+
}
117+
}
118+
data.Add(isCluster.ToString());
119+
}
120+
else
121+
{
122+
data.Add(false.ToString());
123+
}
103124
if (lapsAnalyzer.LegacyLAPSIntId != 0 && x.ReplPropertyMetaData != null && x.ReplPropertyMetaData.ContainsKey(lapsAnalyzer.LegacyLAPSIntId))
104125
{
105126
var dd = x.ReplPropertyMetaData[lapsAnalyzer.LegacyLAPSIntId];

Exports/ExportUsers.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public override void Export(string filename)
4040
header.Add("lastLogonTimestamp");
4141
header.Add("pwdLastSet");
4242
header.Add("whenCreated");
43+
header.Add("whenChanged");
4344
header.Add("objectClass");
4445
header.Add("userAccountControl");
4546
header.AddRange(hcprop);
@@ -66,6 +67,7 @@ public override void Export(string filename)
6667
data.Add(x.LastLogonTimestamp.ToString("u"));
6768
data.Add(x.PwdLastSet.ToString("u"));
6869
data.Add(x.WhenCreated.ToString("u"));
70+
data.Add(x.WhenChanged.ToString("u"));
6971
data.Add(x.Class);
7072
data.Add(x.UserAccountControl.ToString());
7173
foreach (var p in hcprop)
@@ -77,7 +79,9 @@ public override void Export(string filename)
7779
};
7880

7981
DisplayAdvancement("Starting");
80-
adws.Enumerate(domainInfo.DefaultNamingContext, HealthcheckAnalyzer.userFilter, HealthcheckAnalyzer.userProperties, callback, "SubTree");
82+
var properties = new List<string>(HealthcheckAnalyzer.userProperties);
83+
properties.Add("whenChanged");
84+
adws.Enumerate(domainInfo.DefaultNamingContext, HealthcheckAnalyzer.userFilter, properties.ToArray(), callback, "SubTree");
8185
DisplayAdvancement("Done");
8286
}
8387
}

Graph/Reporting/ReportGenerator.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,7 @@ private HealthCheckGroupMemberData BuildMemberDetail(ADWebService adws, HealthCh
585585
member.PwdLastSet = x.PwdLastSet;
586586
member.LastLogonTimestamp = x.LastLogonTimestamp;
587587
member.Email = x.Mail;
588+
member.Class = x.Class;
588589

589590
if ((x.UserAccountControl & 0x00000002) != 0)
590591
data.NumberOfMemberDisabled++;

0 commit comments

Comments
 (0)