diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..fe1152b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,30 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md +!**/.gitignore +!.git/HEAD +!.git/config +!.git/packed-refs +!.git/refs/heads/** \ No newline at end of file diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 1ff0c42..0000000 --- a/.gitattributes +++ /dev/null @@ -1,63 +0,0 @@ -############################################################################### -# Set default behavior to automatically normalize line endings. -############################################################################### -* text=auto - -############################################################################### -# Set default behavior for command prompt diff. -# -# This is need for earlier builds of msysgit that does not have it on by -# default for csharp files. -# Note: This is only used by command line -############################################################################### -#*.cs diff=csharp - -############################################################################### -# Set the merge driver for project and solution files -# -# Merging from the command prompt will add diff markers to the files if there -# are conflicts (Merging from VS is not affected by the settings below, in VS -# the diff markers are never inserted). Diff markers may cause the following -# file extensions to fail to load in VS. An alternative would be to treat -# these files as binary and thus will always conflict and require user -# intervention with every merge. To do so, just uncomment the entries below -############################################################################### -#*.sln merge=binary -#*.csproj merge=binary -#*.vbproj merge=binary -#*.vcxproj merge=binary -#*.vcproj merge=binary -#*.dbproj merge=binary -#*.fsproj merge=binary -#*.lsproj merge=binary -#*.wixproj merge=binary -#*.modelproj merge=binary -#*.sqlproj merge=binary -#*.wwaproj merge=binary - -############################################################################### -# behavior for image files -# -# image files are treated as binary by default. -############################################################################### -#*.jpg binary -#*.png binary -#*.gif binary - -############################################################################### -# diff behavior for common document formats -# -# Convert binary document formats to text before diffing them. This feature -# is only available from the command line. Turn it on by uncommenting the -# entries below. -############################################################################### -#*.doc diff=astextplain -#*.DOC diff=astextplain -#*.docx diff=astextplain -#*.DOCX diff=astextplain -#*.dot diff=astextplain -#*.DOT diff=astextplain -#*.pdf diff=astextplain -#*.PDF diff=astextplain -#*.rtf diff=astextplain -#*.RTF diff=astextplain diff --git a/ADWSProxy.sln b/ADWSProxy.sln deleted file mode 100644 index 8892b25..0000000 --- a/ADWSProxy.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34408.163 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ADWSProxy", "ADWSProxy\ADWSProxy.csproj", "{750E2653-08CF-4C6D-B82A-1E96FB256E63}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {750E2653-08CF-4C6D-B82A-1E96FB256E63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {750E2653-08CF-4C6D-B82A-1E96FB256E63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {750E2653-08CF-4C6D-B82A-1E96FB256E63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {750E2653-08CF-4C6D-B82A-1E96FB256E63}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {8B749E2C-2B6B-4EE3-B64D-7ECCCE964DAD} - EndGlobalSection -EndGlobal diff --git a/ADWSProxy/ADWS/ActiveDirectoryWebService.cs b/ADWSProxy/ADWS/ActiveDirectoryWebService.cs index 6512775..1707782 100644 --- a/ADWSProxy/ADWS/ActiveDirectoryWebService.cs +++ b/ADWSProxy/ADWS/ActiveDirectoryWebService.cs @@ -1,1185 +1,1055 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// +// dotnet --fx-version 8.0.23 "C:\Users\luc\.dotnet\tools\.store\dotnet-svcutil\8.0.0\dotnet-svcutil\8.0.0\tools\net8.0\any\dotnet-svcutil.dll" net.tcp://[...]:9389/ActiveDirectoryWebServices/mex --namespace "*,ADWSProxy.ADWS" --outputFile "ActiveDirectoryWebService.cs" --serializer XmlSerializer --targetFramework net8.0 --sync // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. -// // //------------------------------------------------------------------------------ namespace ADWSProxy.ADWS { - using System.Runtime.Serialization; + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(RenewFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(PullFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(EnumerateFault))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "FaultDetail", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.EnumerateFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.PullFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.RenewFault))] - public partial class FaultDetail : object, System.Runtime.Serialization.IExtensibleDataObject + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] + public partial class FaultDetail { - private System.Runtime.Serialization.ExtensionDataObject extensionDataField; - - private ADWSProxy.ADWS.ArgumentErrorDetail ArgumentErrorField; - - private string ErrorField; + private ArgumentErrorDetail argumentErrorField; - private ADWSProxy.ADWS.DirectoryErrorDetail DirectoryErrorField; + private string errorField; - private string InvalidAttributeTypeField; + private DirectoryErrorDetail directoryErrorField; - private string InvalidOperationField; + private string invalidAttributeTypeField; - private ADWSProxy.ADWS.ChangeType InvalidChangeField; + private string invalidOperationField; - private ADWSProxy.ADWS.AttributeTypeAndValue InvalidAttributeTypeOrValueField; + private ChangeType invalidChangeField; - private string ShortErrorField; + private AttributeTypeAndValue invalidAttributeTypeOrValueField; - private string UnknownAttributeField; + private string shortErrorField; - public System.Runtime.Serialization.ExtensionDataObject ExtensionData - { - get - { - return this.extensionDataField; - } - set - { - this.extensionDataField = value; - } - } + private string unknownAttributeField; - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] - public ADWSProxy.ADWS.ArgumentErrorDetail ArgumentError + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 0)] + public ArgumentErrorDetail ArgumentError { get { - return this.ArgumentErrorField; + return this.argumentErrorField; } set { - this.ArgumentErrorField = value; + this.argumentErrorField = value; } } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 1)] public string Error { get { - return this.ErrorField; + return this.errorField; } set { - this.ErrorField = value; + this.errorField = value; } } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false, Order = 2)] - public ADWSProxy.ADWS.DirectoryErrorDetail DirectoryError + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 2)] + public DirectoryErrorDetail DirectoryError { get { - return this.DirectoryErrorField; + return this.directoryErrorField; } set { - this.DirectoryErrorField = value; + this.directoryErrorField = value; } } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false, Order = 3)] + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 3)] public string InvalidAttributeType { get { - return this.InvalidAttributeTypeField; + return this.invalidAttributeTypeField; } set { - this.InvalidAttributeTypeField = value; + this.invalidAttributeTypeField = value; } } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false, Order = 4)] + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 4)] public string InvalidOperation { get { - return this.InvalidOperationField; + return this.invalidOperationField; } set { - this.InvalidOperationField = value; + this.invalidOperationField = value; } } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false, Order = 5)] - public ADWSProxy.ADWS.ChangeType InvalidChange + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 5)] + public ChangeType InvalidChange { get { - return this.InvalidChangeField; + return this.invalidChangeField; } set { - this.InvalidChangeField = value; + this.invalidChangeField = value; } } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false, Order = 6)] - public ADWSProxy.ADWS.AttributeTypeAndValue InvalidAttributeTypeOrValue + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 6)] + public AttributeTypeAndValue InvalidAttributeTypeOrValue { get { - return this.InvalidAttributeTypeOrValueField; + return this.invalidAttributeTypeOrValueField; } set { - this.InvalidAttributeTypeOrValueField = value; + this.invalidAttributeTypeOrValueField = value; } } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false, Order = 7)] + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 7)] public string ShortError { get { - return this.ShortErrorField; + return this.shortErrorField; } set { - this.ShortErrorField = value; + this.shortErrorField = value; } } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false, Order = 8)] + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 8)] public string UnknownAttribute { get { - return this.UnknownAttributeField; + return this.unknownAttributeField; } set { - this.UnknownAttributeField = value; + this.unknownAttributeField = value; } } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "ArgumentErrorDetail", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] - public partial class ArgumentErrorDetail : object, System.Runtime.Serialization.IExtensibleDataObject + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] + public partial class ArgumentErrorDetail { - private System.Runtime.Serialization.ExtensionDataObject extensionDataField; + private string messageField; - private string MessageField; + private string parameterNameField; - private string ParameterNameField; - - private string ShortMessageField; - - public System.Runtime.Serialization.ExtensionDataObject ExtensionData - { - get - { - return this.extensionDataField; - } - set - { - this.extensionDataField = value; - } - } + private string shortMessageField; - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 0)] public string Message { get { - return this.MessageField; + return this.messageField; } set { - this.MessageField = value; + this.messageField = value; } } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 1)] public string ParameterName { get { - return this.ParameterNameField; + return this.parameterNameField; } set { - this.ParameterNameField = value; + this.parameterNameField = value; } } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 2)] public string ShortMessage { get { - return this.ShortMessageField; + return this.shortMessageField; } set { - this.ShortMessageField = value; + this.shortMessageField = value; } } } + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(ChangeType))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "AttributeTypeAndValue", Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] - public partial class AttributeTypeAndValue : object, System.Runtime.Serialization.IExtensibleDataObject + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] + public partial class AttributeTypeAndValue { - private System.Runtime.Serialization.ExtensionDataObject extensionDataField; - - private ADWSProxy.ADWS.AttributeTypeAndValue.AttributeTypeType AttributeTypeField; + private ADWSProxy.ADWS.ArrayOfXElement attributeTypeField; - private ADWSProxy.ADWS.AttributeTypeAndValue.AttributeValueType AttributeValueField; + private ADWSProxy.ADWS.ArrayOfXElement attributeValueField; - public System.Runtime.Serialization.ExtensionDataObject ExtensionData + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 0)] + public ADWSProxy.ADWS.ArrayOfXElement AttributeType { get { - return this.extensionDataField; + return this.attributeTypeField; } set { - this.extensionDataField = value; + this.attributeTypeField = value; } } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] - public ADWSProxy.ADWS.AttributeTypeAndValue.AttributeTypeType AttributeType + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 1)] + public ADWSProxy.ADWS.ArrayOfXElement AttributeValue { get { - return this.AttributeTypeField; + return this.attributeValueField; } set { - this.AttributeTypeField = value; + this.attributeValueField = value; } } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/2001/XMLSchema")] +#pragma warning disable CS8981 // The type name only contains lower-cased ascii characters. Such names may become reserved for the language. + public partial class schema +#pragma warning restore CS8981 // The type name only contains lower-cased ascii characters. Such names may become reserved for the language. + { + } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] - public ADWSProxy.ADWS.AttributeTypeAndValue.AttributeValueType AttributeValue + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] + public partial class ChangeType : AttributeTypeAndValue + { + + private string operationField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string Operation { get { - return this.AttributeValueField; + return this.operationField; } set { - this.AttributeValueField = value; + this.operationField = value; } } + } - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")] - [System.Xml.Serialization.XmlRootAttribute(IsNullable = false)] - public partial class AttributeTypeType : object, System.Xml.Serialization.IXmlSerializable - { + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] + public partial class DirectoryErrorDetail + { + + private string messageField; + + private string errorCodeField; + + private string extendedErrorMessageField; + + private string matchedDNField; + + private string[] referralField; - private System.Xml.XmlNode[] nodesField; + private string win32ErrorCodeField; - private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("AttributeTypeAndValue.AttributeTypeType", "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess"); + private string shortMessageField; - public System.Xml.XmlNode[] Nodes + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 0)] + public string Message + { + get { - get - { - return this.nodesField; - } - set - { - this.nodesField = value; - } + return this.messageField; } - - public void ReadXml(System.Xml.XmlReader reader) + set { - this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader); + this.messageField = value; } + } - public void WriteXml(System.Xml.XmlWriter writer) + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 1)] + public string ErrorCode + { + get { - System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes); + return this.errorCodeField; } - - public System.Xml.Schema.XmlSchema GetSchema() + set { - return null; + this.errorCodeField = value; } + } - public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas) + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 2)] + public string ExtendedErrorMessage + { + get + { + return this.extendedErrorMessageField; + } + set { - System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName); - return typeName; + this.extendedErrorMessageField = value; } } - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")] - [System.Xml.Serialization.XmlRootAttribute(IsNullable = false)] - public partial class AttributeValueType : object, System.Xml.Serialization.IXmlSerializable + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 3)] + public string MatchedDN { - - private System.Xml.XmlNode[] nodesField; - - private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("AttributeTypeAndValue.AttributeValueType", "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess"); - - public System.Xml.XmlNode[] Nodes + get { - get - { - return this.nodesField; - } - set - { - this.nodesField = value; - } + return this.matchedDNField; } - - public void ReadXml(System.Xml.XmlReader reader) + set { - this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader); + this.matchedDNField = value; } + } - public void WriteXml(System.Xml.XmlWriter writer) + /// + [System.Xml.Serialization.XmlElementAttribute("Referral", Order = 4)] + public string[] Referral + { + get { - System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes); + return this.referralField; } - - public System.Xml.Schema.XmlSchema GetSchema() + set { - return null; + this.referralField = value; } + } - public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas) + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 5)] + public string Win32ErrorCode + { + get + { + return this.win32ErrorCodeField; + } + set { - System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName); - return typeName; + this.win32ErrorCodeField = value; } } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "EnumerateFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] - public partial class EnumerateFault : ADWSProxy.ADWS.FaultDetail - { - - private string InvalidPropertyField; - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] - public string InvalidProperty + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 6)] + public string ShortMessage { get { - return this.InvalidPropertyField; + return this.shortMessageField; } set { - this.InvalidPropertyField = value; + this.shortMessageField = value; } } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "PullFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] - public partial class PullFault : ADWSProxy.ADWS.FaultDetail + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] + public partial class RenewFault : FaultDetail { } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "RenewFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] - public partial class RenewFault : ADWSProxy.ADWS.FaultDetail + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] + public partial class PullFault : FaultDetail { } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")] - [System.Xml.Serialization.XmlRootAttribute(IsNullable = false)] - public partial class DirectoryErrorDetail : object, System.Xml.Serialization.IXmlSerializable + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] + public partial class EnumerateFault : FaultDetail { - private System.Xml.XmlNode[] nodesField; + private string invalidPropertyField; - private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("DirectoryErrorDetail", "http://schemas.microsoft.com/2008/1/ActiveDirectory"); - - public System.Xml.XmlNode[] Nodes + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 0)] + public string InvalidProperty { get { - return this.nodesField; + return this.invalidPropertyField; } set { - this.nodesField = value; + this.invalidPropertyField = value; } } - - public void ReadXml(System.Xml.XmlReader reader) - { - this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader); - } - - public void WriteXml(System.Xml.XmlWriter writer) - { - System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes); - } - - public System.Xml.Schema.XmlSchema GetSchema() - { - return null; - } - - public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas) - { - System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName); - return typeName; - } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")] - [System.Xml.Serialization.XmlRootAttribute(IsNullable = false)] - public partial class ChangeType : object, System.Xml.Serialization.IXmlSerializable + [System.Xml.Serialization.XmlTypeAttribute(TypeName = "FaultDetail", Namespace = "http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd")] + public partial class FaultDetail1 { - private System.Xml.XmlNode[] nodesField; + private int sizeLimitField; + + private bool sizeLimitFieldSpecified; - private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("ChangeType", "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess"); + private string valueField; - public System.Xml.XmlNode[] Nodes + private System.Xml.Serialization.XmlSerializerNamespaces xmlnsField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] + public int SizeLimit { get { - return this.nodesField; + return this.sizeLimitField; } set { - this.nodesField = value; + this.sizeLimitField = value; } } - public void ReadXml(System.Xml.XmlReader reader) - { - this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader); - } - - public void WriteXml(System.Xml.XmlWriter writer) - { - System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes); - } - - public System.Xml.Schema.XmlSchema GetSchema() - { - return null; - } - - public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas) - { - System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName); - return typeName; - } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")] - [System.Xml.Serialization.XmlRootAttribute(ElementName = "EncodingLimit", Namespace = "http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd", IsNullable = false)] - public partial class FaultDetail1 : object, System.Xml.Serialization.IXmlSerializable - { - - private System.Xml.XmlNode[] nodesField; - - private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("FaultDetail", "http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"); - - public System.Xml.XmlNode[] Nodes + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool SizeLimitSpecified { get { - return this.nodesField; + return this.sizeLimitFieldSpecified; } set { - this.nodesField = value; + this.sizeLimitFieldSpecified = value; } } - public void ReadXml(System.Xml.XmlReader reader) - { - this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader); - } - - public void WriteXml(System.Xml.XmlWriter writer) - { - System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes); - } - - public System.Xml.Schema.XmlSchema GetSchema() - { - return null; - } - - public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas) - { - System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName); - return typeName; - } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")] - [System.Xml.Serialization.XmlRootAttribute(ElementName = "FragmentDialectNotSupported", Namespace = "http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd", IsNullable = false)] - public partial class FragmentDialect : object, System.Xml.Serialization.IXmlSerializable - { - - private System.Xml.XmlNode[] nodesField; - - private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("FragmentDialect", "http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"); - - public System.Xml.XmlNode[] Nodes + /// + [System.Xml.Serialization.XmlTextAttribute()] + public string Value { get { - return this.nodesField; + return this.valueField; } set { - this.nodesField = value; + this.valueField = value; } } - public void ReadXml(System.Xml.XmlReader reader) - { - this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader); - } - - public void WriteXml(System.Xml.XmlWriter writer) - { - System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes); - } - - public System.Xml.Schema.XmlSchema GetSchema() - { - return null; - } - - public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas) + /// + [System.Xml.Serialization.XmlNamespaceDeclarationsAttribute()] + public System.Xml.Serialization.XmlSerializerNamespaces xmlns { - System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName); - return typeName; + get + { + return this.xmlnsField; + } + set + { + this.xmlnsField = value; + } } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "AttributeTypeNotValid", Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] - public partial class AttributeTypeNotValid : object, System.Runtime.Serialization.IExtensibleDataObject + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd")] + public partial class FragmentDialect { - private System.Runtime.Serialization.ExtensionDataObject extensionDataField; - - private ADWSProxy.ADWS.AttributeTypeNotValidForDialect AttributeTypeNotValidForDialectField; + private string valueField; - private ADWSProxy.ADWS.AttributeTypeNotValidForEntry AttributeTypeNotValidForEntryField; - - public System.Runtime.Serialization.ExtensionDataObject ExtensionData + /// + [System.Xml.Serialization.XmlTextAttribute(DataType = "anyURI")] + public string Value { get { - return this.extensionDataField; + return this.valueField; } set { - this.extensionDataField = value; + this.valueField = value; } } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] + public partial class AttributeTypeNotValid + { + + private AttributeTypeNotValidForDialect attributeTypeNotValidForDialectField; - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] - public ADWSProxy.ADWS.AttributeTypeNotValidForDialect AttributeTypeNotValidForDialect + private AttributeTypeNotValidForEntry attributeTypeNotValidForEntryField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 0)] + public AttributeTypeNotValidForDialect AttributeTypeNotValidForDialect { get { - return this.AttributeTypeNotValidForDialectField; + return this.attributeTypeNotValidForDialectField; } set { - this.AttributeTypeNotValidForDialectField = value; + this.attributeTypeNotValidForDialectField = value; } } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] - public ADWSProxy.ADWS.AttributeTypeNotValidForEntry AttributeTypeNotValidForEntry + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 1)] + public AttributeTypeNotValidForEntry AttributeTypeNotValidForEntry { get { - return this.AttributeTypeNotValidForEntryField; + return this.attributeTypeNotValidForEntryField; } set { - this.AttributeTypeNotValidForEntryField = value; + this.attributeTypeNotValidForEntryField = value; } } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "AttributeTypeNotValidForDialect", Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] - public partial class AttributeTypeNotValidForDialect : object, System.Runtime.Serialization.IExtensibleDataObject + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] + public partial class AttributeTypeNotValidForDialect { - private System.Runtime.Serialization.ExtensionDataObject extensionDataField; + private string attributeTypeField; - private string AttributeTypeField; - - public System.Runtime.Serialization.ExtensionDataObject ExtensionData + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 0)] + public string AttributeType { get { - return this.extensionDataField; + return this.attributeTypeField; } set { - this.extensionDataField = value; + this.attributeTypeField = value; } } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] + public partial class AttributeTypeNotValidForEntry + { + + private string attributeTypeField; - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 0)] public string AttributeType { get { - return this.AttributeTypeField; + return this.attributeTypeField; } set { - this.AttributeTypeField = value; + this.attributeTypeField = value; } } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "AttributeTypeNotValidForEntry", Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] - public partial class AttributeTypeNotValidForEntry : object, System.Runtime.Serialization.IExtensibleDataObject + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.xmlsoap.org/ws/2004/09/enumeration")] + public partial class SupportedDialect { - private System.Runtime.Serialization.ExtensionDataObject extensionDataField; - - private string AttributeTypeField; + private string valueField; - public System.Runtime.Serialization.ExtensionDataObject ExtensionData + /// + [System.Xml.Serialization.XmlTextAttribute(DataType = "anyURI")] + public string Value { get { - return this.extensionDataField; + return this.valueField; } set { - this.extensionDataField = value; + this.valueField = value; } } + } - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] - public string AttributeType + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] + public partial class SupportedSelectOrSortDialect + { + + private string valueField; + + /// + [System.Xml.Serialization.XmlTextAttribute(DataType = "anyURI")] + public string Value { get { - return this.AttributeTypeField; + return this.valueField; } set { - this.AttributeTypeField = value; + this.valueField = value; } } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")] - [System.Xml.Serialization.XmlRootAttribute(ElementName = "FilterDialectRequestedUnavailable", Namespace = "http://schemas.xmlsoap.org/ws/2004/09/enumeration", IsNullable = false)] - public partial class SupportedDialect : object, System.Xml.Serialization.IXmlSerializable + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class GetADGroupMemberFault : CustomActionFault { + } - private System.Xml.XmlNode[] nodesField; - - private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("SupportedDialect", "http://schemas.xmlsoap.org/ws/2004/09/enumeration"); - - public System.Xml.XmlNode[] Nodes - { - get - { - return this.nodesField; - } - set - { - this.nodesField = value; - } - } - - public void ReadXml(System.Xml.XmlReader reader) - { - this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader); - } - - public void WriteXml(System.Xml.XmlWriter writer) - { - System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes); - } - - public System.Xml.Schema.XmlSchema GetSchema() - { - return null; - } - - public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas) - { - System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName); - return typeName; - } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")] - [System.Xml.Serialization.XmlRootAttribute(ElementName = "UnsupportedSelectOrSortDialectFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory", IsNullable = false)] - public partial class SupportedSelectOrSortDialect : object, System.Xml.Serialization.IXmlSerializable - { - - private System.Xml.XmlNode[] nodesField; - - private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("SupportedSelectOrSortDialect", "http://schemas.microsoft.com/2008/1/ActiveDirectory"); - - public System.Xml.XmlNode[] Nodes - { - get - { - return this.nodesField; - } - set - { - this.nodesField = value; - } - } - - public void ReadXml(System.Xml.XmlReader reader) - { - this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader); - } - - public void WriteXml(System.Xml.XmlWriter writer) - { - System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes); - } - - public System.Xml.Schema.XmlSchema GetSchema() - { - return null; - } - - public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas) - { - System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName); - return typeName; - } - } - + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(GetVersionFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(ChangeOptionalFeatureFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(GetADForestFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(MoveADOperationMasterRoleFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(GetADDomainFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(GetADDomainControllerFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(TranslateNameFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(GetADPrincipalAuthorizationGroupFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(ChangePasswordFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(SetPasswordFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(GetADPrincipalGroupMembershipFault))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(GetADGroupMemberFault))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "CustomActionFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.GetADPrincipalGroupMembershipFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.SetPasswordFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.ChangePasswordFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.TranslateNameFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.GetADDomainControllerFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.GetADDomainFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.MoveADOperationMasterRoleFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.GetADForestFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.ChangeOptionalFeatureFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.GetVersionFault))] - [System.Runtime.Serialization.KnownTypeAttribute(typeof(ADWSProxy.ADWS.GetADGroupMemberFault))] - public partial class CustomActionFault : object, System.Runtime.Serialization.IExtensibleDataObject + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class CustomActionFault { - private System.Runtime.Serialization.ExtensionDataObject extensionDataField; - - private ADWSProxy.ADWS.ArgumentErrorDetailCA ArgumentErrorField; + private ArgumentErrorDetailCA argumentErrorField; - private ADWSProxy.ADWS.DirectoryErrorDetailCA DirectoryErrorField; + private DirectoryErrorDetailCA directoryErrorField; - private string ErrorField; + private string errorField; - private string ShortErrorField; - - public System.Runtime.Serialization.ExtensionDataObject ExtensionData - { - get - { - return this.extensionDataField; - } - set - { - this.extensionDataField = value; - } - } + private string shortErrorField; - [System.Runtime.Serialization.DataMemberAttribute()] - public ADWSProxy.ADWS.ArgumentErrorDetailCA ArgumentError + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0)] + public ArgumentErrorDetailCA ArgumentError { get { - return this.ArgumentErrorField; + return this.argumentErrorField; } set { - this.ArgumentErrorField = value; + this.argumentErrorField = value; } } - [System.Runtime.Serialization.DataMemberAttribute()] - public ADWSProxy.ADWS.DirectoryErrorDetailCA DirectoryError + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 1)] + public DirectoryErrorDetailCA DirectoryError { get { - return this.DirectoryErrorField; + return this.directoryErrorField; } set { - this.DirectoryErrorField = value; + this.directoryErrorField = value; } } - [System.Runtime.Serialization.DataMemberAttribute()] + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 2)] public string Error { get { - return this.ErrorField; + return this.errorField; } set { - this.ErrorField = value; + this.errorField = value; } } - [System.Runtime.Serialization.DataMemberAttribute()] + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 3)] public string ShortError { get { - return this.ShortErrorField; + return this.shortErrorField; } set { - this.ShortErrorField = value; + this.shortErrorField = value; } } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "ArgumentErrorDetailCA", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class ArgumentErrorDetailCA : object, System.Runtime.Serialization.IExtensibleDataObject + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class ArgumentErrorDetailCA { - private System.Runtime.Serialization.ExtensionDataObject extensionDataField; - - private string MessageField; + private string messageField; - private string ParameterNameField; + private string parameterNameField; - private string ShortMessageField; - - public System.Runtime.Serialization.ExtensionDataObject ExtensionData - { - get - { - return this.extensionDataField; - } - set - { - this.extensionDataField = value; - } - } + private string shortMessageField; - [System.Runtime.Serialization.DataMemberAttribute()] + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0)] public string Message { get { - return this.MessageField; + return this.messageField; } set { - this.MessageField = value; + this.messageField = value; } } - [System.Runtime.Serialization.DataMemberAttribute()] + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 1)] public string ParameterName { get { - return this.ParameterNameField; + return this.parameterNameField; } set { - this.ParameterNameField = value; + this.parameterNameField = value; } } - [System.Runtime.Serialization.DataMemberAttribute()] + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 2)] public string ShortMessage { get { - return this.ShortMessageField; + return this.shortMessageField; } set { - this.ShortMessageField = value; + this.shortMessageField = value; } } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "DirectoryErrorDetailCA", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class DirectoryErrorDetailCA : object, System.Runtime.Serialization.IExtensibleDataObject + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class DirectoryErrorDetailCA { - private System.Runtime.Serialization.ExtensionDataObject extensionDataField; - - private string ErrorCodeField; + private string errorCodeField; - private string ExtendedErrorMessageField; + private string extendedErrorMessageField; - private string MatchedDNField; + private string matchedDNField; - private string MessageField; + private string messageField; - private string[] ReferralField; + private string[] referralField; - private string ShortMessageField; + private string shortMessageField; - private string Win32ErrorCodeField; - - public System.Runtime.Serialization.ExtensionDataObject ExtensionData - { - get - { - return this.extensionDataField; - } - set - { - this.extensionDataField = value; - } - } + private string win32ErrorCodeField; - [System.Runtime.Serialization.DataMemberAttribute()] + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0)] public string ErrorCode { get { - return this.ErrorCodeField; + return this.errorCodeField; } set { - this.ErrorCodeField = value; + this.errorCodeField = value; } } - [System.Runtime.Serialization.DataMemberAttribute()] + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 1)] public string ExtendedErrorMessage { get { - return this.ExtendedErrorMessageField; + return this.extendedErrorMessageField; } set { - this.ExtendedErrorMessageField = value; + this.extendedErrorMessageField = value; } } - [System.Runtime.Serialization.DataMemberAttribute()] + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 2)] public string MatchedDN { get { - return this.MatchedDNField; + return this.matchedDNField; } set { - this.MatchedDNField = value; + this.matchedDNField = value; } } - [System.Runtime.Serialization.DataMemberAttribute()] + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 3)] public string Message { get { - return this.MessageField; + return this.messageField; } set { - this.MessageField = value; + this.messageField = value; } } - [System.Runtime.Serialization.DataMemberAttribute()] + /// + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 4)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] public string[] Referral { get { - return this.ReferralField; + return this.referralField; } set { - this.ReferralField = value; + this.referralField = value; } } - [System.Runtime.Serialization.DataMemberAttribute()] + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 5)] public string ShortMessage { get { - return this.ShortMessageField; + return this.shortMessageField; } set { - this.ShortMessageField = value; + this.shortMessageField = value; } } - [System.Runtime.Serialization.DataMemberAttribute()] + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 6)] public string Win32ErrorCode { get { - return this.Win32ErrorCodeField; + return this.win32ErrorCodeField; } set { - this.Win32ErrorCodeField = value; + this.win32ErrorCodeField = value; } } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "GetADPrincipalGroupMembershipFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class GetADPrincipalGroupMembershipFault : ADWSProxy.ADWS.CustomActionFault - { - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "SetPasswordFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class SetPasswordFault : ADWSProxy.ADWS.CustomActionFault + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class GetVersionFault : CustomActionFault { } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "ChangePasswordFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class ChangePasswordFault : ADWSProxy.ADWS.CustomActionFault + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class ChangeOptionalFeatureFault : CustomActionFault { } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "GetADPrincipalAuthorizationGroupFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class GetADPrincipalAuthorizationGroupFault : ADWSProxy.ADWS.CustomActionFault + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class GetADForestFault : CustomActionFault { } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "TranslateNameFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class TranslateNameFault : ADWSProxy.ADWS.CustomActionFault + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class MoveADOperationMasterRoleFault : CustomActionFault { } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "GetADDomainControllerFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class GetADDomainControllerFault : ADWSProxy.ADWS.CustomActionFault + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class GetADDomainFault : CustomActionFault { } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "GetADDomainFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class GetADDomainFault : ADWSProxy.ADWS.CustomActionFault + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class GetADDomainControllerFault : CustomActionFault { } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "MoveADOperationMasterRoleFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class MoveADOperationMasterRoleFault : ADWSProxy.ADWS.CustomActionFault + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class TranslateNameFault : CustomActionFault { } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "GetADForestFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class GetADForestFault : ADWSProxy.ADWS.CustomActionFault + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class GetADPrincipalAuthorizationGroupFault : CustomActionFault { } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "ChangeOptionalFeatureFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class ChangeOptionalFeatureFault : ADWSProxy.ADWS.CustomActionFault + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class ChangePasswordFault : CustomActionFault { } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "GetVersionFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class GetVersionFault : ADWSProxy.ADWS.CustomActionFault + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class SetPasswordFault : CustomActionFault { } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] - [System.Runtime.Serialization.DataContractAttribute(Name = "GetADGroupMemberFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class GetADGroupMemberFault : ADWSProxy.ADWS.CustomActionFault + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class GetADPrincipalGroupMembershipFault : CustomActionFault { } - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ServiceModel.ServiceContractAttribute(Namespace = "http://schemas.xmlsoap.org/ws/2004/09/transfer", ConfigurationName = "ADWSProxy.ADWS.Resource", SessionMode = System.ServiceModel.SessionMode.Required)] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace = "http://schemas.xmlsoap.org/ws/2004/09/transfer", ConfigurationName = "ADWSProxy.ADWS.Resource")] public interface Resource { @@ -1192,7 +1062,7 @@ public interface Resource [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.dmtf.org/wbem/wsman/1/wsman/fault", Name = "AccessDenied", Namespace = "http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess/fault", Name = "UnwillingToPerform", Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.xmlsoap.org/ws/2004/08/addressing/fault", Name = "EndpointUnavailable", Namespace = "http://schemas.xmlsoap.org/ws/2004/08/addressing")] - [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] System.ServiceModel.Channels.Message Get(System.ServiceModel.Channels.Message request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.xmlsoap.org/ws/2004/09/transfer/Get", ReplyAction = "http://schemas.xmlsoap.org/ws/2004/09/transfer/GetResponse")] @@ -1209,7 +1079,7 @@ public interface Resource [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.xmlsoap.org/ws/2004/08/addressing/fault", Name = "ActionNotSupportedFault", Namespace = "http://schemas.xmlsoap.org/ws/2004/08/addressing")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.dmtf.org/wbem/wsman/1/wsman/fault", Name = "AccessDenied", Namespace = "http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess/fault", Name = "UnwillingToPerform", Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] - [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] System.ServiceModel.Channels.Message Put(System.ServiceModel.Channels.Message request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.xmlsoap.org/ws/2004/09/transfer/Put", ReplyAction = "http://schemas.xmlsoap.org/ws/2004/09/transfer/PutResponse")] @@ -1221,40 +1091,49 @@ public interface Resource [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.dmtf.org/wbem/wsman/1/wsman/fault", Name = "SchemaValidationError", Namespace = "http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.xmlsoap.org/ws/2004/08/addressing/fault", Name = "EndpointUnavailable", Namespace = "http://schemas.xmlsoap.org/ws/2004/08/addressing")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess/fault", Name = "UnwillingToPerform", Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] - [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] System.ServiceModel.Channels.Message Delete(System.ServiceModel.Channels.Message request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete", ReplyAction = "http://schemas.xmlsoap.org/ws/2004/09/transfer/DeleteResponse")] System.Threading.Tasks.Task DeleteAsync(System.ServiceModel.Channels.Message request); } - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] public interface ResourceChannel : ADWSProxy.ADWS.Resource, System.ServiceModel.IClientChannel { } [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] public partial class ResourceClient : System.ServiceModel.ClientBase, ADWSProxy.ADWS.Resource { - public ResourceClient() - { - } + /// + /// Implement this partial method to configure the service endpoint. + /// + /// The endpoint to configure + /// The client credentials + static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials); - public ResourceClient(string endpointConfigurationName) : - base(endpointConfigurationName) + public ResourceClient(EndpointConfiguration endpointConfiguration) : + base(ResourceClient.GetBindingForEndpoint(endpointConfiguration), ResourceClient.GetEndpointAddress(endpointConfiguration)) { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } - public ResourceClient(string endpointConfigurationName, string remoteAddress) : - base(endpointConfigurationName, remoteAddress) + public ResourceClient(EndpointConfiguration endpointConfiguration, string remoteAddress) : + base(ResourceClient.GetBindingForEndpoint(endpointConfiguration), new System.ServiceModel.EndpointAddress(remoteAddress)) { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } - public ResourceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : - base(endpointConfigurationName, remoteAddress) + public ResourceClient(EndpointConfiguration endpointConfiguration, System.ServiceModel.EndpointAddress remoteAddress) : + base(ResourceClient.GetBindingForEndpoint(endpointConfiguration), remoteAddress) { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } public ResourceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : @@ -1291,10 +1170,66 @@ public System.ServiceModel.Channels.Message Delete(System.ServiceModel.Channels. { return base.Channel.DeleteAsync(request); } + + public virtual System.Threading.Tasks.Task OpenAsync() + { + return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(null, null), new System.Action(((System.ServiceModel.ICommunicationObject)(this)).EndOpen)); + } + +#if !NET6_0_OR_GREATER + public virtual System.Threading.Tasks.Task CloseAsync() + { + return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginClose(null, null), new System.Action(((System.ServiceModel.ICommunicationObject)(this)).EndClose)); + } +#endif + + private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration) + { + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_Resource)) + { + System.ServiceModel.NetTcpBinding result = new System.ServiceModel.NetTcpBinding(); + result.MaxBufferSize = int.MaxValue; + result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max; + result.MaxReceivedMessageSize = int.MaxValue; + return result; + } + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_Resource1)) + { + System.ServiceModel.NetTcpBinding result = new System.ServiceModel.NetTcpBinding(); + result.MaxBufferSize = int.MaxValue; + result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max; + result.MaxReceivedMessageSize = int.MaxValue; + result.Security.Mode = System.ServiceModel.SecurityMode.TransportWithMessageCredential; + result.Security.Message.ClientCredentialType = System.ServiceModel.MessageCredentialType.UserName; + return result; + } + throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); + } + + private static System.ServiceModel.EndpointAddress GetEndpointAddress(EndpointConfiguration endpointConfiguration) + { + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_Resource)) + { + return new System.ServiceModel.EndpointAddress("net.tcp://localhost:9389/ActiveDirectoryWebServices/Windows/Resource"); + } + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_Resource1)) + { + return new System.ServiceModel.EndpointAddress(new System.Uri("net.tcp://localhost:9389/ActiveDirectoryWebServices/UserName/Resource"), new System.ServiceModel.DnsEndpointIdentity("DC01.kolen.xyz")); + } + throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); + } + + public enum EndpointConfiguration + { + + NetTcpBinding_Resource, + + NetTcpBinding_Resource1, + } } - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ServiceModel.ServiceContractAttribute(Namespace = "http://schemas.xmlsoap.org/ws/2004/09/transfer", ConfigurationName = "ADWSProxy.ADWS.ResourceFactory", SessionMode = System.ServiceModel.SessionMode.Required)] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace = "http://schemas.xmlsoap.org/ws/2004/09/transfer", ConfigurationName = "ADWSProxy.ADWS.ResourceFactory")] public interface ResourceFactory { @@ -1310,40 +1245,49 @@ public interface ResourceFactory [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.dmtf.org/wbem/wsman/1/wsman/fault", Name = "AlreadyExists", Namespace = "http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.dmtf.org/wbem/wsman/1/wsman/fault", Name = "AccessDenied", Namespace = "http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess/fault", Name = "UnwillingToPerform", Namespace = "http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess")] - [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] System.ServiceModel.Channels.Message Create(System.ServiceModel.Channels.Message request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.xmlsoap.org/ws/2004/09/transfer/Create", ReplyAction = "http://schemas.xmlsoap.org/ws/2004/09/transfer/CreateResponse")] System.Threading.Tasks.Task CreateAsync(System.ServiceModel.Channels.Message request); } - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] public interface ResourceFactoryChannel : ADWSProxy.ADWS.ResourceFactory, System.ServiceModel.IClientChannel { } [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] public partial class ResourceFactoryClient : System.ServiceModel.ClientBase, ADWSProxy.ADWS.ResourceFactory { - public ResourceFactoryClient() - { - } + /// + /// Implement this partial method to configure the service endpoint. + /// + /// The endpoint to configure + /// The client credentials + static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials); - public ResourceFactoryClient(string endpointConfigurationName) : - base(endpointConfigurationName) + public ResourceFactoryClient(EndpointConfiguration endpointConfiguration) : + base(ResourceFactoryClient.GetBindingForEndpoint(endpointConfiguration), ResourceFactoryClient.GetEndpointAddress(endpointConfiguration)) { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } - public ResourceFactoryClient(string endpointConfigurationName, string remoteAddress) : - base(endpointConfigurationName, remoteAddress) + public ResourceFactoryClient(EndpointConfiguration endpointConfiguration, string remoteAddress) : + base(ResourceFactoryClient.GetBindingForEndpoint(endpointConfiguration), new System.ServiceModel.EndpointAddress(remoteAddress)) { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } - public ResourceFactoryClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : - base(endpointConfigurationName, remoteAddress) + public ResourceFactoryClient(EndpointConfiguration endpointConfiguration, System.ServiceModel.EndpointAddress remoteAddress) : + base(ResourceFactoryClient.GetBindingForEndpoint(endpointConfiguration), remoteAddress) { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } public ResourceFactoryClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : @@ -1360,10 +1304,66 @@ public System.ServiceModel.Channels.Message Create(System.ServiceModel.Channels. { return base.Channel.CreateAsync(request); } + + public virtual System.Threading.Tasks.Task OpenAsync() + { + return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(null, null), new System.Action(((System.ServiceModel.ICommunicationObject)(this)).EndOpen)); + } + +#if !NET6_0_OR_GREATER + public virtual System.Threading.Tasks.Task CloseAsync() + { + return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginClose(null, null), new System.Action(((System.ServiceModel.ICommunicationObject)(this)).EndClose)); + } +#endif + + private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration) + { + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_ResourceFactory)) + { + System.ServiceModel.NetTcpBinding result = new System.ServiceModel.NetTcpBinding(); + result.MaxBufferSize = int.MaxValue; + result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max; + result.MaxReceivedMessageSize = int.MaxValue; + return result; + } + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_ResourceFactory1)) + { + System.ServiceModel.NetTcpBinding result = new System.ServiceModel.NetTcpBinding(); + result.MaxBufferSize = int.MaxValue; + result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max; + result.MaxReceivedMessageSize = int.MaxValue; + result.Security.Mode = System.ServiceModel.SecurityMode.TransportWithMessageCredential; + result.Security.Message.ClientCredentialType = System.ServiceModel.MessageCredentialType.UserName; + return result; + } + throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); + } + + private static System.ServiceModel.EndpointAddress GetEndpointAddress(EndpointConfiguration endpointConfiguration) + { + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_ResourceFactory)) + { + return new System.ServiceModel.EndpointAddress("net.tcp://localhost:9389/ActiveDirectoryWebServices/Windows/ResourceFactory"); + } + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_ResourceFactory1)) + { + return new System.ServiceModel.EndpointAddress(new System.Uri("net.tcp://localhost:9389/ActiveDirectoryWebServices/UserName/ResourceFactory"), new System.ServiceModel.DnsEndpointIdentity("DC01.kolen.xyz")); + } + throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); + } + + public enum EndpointConfiguration + { + + NetTcpBinding_ResourceFactory, + + NetTcpBinding_ResourceFactory1, + } } - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ServiceModel.ServiceContractAttribute(Namespace = "http://schemas.xmlsoap.org/ws/2004/09/enumeration", ConfigurationName = "ADWSProxy.ADWS.Search", SessionMode = System.ServiceModel.SessionMode.Required)] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace = "http://schemas.xmlsoap.org/ws/2004/09/enumeration", ConfigurationName = "ADWSProxy.ADWS.Search")] public interface Search { @@ -1377,7 +1377,7 @@ public interface Search [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.EnumerateFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "EnumerationContextLimitExceeded", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.SupportedSelectOrSortDialect), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "UnsupportedSelectOrSortDialectFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.EnumerateFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "InvalidPropertyFault", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] - [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] System.ServiceModel.Channels.Message Enumerate(System.ServiceModel.Channels.Message request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/Enumerate", ReplyAction = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/EnumerateResponse")] @@ -1390,7 +1390,7 @@ public interface Search [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.PullFault), Action = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/fault", Name = "TimedOut")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.PullFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "MaxCharsNotSupported", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.PullFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "MaxTimeExceedsLimit", Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory")] - [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] System.ServiceModel.Channels.Message Pull(System.ServiceModel.Channels.Message request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/Pull", ReplyAction = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/PullResponse")] @@ -1400,7 +1400,7 @@ public interface Search [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.xmlsoap.org/ws/2004/08/addressing/fault", Name = "EndpointUnavailable", Namespace = "http://schemas.xmlsoap.org/ws/2004/08/addressing")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/fault", Name = "InvalidEnumerationContext")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.RenewFault), Action = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/fault", Name = "UnableToRenew")] - [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] System.ServiceModel.Channels.Message Renew(System.ServiceModel.Channels.Message request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/Renew", ReplyAction = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/RenewResponse")] @@ -1409,7 +1409,7 @@ public interface Search [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/GetStatus", ReplyAction = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/GetStatusResponse")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.xmlsoap.org/ws/2004/08/addressing/fault", Name = "EndpointUnavailable", Namespace = "http://schemas.xmlsoap.org/ws/2004/08/addressing")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/fault", Name = "InvalidEnumerationContext")] - [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] System.ServiceModel.Channels.Message GetStatus(System.ServiceModel.Channels.Message request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/GetStatus", ReplyAction = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/GetStatusResponse")] @@ -1417,40 +1417,49 @@ public interface Search [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/Release", ReplyAction = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/ReleaseResponse")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.FaultDetail), Action = "http://schemas.xmlsoap.org/ws/2004/08/addressing/fault", Name = "EndpointUnavailable", Namespace = "http://schemas.xmlsoap.org/ws/2004/08/addressing")] - [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] System.ServiceModel.Channels.Message Release(System.ServiceModel.Channels.Message request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/Release", ReplyAction = "http://schemas.xmlsoap.org/ws/2004/09/enumeration/ReleaseResponse")] System.Threading.Tasks.Task ReleaseAsync(System.ServiceModel.Channels.Message request); } - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] public interface SearchChannel : ADWSProxy.ADWS.Search, System.ServiceModel.IClientChannel { } [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] public partial class SearchClient : System.ServiceModel.ClientBase, ADWSProxy.ADWS.Search { - public SearchClient() - { - } + /// + /// Implement this partial method to configure the service endpoint. + /// + /// The endpoint to configure + /// The client credentials + static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials); - public SearchClient(string endpointConfigurationName) : - base(endpointConfigurationName) + public SearchClient(EndpointConfiguration endpointConfiguration) : + base(SearchClient.GetBindingForEndpoint(endpointConfiguration), SearchClient.GetEndpointAddress(endpointConfiguration)) { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } - public SearchClient(string endpointConfigurationName, string remoteAddress) : - base(endpointConfigurationName, remoteAddress) + public SearchClient(EndpointConfiguration endpointConfiguration, string remoteAddress) : + base(SearchClient.GetBindingForEndpoint(endpointConfiguration), new System.ServiceModel.EndpointAddress(remoteAddress)) { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } - public SearchClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : - base(endpointConfigurationName, remoteAddress) + public SearchClient(EndpointConfiguration endpointConfiguration, System.ServiceModel.EndpointAddress remoteAddress) : + base(SearchClient.GetBindingForEndpoint(endpointConfiguration), remoteAddress) { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } public SearchClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : @@ -1507,10 +1516,66 @@ public System.ServiceModel.Channels.Message Release(System.ServiceModel.Channels { return base.Channel.ReleaseAsync(request); } + + public virtual System.Threading.Tasks.Task OpenAsync() + { + return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(null, null), new System.Action(((System.ServiceModel.ICommunicationObject)(this)).EndOpen)); + } + +#if !NET6_0_OR_GREATER + public virtual System.Threading.Tasks.Task CloseAsync() + { + return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginClose(null, null), new System.Action(((System.ServiceModel.ICommunicationObject)(this)).EndClose)); + } +#endif + + private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration) + { + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_Search)) + { + System.ServiceModel.NetTcpBinding result = new System.ServiceModel.NetTcpBinding(); + result.MaxBufferSize = int.MaxValue; + result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max; + result.MaxReceivedMessageSize = int.MaxValue; + return result; + } + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_Search1)) + { + System.ServiceModel.NetTcpBinding result = new System.ServiceModel.NetTcpBinding(); + result.MaxBufferSize = int.MaxValue; + result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max; + result.MaxReceivedMessageSize = int.MaxValue; + result.Security.Mode = System.ServiceModel.SecurityMode.TransportWithMessageCredential; + result.Security.Message.ClientCredentialType = System.ServiceModel.MessageCredentialType.UserName; + return result; + } + throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); + } + + private static System.ServiceModel.EndpointAddress GetEndpointAddress(EndpointConfiguration endpointConfiguration) + { + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_Search)) + { + return new System.ServiceModel.EndpointAddress("net.tcp://localhost:9389/ActiveDirectoryWebServices/Windows/Enumeration"); + } + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_Search1)) + { + return new System.ServiceModel.EndpointAddress(new System.Uri("net.tcp://localhost:9389/ActiveDirectoryWebServices/UserName/Enumeration"), new System.ServiceModel.DnsEndpointIdentity("DC01.kolen.xyz")); + } + throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); + } + + public enum EndpointConfiguration + { + + NetTcpBinding_Search, + + NetTcpBinding_Search1, + } } - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ServiceModel.ServiceContractAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", ConfigurationName = "ADWSProxy.ADWS.AccountManagement", SessionMode = System.ServiceModel.SessionMode.Required)] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", ConfigurationName = "ADWSProxy.ADWS.AccountManagement")] public interface AccountManagement { @@ -1519,9 +1584,7 @@ public interface AccountManagement "nt/GetADGroupMember", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/AccountManageme" + "nt/GetADGroupMemberResponse")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.GetADGroupMemberFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "GetADGroupMemberFault")] - [System.ServiceModel.XmlSerializerFormatAttribute()] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryDirectoryServer))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryObject))] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] ADWSProxy.ADWS.GetADGroupMemberResponse GetADGroupMember(ADWSProxy.ADWS.GetADGroupMemberRequest request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/AccountManageme" + @@ -1534,9 +1597,7 @@ public interface AccountManagement "nt/GetADPrincipalGroupMembership", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/AccountManageme" + "nt/GetADPrincipalGroupMembershipResponse")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.GetADPrincipalGroupMembershipFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "GetADPrincipalGroupMembershipFault")] - [System.ServiceModel.XmlSerializerFormatAttribute()] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryDirectoryServer))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryObject))] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] ADWSProxy.ADWS.GetADPrincipalGroupMembershipResponse GetADPrincipalGroupMembership(ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/AccountManageme" + @@ -1549,9 +1610,7 @@ public interface AccountManagement "nt/SetPassword", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/AccountManageme" + "nt/SetPasswordResponse")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.SetPasswordFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "SetPasswordFault")] - [System.ServiceModel.XmlSerializerFormatAttribute()] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryDirectoryServer))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryObject))] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] ADWSProxy.ADWS.SetPasswordResponse SetPassword(ADWSProxy.ADWS.SetPasswordRequest request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/AccountManageme" + @@ -1564,9 +1623,7 @@ public interface AccountManagement "nt/ChangePassword", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/AccountManageme" + "nt/ChangePasswordResponse")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.ChangePasswordFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "ChangePasswordFault")] - [System.ServiceModel.XmlSerializerFormatAttribute()] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryDirectoryServer))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryObject))] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] ADWSProxy.ADWS.ChangePasswordResponse ChangePassword(ADWSProxy.ADWS.ChangePasswordRequest request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/AccountManageme" + @@ -1579,9 +1636,7 @@ public interface AccountManagement "nt/GetADPrincipalAuthorizationGroup", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/AccountManageme" + "nt/GetADPrincipalAuthorizationGroupResponse")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "GetADPrincipalAuthorizationGroupFault")] - [System.ServiceModel.XmlSerializerFormatAttribute()] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryDirectoryServer))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryObject))] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupResponse GetADPrincipalAuthorizationGroup(ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/AccountManageme" + @@ -1594,9 +1649,7 @@ public interface AccountManagement "nt/TranslateName", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/AccountManageme" + "nt/TranslateNameResponse")] [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.TranslateNameFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "TranslateNameFault")] - [System.ServiceModel.XmlSerializerFormatAttribute()] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryDirectoryServer))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryObject))] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] ADWSProxy.ADWS.TranslateNameResponse TranslateName(ADWSProxy.ADWS.TranslateNameRequest request); [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/AccountManageme" + @@ -1607,10 +1660,8 @@ public interface AccountManagement /// [System.Xml.Serialization.XmlIncludeAttribute(typeof(ActiveDirectoryGroup))] - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] public partial class ActiveDirectoryPrincipal : ActiveDirectoryObject { @@ -1653,10 +1704,8 @@ public string SamAccountName [System.Xml.Serialization.XmlIncludeAttribute(typeof(ActiveDirectoryDomain))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ActiveDirectoryPrincipal))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ActiveDirectoryGroup))] - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] public partial class ActiveDirectoryObject { @@ -1760,1834 +1809,1752 @@ public string ReferenceServer } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(ActiveDirectoryDomain))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class ActiveDirectoryForest + public partial class ActiveDirectoryPartition : ActiveDirectoryObject { - private string[] applicationPartitionsField; - - private string[] crossForestReferencesField; - - private string domainNamingMasterField; - - private string[] domainsField; - - private int forestModeField; - - private string[] globalCatalogsField; + private string dNSRootField; - private string nameField; + private string deletedObjectsContainerField; - private string rootDomainField; + private string lostAndFoundContainerField; - private string[] sPNSuffixesField; + private string quotasContainerField; - private string schemaMasterField; + private string[] readOnlyReplicaDirectoryServerField; - private string[] sitesField; + private string[] replicaDirectoryServerField; - private string[] uPNSuffixesField; + private string[] subordinateReferencesField; /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 0)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] ApplicationPartitions + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0)] + public string DNSRoot { get { - return this.applicationPartitionsField; + return this.dNSRootField; } set { - this.applicationPartitionsField = value; + this.dNSRootField = value; } } /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 1)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] CrossForestReferences + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 1)] + public string DeletedObjectsContainer { get { - return this.crossForestReferencesField; + return this.deletedObjectsContainerField; } set { - this.crossForestReferencesField = value; + this.deletedObjectsContainerField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 2)] - public string DomainNamingMaster + public string LostAndFoundContainer { get { - return this.domainNamingMasterField; + return this.lostAndFoundContainerField; } set { - this.domainNamingMasterField = value; + this.lostAndFoundContainerField = value; } } /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 3)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] Domains + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 3)] + public string QuotasContainer { get { - return this.domainsField; + return this.quotasContainerField; } set { - this.domainsField = value; + this.quotasContainerField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(Order = 4)] - public int ForestMode + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 4)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] ReadOnlyReplicaDirectoryServer { get { - return this.forestModeField; + return this.readOnlyReplicaDirectoryServerField; } set { - this.forestModeField = value; + this.readOnlyReplicaDirectoryServerField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 5)] [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] GlobalCatalogs + public string[] ReplicaDirectoryServer { get { - return this.globalCatalogsField; + return this.replicaDirectoryServerField; } set { - this.globalCatalogsField = value; + this.replicaDirectoryServerField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 6)] - public string Name + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 6)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] SubordinateReferences { get { - return this.nameField; + return this.subordinateReferencesField; } set { - this.nameField = value; + this.subordinateReferencesField = value; } } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class ActiveDirectoryDomain : ActiveDirectoryPartition + { + + private string[] allowedDNSSuffixesField; + + private string[] appliedGroupPoliciesField; + + private string[] childDomainsField; + + private string computersContainerField; + + private string domainControllersContainerField; + + private int domainModeField; + + private byte[] domainSIDField; + + private string foreignSecurityPrincipalsContainerField; + + private string forestField; + + private string infrastructureMasterField; + + private string lastLogonReplicationIntervalField; + + private string managedByField; + + private string netBIOSNameField; + + private string pDCEmulatorField; + + private string parentDomainField; + + private string rIDMasterField; + + private string systemsContainerField; + + private string usersContainerField; /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 7)] - public string RootDomain + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 0)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] AllowedDNSSuffixes { get { - return this.rootDomainField; + return this.allowedDNSSuffixesField; } set { - this.rootDomainField = value; + this.allowedDNSSuffixesField = value; } } /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 8)] + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 1)] [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] SPNSuffixes + public string[] AppliedGroupPolicies { get { - return this.sPNSuffixesField; + return this.appliedGroupPoliciesField; } set { - this.sPNSuffixesField = value; + this.appliedGroupPoliciesField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 9)] - public string SchemaMaster + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 2)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] ChildDomains { get { - return this.schemaMasterField; + return this.childDomainsField; } set { - this.schemaMasterField = value; + this.childDomainsField = value; } } /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 10)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] Sites + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 3)] + public string ComputersContainer { get { - return this.sitesField; + return this.computersContainerField; } set { - this.sitesField = value; + this.computersContainerField = value; } } /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 11)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] UPNSuffixes + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 4)] + public string DomainControllersContainer { get { - return this.uPNSuffixesField; + return this.domainControllersContainerField; } set { - this.uPNSuffixesField = value; + this.domainControllersContainerField = value; } } - } - - /// - [System.Xml.Serialization.XmlIncludeAttribute(typeof(ActiveDirectoryDomainController))] - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class ActiveDirectoryDirectoryServer - { - - private string defaultPartitionField; - - private string hostNameField; - - private string invocationIdField; - - private int ldapPortField; - - private string nTDSSettingsObjectDNField; - - private string nameField; - - private ActiveDirectoryOperationMasterRole[] operationMasterRoleField; - - private string[] partitionsField; - - private string serverObjectDNField; - - private string serverObjectGuidField; - - private string siteField; - - private int sslPortField; /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0)] - public string DefaultPartition + [System.Xml.Serialization.XmlElementAttribute(Order = 5)] + public int DomainMode { get { - return this.defaultPartitionField; + return this.domainModeField; } set { - this.defaultPartitionField = value; + this.domainModeField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 1)] - public string HostName + [System.Xml.Serialization.XmlElementAttribute(DataType = "base64Binary", IsNullable = true, Order = 6)] + public byte[] DomainSID { get { - return this.hostNameField; + return this.domainSIDField; } set { - this.hostNameField = value; + this.domainSIDField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(Order = 2)] - public string InvocationId + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 7)] + public string ForeignSecurityPrincipalsContainer { get { - return this.invocationIdField; + return this.foreignSecurityPrincipalsContainerField; } set { - this.invocationIdField = value; + this.foreignSecurityPrincipalsContainerField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(Order = 3)] - public int LdapPort + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 8)] + public string Forest { get { - return this.ldapPortField; + return this.forestField; } set { - this.ldapPortField = value; + this.forestField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 4)] - public string NTDSSettingsObjectDN + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 9)] + public string InfrastructureMaster { get { - return this.nTDSSettingsObjectDNField; + return this.infrastructureMasterField; } set { - this.nTDSSettingsObjectDNField = value; + this.infrastructureMasterField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 5)] - public string Name + [System.Xml.Serialization.XmlElementAttribute(DataType = "duration", IsNullable = true, Order = 10)] + public string LastLogonReplicationInterval { get { - return this.nameField; + return this.lastLogonReplicationIntervalField; } set { - this.nameField = value; + this.lastLogonReplicationIntervalField = value; } } /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 6)] - public ActiveDirectoryOperationMasterRole[] OperationMasterRole + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 11)] + public string ManagedBy { get { - return this.operationMasterRoleField; + return this.managedByField; } set { - this.operationMasterRoleField = value; + this.managedByField = value; } } /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 7)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] Partitions + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 12)] + public string NetBIOSName { get { - return this.partitionsField; + return this.netBIOSNameField; } set { - this.partitionsField = value; + this.netBIOSNameField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 8)] - public string ServerObjectDN + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 13)] + public string PDCEmulator { get { - return this.serverObjectDNField; + return this.pDCEmulatorField; } set { - this.serverObjectDNField = value; + this.pDCEmulatorField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(Order = 9)] - public string ServerObjectGuid + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 14)] + public string ParentDomain { get { - return this.serverObjectGuidField; + return this.parentDomainField; } set { - this.serverObjectGuidField = value; + this.parentDomainField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 10)] - public string Site + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 15)] + public string RIDMaster { get { - return this.siteField; + return this.rIDMasterField; } set { - this.siteField = value; + this.rIDMasterField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(Order = 11)] - public int SslPort + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 16)] + public string SystemsContainer { get { - return this.sslPortField; + return this.systemsContainerField; } set { - this.sslPortField = value; + this.systemsContainerField = value; } } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public enum ActiveDirectoryOperationMasterRole - { - - /// - PDCEmulator, - - /// - RIDMaster, - - /// - InfrastructureMaster, - - /// - SchemaMaster, /// - DomainNamingMaster, + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 17)] + public string UsersContainer + { + get + { + return this.usersContainerField; + } + set + { + this.usersContainerField = value; + } + } } /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class ActiveDirectoryDomainController : ActiveDirectoryDirectoryServer + public partial class ActiveDirectoryGroup : ActiveDirectoryPrincipal { - private string computerDNField; - - private string domainField; - - private bool enabledField; - - private string forestField; - - private bool isGlobalCatalogField; - - private bool isReadOnlyField; - - private string oSHotFixField; - - private string oSNameField; - - private string oSServicepackField; + private ActiveDirectoryGroupScope groupScopeField; - private string oSVersionField; + private ActiveDirectoryGroupType groupTypeField; /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0)] - public string ComputerDN + [System.Xml.Serialization.XmlElementAttribute(Order = 0)] + public ActiveDirectoryGroupScope GroupScope { get { - return this.computerDNField; + return this.groupScopeField; } set { - this.computerDNField = value; + this.groupScopeField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 1)] - public string Domain + [System.Xml.Serialization.XmlElementAttribute(Order = 1)] + public ActiveDirectoryGroupType GroupType { get { - return this.domainField; + return this.groupTypeField; } set { - this.domainField = value; + this.groupTypeField = value; } } + } - /// - [System.Xml.Serialization.XmlElementAttribute(Order = 2)] - public bool Enabled - { - get - { - return this.enabledField; - } - set - { - this.enabledField = value; - } - } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public enum ActiveDirectoryGroupScope + { /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 3)] - public string Forest - { - get - { - return this.forestField; - } - set - { - this.forestField = value; - } - } + Unknown, /// - [System.Xml.Serialization.XmlElementAttribute(Order = 4)] - public bool IsGlobalCatalog - { - get - { - return this.isGlobalCatalogField; - } - set - { - this.isGlobalCatalogField = value; - } - } + DomainLocal, /// - [System.Xml.Serialization.XmlElementAttribute(Order = 5)] - public bool IsReadOnly - { - get - { - return this.isReadOnlyField; - } - set - { - this.isReadOnlyField = value; - } - } + Global, /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 6)] - public string OSHotFix - { - get - { - return this.oSHotFixField; - } - set - { - this.oSHotFixField = value; - } - } + Universal, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public enum ActiveDirectoryGroupType + { /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 7)] - public string OSName - { - get - { - return this.oSNameField; - } - set - { - this.oSNameField = value; - } - } + Unknown, /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 8)] - public string OSServicepack - { - get - { - return this.oSServicepackField; - } - set - { - this.oSServicepackField = value; - } - } + Distribution, /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 9)] - public string OSVersion - { - get - { - return this.oSVersionField; - } - set - { - this.oSVersionField = value; - } - } + Security, } - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class ActiveDirectoryNameTranslateResult + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADGroupMemberRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class GetADGroupMemberRequest { - private string nameField; + [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string Server; - private uint resultField; + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string GroupDN; - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0)] - public string Name + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string PartitionDN; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 2)] + public bool Recursive; + + public GetADGroupMemberRequest() { - get - { - return this.nameField; - } - set - { - this.nameField = value; - } } - /// - [System.Xml.Serialization.XmlElementAttribute(Order = 1)] - public uint Result + public GetADGroupMemberRequest(string Server, string GroupDN, string PartitionDN, bool Recursive) { - get - { - return this.resultField; - } - set - { - this.resultField = value; - } + this.Server = Server; + this.GroupDN = GroupDN; + this.PartitionDN = PartitionDN; + this.Recursive = Recursive; } } - /// - [System.Xml.Serialization.XmlIncludeAttribute(typeof(ActiveDirectoryDomain))] - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class ActiveDirectoryPartition : ActiveDirectoryObject + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADGroupMemberResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class GetADGroupMemberResponse { - private string dNSRootField; + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] + public ADWSProxy.ADWS.ActiveDirectoryPrincipal[] Members; - private string deletedObjectsContainerField; + public GetADGroupMemberResponse() + { + } - private string lostAndFoundContainerField; + public GetADGroupMemberResponse(ADWSProxy.ADWS.ActiveDirectoryPrincipal[] Members) + { + this.Members = Members; + } + } - private string quotasContainerField; + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADPrincipalGroupMembershipRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class GetADPrincipalGroupMembershipRequest + { - private string[] readOnlyReplicaDirectoryServerField; + [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string Server; - private string[] replicaDirectoryServerField; + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string PartitionDN; - private string[] subordinateReferencesField; + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string PrincipalDN; - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0)] - public string DNSRoot + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 2)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string ResourceContextPartition; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 3)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string ResourceContextServer; + + public GetADPrincipalGroupMembershipRequest() { - get - { - return this.dNSRootField; - } - set - { - this.dNSRootField = value; - } } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 1)] - public string DeletedObjectsContainer + public GetADPrincipalGroupMembershipRequest(string Server, string PartitionDN, string PrincipalDN, string ResourceContextPartition, string ResourceContextServer) { - get - { - return this.deletedObjectsContainerField; - } - set - { - this.deletedObjectsContainerField = value; - } + this.Server = Server; + this.PartitionDN = PartitionDN; + this.PrincipalDN = PrincipalDN; + this.ResourceContextPartition = ResourceContextPartition; + this.ResourceContextServer = ResourceContextServer; } + } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 2)] - public string LostAndFoundContainer + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADPrincipalGroupMembershipResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class GetADPrincipalGroupMembershipResponse + { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] + public ADWSProxy.ADWS.ActiveDirectoryGroup[] MemberOf; + + public GetADPrincipalGroupMembershipResponse() { - get - { - return this.lostAndFoundContainerField; - } - set - { - this.lostAndFoundContainerField = value; - } } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 3)] - public string QuotasContainer + public GetADPrincipalGroupMembershipResponse(ADWSProxy.ADWS.ActiveDirectoryGroup[] MemberOf) { - get - { - return this.quotasContainerField; - } - set - { - this.quotasContainerField = value; - } + this.MemberOf = MemberOf; } + } - /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 4)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] ReadOnlyReplicaDirectoryServer + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "SetPasswordRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class SetPasswordRequest + { + + [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string Server; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string AccountDN; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string NewPassword; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 2)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string PartitionDN; + + public SetPasswordRequest() { - get - { - return this.readOnlyReplicaDirectoryServerField; - } - set - { - this.readOnlyReplicaDirectoryServerField = value; - } } - /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 5)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] ReplicaDirectoryServer + public SetPasswordRequest(string Server, string AccountDN, string NewPassword, string PartitionDN) { - get - { - return this.replicaDirectoryServerField; - } - set - { - this.replicaDirectoryServerField = value; - } + this.Server = Server; + this.AccountDN = AccountDN; + this.NewPassword = NewPassword; + this.PartitionDN = PartitionDN; } + } - /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 6)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] SubordinateReferences + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "SetPasswordResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class SetPasswordResponse + { + + public SetPasswordResponse() { - get - { - return this.subordinateReferencesField; - } - set - { - this.subordinateReferencesField = value; - } } } - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class ActiveDirectoryDomain : ActiveDirectoryPartition + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "ChangePasswordRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class ChangePasswordRequest { - private string[] allowedDNSSuffixesField; - - private string[] appliedGroupPoliciesField; + [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string Server; - private string[] childDomainsField; + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string AccountDN; - private string computersContainerField; + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string NewPassword; - private string domainControllersContainerField; + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 2)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string OldPassword; - private int domainModeField; + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 3)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string PartitionDN; - private byte[] domainSIDField; + public ChangePasswordRequest() + { + } - private string foreignSecurityPrincipalsContainerField; + public ChangePasswordRequest(string Server, string AccountDN, string NewPassword, string OldPassword, string PartitionDN) + { + this.Server = Server; + this.AccountDN = AccountDN; + this.NewPassword = NewPassword; + this.OldPassword = OldPassword; + this.PartitionDN = PartitionDN; + } + } - private string forestField; + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "ChangePasswordResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class ChangePasswordResponse + { - private string infrastructureMasterField; + public ChangePasswordResponse() + { + } + } - private string lastLogonReplicationIntervalField; + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADPrincipalAuthorizationGroupRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class GetADPrincipalAuthorizationGroupRequest + { - private string managedByField; + [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string Server; - private string netBIOSNameField; + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string PartitionDN; - private string pDCEmulatorField; + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string PrincipalDN; - private string parentDomainField; + public GetADPrincipalAuthorizationGroupRequest() + { + } - private string rIDMasterField; + public GetADPrincipalAuthorizationGroupRequest(string Server, string PartitionDN, string PrincipalDN) + { + this.Server = Server; + this.PartitionDN = PartitionDN; + this.PrincipalDN = PrincipalDN; + } + } - private string systemsContainerField; + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADPrincipalAuthorizationGroupResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class GetADPrincipalAuthorizationGroupResponse + { - private string usersContainerField; + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] + public ADWSProxy.ADWS.ActiveDirectoryGroup[] MemberOf; - /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 0)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] AllowedDNSSuffixes + public GetADPrincipalAuthorizationGroupResponse() { - get - { - return this.allowedDNSSuffixesField; - } - set - { - this.allowedDNSSuffixesField = value; - } } - /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 1)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] AppliedGroupPolicies + public GetADPrincipalAuthorizationGroupResponse(ADWSProxy.ADWS.ActiveDirectoryGroup[] MemberOf) { - get - { - return this.appliedGroupPoliciesField; - } - set - { - this.appliedGroupPoliciesField = value; - } + this.MemberOf = MemberOf; } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public enum ActiveDirectoryNameFormat + { /// - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 2)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] ChildDomains - { - get - { - return this.childDomainsField; - } - set - { - this.childDomainsField = value; - } - } + DistinguishedName, /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 3)] - public string ComputersContainer - { - get - { - return this.computersContainerField; - } - set - { - this.computersContainerField = value; - } - } + CanonicalName, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class ActiveDirectoryNameTranslateResult + { + + private string nameField; + + private uint resultField; /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 4)] - public string DomainControllersContainer + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0)] + public string Name { get { - return this.domainControllersContainerField; + return this.nameField; } set { - this.domainControllersContainerField = value; + this.nameField = value; } } /// - [System.Xml.Serialization.XmlElementAttribute(Order = 5)] - public int DomainMode + [System.Xml.Serialization.XmlElementAttribute(Order = 1)] + public uint Result { get { - return this.domainModeField; + return this.resultField; } set { - this.domainModeField = value; + this.resultField = value; } } + } - /// - [System.Xml.Serialization.XmlElementAttribute(DataType = "base64Binary", IsNullable = true, Order = 6)] - public byte[] DomainSID + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "TranslateNameRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class TranslateNameRequest + { + + [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string Server; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + public ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatDesired; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] + public ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatOffered; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 2)] + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] Names; + + public TranslateNameRequest() { - get - { - return this.domainSIDField; - } - set - { - this.domainSIDField = value; - } } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 7)] - public string ForeignSecurityPrincipalsContainer + public TranslateNameRequest(string Server, ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatDesired, ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatOffered, string[] Names) { - get - { - return this.foreignSecurityPrincipalsContainerField; - } - set - { - this.foreignSecurityPrincipalsContainerField = value; - } + this.Server = Server; + this.FormatDesired = FormatDesired; + this.FormatOffered = FormatOffered; + this.Names = Names; } + } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 8)] - public string Forest + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "TranslateNameResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class TranslateNameResponse + { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] + public ADWSProxy.ADWS.ActiveDirectoryNameTranslateResult[] NameTranslateResult; + + public TranslateNameResponse() { - get - { - return this.forestField; - } - set - { - this.forestField = value; - } } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 9)] - public string InfrastructureMaster + public TranslateNameResponse(ADWSProxy.ADWS.ActiveDirectoryNameTranslateResult[] NameTranslateResult) { - get - { - return this.infrastructureMasterField; - } - set - { - this.infrastructureMasterField = value; - } + this.NameTranslateResult = NameTranslateResult; } + } - /// - [System.Xml.Serialization.XmlElementAttribute(DataType = "duration", IsNullable = true, Order = 10)] - public string LastLogonReplicationInterval + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + public interface AccountManagementChannel : ADWSProxy.ADWS.AccountManagement, System.ServiceModel.IClientChannel + { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + public partial class AccountManagementClient : System.ServiceModel.ClientBase, ADWSProxy.ADWS.AccountManagement + { + + /// + /// Implement this partial method to configure the service endpoint. + /// + /// The endpoint to configure + /// The client credentials + static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials); + + public AccountManagementClient(EndpointConfiguration endpointConfiguration) : + base(AccountManagementClient.GetBindingForEndpoint(endpointConfiguration), AccountManagementClient.GetEndpointAddress(endpointConfiguration)) { - get - { - return this.lastLogonReplicationIntervalField; - } - set - { - this.lastLogonReplicationIntervalField = value; - } + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 11)] - public string ManagedBy + public AccountManagementClient(EndpointConfiguration endpointConfiguration, string remoteAddress) : + base(AccountManagementClient.GetBindingForEndpoint(endpointConfiguration), new System.ServiceModel.EndpointAddress(remoteAddress)) { - get - { - return this.managedByField; - } - set - { - this.managedByField = value; - } + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 12)] - public string NetBIOSName + public AccountManagementClient(EndpointConfiguration endpointConfiguration, System.ServiceModel.EndpointAddress remoteAddress) : + base(AccountManagementClient.GetBindingForEndpoint(endpointConfiguration), remoteAddress) { - get - { - return this.netBIOSNameField; - } - set - { - this.netBIOSNameField = value; - } + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 13)] - public string PDCEmulator + public AccountManagementClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : + base(binding, remoteAddress) { - get - { - return this.pDCEmulatorField; - } - set - { - this.pDCEmulatorField = value; - } } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 14)] - public string ParentDomain + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + ADWSProxy.ADWS.GetADGroupMemberResponse ADWSProxy.ADWS.AccountManagement.GetADGroupMember(ADWSProxy.ADWS.GetADGroupMemberRequest request) { - get - { - return this.parentDomainField; - } - set - { - this.parentDomainField = value; - } + return base.Channel.GetADGroupMember(request); } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 15)] - public string RIDMaster + public ADWSProxy.ADWS.ActiveDirectoryPrincipal[] GetADGroupMember(string Server, string GroupDN, string PartitionDN, bool Recursive) { - get - { - return this.rIDMasterField; - } - set - { - this.rIDMasterField = value; - } + ADWSProxy.ADWS.GetADGroupMemberRequest inValue = new ADWSProxy.ADWS.GetADGroupMemberRequest(); + inValue.Server = Server; + inValue.GroupDN = GroupDN; + inValue.PartitionDN = PartitionDN; + inValue.Recursive = Recursive; + ADWSProxy.ADWS.GetADGroupMemberResponse retVal = ((ADWSProxy.ADWS.AccountManagement)(this)).GetADGroupMember(inValue); + return retVal.Members; } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 16)] - public string SystemsContainer + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + System.Threading.Tasks.Task ADWSProxy.ADWS.AccountManagement.GetADGroupMemberAsync(ADWSProxy.ADWS.GetADGroupMemberRequest request) { - get - { - return this.systemsContainerField; - } - set - { - this.systemsContainerField = value; - } + return base.Channel.GetADGroupMemberAsync(request); } - /// - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 17)] - public string UsersContainer + public System.Threading.Tasks.Task GetADGroupMemberAsync(string Server, string GroupDN, string PartitionDN, bool Recursive) { - get - { - return this.usersContainerField; - } - set - { - this.usersContainerField = value; - } + ADWSProxy.ADWS.GetADGroupMemberRequest inValue = new ADWSProxy.ADWS.GetADGroupMemberRequest(); + inValue.Server = Server; + inValue.GroupDN = GroupDN; + inValue.PartitionDN = PartitionDN; + inValue.Recursive = Recursive; + return ((ADWSProxy.ADWS.AccountManagement)(this)).GetADGroupMemberAsync(inValue); } - } - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public partial class ActiveDirectoryGroup : ActiveDirectoryPrincipal - { - - private ActiveDirectoryGroupScope groupScopeField; - - private ActiveDirectoryGroupType groupTypeField; - - /// - [System.Xml.Serialization.XmlElementAttribute(Order = 0)] - public ActiveDirectoryGroupScope GroupScope + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + ADWSProxy.ADWS.GetADPrincipalGroupMembershipResponse ADWSProxy.ADWS.AccountManagement.GetADPrincipalGroupMembership(ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest request) { - get - { - return this.groupScopeField; - } - set - { - this.groupScopeField = value; - } + return base.Channel.GetADPrincipalGroupMembership(request); } - /// - [System.Xml.Serialization.XmlElementAttribute(Order = 1)] - public ActiveDirectoryGroupType GroupType + public ADWSProxy.ADWS.ActiveDirectoryGroup[] GetADPrincipalGroupMembership(string Server, string PartitionDN, string PrincipalDN, string ResourceContextPartition, string ResourceContextServer) { - get - { - return this.groupTypeField; - } - set - { - this.groupTypeField = value; - } + ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest inValue = new ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest(); + inValue.Server = Server; + inValue.PartitionDN = PartitionDN; + inValue.PrincipalDN = PrincipalDN; + inValue.ResourceContextPartition = ResourceContextPartition; + inValue.ResourceContextServer = ResourceContextServer; + ADWSProxy.ADWS.GetADPrincipalGroupMembershipResponse retVal = ((ADWSProxy.ADWS.AccountManagement)(this)).GetADPrincipalGroupMembership(inValue); + return retVal.MemberOf; } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public enum ActiveDirectoryGroupScope - { - - /// - Unknown, - - /// - DomainLocal, - - /// - Global, - - /// - Universal, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public enum ActiveDirectoryGroupType - { - - /// - Unknown, - - /// - Distribution, - - /// - Security, - } - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADGroupMemberRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class GetADGroupMemberRequest - { + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + System.Threading.Tasks.Task ADWSProxy.ADWS.AccountManagement.GetADPrincipalGroupMembershipAsync(ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest request) + { + return base.Channel.GetADPrincipalGroupMembershipAsync(request); + } - [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string Server; + public System.Threading.Tasks.Task GetADPrincipalGroupMembershipAsync(string Server, string PartitionDN, string PrincipalDN, string ResourceContextPartition, string ResourceContextServer) + { + ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest inValue = new ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest(); + inValue.Server = Server; + inValue.PartitionDN = PartitionDN; + inValue.PrincipalDN = PrincipalDN; + inValue.ResourceContextPartition = ResourceContextPartition; + inValue.ResourceContextServer = ResourceContextServer; + return ((ADWSProxy.ADWS.AccountManagement)(this)).GetADPrincipalGroupMembershipAsync(inValue); + } - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string GroupDN; + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + ADWSProxy.ADWS.SetPasswordResponse ADWSProxy.ADWS.AccountManagement.SetPassword(ADWSProxy.ADWS.SetPasswordRequest request) + { + return base.Channel.SetPassword(request); + } - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string PartitionDN; + public void SetPassword(string Server, string AccountDN, string NewPassword, string PartitionDN) + { + ADWSProxy.ADWS.SetPasswordRequest inValue = new ADWSProxy.ADWS.SetPasswordRequest(); + inValue.Server = Server; + inValue.AccountDN = AccountDN; + inValue.NewPassword = NewPassword; + inValue.PartitionDN = PartitionDN; + ADWSProxy.ADWS.SetPasswordResponse retVal = ((ADWSProxy.ADWS.AccountManagement)(this)).SetPassword(inValue); + } - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 2)] - public bool Recursive; + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + System.Threading.Tasks.Task ADWSProxy.ADWS.AccountManagement.SetPasswordAsync(ADWSProxy.ADWS.SetPasswordRequest request) + { + return base.Channel.SetPasswordAsync(request); + } - public GetADGroupMemberRequest() + public System.Threading.Tasks.Task SetPasswordAsync(string Server, string AccountDN, string NewPassword, string PartitionDN) { + ADWSProxy.ADWS.SetPasswordRequest inValue = new ADWSProxy.ADWS.SetPasswordRequest(); + inValue.Server = Server; + inValue.AccountDN = AccountDN; + inValue.NewPassword = NewPassword; + inValue.PartitionDN = PartitionDN; + return ((ADWSProxy.ADWS.AccountManagement)(this)).SetPasswordAsync(inValue); } - public GetADGroupMemberRequest(string Server, string GroupDN, string PartitionDN, bool Recursive) + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + ADWSProxy.ADWS.ChangePasswordResponse ADWSProxy.ADWS.AccountManagement.ChangePassword(ADWSProxy.ADWS.ChangePasswordRequest request) { - this.Server = Server; - this.GroupDN = GroupDN; - this.PartitionDN = PartitionDN; - this.Recursive = Recursive; + return base.Channel.ChangePassword(request); } - } - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADGroupMemberResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class GetADGroupMemberResponse - { + public void ChangePassword(string Server, string AccountDN, string NewPassword, string OldPassword, string PartitionDN) + { + ADWSProxy.ADWS.ChangePasswordRequest inValue = new ADWSProxy.ADWS.ChangePasswordRequest(); + inValue.Server = Server; + inValue.AccountDN = AccountDN; + inValue.NewPassword = NewPassword; + inValue.OldPassword = OldPassword; + inValue.PartitionDN = PartitionDN; + ADWSProxy.ADWS.ChangePasswordResponse retVal = ((ADWSProxy.ADWS.AccountManagement)(this)).ChangePassword(inValue); + } - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] - public ADWSProxy.ADWS.ActiveDirectoryPrincipal[] Members; + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + System.Threading.Tasks.Task ADWSProxy.ADWS.AccountManagement.ChangePasswordAsync(ADWSProxy.ADWS.ChangePasswordRequest request) + { + return base.Channel.ChangePasswordAsync(request); + } - public GetADGroupMemberResponse() + public System.Threading.Tasks.Task ChangePasswordAsync(string Server, string AccountDN, string NewPassword, string OldPassword, string PartitionDN) { + ADWSProxy.ADWS.ChangePasswordRequest inValue = new ADWSProxy.ADWS.ChangePasswordRequest(); + inValue.Server = Server; + inValue.AccountDN = AccountDN; + inValue.NewPassword = NewPassword; + inValue.OldPassword = OldPassword; + inValue.PartitionDN = PartitionDN; + return ((ADWSProxy.ADWS.AccountManagement)(this)).ChangePasswordAsync(inValue); } - public GetADGroupMemberResponse(ADWSProxy.ADWS.ActiveDirectoryPrincipal[] Members) + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupResponse ADWSProxy.ADWS.AccountManagement.GetADPrincipalAuthorizationGroup(ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest request) { - this.Members = Members; + return base.Channel.GetADPrincipalAuthorizationGroup(request); } - } - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADPrincipalGroupMembershipRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class GetADPrincipalGroupMembershipRequest - { + public ADWSProxy.ADWS.ActiveDirectoryGroup[] GetADPrincipalAuthorizationGroup(string Server, string PartitionDN, string PrincipalDN) + { + ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest inValue = new ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest(); + inValue.Server = Server; + inValue.PartitionDN = PartitionDN; + inValue.PrincipalDN = PrincipalDN; + ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupResponse retVal = ((ADWSProxy.ADWS.AccountManagement)(this)).GetADPrincipalAuthorizationGroup(inValue); + return retVal.MemberOf; + } - [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string Server; + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + System.Threading.Tasks.Task ADWSProxy.ADWS.AccountManagement.GetADPrincipalAuthorizationGroupAsync(ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest request) + { + return base.Channel.GetADPrincipalAuthorizationGroupAsync(request); + } - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string PartitionDN; + public System.Threading.Tasks.Task GetADPrincipalAuthorizationGroupAsync(string Server, string PartitionDN, string PrincipalDN) + { + ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest inValue = new ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest(); + inValue.Server = Server; + inValue.PartitionDN = PartitionDN; + inValue.PrincipalDN = PrincipalDN; + return ((ADWSProxy.ADWS.AccountManagement)(this)).GetADPrincipalAuthorizationGroupAsync(inValue); + } - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string PrincipalDN; + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + ADWSProxy.ADWS.TranslateNameResponse ADWSProxy.ADWS.AccountManagement.TranslateName(ADWSProxy.ADWS.TranslateNameRequest request) + { + return base.Channel.TranslateName(request); + } - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 2)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string ResourceContextPartition; + public ADWSProxy.ADWS.ActiveDirectoryNameTranslateResult[] TranslateName(string Server, ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatDesired, ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatOffered, string[] Names) + { + ADWSProxy.ADWS.TranslateNameRequest inValue = new ADWSProxy.ADWS.TranslateNameRequest(); + inValue.Server = Server; + inValue.FormatDesired = FormatDesired; + inValue.FormatOffered = FormatOffered; + inValue.Names = Names; + ADWSProxy.ADWS.TranslateNameResponse retVal = ((ADWSProxy.ADWS.AccountManagement)(this)).TranslateName(inValue); + return retVal.NameTranslateResult; + } - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 3)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string ResourceContextServer; + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + System.Threading.Tasks.Task ADWSProxy.ADWS.AccountManagement.TranslateNameAsync(ADWSProxy.ADWS.TranslateNameRequest request) + { + return base.Channel.TranslateNameAsync(request); + } - public GetADPrincipalGroupMembershipRequest() + public System.Threading.Tasks.Task TranslateNameAsync(string Server, ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatDesired, ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatOffered, string[] Names) { + ADWSProxy.ADWS.TranslateNameRequest inValue = new ADWSProxy.ADWS.TranslateNameRequest(); + inValue.Server = Server; + inValue.FormatDesired = FormatDesired; + inValue.FormatOffered = FormatOffered; + inValue.Names = Names; + return ((ADWSProxy.ADWS.AccountManagement)(this)).TranslateNameAsync(inValue); } - public GetADPrincipalGroupMembershipRequest(string Server, string PartitionDN, string PrincipalDN, string ResourceContextPartition, string ResourceContextServer) + public virtual System.Threading.Tasks.Task OpenAsync() { - this.Server = Server; - this.PartitionDN = PartitionDN; - this.PrincipalDN = PrincipalDN; - this.ResourceContextPartition = ResourceContextPartition; - this.ResourceContextServer = ResourceContextServer; + return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(null, null), new System.Action(((System.ServiceModel.ICommunicationObject)(this)).EndOpen)); } - } - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADPrincipalGroupMembershipResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class GetADPrincipalGroupMembershipResponse - { +#if !NET6_0_OR_GREATER + public virtual System.Threading.Tasks.Task CloseAsync() + { + return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginClose(null, null), new System.Action(((System.ServiceModel.ICommunicationObject)(this)).EndClose)); + } +#endif - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] - public ADWSProxy.ADWS.ActiveDirectoryGroup[] MemberOf; + private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration) + { + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_AccountManagement)) + { + System.ServiceModel.NetTcpBinding result = new System.ServiceModel.NetTcpBinding(); + result.MaxBufferSize = int.MaxValue; + result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max; + result.MaxReceivedMessageSize = int.MaxValue; + return result; + } + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_AccountManagement1)) + { + System.ServiceModel.NetTcpBinding result = new System.ServiceModel.NetTcpBinding(); + result.MaxBufferSize = int.MaxValue; + result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max; + result.MaxReceivedMessageSize = int.MaxValue; + result.Security.Mode = System.ServiceModel.SecurityMode.TransportWithMessageCredential; + result.Security.Message.ClientCredentialType = System.ServiceModel.MessageCredentialType.UserName; + return result; + } + throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); + } - public GetADPrincipalGroupMembershipResponse() + private static System.ServiceModel.EndpointAddress GetEndpointAddress(EndpointConfiguration endpointConfiguration) { + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_AccountManagement)) + { + return new System.ServiceModel.EndpointAddress("net.tcp://localhost:9389/ActiveDirectoryWebServices/Windows/AccountManagement"); + } + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_AccountManagement1)) + { + return new System.ServiceModel.EndpointAddress(new System.Uri("net.tcp://localhost:9389/ActiveDirectoryWebServices/UserName/AccountManagement"), new System.ServiceModel.DnsEndpointIdentity("DC01.kolen.xyz")); + } + throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); } - public GetADPrincipalGroupMembershipResponse(ADWSProxy.ADWS.ActiveDirectoryGroup[] MemberOf) + public enum EndpointConfiguration { - this.MemberOf = MemberOf; + + NetTcpBinding_AccountManagement, + + NetTcpBinding_AccountManagement1, } } - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "SetPasswordRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class SetPasswordRequest + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", ConfigurationName = "ADWSProxy.ADWS.TopologyManagement")] + public interface TopologyManagement { - [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string Server; + // CODEGEN: Generating message contract since the wrapper name (GetADDomainControllerRequest) of message GetADDomainControllerRequest does not match the default value (GetADDomainController) + [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetADDomainController", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetADDomainControllerResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.GetADDomainControllerFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "GetADDomainControllerFault")] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] + ADWSProxy.ADWS.GetADDomainControllerResponse GetADDomainController(ADWSProxy.ADWS.GetADDomainControllerRequest request); - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string AccountDN; + [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetADDomainController", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetADDomainControllerResponse")] + System.Threading.Tasks.Task GetADDomainControllerAsync(ADWSProxy.ADWS.GetADDomainControllerRequest request); - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string NewPassword; + // CODEGEN: Generating message contract since the wrapper name (GetADDomainRequest) of message GetADDomainRequest does not match the default value (GetADDomain) + [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetADDomain", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetADDomainResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.GetADDomainFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "GetADDomainFault")] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] + ADWSProxy.ADWS.GetADDomainResponse GetADDomain(ADWSProxy.ADWS.GetADDomainRequest request); - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 2)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string PartitionDN; + [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetADDomain", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetADDomainResponse")] + System.Threading.Tasks.Task GetADDomainAsync(ADWSProxy.ADWS.GetADDomainRequest request); - public SetPasswordRequest() - { - } + // CODEGEN: Generating message contract since the wrapper name (MoveADOperationMasterRoleRequest) of message MoveADOperationMasterRoleRequest does not match the default value (MoveADOperationMasterRole) + [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/MoveADOperationMasterRole", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/MoveADOperationMasterRoleResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.MoveADOperationMasterRoleFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "MoveADOperationMasterRoleFault")] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] + ADWSProxy.ADWS.MoveADOperationMasterRoleResponse MoveADOperationMasterRole(ADWSProxy.ADWS.MoveADOperationMasterRoleRequest request); - public SetPasswordRequest(string Server, string AccountDN, string NewPassword, string PartitionDN) - { - this.Server = Server; - this.AccountDN = AccountDN; - this.NewPassword = NewPassword; - this.PartitionDN = PartitionDN; - } + [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/MoveADOperationMasterRole", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/MoveADOperationMasterRoleResponse")] + System.Threading.Tasks.Task MoveADOperationMasterRoleAsync(ADWSProxy.ADWS.MoveADOperationMasterRoleRequest request); + + // CODEGEN: Generating message contract since the wrapper name (GetADForestRequest) of message GetADForestRequest does not match the default value (GetADForest) + [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetADForest", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetADForestResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.GetADForestFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "GetADForestFault")] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] + ADWSProxy.ADWS.GetADForestResponse GetADForest(ADWSProxy.ADWS.GetADForestRequest request); + + [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetADForest", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetADForestResponse")] + System.Threading.Tasks.Task GetADForestAsync(ADWSProxy.ADWS.GetADForestRequest request); + + // CODEGEN: Generating message contract since the wrapper name (ChangeOptionalFeatureRequest) of message ChangeOptionalFeatureRequest does not match the default value (ChangeOptionalFeature) + [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/ChangeOptionalFeature", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/ChangeOptionalFeatureResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.ChangeOptionalFeatureFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "ChangeOptionalFeatureFault")] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] + ADWSProxy.ADWS.ChangeOptionalFeatureResponse ChangeOptionalFeature(ADWSProxy.ADWS.ChangeOptionalFeatureRequest request); + + [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/ChangeOptionalFeature", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/ChangeOptionalFeatureResponse")] + System.Threading.Tasks.Task ChangeOptionalFeatureAsync(ADWSProxy.ADWS.ChangeOptionalFeatureRequest request); + + [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetVersion", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetVersionResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.GetVersionFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "GetVersionFault")] + [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults = true)] + ADWSProxy.ADWS.GetVersionResponse GetVersion(ADWSProxy.ADWS.GetVersionRequest request); + + // CODEGEN: Generating message contract since the operation has multiple return values. + [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetVersion", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + + "ent/GetVersionResponse")] + System.Threading.Tasks.Task GetVersionAsync(ADWSProxy.ADWS.GetVersionRequest request); } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "SetPasswordResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class SetPasswordResponse + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class ActiveDirectoryDomainController : ActiveDirectoryDirectoryServer { - public SetPasswordResponse() - { - } - } + private string computerDNField; + + private string domainField; + + private bool enabledField; + + private string forestField; - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "ChangePasswordRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class ChangePasswordRequest - { + private bool isGlobalCatalogField; - [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string Server; + private bool isReadOnlyField; - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string AccountDN; + private string oSHotFixField; - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string NewPassword; + private string oSNameField; - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 2)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string OldPassword; + private string oSServicepackField; - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 3)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string PartitionDN; + private string oSVersionField; - public ChangePasswordRequest() + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0)] + public string ComputerDN { + get + { + return this.computerDNField; + } + set + { + this.computerDNField = value; + } } - public ChangePasswordRequest(string Server, string AccountDN, string NewPassword, string OldPassword, string PartitionDN) + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 1)] + public string Domain { - this.Server = Server; - this.AccountDN = AccountDN; - this.NewPassword = NewPassword; - this.OldPassword = OldPassword; - this.PartitionDN = PartitionDN; + get + { + return this.domainField; + } + set + { + this.domainField = value; + } } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "ChangePasswordResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class ChangePasswordResponse - { - public ChangePasswordResponse() + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 2)] + public bool Enabled { + get + { + return this.enabledField; + } + set + { + this.enabledField = value; + } } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADPrincipalAuthorizationGroupRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class GetADPrincipalAuthorizationGroupRequest - { - - [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string Server; - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string PartitionDN; - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string PrincipalDN; - public GetADPrincipalAuthorizationGroupRequest() + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 3)] + public string Forest { + get + { + return this.forestField; + } + set + { + this.forestField = value; + } } - public GetADPrincipalAuthorizationGroupRequest(string Server, string PartitionDN, string PrincipalDN) + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 4)] + public bool IsGlobalCatalog { - this.Server = Server; - this.PartitionDN = PartitionDN; - this.PrincipalDN = PrincipalDN; + get + { + return this.isGlobalCatalogField; + } + set + { + this.isGlobalCatalogField = value; + } } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADPrincipalAuthorizationGroupResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class GetADPrincipalAuthorizationGroupResponse - { - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] - public ADWSProxy.ADWS.ActiveDirectoryGroup[] MemberOf; - - public GetADPrincipalAuthorizationGroupResponse() + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 5)] + public bool IsReadOnly { + get + { + return this.isReadOnlyField; + } + set + { + this.isReadOnlyField = value; + } } - public GetADPrincipalAuthorizationGroupResponse(ADWSProxy.ADWS.ActiveDirectoryGroup[] MemberOf) + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 6)] + public string OSHotFix { - this.MemberOf = MemberOf; + get + { + return this.oSHotFixField; + } + set + { + this.oSHotFixField = value; + } } - } - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.8.3928.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - public enum ActiveDirectoryNameFormat - { + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 7)] + public string OSName + { + get + { + return this.oSNameField; + } + set + { + this.oSNameField = value; + } + } /// - DistinguishedName, + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 8)] + public string OSServicepack + { + get + { + return this.oSServicepackField; + } + set + { + this.oSServicepackField = value; + } + } /// - CanonicalName, + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 9)] + public string OSVersion + { + get + { + return this.oSVersionField; + } + set + { + this.oSVersionField = value; + } + } } + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(ActiveDirectoryDomainController))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "TranslateNameRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class TranslateNameRequest + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class ActiveDirectoryDirectoryServer { - [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string Server; - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - public ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatDesired; - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] - public ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatOffered; + private string defaultPartitionField; - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 2)] - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] Names; + private string hostNameField; - public TranslateNameRequest() - { - } + private string invocationIdField; - public TranslateNameRequest(string Server, ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatDesired, ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatOffered, string[] Names) - { - this.Server = Server; - this.FormatDesired = FormatDesired; - this.FormatOffered = FormatOffered; - this.Names = Names; - } - } + private int ldapPortField; - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "TranslateNameResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class TranslateNameResponse - { + private string nTDSSettingsObjectDNField; - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] - public ADWSProxy.ADWS.ActiveDirectoryNameTranslateResult[] NameTranslateResult; + private string nameField; - public TranslateNameResponse() - { - } + private ActiveDirectoryOperationMasterRole[] operationMasterRoleField; - public TranslateNameResponse(ADWSProxy.ADWS.ActiveDirectoryNameTranslateResult[] NameTranslateResult) - { - this.NameTranslateResult = NameTranslateResult; - } - } + private string[] partitionsField; - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - public interface AccountManagementChannel : ADWSProxy.ADWS.AccountManagement, System.ServiceModel.IClientChannel - { - } + private string serverObjectDNField; - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - public partial class AccountManagementClient : System.ServiceModel.ClientBase, ADWSProxy.ADWS.AccountManagement - { + private string serverObjectGuidField; - public AccountManagementClient() - { - } + private string siteField; - public AccountManagementClient(string endpointConfigurationName) : - base(endpointConfigurationName) - { - } + private int sslPortField; - public AccountManagementClient(string endpointConfigurationName, string remoteAddress) : - base(endpointConfigurationName, remoteAddress) + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0)] + public string DefaultPartition { + get + { + return this.defaultPartitionField; + } + set + { + this.defaultPartitionField = value; + } } - public AccountManagementClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : - base(endpointConfigurationName, remoteAddress) + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 1)] + public string HostName { + get + { + return this.hostNameField; + } + set + { + this.hostNameField = value; + } } - public AccountManagementClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : - base(binding, remoteAddress) + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 2)] + public string InvocationId { + get + { + return this.invocationIdField; + } + set + { + this.invocationIdField = value; + } } - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - ADWSProxy.ADWS.GetADGroupMemberResponse ADWSProxy.ADWS.AccountManagement.GetADGroupMember(ADWSProxy.ADWS.GetADGroupMemberRequest request) + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 3)] + public int LdapPort { - return base.Channel.GetADGroupMember(request); + get + { + return this.ldapPortField; + } + set + { + this.ldapPortField = value; + } } - public ADWSProxy.ADWS.ActiveDirectoryPrincipal[] GetADGroupMember(string Server, string GroupDN, string PartitionDN, bool Recursive) + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 4)] + public string NTDSSettingsObjectDN { - ADWSProxy.ADWS.GetADGroupMemberRequest inValue = new ADWSProxy.ADWS.GetADGroupMemberRequest(); - inValue.Server = Server; - inValue.GroupDN = GroupDN; - inValue.PartitionDN = PartitionDN; - inValue.Recursive = Recursive; - ADWSProxy.ADWS.GetADGroupMemberResponse retVal = ((ADWSProxy.ADWS.AccountManagement)(this)).GetADGroupMember(inValue); - return retVal.Members; + get + { + return this.nTDSSettingsObjectDNField; + } + set + { + this.nTDSSettingsObjectDNField = value; + } } - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - System.Threading.Tasks.Task ADWSProxy.ADWS.AccountManagement.GetADGroupMemberAsync(ADWSProxy.ADWS.GetADGroupMemberRequest request) + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 5)] + public string Name { - return base.Channel.GetADGroupMemberAsync(request); + get + { + return this.nameField; + } + set + { + this.nameField = value; + } } - public System.Threading.Tasks.Task GetADGroupMemberAsync(string Server, string GroupDN, string PartitionDN, bool Recursive) + /// + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 6)] + public ActiveDirectoryOperationMasterRole[] OperationMasterRole { - ADWSProxy.ADWS.GetADGroupMemberRequest inValue = new ADWSProxy.ADWS.GetADGroupMemberRequest(); - inValue.Server = Server; - inValue.GroupDN = GroupDN; - inValue.PartitionDN = PartitionDN; - inValue.Recursive = Recursive; - return ((ADWSProxy.ADWS.AccountManagement)(this)).GetADGroupMemberAsync(inValue); + get + { + return this.operationMasterRoleField; + } + set + { + this.operationMasterRoleField = value; + } } - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - ADWSProxy.ADWS.GetADPrincipalGroupMembershipResponse ADWSProxy.ADWS.AccountManagement.GetADPrincipalGroupMembership(ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest request) + /// + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 7)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] Partitions { - return base.Channel.GetADPrincipalGroupMembership(request); + get + { + return this.partitionsField; + } + set + { + this.partitionsField = value; + } } - public ADWSProxy.ADWS.ActiveDirectoryGroup[] GetADPrincipalGroupMembership(string Server, string PartitionDN, string PrincipalDN, string ResourceContextPartition, string ResourceContextServer) + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 8)] + public string ServerObjectDN { - ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest inValue = new ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest(); - inValue.Server = Server; - inValue.PartitionDN = PartitionDN; - inValue.PrincipalDN = PrincipalDN; - inValue.ResourceContextPartition = ResourceContextPartition; - inValue.ResourceContextServer = ResourceContextServer; - ADWSProxy.ADWS.GetADPrincipalGroupMembershipResponse retVal = ((ADWSProxy.ADWS.AccountManagement)(this)).GetADPrincipalGroupMembership(inValue); - return retVal.MemberOf; + get + { + return this.serverObjectDNField; + } + set + { + this.serverObjectDNField = value; + } } - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - System.Threading.Tasks.Task ADWSProxy.ADWS.AccountManagement.GetADPrincipalGroupMembershipAsync(ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest request) + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 9)] + public string ServerObjectGuid { - return base.Channel.GetADPrincipalGroupMembershipAsync(request); + get + { + return this.serverObjectGuidField; + } + set + { + this.serverObjectGuidField = value; + } } - public System.Threading.Tasks.Task GetADPrincipalGroupMembershipAsync(string Server, string PartitionDN, string PrincipalDN, string ResourceContextPartition, string ResourceContextServer) + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 10)] + public string Site { - ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest inValue = new ADWSProxy.ADWS.GetADPrincipalGroupMembershipRequest(); - inValue.Server = Server; - inValue.PartitionDN = PartitionDN; - inValue.PrincipalDN = PrincipalDN; - inValue.ResourceContextPartition = ResourceContextPartition; - inValue.ResourceContextServer = ResourceContextServer; - return ((ADWSProxy.ADWS.AccountManagement)(this)).GetADPrincipalGroupMembershipAsync(inValue); + get + { + return this.siteField; + } + set + { + this.siteField = value; + } } - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - ADWSProxy.ADWS.SetPasswordResponse ADWSProxy.ADWS.AccountManagement.SetPassword(ADWSProxy.ADWS.SetPasswordRequest request) + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 11)] + public int SslPort { - return base.Channel.SetPassword(request); + get + { + return this.sslPortField; + } + set + { + this.sslPortField = value; + } } + } - public void SetPassword(string Server, string AccountDN, string NewPassword, string PartitionDN) - { - ADWSProxy.ADWS.SetPasswordRequest inValue = new ADWSProxy.ADWS.SetPasswordRequest(); - inValue.Server = Server; - inValue.AccountDN = AccountDN; - inValue.NewPassword = NewPassword; - inValue.PartitionDN = PartitionDN; - ADWSProxy.ADWS.SetPasswordResponse retVal = ((ADWSProxy.ADWS.AccountManagement)(this)).SetPassword(inValue); - } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public enum ActiveDirectoryOperationMasterRole + { - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - System.Threading.Tasks.Task ADWSProxy.ADWS.AccountManagement.SetPasswordAsync(ADWSProxy.ADWS.SetPasswordRequest request) - { - return base.Channel.SetPasswordAsync(request); - } + /// + PDCEmulator, - public System.Threading.Tasks.Task SetPasswordAsync(string Server, string AccountDN, string NewPassword, string PartitionDN) - { - ADWSProxy.ADWS.SetPasswordRequest inValue = new ADWSProxy.ADWS.SetPasswordRequest(); - inValue.Server = Server; - inValue.AccountDN = AccountDN; - inValue.NewPassword = NewPassword; - inValue.PartitionDN = PartitionDN; - return ((ADWSProxy.ADWS.AccountManagement)(this)).SetPasswordAsync(inValue); - } + /// + RIDMaster, - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - ADWSProxy.ADWS.ChangePasswordResponse ADWSProxy.ADWS.AccountManagement.ChangePassword(ADWSProxy.ADWS.ChangePasswordRequest request) - { - return base.Channel.ChangePassword(request); - } + /// + InfrastructureMaster, - public void ChangePassword(string Server, string AccountDN, string NewPassword, string OldPassword, string PartitionDN) - { - ADWSProxy.ADWS.ChangePasswordRequest inValue = new ADWSProxy.ADWS.ChangePasswordRequest(); - inValue.Server = Server; - inValue.AccountDN = AccountDN; - inValue.NewPassword = NewPassword; - inValue.OldPassword = OldPassword; - inValue.PartitionDN = PartitionDN; - ADWSProxy.ADWS.ChangePasswordResponse retVal = ((ADWSProxy.ADWS.AccountManagement)(this)).ChangePassword(inValue); - } + /// + SchemaMaster, + + /// + DomainNamingMaster, + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADDomainControllerRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class GetADDomainControllerRequest + { - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - System.Threading.Tasks.Task ADWSProxy.ADWS.AccountManagement.ChangePasswordAsync(ADWSProxy.ADWS.ChangePasswordRequest request) - { - return base.Channel.ChangePasswordAsync(request); - } + [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string Server; - public System.Threading.Tasks.Task ChangePasswordAsync(string Server, string AccountDN, string NewPassword, string OldPassword, string PartitionDN) - { - ADWSProxy.ADWS.ChangePasswordRequest inValue = new ADWSProxy.ADWS.ChangePasswordRequest(); - inValue.Server = Server; - inValue.AccountDN = AccountDN; - inValue.NewPassword = NewPassword; - inValue.OldPassword = OldPassword; - inValue.PartitionDN = PartitionDN; - return ((ADWSProxy.ADWS.AccountManagement)(this)).ChangePasswordAsync(inValue); - } + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] NtdsSettingsDN; - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupResponse ADWSProxy.ADWS.AccountManagement.GetADPrincipalAuthorizationGroup(ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest request) + public GetADDomainControllerRequest() { - return base.Channel.GetADPrincipalAuthorizationGroup(request); } - public ADWSProxy.ADWS.ActiveDirectoryGroup[] GetADPrincipalAuthorizationGroup(string Server, string PartitionDN, string PrincipalDN) + public GetADDomainControllerRequest(string Server, string[] NtdsSettingsDN) { - ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest inValue = new ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest(); - inValue.Server = Server; - inValue.PartitionDN = PartitionDN; - inValue.PrincipalDN = PrincipalDN; - ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupResponse retVal = ((ADWSProxy.ADWS.AccountManagement)(this)).GetADPrincipalAuthorizationGroup(inValue); - return retVal.MemberOf; + this.Server = Server; + this.NtdsSettingsDN = NtdsSettingsDN; } + } - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - System.Threading.Tasks.Task ADWSProxy.ADWS.AccountManagement.GetADPrincipalAuthorizationGroupAsync(ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest request) - { - return base.Channel.GetADPrincipalAuthorizationGroupAsync(request); - } + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADDomainControllerResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class GetADDomainControllerResponse + { - public System.Threading.Tasks.Task GetADPrincipalAuthorizationGroupAsync(string Server, string PartitionDN, string PrincipalDN) - { - ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest inValue = new ADWSProxy.ADWS.GetADPrincipalAuthorizationGroupRequest(); - inValue.Server = Server; - inValue.PartitionDN = PartitionDN; - inValue.PrincipalDN = PrincipalDN; - return ((ADWSProxy.ADWS.AccountManagement)(this)).GetADPrincipalAuthorizationGroupAsync(inValue); - } + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] + public ADWSProxy.ADWS.ActiveDirectoryDomainController[] DomainControllers; - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - ADWSProxy.ADWS.TranslateNameResponse ADWSProxy.ADWS.AccountManagement.TranslateName(ADWSProxy.ADWS.TranslateNameRequest request) + public GetADDomainControllerResponse() { - return base.Channel.TranslateName(request); } - public ADWSProxy.ADWS.ActiveDirectoryNameTranslateResult[] TranslateName(string Server, ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatDesired, ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatOffered, string[] Names) + public GetADDomainControllerResponse(ADWSProxy.ADWS.ActiveDirectoryDomainController[] DomainControllers) { - ADWSProxy.ADWS.TranslateNameRequest inValue = new ADWSProxy.ADWS.TranslateNameRequest(); - inValue.Server = Server; - inValue.FormatDesired = FormatDesired; - inValue.FormatOffered = FormatOffered; - inValue.Names = Names; - ADWSProxy.ADWS.TranslateNameResponse retVal = ((ADWSProxy.ADWS.AccountManagement)(this)).TranslateName(inValue); - return retVal.NameTranslateResult; + this.DomainControllers = DomainControllers; } + } - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - System.Threading.Tasks.Task ADWSProxy.ADWS.AccountManagement.TranslateNameAsync(ADWSProxy.ADWS.TranslateNameRequest request) + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADDomainRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class GetADDomainRequest + { + + [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public string Server; + + public GetADDomainRequest() { - return base.Channel.TranslateNameAsync(request); } - public System.Threading.Tasks.Task TranslateNameAsync(string Server, ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatDesired, ADWSProxy.ADWS.ActiveDirectoryNameFormat FormatOffered, string[] Names) + public GetADDomainRequest(string Server) { - ADWSProxy.ADWS.TranslateNameRequest inValue = new ADWSProxy.ADWS.TranslateNameRequest(); - inValue.Server = Server; - inValue.FormatDesired = FormatDesired; - inValue.FormatOffered = FormatOffered; - inValue.Names = Names; - return ((ADWSProxy.ADWS.AccountManagement)(this)).TranslateNameAsync(inValue); + this.Server = Server; } } - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ServiceModel.ServiceContractAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", ConfigurationName = "ADWSProxy.ADWS.TopologyManagement", SessionMode = System.ServiceModel.SessionMode.Required)] - public interface TopologyManagement + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADDomainResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class GetADDomainResponse { - // CODEGEN: Generating message contract since the wrapper name (GetADDomainControllerRequest) of message GetADDomainControllerRequest does not match the default value (GetADDomainController) - [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetADDomainController", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetADDomainControllerResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.GetADDomainControllerFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "GetADDomainControllerFault")] - [System.ServiceModel.XmlSerializerFormatAttribute()] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryDirectoryServer))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryObject))] - ADWSProxy.ADWS.GetADDomainControllerResponse GetADDomainController(ADWSProxy.ADWS.GetADDomainControllerRequest request); - - [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetADDomainController", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetADDomainControllerResponse")] - System.Threading.Tasks.Task GetADDomainControllerAsync(ADWSProxy.ADWS.GetADDomainControllerRequest request); - - // CODEGEN: Generating message contract since the wrapper name (GetADDomainRequest) of message GetADDomainRequest does not match the default value (GetADDomain) - [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetADDomain", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetADDomainResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.GetADDomainFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "GetADDomainFault")] - [System.ServiceModel.XmlSerializerFormatAttribute()] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryDirectoryServer))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryObject))] - ADWSProxy.ADWS.GetADDomainResponse GetADDomain(ADWSProxy.ADWS.GetADDomainRequest request); - - [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetADDomain", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetADDomainResponse")] - System.Threading.Tasks.Task GetADDomainAsync(ADWSProxy.ADWS.GetADDomainRequest request); - - // CODEGEN: Generating message contract since the wrapper name (MoveADOperationMasterRoleRequest) of message MoveADOperationMasterRoleRequest does not match the default value (MoveADOperationMasterRole) - [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/MoveADOperationMasterRole", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/MoveADOperationMasterRoleResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.MoveADOperationMasterRoleFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "MoveADOperationMasterRoleFault")] - [System.ServiceModel.XmlSerializerFormatAttribute()] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryDirectoryServer))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryObject))] - ADWSProxy.ADWS.MoveADOperationMasterRoleResponse MoveADOperationMasterRole(ADWSProxy.ADWS.MoveADOperationMasterRoleRequest request); - - [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/MoveADOperationMasterRole", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/MoveADOperationMasterRoleResponse")] - System.Threading.Tasks.Task MoveADOperationMasterRoleAsync(ADWSProxy.ADWS.MoveADOperationMasterRoleRequest request); - - // CODEGEN: Generating message contract since the wrapper name (GetADForestRequest) of message GetADForestRequest does not match the default value (GetADForest) - [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetADForest", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetADForestResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.GetADForestFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "GetADForestFault")] - [System.ServiceModel.XmlSerializerFormatAttribute()] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryDirectoryServer))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryObject))] - ADWSProxy.ADWS.GetADForestResponse GetADForest(ADWSProxy.ADWS.GetADForestRequest request); - - [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetADForest", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetADForestResponse")] - System.Threading.Tasks.Task GetADForestAsync(ADWSProxy.ADWS.GetADForestRequest request); - - // CODEGEN: Generating message contract since the wrapper name (ChangeOptionalFeatureRequest) of message ChangeOptionalFeatureRequest does not match the default value (ChangeOptionalFeature) - [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/ChangeOptionalFeature", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/ChangeOptionalFeatureResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.ChangeOptionalFeatureFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "ChangeOptionalFeatureFault")] - [System.ServiceModel.XmlSerializerFormatAttribute()] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryDirectoryServer))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryObject))] - ADWSProxy.ADWS.ChangeOptionalFeatureResponse ChangeOptionalFeature(ADWSProxy.ADWS.ChangeOptionalFeatureRequest request); - - [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/ChangeOptionalFeature", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/ChangeOptionalFeatureResponse")] - System.Threading.Tasks.Task ChangeOptionalFeatureAsync(ADWSProxy.ADWS.ChangeOptionalFeatureRequest request); + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] + public ADWSProxy.ADWS.ActiveDirectoryDomain Domain; - [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetVersion", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetVersionResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(ADWSProxy.ADWS.GetVersionFault), Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/Data/fault", Name = "GetVersionFault")] - [System.ServiceModel.XmlSerializerFormatAttribute()] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryDirectoryServer))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(ActiveDirectoryObject))] - ADWSProxy.ADWS.GetVersionResponse GetVersion(ADWSProxy.ADWS.GetVersionRequest request); + public GetADDomainResponse() + { + } - // CODEGEN: Generating message contract since the operation has multiple return values. - [System.ServiceModel.OperationContractAttribute(Action = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetVersion", ReplyAction = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions/TopologyManagem" + - "ent/GetVersionResponse")] - System.Threading.Tasks.Task GetVersionAsync(ADWSProxy.ADWS.GetVersionRequest request); + public GetADDomainResponse(ADWSProxy.ADWS.ActiveDirectoryDomain Domain) + { + this.Domain = Domain; + } } [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADDomainControllerRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class GetADDomainControllerRequest + [System.ServiceModel.MessageContractAttribute(WrapperName = "MoveADOperationMasterRoleRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class MoveADOperationMasterRoleRequest { [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] @@ -3595,135 +3562,252 @@ public partial class GetADDomainControllerRequest public string Server; [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] - [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] - public string[] NtdsSettingsDN; + public ADWSProxy.ADWS.ActiveDirectoryOperationMasterRole OperationMasterRole; - public GetADDomainControllerRequest() + [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] + public bool Seize; + + public MoveADOperationMasterRoleRequest() { } - public GetADDomainControllerRequest(string Server, string[] NtdsSettingsDN) + public MoveADOperationMasterRoleRequest(string Server, ADWSProxy.ADWS.ActiveDirectoryOperationMasterRole OperationMasterRole, bool Seize) { this.Server = Server; - this.NtdsSettingsDN = NtdsSettingsDN; + this.OperationMasterRole = OperationMasterRole; + this.Seize = Seize; } } [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADDomainControllerResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class GetADDomainControllerResponse + [System.ServiceModel.MessageContractAttribute(WrapperName = "MoveADOperationMasterRoleResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] + public partial class MoveADOperationMasterRoleResponse { [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true)] - public ADWSProxy.ADWS.ActiveDirectoryDomainController[] DomainControllers; + public bool WasSeized; + + public MoveADOperationMasterRoleResponse() + { + } + + public MoveADOperationMasterRoleResponse(bool WasSeized) + { + this.WasSeized = WasSeized; + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] + public partial class ActiveDirectoryForest + { + + private string[] applicationPartitionsField; + + private string[] crossForestReferencesField; + + private string domainNamingMasterField; + + private string[] domainsField; + + private int forestModeField; + + private string[] globalCatalogsField; + + private string nameField; + + private string rootDomainField; + + private string[] sPNSuffixesField; + + private string schemaMasterField; + + private string[] sitesField; + + private string[] uPNSuffixesField; + + /// + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 0)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] ApplicationPartitions + { + get + { + return this.applicationPartitionsField; + } + set + { + this.applicationPartitionsField = value; + } + } - public GetADDomainControllerResponse() + /// + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 1)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] CrossForestReferences { + get + { + return this.crossForestReferencesField; + } + set + { + this.crossForestReferencesField = value; + } } - public GetADDomainControllerResponse(ADWSProxy.ADWS.ActiveDirectoryDomainController[] DomainControllers) + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 2)] + public string DomainNamingMaster { - this.DomainControllers = DomainControllers; + get + { + return this.domainNamingMasterField; + } + set + { + this.domainNamingMasterField = value; + } } - } - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADDomainRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class GetADDomainRequest - { - - [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string Server; - - public GetADDomainRequest() + /// + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 3)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] Domains { + get + { + return this.domainsField; + } + set + { + this.domainsField = value; + } } - public GetADDomainRequest(string Server) + /// + [System.Xml.Serialization.XmlElementAttribute(Order = 4)] + public int ForestMode { - this.Server = Server; + get + { + return this.forestModeField; + } + set + { + this.forestModeField = value; + } } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADDomainResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class GetADDomainResponse - { - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public ADWSProxy.ADWS.ActiveDirectoryDomain Domain; - public GetADDomainResponse() + /// + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 5)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] GlobalCatalogs { + get + { + return this.globalCatalogsField; + } + set + { + this.globalCatalogsField = value; + } } - public GetADDomainResponse(ADWSProxy.ADWS.ActiveDirectoryDomain Domain) + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 6)] + public string Name { - this.Domain = Domain; + get + { + return this.nameField; + } + set + { + this.nameField = value; + } } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "MoveADOperationMasterRoleRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class MoveADOperationMasterRoleRequest - { - [System.ServiceModel.MessageHeaderAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions")] - [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] - public string Server; - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - public ADWSProxy.ADWS.ActiveDirectoryOperationMasterRole OperationMasterRole; - - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 1)] - public bool Seize; - - public MoveADOperationMasterRoleRequest() + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 7)] + public string RootDomain { + get + { + return this.rootDomainField; + } + set + { + this.rootDomainField = value; + } } - public MoveADOperationMasterRoleRequest(string Server, ADWSProxy.ADWS.ActiveDirectoryOperationMasterRole OperationMasterRole, bool Seize) + /// + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 8)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] SPNSuffixes { - this.Server = Server; - this.OperationMasterRole = OperationMasterRole; - this.Seize = Seize; + get + { + return this.sPNSuffixesField; + } + set + { + this.sPNSuffixesField = value; + } } - } - - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - [System.ServiceModel.MessageContractAttribute(WrapperName = "MoveADOperationMasterRoleResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] - public partial class MoveADOperationMasterRoleResponse - { - [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", Order = 0)] - public bool WasSeized; + /// + [System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 9)] + public string SchemaMaster + { + get + { + return this.schemaMasterField; + } + set + { + this.schemaMasterField = value; + } + } - public MoveADOperationMasterRoleResponse() + /// + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 10)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] Sites { + get + { + return this.sitesField; + } + set + { + this.sitesField = value; + } } - public MoveADOperationMasterRoleResponse(bool WasSeized) + /// + [System.Xml.Serialization.XmlArrayAttribute(IsNullable = true, Order = 11)] + [System.Xml.Serialization.XmlArrayItemAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")] + public string[] UPNSuffixes { - this.WasSeized = WasSeized; + get + { + return this.uPNSuffixesField; + } + set + { + this.uPNSuffixesField = value; + } } } [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADForestRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] public partial class GetADForestRequest @@ -3744,7 +3828,7 @@ public GetADForestRequest(string Server) } [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] [System.ServiceModel.MessageContractAttribute(WrapperName = "GetADForestResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] public partial class GetADForestResponse @@ -3765,7 +3849,7 @@ public GetADForestResponse(ADWSProxy.ADWS.ActiveDirectoryForest Forest) } [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] [System.ServiceModel.MessageContractAttribute(WrapperName = "ChangeOptionalFeatureRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] public partial class ChangeOptionalFeatureRequest @@ -3799,7 +3883,7 @@ public ChangeOptionalFeatureRequest(string Server, string DistinguishedName, boo } [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] [System.ServiceModel.MessageContractAttribute(WrapperName = "ChangeOptionalFeatureResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] public partial class ChangeOptionalFeatureResponse @@ -3811,7 +3895,7 @@ public ChangeOptionalFeatureResponse() } [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.ServiceModel.MessageContractAttribute(WrapperName = "GetVersionRequest", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] public partial class GetVersionRequest { @@ -3822,7 +3906,7 @@ public GetVersionRequest() } [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] [System.ServiceModel.MessageContractAttribute(WrapperName = "GetVersionResponse", WrapperNamespace = "http://schemas.microsoft.com/2008/1/ActiveDirectory/CustomActions", IsWrapped = true)] public partial class GetVersionResponse { @@ -3849,33 +3933,42 @@ public GetVersionResponse(int VersionMajor, int VersionMinor, string VersionStri } } - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] public interface TopologyManagementChannel : ADWSProxy.ADWS.TopologyManagement, System.ServiceModel.IClientChannel { } [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "8.0.0")] public partial class TopologyManagementClient : System.ServiceModel.ClientBase, ADWSProxy.ADWS.TopologyManagement { - public TopologyManagementClient() - { - } + /// + /// Implement this partial method to configure the service endpoint. + /// + /// The endpoint to configure + /// The client credentials + static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials); - public TopologyManagementClient(string endpointConfigurationName) : - base(endpointConfigurationName) + public TopologyManagementClient(EndpointConfiguration endpointConfiguration) : + base(TopologyManagementClient.GetBindingForEndpoint(endpointConfiguration), TopologyManagementClient.GetEndpointAddress(endpointConfiguration)) { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } - public TopologyManagementClient(string endpointConfigurationName, string remoteAddress) : - base(endpointConfigurationName, remoteAddress) + public TopologyManagementClient(EndpointConfiguration endpointConfiguration, string remoteAddress) : + base(TopologyManagementClient.GetBindingForEndpoint(endpointConfiguration), new System.ServiceModel.EndpointAddress(remoteAddress)) { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } - public TopologyManagementClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : - base(endpointConfigurationName, remoteAddress) + public TopologyManagementClient(EndpointConfiguration endpointConfiguration, System.ServiceModel.EndpointAddress remoteAddress) : + base(TopologyManagementClient.GetBindingForEndpoint(endpointConfiguration), remoteAddress) { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); } public TopologyManagementClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : @@ -4048,5 +4141,116 @@ public int GetVersion(out int VersionMinor, out string VersionString) { return base.Channel.GetVersionAsync(request); } + + public virtual System.Threading.Tasks.Task OpenAsync() + { + return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(null, null), new System.Action(((System.ServiceModel.ICommunicationObject)(this)).EndOpen)); + } + +#if !NET6_0_OR_GREATER + public virtual System.Threading.Tasks.Task CloseAsync() + { + return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginClose(null, null), new System.Action(((System.ServiceModel.ICommunicationObject)(this)).EndClose)); + } +#endif + + private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration) + { + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_TopologyManagement)) + { + System.ServiceModel.NetTcpBinding result = new System.ServiceModel.NetTcpBinding(); + result.MaxBufferSize = int.MaxValue; + result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max; + result.MaxReceivedMessageSize = int.MaxValue; + return result; + } + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_TopologyManagement1)) + { + System.ServiceModel.NetTcpBinding result = new System.ServiceModel.NetTcpBinding(); + result.MaxBufferSize = int.MaxValue; + result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max; + result.MaxReceivedMessageSize = int.MaxValue; + result.Security.Mode = System.ServiceModel.SecurityMode.TransportWithMessageCredential; + result.Security.Message.ClientCredentialType = System.ServiceModel.MessageCredentialType.UserName; + return result; + } + throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); + } + + private static System.ServiceModel.EndpointAddress GetEndpointAddress(EndpointConfiguration endpointConfiguration) + { + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_TopologyManagement)) + { + return new System.ServiceModel.EndpointAddress("net.tcp://localhost:9389/ActiveDirectoryWebServices/Windows/TopologyManagement"); + } + if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_TopologyManagement1)) + { + return new System.ServiceModel.EndpointAddress(new System.Uri("net.tcp://localhost:9389/ActiveDirectoryWebServices/UserName/TopologyManagement"), new System.ServiceModel.DnsEndpointIdentity("DC01.kolen.xyz")); + } + throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); + } + + public enum EndpointConfiguration + { + + NetTcpBinding_TopologyManagement, + + NetTcpBinding_TopologyManagement1, + } + } + + [System.Xml.Serialization.XmlSchemaProviderAttribute(null, IsAny = true)] + [System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil-lib", "8.0.0.0")] + public partial class ArrayOfXElement : object, System.Xml.Serialization.IXmlSerializable + { + + private System.Collections.Generic.List nodesList = new System.Collections.Generic.List(); + + public ArrayOfXElement() + { + } + + public virtual System.Collections.Generic.List Nodes + { + get + { + return this.nodesList; + } + } + + public virtual System.Xml.Schema.XmlSchema GetSchema() + { + throw new System.NotImplementedException(); + } + + public virtual void WriteXml(System.Xml.XmlWriter writer) + { + System.Collections.Generic.IEnumerator e = nodesList.GetEnumerator(); + for ( + ; e.MoveNext(); + ) + { + ((System.Xml.Serialization.IXmlSerializable)(e.Current)).WriteXml(writer); + } + } + + public virtual void ReadXml(System.Xml.XmlReader reader) + { + for ( + ; (reader.NodeType != System.Xml.XmlNodeType.EndElement); + ) + { + if ((reader.NodeType == System.Xml.XmlNodeType.Element)) + { + System.Xml.Linq.XElement elem = new System.Xml.Linq.XElement("default"); + ((System.Xml.Serialization.IXmlSerializable)(elem)).ReadXml(reader); + Nodes.Add(elem); + } + else + { + reader.Skip(); + } + } + } } } diff --git a/ADWSProxy/ADWS/Connection.cs b/ADWSProxy/ADWS/Connection.cs index 9e8b2c8..b0184f6 100644 --- a/ADWSProxy/ADWS/Connection.cs +++ b/ADWSProxy/ADWS/Connection.cs @@ -1,55 +1,56 @@ using ADWSProxy.ADWS.Request; using ADWSProxy.LDAP; using Flexinets.Ldap.Core; -using System; -using System.Collections.Generic; -using System.Linq; +using log4net; using System.Net; -using System.Reflection; +using System.Security.Authentication.ExtendedProtection; using System.ServiceModel; +using System.ServiceModel.Channels; namespace ADWSProxy.ADWS { - internal class Connection + public class Connection { - private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private static readonly ILog logger = LogHelper.GetLogger(typeof(Connection)); - private NetTcpBinding _binding = null; + private CustomBinding? _binding = null; - private ResourceClient _resource = null; + private Resource? _resource = null; - private SearchClient _search = null; + private Search? _search = null; - public Connection(string server, int port, string instance, bool useWindowsAuth, NetworkCredential credential = null) + public Connection(string server, int port, string instance, AdwsEndpoint mode, NetworkCredential? credential = null) { logger.Info($"Constructing new {GetType().FullName}"); + ServicePointManager.ServerCertificateValidationCallback = (s, c, ch, e) => true; + Server = server; Instance = instance; Port = port; Credential = credential; - UseWindowsAuth = useWindowsAuth; + Mode = mode; } - public bool UseWindowsAuth { get; } + public AdwsEndpoint Mode { get; } private string Auth { get { - return UseWindowsAuth ? "Windows" : "UserName"; + return Mode == AdwsEndpoint.Windows ? "Windows" : "UserName"; } } - private NetTcpBinding Binding + private CustomBinding Binding { get { if (_binding == null) { - logger.Debug($"Constructing new {typeof(NetTcpBinding).FullName}."); + logger.Debug($"Constructing new {typeof(NetTcpBinding).FullName}"); - _binding = new NetTcpBinding + var binding = new NetTcpBinding { MaxReceivedMessageSize = Helpers.BufferSize, CloseTimeout = new TimeSpan(0, 10, 0), @@ -58,106 +59,156 @@ private NetTcpBinding Binding SendTimeout = new TimeSpan(0, 10, 0) }; - _binding.ReaderQuotas.MaxDepth = 10; - _binding.ReaderQuotas.MaxStringContentLength = 32768; - _binding.ReaderQuotas.MaxArrayLength = 16384; + binding.ReaderQuotas.MaxDepth = 10; + binding.ReaderQuotas.MaxStringContentLength = 32768; + binding.ReaderQuotas.MaxArrayLength = 16384; + + if (Mode == AdwsEndpoint.Windows) + { + binding.Security.Mode = SecurityMode.Transport; + binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows; + binding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign; + binding.Security.Message.ClientCredentialType = MessageCredentialType.None; + } + else + { + binding.Security.Mode = SecurityMode.TransportWithMessageCredential; + binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None; + binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; + } - _binding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign; - _binding.Security.Message.ClientCredentialType = UseWindowsAuth ? MessageCredentialType.Windows : MessageCredentialType.UserName; - _binding.Security.Mode = UseWindowsAuth ? SecurityMode.Transport : SecurityMode.TransportWithMessageCredential; + logger.Debug($"Using binding.Security.Mode: {binding.Security.Mode}"); + logger.Debug($"Using binding.Security.Transport.ClientCredentialType: {binding.Security.Transport.ClientCredentialType}"); + logger.Debug($"binding.Security.Transport.ProtectionLevel: {binding.Security.Transport.ProtectionLevel}"); + logger.Debug($"binding.Security.Message.ClientCredentialType: {binding.Security.Message.ClientCredentialType}"); - logger.Debug($"Using EncryptAndSing on Transport {_binding.Security.Transport.ProtectionLevel == System.Net.Security.ProtectionLevel.EncryptAndSign}"); + _binding = new CustomBinding(binding); + var transportElement = _binding.Elements.Find(); + if (transportElement != null) + { + // Setting this value to Always is only supported on Windows at this time. + if (OperatingSystem.IsWindows()) + { + transportElement.ExtendedProtectionPolicy = new ExtendedProtectionPolicy(PolicyEnforcement.Always); + } + else + { + transportElement.ExtendedProtectionPolicy = new ExtendedProtectionPolicy(PolicyEnforcement.WhenSupported, ProtectionScenario.TransportSelected, new ServiceNameCollection(new[] + { + $"identity/{Server}", + $"identity/{Server.Split('.')[0]}", + $"host/{Server}", + $"ldap/{Server}", + $"ldap/{Server}/{Server[(Server.IndexOf('.') + 1)..]}", + $"identity/{Server}:9389" + })); + } + logger.Debug($"transportElement.ExtendedProtectionPolicy: {transportElement.ExtendedProtectionPolicy}"); + } + var securityElement = _binding.Elements.Find(); + if (securityElement != null) + { + securityElement.IncludeTimestamp = true; + logger.Debug($"securityElement.IncludeTimestamp: {securityElement.IncludeTimestamp}"); - logger.Debug($"Using MessageCrentialType.Windows {_binding.Security.Message.ClientCredentialType == MessageCredentialType.Windows}"); + } } + return _binding; } } - private NetworkCredential Credential { get; } + private NetworkCredential? Credential { get; } private string Instance { get; } private int Port { get; } - private ResourceClient ResourceClient + private EndpointIdentity? Identity { get { - if (_resource == null || _resource.State == CommunicationState.Closed) + return Mode switch { - logger.Debug($"Constructing new {typeof(ResourceClient).FullName}"); + AdwsEndpoint.Windows => new SpnEndpointIdentity($"host/{Server.ToLower()}"), + AdwsEndpoint.Username => new DnsEndpointIdentity(Server), + _ => null + }; + } + } - UriBuilder uriBuilder = new UriBuilder - { - Scheme = "net.tcp", - Host = Server, - Port = Port, + private T CreateChannel(string endpointName, Binding binding, NetworkCredential? credential, AdwsEndpoint mode) where T : class + { + logger.Debug($"Constructing new {typeof(T).FullName} via {typeof(ChannelFactory)}"); - Path = $"ActiveDirectoryWebServices/{Auth}/Resource" - }; + var endpoint = new EndpointAddress(CreateUri(endpointName), Identity, []); + var factory = new ChannelFactory(binding, endpoint); - _resource = new ResourceClient(Binding, new EndpointAddress(uriBuilder.Uri)); - if (Credential != null) - { - if (UseWindowsAuth) - { - _resource.ClientCredentials.Windows.ClientCredential.UserName = Credential.UserName; - _resource.ClientCredentials.Windows.ClientCredential.Password = Credential.Password; - _resource.ClientCredentials.Windows.ClientCredential.Domain = Credential.Domain; - } - else - { - _resource.ClientCredentials.UserName.UserName = $"{Credential.UserName}@{Credential.Domain}"; - _resource.ClientCredentials.UserName.Password = Credential.Password; - _resource.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None; - } - } - _resource.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; + if (credential != null) + { + switch (mode) + { + case AdwsEndpoint.Windows: + factory.Credentials.Windows.ClientCredential = credential; + break; + case AdwsEndpoint.Username: + factory.Credentials.UserName.UserName = $"{credential.UserName}@{credential.Domain}"; + factory.Credentials.UserName.Password = credential.Password; + factory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = + System.ServiceModel.Security.X509CertificateValidationMode.None; + break; } + } + factory.Credentials.Windows.AllowedImpersonationLevel = + System.Security.Principal.TokenImpersonationLevel.Impersonation; - return _resource; + // Create the channel + var channel = factory.CreateChannel(); + + // Explicitly open the channel + if (channel is ICommunicationObject commObj) + { + commObj.Open(); } + + return channel; } - private SearchClient SearchClient + private Resource ResourceClient { get { - if (_search == null || _search.State == CommunicationState.Closed) + if (_resource == null || ((IClientChannel)_resource).State == CommunicationState.Faulted || ((IClientChannel)_resource).State == CommunicationState.Closed) { - logger.Debug($"Constructing new {typeof(SearchClient).FullName}"); - - UriBuilder uriBuilder = new UriBuilder - { - Scheme = "net.tcp", - Host = Server, - Port = Port, - - Path = $"ActiveDirectoryWebServices/{Auth}/Enumeration" - }; + _resource = CreateChannel("Resource", Binding, Credential, Mode); + } - _search = new SearchClient(Binding, new EndpointAddress(uriBuilder.Uri)); + return _resource; + } + } - if (Credential != null) - { - if (UseWindowsAuth) - { - _search.ClientCredentials.Windows.ClientCredential.UserName = Credential.UserName; - _search.ClientCredentials.Windows.ClientCredential.Password = Credential.Password; - _search.ClientCredentials.Windows.ClientCredential.Domain = Credential.Domain; - } - else - { - _search.ClientCredentials.UserName.UserName = $"{Credential.UserName}@{Credential.Domain}"; - _search.ClientCredentials.UserName.Password = Credential.Password; - _search.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None; - } - } - _search.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; + private Search SearchClient + { + get + { + if (_search == null || ((IClientChannel)_search).State == CommunicationState.Faulted || ((IClientChannel)_search).State == CommunicationState.Closed) + { + _search = CreateChannel("Enumeration", Binding, Credential, Mode); } return _search; } } + private Uri CreateUri(string endpoint) + { + return new UriBuilder() + { + Scheme = "net.tcp", + Host = Server, + Port = Port, + + Path = $"ActiveDirectoryWebServices/{Auth}/{endpoint}" + }.Uri; + } + private string Server { get; } public List GetRootDSE() @@ -182,7 +233,7 @@ public List GetRootDSE() foreach (var item in parsedResponse.Items) { // These fields return the guid 11111111-1111-1111-1111-111111111111 which is not present in a direct LDAP request to get the RootDSE - if (item.Key.Equals("container-hierarchy-parent", StringComparison.InvariantCultureIgnoreCase) || item.Key.Equals("objectReferenceProperty", StringComparison.InvariantCultureIgnoreCase)) + if (item.Key.Equals("container-hierarchy-parent", StringComparison.OrdinalIgnoreCase) || item.Key.Equals("objectReferenceProperty", StringComparison.OrdinalIgnoreCase)) { continue; } @@ -223,14 +274,21 @@ public List GetRootDSE() return result; } - internal void Enumerate(string dn, string filter, List fields, string scope, Action<(string, List)> callback) + public void Enumerate(string dn, string filter, List fields, string scope, Action<(string, List)> callback) { - if (!fields.Any(field => field.Equals("distinguishedname", StringComparison.CurrentCultureIgnoreCase))) + if (string.IsNullOrEmpty(dn) && filter.Equals("(objectclass=*)", StringComparison.OrdinalIgnoreCase) && scope.Equals("base", StringComparison.OrdinalIgnoreCase)) + { + logger.Debug("Performing optimized RootDSE retrieval via Search.Enumerate"); + callback(("", GetRootDSE())); + return; + } + + if (!fields.Any(field => field.Equals("distinguishedname", StringComparison.OrdinalIgnoreCase))) { fields.Add("distinguishedname"); } - string enumerateContext = null; + string? enumerateContext = null; DateTime? enumerateContextExpires = null; int pageNumber = 0; try @@ -259,7 +317,7 @@ internal void Enumerate(string dn, string filter, List fields, string sc { logger.Info($"Renewing expiration for {enumerateContext}"); - var renewRequestBuffer = new RenewRequest(Instance, enumerateContext, DateTime.Now.AddMinutes(25)).CreateBufferedCopy(); + var renewRequestBuffer = new RenewRequest(Instance, enumerateContext!, DateTime.Now.AddMinutes(25)).CreateBufferedCopy(); renewRequestBuffer.WriteMessageToDebug(logger); var renewResponse = SearchClient.Renew(renewRequestBuffer.CreateMessage()); @@ -272,15 +330,15 @@ internal void Enumerate(string dn, string filter, List fields, string sc } var parsedRenewResponse = new RenewResponse(renewResponseBuffer.CreateMessage()); - string newEnumerateContext = parsedRenewResponse.EnumerateContext; + string newEnumerateContext = parsedRenewResponse.EnumerateContext!; DateTime newEnumerateContextExpires = parsedRenewResponse.Expiration; - logger.Debug($"Completed Search.Renew, old context: {enumerateContext} would expire at {enumerateContextExpires?.ToShortDateString()} and new context: {newEnumerateContext} which expires at {newEnumerateContextExpires.ToShortDateString()}"); + logger.Debug($"Completed Search.Renew, old context: {enumerateContext} would expire at {enumerateContextExpires?.ToShortDateString()} and new context: {newEnumerateContext} which expires at {newEnumerateContextExpires:d}"); enumerateContext = newEnumerateContext; enumerateContextExpires = newEnumerateContextExpires; } - var pullRequest = new PullRequest(Instance, parsedResponse.EnumerateContext).CreateBufferedCopy(); + var pullRequest = new PullRequest(Instance, parsedResponse.EnumerateContext!).CreateBufferedCopy(); pullRequest.WriteMessageToDebug(logger); var pullResponse = SearchClient.Pull(pullRequest.CreateMessage()); diff --git a/ADWSProxy/ADWS/Helpers.cs b/ADWSProxy/ADWS/Helpers.cs index 199f677..1854723 100644 --- a/ADWSProxy/ADWS/Helpers.cs +++ b/ADWSProxy/ADWS/Helpers.cs @@ -20,18 +20,16 @@ public static MessageBuffer CreateBufferedCopy(this Message message) public static string GetMessageString(MessageBuffer messageBuffer) { - XmlWriterSettings settings = new XmlWriterSettings() + XmlWriterSettings settings = new() { Indent = true, NewLineOnAttributes = false }; - StringBuilder output = new StringBuilder(); + StringBuilder output = new(); using (XmlWriter writer = XmlWriter.Create(output, settings)) { - using (XmlDictionaryWriter dictionaryWriter = XmlDictionaryWriter.CreateDictionaryWriter(writer)) - { - messageBuffer.CreateMessage().WriteMessage(dictionaryWriter); - } + using XmlDictionaryWriter dictionaryWriter = XmlDictionaryWriter.CreateDictionaryWriter(writer); + messageBuffer.CreateMessage().WriteMessage(dictionaryWriter); } return output.ToString(); diff --git a/ADWSProxy/ADWS/Request/ADWSException.cs b/ADWSProxy/ADWS/Request/ADWSException.cs index 95f9d7a..1e284dc 100644 --- a/ADWSProxy/ADWS/Request/ADWSException.cs +++ b/ADWSProxy/ADWS/Request/ADWSException.cs @@ -1,43 +1,33 @@ -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.ServiceModel; +using System.ServiceModel; using System.ServiceModel.Channels; using System.Xml; namespace ADWSProxy.ADWS.Request { - internal class ADWSException : FaultException + internal class ADWSException(MessageFault fault, FaultReason reason, FaultCode code, string action, string? ErrorType, Dictionary Errors) : FaultException(reason, code, action) { - public ADWSException(MessageFault fault, FaultReason reason, FaultCode code, string ErrorType, Dictionary Errors) : base(reason, code) - { - Fault = fault ?? throw new ArgumentNullException(nameof(fault)); - this.ErrorType = ErrorType; - this.Errors = Errors; - } - - public MessageFault Fault { get; private set; } + public MessageFault Fault { get; private set; } = fault ?? throw new ArgumentNullException(nameof(fault)); - public override string Message => $"ADWS Encountered '{ErrorType}', {JsonConvert.SerializeObject(Errors)}"; - - public string ErrorType { get; private set; } = null; - public Dictionary Errors { get; private set; } = new Dictionary(); + public override string Message => + $"ADWS Encountered '{ErrorType}'. Details: " + + (Errors != null && Errors.Count > 0 + ? string.Join("; ", Errors.Select(e => $"[{e.Key}: {e.Value}]")) + : "No detailed errors provided"); + public string? ErrorType { get; private set; } = ErrorType; + public Dictionary Errors { get; private set; } = Errors; public static ADWSException FromMessageBuffer(MessageBuffer messageBuffer) { - if (messageBuffer is null) - { - throw new ArgumentNullException(nameof(messageBuffer)); - } + ArgumentNullException.ThrowIfNull(messageBuffer); var message = messageBuffer.CreateMessage(); if (!message.IsFault) { - return null; + throw new Exception("Tried to throw an ADWSException for a non faulted message"); } var fault = MessageFault.CreateFault(message, Helpers.BufferSize); - string errorType = null; + string? errorType = null; var errors = new Dictionary(); if (fault.HasDetail) { @@ -49,7 +39,7 @@ public static ADWSException FromMessageBuffer(MessageBuffer messageBuffer) while (reader.Read()) { - if (reader.NodeType == XmlNodeType.Element && reader.LocalName != "value") + if (reader.NodeType == XmlNodeType.Element && !reader.LocalName.Equals("value", StringComparison.OrdinalIgnoreCase)) { var elementName = reader.LocalName; while (reader.Read()) @@ -59,7 +49,7 @@ public static ADWSException FromMessageBuffer(MessageBuffer messageBuffer) var nodeValue = reader.Value; errors.Add(elementName, nodeValue); } - if (reader.NodeType == XmlNodeType.EndElement && reader.LocalName != "value") + if (reader.NodeType == XmlNodeType.EndElement && !reader.LocalName.Equals("value", StringComparison.OrdinalIgnoreCase)) { break; } @@ -69,7 +59,7 @@ public static ADWSException FromMessageBuffer(MessageBuffer messageBuffer) } } - return new ADWSException(fault, fault.Reason, fault.Code, errorType, errors); + return new ADWSException(fault, fault.Reason, fault.Code, message.Headers.Action, errorType, errors); } } } \ No newline at end of file diff --git a/ADWSProxy/ADWS/Request/ADWSRequest.cs b/ADWSProxy/ADWS/Request/ADWSRequest.cs index 011b06a..8e3dfda 100644 --- a/ADWSProxy/ADWS/Request/ADWSRequest.cs +++ b/ADWSProxy/ADWS/Request/ADWSRequest.cs @@ -26,7 +26,7 @@ protected ADWSRequest(string instance, string objectReferenceProperty) : this(in public override MessageProperties Properties => MessageProperties; public override MessageVersion Version => MessageVersion.Soap12WSAddressing10; private MessageHeaders MessageHeaders { get; } - private MessageProperties MessageProperties { get; } = new MessageProperties(); + private MessageProperties MessageProperties { get; } = []; protected abstract override void OnWriteBodyContents(XmlDictionaryWriter writer); diff --git a/ADWSProxy/ADWS/Request/ADWSResponse.cs b/ADWSProxy/ADWS/Request/ADWSResponse.cs index be95f9a..012e1fe 100644 --- a/ADWSProxy/ADWS/Request/ADWSResponse.cs +++ b/ADWSProxy/ADWS/Request/ADWSResponse.cs @@ -1,5 +1,4 @@ -using System; -using System.ServiceModel.Channels; +using System.ServiceModel.Channels; using System.Xml; namespace ADWSProxy.ADWS.Request @@ -12,26 +11,18 @@ public override MessageHeaders Headers { get { - if (Response == null) - { - throw new ObjectDisposedException(nameof(Response)); - } - return Response.Headers; + return Response == null ? throw new ObjectDisposedException(nameof(Response)) : Response.Headers; } } - public override bool IsEmpty => Response.IsEmpty; - public override bool IsFault => Response.IsFault; + public override bool IsEmpty => Response?.IsEmpty ?? throw new NullReferenceException(); + public override bool IsFault => Response?.IsFault ?? throw new NullReferenceException(); public override MessageProperties Properties { get { - if (Response == null) - { - throw new ObjectDisposedException(nameof(Response)); - } - return Response.Properties; + return Response == null ? throw new ObjectDisposedException(nameof(Response)) : Response.Properties; } } @@ -39,26 +30,20 @@ public override MessageVersion Version { get { - if (Response == null) - { - throw new ObjectDisposedException(nameof(Response)); - } - return Response.Version; + return Response == null ? throw new ObjectDisposedException(nameof(Response)) : Response.Version; } } - internal string ObjectReference { get; private set; } = null; - private Message Response { get; set; } + internal string? ObjectReference { get; private set; } = null; + private Message? Response { get; set; } protected void DeserializeMessage(Message response) { this.OnReadHeaders(response.Headers); if (!response.IsEmpty) { - using (XmlDictionaryReader reader = response.GetReaderAtBodyContents()) - { - OnReadBodyContents(reader); - } + using XmlDictionaryReader reader = response.GetReaderAtBodyContents(); + OnReadBodyContents(reader); } Response = response; } @@ -66,8 +51,7 @@ protected void DeserializeMessage(Message response) protected override void OnClose() { base.OnClose(); - Response.Close(); - Response = null; + Response?.Close(); } protected abstract void OnReadBodyContents(XmlDictionaryReader reader); @@ -81,4 +65,4 @@ protected virtual void OnReadHeaders(MessageHeaders headers) } } } -} \ No newline at end of file +} diff --git a/ADWSProxy/ADWS/Request/EnumerateRequest.cs b/ADWSProxy/ADWS/Request/EnumerateRequest.cs index bb1e889..0d15cf1 100644 --- a/ADWSProxy/ADWS/Request/EnumerateRequest.cs +++ b/ADWSProxy/ADWS/Request/EnumerateRequest.cs @@ -1,25 +1,14 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Xml; +using System.Xml; namespace ADWSProxy.ADWS.Request { - internal class EnumerateRequest : ADWSRequest + internal class EnumerateRequest(string instance, string filter, string searchBase, string searchScope, IList attributes) : ADWSRequest(instance: instance) { - public EnumerateRequest(string instance, string filter, string searchBase, string searchScope, IList attributes) : base(instance: instance) - { - Filter = filter; - SearchBase = searchBase; - SearchScope = searchScope; - Attributes = attributes; - } - public override string Action => "http://schemas.xmlsoap.org/ws/2004/09/enumeration/Enumerate"; - private IList Attributes { get; } - private string Filter { get; } - private string SearchBase { get; } - private string SearchScope { get; } + private IList Attributes { get; } = attributes; + private string Filter { get; } = filter; + private string SearchBase { get; } = searchBase; + private string SearchScope { get; } = searchScope; protected override void OnWriteBodyContents(XmlDictionaryWriter writer) { @@ -39,21 +28,21 @@ protected override void OnWriteBodyContents(XmlDictionaryWriter writer) writer.WriteEndElement(); writer.WriteEndElement(); - if (Attributes != null && Attributes.Count() > 0) + if (Attributes != null && Attributes.Count > 0) { writer.WriteStartElement("Selection", "http://schemas.microsoft.com/2008/1/ActiveDirectory"); writer.WriteAttributeString("Dialect", "http://schemas.microsoft.com/2008/1/ActiveDirectory/Dialect/XPath-Level-1"); foreach (var attr in Attributes) { - if (attr.Equals("distinguishedname", StringComparison.InvariantCultureIgnoreCase)) + if (attr.Equals("distinguishedname", StringComparison.OrdinalIgnoreCase)) { writer.WriteElementString("ad", "SelectionProperty", null, "ad:distinguishedName"); } - else if (attr.Equals("*", StringComparison.InvariantCultureIgnoreCase)) + else if (attr.Equals("*", StringComparison.OrdinalIgnoreCase)) { writer.WriteElementString("ad", "SelectionProperty", null, "ad:all"); } - else if (attr.Equals("**", StringComparison.InvariantCultureIgnoreCase)) + else if (attr.Equals("**", StringComparison.OrdinalIgnoreCase)) { writer.WriteElementString("ad", "SelectionProperty", null, "addata:all"); } diff --git a/ADWSProxy/ADWS/Request/EnumerateResponse.cs b/ADWSProxy/ADWS/Request/EnumerateResponse.cs index f8e3e39..65a527d 100644 --- a/ADWSProxy/ADWS/Request/EnumerateResponse.cs +++ b/ADWSProxy/ADWS/Request/EnumerateResponse.cs @@ -1,16 +1,11 @@ -using System; -using System.ServiceModel.Channels; +using System.ServiceModel.Channels; using System.Xml; namespace ADWSProxy.ADWS.Request { - internal class EnumerateResponse : ADWSResponse + internal class EnumerateResponse(Message response) : ADWSResponse(response) { - public EnumerateResponse(Message response) : base(response) - { - } - - public string EnumerateContext { get; set; } + public string? EnumerateContext { get; set; } public DateTime Expiration { get; set; } protected override void OnReadBodyContents(XmlDictionaryReader reader) @@ -20,13 +15,13 @@ protected override void OnReadBodyContents(XmlDictionaryReader reader) { if (reader.NodeType == XmlNodeType.Element) { - if (reader.LocalName == "Expires") + if (reader.LocalName.Equals("Expires", StringComparison.OrdinalIgnoreCase)) { var expirationString = reader.ReadElementContentAsString(); Expiration = XmlConvert.ToDateTime(expirationString, XmlDateTimeSerializationMode.Utc); } - if (reader.LocalName == "EnumerationContext") + if (reader.LocalName.Equals("EnumerationContext", StringComparison.OrdinalIgnoreCase)) { EnumerateContext = reader.ReadElementContentAsString(); } diff --git a/ADWSProxy/ADWS/Request/GetRequest.cs b/ADWSProxy/ADWS/Request/GetRequest.cs index a76e326..64af399 100644 --- a/ADWSProxy/ADWS/Request/GetRequest.cs +++ b/ADWSProxy/ADWS/Request/GetRequest.cs @@ -2,12 +2,8 @@ namespace ADWSProxy.ADWS.Request { - internal class GetRequest : ADWSRequest + internal class GetRequest(string instance) : ADWSRequest(instance: instance, objectReferenceProperty: "11111111-1111-1111-1111-111111111111") { - public GetRequest(string instance) : base(instance: instance, objectReferenceProperty: "11111111-1111-1111-1111-111111111111") - { - } - public override string Action => "http://schemas.xmlsoap.org/ws/2004/09/transfer/Get"; protected override void OnWriteBodyContents(XmlDictionaryWriter writer) diff --git a/ADWSProxy/ADWS/Request/GetResponse.cs b/ADWSProxy/ADWS/Request/GetResponse.cs index 4ef713a..aaa56c3 100644 --- a/ADWSProxy/ADWS/Request/GetResponse.cs +++ b/ADWSProxy/ADWS/Request/GetResponse.cs @@ -1,22 +1,17 @@ -using System.Collections.Generic; -using System.ServiceModel.Channels; +using System.ServiceModel.Channels; using System.Xml; namespace ADWSProxy.ADWS.Request { - internal class GetResponse : ADWSResponse + internal class GetResponse(Message response) : ADWSResponse(response) { - public GetResponse(Message response) : base(response) - { - } - - public Dictionary> Items { get; set; } = new Dictionary> { }; + public Dictionary> Items { get; set; } = []; protected override void OnReadBodyContents(XmlDictionaryReader reader) { while (reader.Read()) { - if (reader.NodeType == XmlNodeType.Element && reader.LocalName != "value") + if (reader.NodeType == XmlNodeType.Element && !reader.LocalName.Equals("value", StringComparison.OrdinalIgnoreCase)) { var elementName = reader.LocalName; while (reader.Read()) @@ -24,16 +19,18 @@ protected override void OnReadBodyContents(XmlDictionaryReader reader) if (reader.NodeType == XmlNodeType.Text) { var nodeValue = reader.Value; +#pragma warning disable CA1854 // Prefer the 'IDictionary.TryGetValue(TKey, out TValue)' method if (Items.ContainsKey(elementName)) { Items[elementName].Add(nodeValue); } else { - Items.Add(elementName, new List() { nodeValue }); + Items.Add(elementName, [nodeValue]); } +#pragma warning restore CA1854 // Prefer the 'IDictionary.TryGetValue(TKey, out TValue)' method } - if (reader.NodeType == XmlNodeType.EndElement && reader.LocalName != "value") + if (reader.NodeType == XmlNodeType.EndElement && !reader.LocalName.Equals("value", StringComparison.OrdinalIgnoreCase)) { break; } diff --git a/ADWSProxy/ADWS/Request/PullRequest.cs b/ADWSProxy/ADWS/Request/PullRequest.cs index 79cac7a..643c774 100644 --- a/ADWSProxy/ADWS/Request/PullRequest.cs +++ b/ADWSProxy/ADWS/Request/PullRequest.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.DirectoryServices.Protocols; +using System.DirectoryServices.Protocols; using System.Xml; namespace ADWSProxy.ADWS.Request @@ -18,10 +16,10 @@ public PullRequest(string instance, string enumerationContext) : base(instance: public override string Action => "http://schemas.xmlsoap.org/ws/2004/09/enumeration/Pull"; - private List Controls { get; } = new List() - { - new DirectoryControl("1.2.840.113556.1.4.801", new byte[] { 0x30, 0x84, 0x00, 0x00, 0x00, 0x03, 0x02, 0x01, 0x07 }, true, true) - }; + private List Controls { get; } = + [ + new("1.2.840.113556.1.4.801", [0x30, 0x84, 0x00, 0x00, 0x00, 0x03, 0x02, 0x01, 0x07], true, true) + ]; private string EnumerationContext { get; } @@ -53,7 +51,7 @@ protected override void OnWriteBodyContents(XmlDictionaryWriter writer) if (buffer != null && buffer.Length > 0) { writer.WriteStartElement("controlValue", "http://schemas.microsoft.com/2008/1/ActiveDirectory"); - string prefix = writer.LookupPrefix("http://www.w3.org/2001/XMLSchema"); + string? prefix = writer.LookupPrefix("http://www.w3.org/2001/XMLSchema"); writer.WriteAttributeString("type", "http://www.w3.org/2001/XMLSchema-instance", $"{prefix}:base64Binary"); writer.WriteBase64(buffer, 0, buffer.Length); writer.WriteEndElement(); diff --git a/ADWSProxy/ADWS/Request/PullResponse.cs b/ADWSProxy/ADWS/Request/PullResponse.cs index 35d8151..c9810bc 100644 --- a/ADWSProxy/ADWS/Request/PullResponse.cs +++ b/ADWSProxy/ADWS/Request/PullResponse.cs @@ -1,22 +1,16 @@ using ADWSProxy.LDAP; using Flexinets.Ldap.Core; -using System; -using System.Collections.Generic; using System.ServiceModel.Channels; using System.Xml; namespace ADWSProxy.ADWS.Request { - internal class PullResponse : ADWSResponse + internal class PullResponse(Message response) : ADWSResponse(response) { - public PullResponse(Message response) : base(response) - { - } - public bool EndOfSequence { get; private set; } = false; - public string EnumerateContext { get; private set; } + public string? EnumerateContext { get; private set; } - public Dictionary> Items { get; set; } = new Dictionary>(); + public Dictionary> Items { get; set; } = []; protected override void OnReadBodyContents(XmlDictionaryReader reader) { @@ -37,13 +31,13 @@ protected override void OnReadBodyContents(XmlDictionaryReader reader) reader.Read(); var item = new List(); - string dn = null; + string? dn = null; do { if (reader.NodeType == XmlNodeType.Element) { var elementName = reader.LocalName; - if (elementName.Equals("distinguishedName", StringComparison.InvariantCultureIgnoreCase)) + if (elementName.Equals("distinguishedName", StringComparison.OrdinalIgnoreCase)) { reader.Read(); dn = reader.ReadElementContentAsString(); @@ -56,7 +50,7 @@ protected override void OnReadBodyContents(XmlDictionaryReader reader) reader.Read(); if (reader.NodeType == XmlNodeType.Element) { - string type = reader.GetAttribute("type", "http://www.w3.org/2001/XMLSchema-instance"); + string? type = reader.GetAttribute("type", "http://www.w3.org/2001/XMLSchema-instance"); reader.Read(); string contentString = reader.ReadContentAsString(); @@ -85,10 +79,10 @@ protected override void OnReadBodyContents(XmlDictionaryReader reader) { Items.Add(dn, item); } - item = new List(); + item = []; dn = null; reader.Read(); - if (reader.NodeType == XmlNodeType.EndElement && reader.LocalName.Equals("items", StringComparison.InvariantCultureIgnoreCase)) + if (reader.NodeType == XmlNodeType.EndElement && reader.LocalName.Equals("items", StringComparison.OrdinalIgnoreCase)) { reader.Read(); if (reader.IsStartElement("EndOfSequence", "http://schemas.xmlsoap.org/ws/2004/09/enumeration")) diff --git a/ADWSProxy/ADWS/Request/ReleaseRequest.cs b/ADWSProxy/ADWS/Request/ReleaseRequest.cs index 5cbd5b5..3694d7a 100644 --- a/ADWSProxy/ADWS/Request/ReleaseRequest.cs +++ b/ADWSProxy/ADWS/Request/ReleaseRequest.cs @@ -1,5 +1,4 @@ -using System; -using System.Xml; +using System.Xml; namespace ADWSProxy.ADWS.Request { diff --git a/ADWSProxy/ADWS/Request/RenewRequest.cs b/ADWSProxy/ADWS/Request/RenewRequest.cs index 35d9aee..1359d6a 100644 --- a/ADWSProxy/ADWS/Request/RenewRequest.cs +++ b/ADWSProxy/ADWS/Request/RenewRequest.cs @@ -1,5 +1,4 @@ -using System; -using System.Xml; +using System.Xml; namespace ADWSProxy.ADWS.Request { diff --git a/ADWSProxy/ADWS/Request/RenewResponse.cs b/ADWSProxy/ADWS/Request/RenewResponse.cs index 535b716..1f529a2 100644 --- a/ADWSProxy/ADWS/Request/RenewResponse.cs +++ b/ADWSProxy/ADWS/Request/RenewResponse.cs @@ -1,16 +1,11 @@ -using System; -using System.ServiceModel.Channels; +using System.ServiceModel.Channels; using System.Xml; namespace ADWSProxy.ADWS.Request { - internal class RenewResponse : ADWSResponse + internal class RenewResponse(Message response) : ADWSResponse(response) { - public RenewResponse(Message response) : base(response) - { - } - - public string EnumerateContext { get; set; } + public string? EnumerateContext { get; set; } public DateTime Expiration { get; set; } protected override void OnReadBodyContents(XmlDictionaryReader reader) @@ -20,13 +15,13 @@ protected override void OnReadBodyContents(XmlDictionaryReader reader) { if (reader.NodeType == XmlNodeType.Element) { - if (reader.LocalName == "Expires") + if (reader.LocalName.Equals("Expires", StringComparison.OrdinalIgnoreCase)) { var expirationString = reader.ReadElementContentAsString(); Expiration = XmlConvert.ToDateTime(expirationString, XmlDateTimeSerializationMode.Utc); } - if (reader.LocalName == "EnumerationContext") + if (reader.LocalName.Equals("EnumerationContext", StringComparison.OrdinalIgnoreCase)) { EnumerateContext = reader.ReadElementContentAsString(); } diff --git a/ADWSProxy/ADWS/UserAccountControl.cs b/ADWSProxy/ADWS/UserAccountControl.cs index 36af156..910a638 100644 --- a/ADWSProxy/ADWS/UserAccountControl.cs +++ b/ADWSProxy/ADWS/UserAccountControl.cs @@ -1,6 +1,4 @@ -using System; - -namespace ADWSProxy.ADWS +namespace ADWSProxy.ADWS { /// /// Flags that control the behavior of the user account. diff --git a/ADWSProxy/ADWSProxy.args.json b/ADWSProxy/ADWSProxy.args.json deleted file mode 100644 index e37036f..0000000 --- a/ADWSProxy/ADWSProxy.args.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "FileVersion": 2, - "Id": "750e2653-08cf-4c6d-b82a-1e96fb256e63", - "Items": [ - { - "Id": "d5ce77d0-fd22-4514-8497-ed6246a442ec", - "Command": "--adwsdcport 9389" - }, - { - "Id": "d306ec98-350a-4314-acb7-461accd39423", - "Command": "--adwsgcport 9389" - }, - { - "Id": "4c13d48e-6abf-4626-90da-e532e0f1f1c1", - "Command": "--ldapport 389" - }, - { - "Id": "f149c078-062f-4429-bb0c-d2e736250c09", - "Command": "--gcport 3268" - }, - { - "Id": "5684100b-345a-4807-a16c-598cf6fc1549", - "Command": "--consoleloglevel DEBUG" - }, - { - "Id": "7ef4b711-3487-4467-a52b-ffa0afb7c88e", - "Command": "--logdirectory ." - }, - { - "Id": "a07ed351-3c06-4ac9-9ce4-e1687cef7ac8", - "Command": "--exitondnsstarterror true" - }, - { - "Id": "ef0010fa-8c50-41fc-b0da-04c5e6019e33", - "Command": "--usewindowsauth false" - }, - { - "Id": "f0dc762e-2490-4244-9146-91da156b7106", - "Command": "--dnsport 53" - }, - { - "Id": "eb845389-cea1-4fa3-96c1-03c52b1796c8", - "Command": "--domain XXX" - }, - { - "Id": "b707a127-33c5-4f3c-91e8-e585f10ce05b", - "Command": "--username XXX" - }, - { - "Id": "cd389b20-a824-4458-b6d9-8eedd134e593", - "Command": "--password XXX" - }, - { - "Id": "872ebef8-9a73-439d-9795-3259cacd6bc9", - "Command": "--domaincontroller dc01" - }, - { - "Id": "f7a74587-565f-4d03-aa6b-229e0119fc56", - "Command": "--globalcatalog dc01" - } - ] -} \ No newline at end of file diff --git a/ADWSProxy/ADWSProxy.csproj b/ADWSProxy/ADWSProxy.csproj index a94a54c..3685c12 100644 --- a/ADWSProxy/ADWSProxy.csproj +++ b/ADWSProxy/ADWSProxy.csproj @@ -1,143 +1,38 @@ - - - - - Debug - AnyCPU - {750E2653-08CF-4C6D-B82A-1E96FB256E63} - Exe - ADWSProxy - ADWSProxy - v4.8 - 512 - true - true - - false - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\CommandLineParser.2.9.1\lib\net461\CommandLine.dll - - - ..\packages\DNS.7.0.0\lib\netstandard2.0\DNS.dll - - - ..\packages\Flexinets.Ldap.Core.1.0.86\lib\net471\Flexinets.Ldap.Core.dll - - - ..\packages\log4net.2.0.15\lib\net45\log4net.dll - - - ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll - - - - - - - - ..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll - True - True - - - ..\packages\System.Reflection.TypeExtensions.4.7.0\lib\net461\System.Reflection.TypeExtensions.dll - - - - ..\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll - True - True - - - ..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - Microsoft .NET Framework 4.8 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 - false - - - - \ No newline at end of file + + + + Exe + net8.0 + enable + enable + Linux + 2.0.0 + 2.0.0.0 + 2.0.0.0 + 2.0.0-beta + true + $(InterceptorsPreviewNamespaces);Microsoft.Extensions.Configuration.Binder.SourceGeneration + true + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ADWSProxy/AdwsEndpoint.cs b/ADWSProxy/AdwsEndpoint.cs new file mode 100644 index 0000000..66a6159 --- /dev/null +++ b/ADWSProxy/AdwsEndpoint.cs @@ -0,0 +1,14 @@ +namespace ADWSProxy +{ + public enum AdwsEndpoint + { + /// + /// Targets /ActiveDirectoryWebServices/Windows/[...] + /// + Windows, + /// + /// Targets /ActiveDirectoryWebServices/UserName/[...] + /// + Username + } +} \ No newline at end of file diff --git a/ADWSProxy/App.config b/ADWSProxy/App.config deleted file mode 100644 index c43a35d..0000000 --- a/ADWSProxy/App.config +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ADWSProxy/CommandLineOptions.cs b/ADWSProxy/CommandLineOptions.cs index 63d0722..cccc32f 100644 --- a/ADWSProxy/CommandLineOptions.cs +++ b/ADWSProxy/CommandLineOptions.cs @@ -1,65 +1,121 @@ -using CommandLine; -using System.Net; +using System.Net; namespace ADWSProxy { - internal class CommandLineOptions + public class CommandLineOptions { - [Option("adwsdcport", Required = false, Default = 9389, HelpText = "The ADWS port to proxy to on the domain controller")] - public int ADWSDCPort { get; set; } - - [Option("adwsgcport", Required = false, Default = 9389, HelpText = "The ADWS port to proxy to on the global catalog")] - public int ADWSGCPort { get; set; } - - [Option("consoleloglevel", Required = false, Default = "INFO", HelpText = "Set the log level for the console output")] - public string ConsoleLogLevel { get; set; } - - [Option("dnsport", Required = false, Default = 53, HelpText = "The DNS port to proxy from")] - public int DnsPort { get; set; } - - [Option('D', "domain", Required = false, Default = null, HelpText = "The domain to authenticate to ADWS")] - public string Domain { get; set; } - - [Option("domaincontroller", Required = true, HelpText = "The domain controller to proxy to")] - public string DomainController { get; set; } - - [Option("exitondnsstarterror", Required = false, Default = true, HelpText = "Exit the application if the DNS port is already in use")] - public bool? ExitOnDNSStartError { get; set; } - - [Option("gcinstance", Required = false, Default = "ldap:3268", HelpText = "The GC instance within ADWS")] - public string GCInstance { get; set; } - - [Option("gcport", Required = false, Default = (ushort)3268, HelpText = "The GC port to proxy from")] - public ushort GCPort { get; set; } - - [Option("globalcatalog", Required = false, HelpText = "The global catalog to proxy to")] - public string GlobalCatalog { get; set; } + private string? _globalCatalog; + private string? _domainController; + + public int ADWSDCPort { get; set; } = 9389; + public int ADWSGCPort { get; set; } = 9389; + public string ConsoleLogLevel { get; set; } = "INFO"; + public string? Domain { get; set; } + + public string? DomainController + { + get + { + if (string.IsNullOrWhiteSpace(_domainController)) + { + throw new ArgumentException($"--domaincontroller '{_domainController}' must be a full FQDN"); + } + return _domainController; + } + set + { + if (string.IsNullOrWhiteSpace(value)) + { + throw new ArgumentException($"--domaincontroller is required"); + } + _domainController = value; + } + } - [Option("ldapinstance", Required = false, Default = "ldap:389", HelpText = "The LDAP instance within ADWS")] - public string LDAPInstance { get; set; } + public bool ExitOnDNSStartError { get; set; } = false; + public ushort GCPort { get; set; } = 3268; - [Option("ldapport", Required = false, Default = (ushort)389, HelpText = "The LDAP port to proxy from")] - public ushort LDAPPort { get; set; } + public string? GlobalCatalog + { + get + { + if (string.IsNullOrWhiteSpace(_globalCatalog)) + { + return null; + } + return _globalCatalog; + } + + set + { + if (string.IsNullOrWhiteSpace(value)) + { + _globalCatalog = null; + } + _globalCatalog = value; + } + } - [Option("logdirectory", Required = false, Default = ".", HelpText = "The log directory to output runtime logs. Defaults to the current working directory.")] - public string LogDirectory { get; set; } + public string? HostIP { get; set; } - [Option('p', "password", Required = false, Default = null, HelpText = "The password to authenticate to ADWS")] - public string Password { get; set; } + private string _listenIP = "0.0.0.0"; - [Option('u', "username", Required = false, Default = null, HelpText = "The username to authenticate to ADWS")] - public string Username { get; set; } + public string ListenIP + { + get => _listenIP; + set + { + if (IPAddress.TryParse(value, out var address) && + address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) + { + _listenIP = value; + } + else + { + throw new ArgumentException($"--hostip '{value}' is not a valid IPv4 address"); + } + } + } + public bool OnlyUseGCBackend { get; set; } = false; + public ushort LDAPPort { get; set; } = 389; + public string LogDirectory { get; set; } = "."; + public string? Password { get; set; } + public string? Username { get; set; } + public AdwsEndpoint Mode { get; set; } = AdwsEndpoint.Windows; + public bool SkipDns { get; set; } = false; + public bool SkipRootDSE { get; set; } = false; - [Option("usewindowsauth", Required = false, Default = true, HelpText = "Use Windows Authentication (default) or Username/Password with TLS")] - public bool? UseWindowsAuth { get; set; } - public NetworkCredential GetNetworkCredential() + public NetworkCredential? GetNetworkCredential() { if (Username == null && Password == null && Domain == null) return null; - if (Username == null || Password == null || Domain == null) throw new System.ArgumentException("Username, Password and Domain all need to be used when one value is entered"); + return (Username == null || Password == null || Domain == null) + ? throw new ArgumentException("Username, Password, and Domain must all be provided if any one is entered") + : new NetworkCredential(Username, Password, Domain); + } - return new NetworkCredential(Username, Password, Domain); + public static void ShowHelp() + { + Console.WriteLine("ADWSProxy - Active Directory Web Services Proxy"); + Console.WriteLine("Created by Rabobank Red Team"); + Console.WriteLine("=============================================="); + Console.WriteLine("Options:"); + Console.WriteLine(" --domaincontroller (Required) The DC to proxy to"); + Console.WriteLine(" --globalcatalog The GC to proxy to"); + Console.WriteLine(" --ldapport LDAP port to listen on (Default: 389)"); + Console.WriteLine(" --gcport GC port to listen on (Default: 3268)"); + Console.WriteLine(" --adwsdcport Target ADWS DC port (Default: 9389)"); + Console.WriteLine(" --hostip The IP used for the DNS responses (Default: IPv4 local IP)"); + Console.WriteLine(" --listenip The IP to listen on for LDAP/GC requests (Default: 0.0.0.0)"); + Console.WriteLine(" --mode ADWS Endpoint Mode (Default: Windows)"); + Console.WriteLine(" --skipdns Skip starting the DNS listener"); + Console.WriteLine(" --skiprootdse Skip starting the DNS listener"); + Console.WriteLine(" --username Username for ADWS authentication"); + Console.WriteLine(" --password Password for ADWS authentication"); + Console.WriteLine(" --domain Domain for ADWS authentication"); + Console.WriteLine(" --help Show this help message"); + Console.WriteLine(); } } } \ No newline at end of file diff --git a/ADWSProxy/DNS/Resolver.cs b/ADWSProxy/DNS/Resolver.cs index f129b62..4cee7e4 100644 --- a/ADWSProxy/DNS/Resolver.cs +++ b/ADWSProxy/DNS/Resolver.cs @@ -1,95 +1,95 @@ -using DNS.Client.RequestResolver; -using DNS.Protocol; -using DNS.Protocol.ResourceRecords; -using System; +using ARSoft.Tools.Net; +using ARSoft.Tools.Net.Dns; using System.Net; -using System.Net.Sockets; -using System.Threading; -using System.Threading.Tasks; namespace ADWSProxy.DNS { - internal class Resolver : IRequestResolver + internal class Resolver { - private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + private static readonly log4net.ILog logger = LogHelper.GetLogger(typeof(Resolver)); - public Resolver(ushort ldapPort, ushort gcport) + public Resolver(ushort ldapPort, ushort gcPort, IPAddress? localIP = null) { - logger.Info($"Constructing new {GetType().FullName}"); - LdapPort = ldapPort; - Gcport = gcport; + GcPort = gcPort; Hostname = Dns.GetHostName(); - IPAddress = GetLocalIPAddress(); - - logger.Debug($"DNS Hostname: {Hostname}"); - logger.Debug($"Local IP address: {IPAddress}"); + LocalIP = localIP ?? GetLocalIPAddress(); + logger.Info($"ARSoft Resolver Initialized. Host: {Hostname}, IP: {LocalIP}"); } - private ushort Gcport { get; } - private string Hostname { get; set; } - private IPAddress IPAddress { get; set; } private ushort LdapPort { get; } + private ushort GcPort { get; } + private string Hostname { get; } + private IPAddress LocalIP { get; } - public Task Resolve(IRequest request, CancellationToken cancellationToken = default) + public Task OnQueryReceived(object sender, QueryReceivedEventArgs e) { - logger.Info("Resolving new DNS request"); + if (e.Query is not DnsMessage query) return Task.CompletedTask; - IResponse response = Response.FromRequest(request); + // Create a response based on the query + DnsMessage response = query.CreateResponseInstance(); + response.ReturnCode = ReturnCode.NoError; + response.IsAuthoritiveAnswer = true; - foreach (Question question in response.Questions) + foreach (var question in query.Questions) { - logger.Debug($"DNS request = {question.Name}"); + string name = question.Name.ToString().ToLower().TrimEnd('.'); + logger.Debug($"Processing {question.RecordType} query for: {name}"); - switch (question.Type) + switch (question.RecordType) { case RecordType.A: - IResourceRecord recordA = new IPAddressResourceRecord(question.Name, IPAddress); - response.AnswerRecords.Add(recordA); + // Redirect all A-record lookups to the Proxy's IP + response.AnswerRecords.Add(new ARecord(question.Name, 3600, LocalIP)); break; - //case RecordType.AAAA: - // IResourceRecord recordAAAA = new IPAddressResourceRecord(question.Name, IPAddress.Parse("::1")); - // response.AnswerRecords.Add(recordAAAA); - // break; - - case RecordType.SRV: - ushort port = 1; - if (question.Name.ToString().StartsWith("_ldap._tcp.pdc._msdcs.", StringComparison.OrdinalIgnoreCase)) - { - port = LdapPort; - } - else if (question.Name.ToString().StartsWith("_ldap._tcp.gc._msdcs.", StringComparison.OrdinalIgnoreCase)) - { - port = Gcport; - } - IResourceRecord recordSRV = new ServiceResourceRecord(question.Name, 0, 100, port, new Domain(Hostname)); - response.AnswerRecords.Add(recordSRV); + case RecordType.Srv: + ushort targetPort = DetermineSrvPort(name); + + // Target must be a DomainName object in ARSoft + //DomainName targetHost = DomainName.Parse(Hostname); + DomainName target = DomainName.Parse(LocalIP.ToString()); + + response.AnswerRecords.Add(new SrvRecord( + question.Name, + 3600, // TTL + 0, // Priority + 100, // Weight + targetPort, + target)); + + logger.Info($"Spoofed SRV: {name} -> {target}:{targetPort}"); + break; default: - throw new NotImplementedException($"RequestType: {question.Type} has not been implemented"); + // For other types, we return an empty success or let it time out + logger.Debug($"Ignoring unsupported record type: {question.RecordType}"); + break; } } - logger.Debug($"DNS response = {response}"); - return Task.FromResult(response); + e.Response = response; + return Task.CompletedTask; } - private static IPAddress GetLocalIPAddress() + private ushort DetermineSrvPort(string queryName) { - var host = Dns.GetHostEntry(Dns.GetHostName()); - foreach (var ip in host.AddressList) + if (queryName.Contains("_ldap._tcp")) return LdapPort; + if (queryName.Contains("_gc._tcp")) return GcPort; + if (queryName.Contains("_identity._tcp") || queryName.Contains("_adws._tcp")) { - if (ip.AddressFamily == AddressFamily.InterNetwork) - { - return ip; - } + return 9389; } - const string errorString = "No network adapters with an IPv4 address in the system!"; - logger.Error(errorString); - throw new Exception(errorString); + return 1; + } + + private static IPAddress GetLocalIPAddress() + { + return Dns.GetHostEntry(Dns.GetHostName()).AddressList + .FirstOrDefault(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) + ?? throw new Exception("No IPv4 address found!"); } } } \ No newline at end of file diff --git a/ADWSProxy/Dockerfile b/ADWSProxy/Dockerfile new file mode 100644 index 0000000..52dd529 --- /dev/null +++ b/ADWSProxy/Dockerfile @@ -0,0 +1,38 @@ +# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. + +# This stage is used when running from VS in fast mode (Default for Debug configuration) +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base +RUN apt-get update && apt-get install -y --no-install-recommends \ + gss-ntlmssp \ + libldap-2.5-0 \ + iputils-ping \ + netcat-openbsd \ + dnsutils \ + && rm -rf /var/lib/apt/lists/* +WORKDIR /app +EXPOSE 53 +EXPOSE 389 +EXPOSE 3268 + +USER $APP_UID + +# This stage is used to build the service project +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["ADWSProxy/ADWSProxy.csproj", "ADWSProxy/"] +RUN dotnet restore "./ADWSProxy/ADWSProxy.csproj" +COPY . . +WORKDIR "/src/ADWSProxy" +RUN dotnet build "./ADWSProxy.csproj" -c $BUILD_CONFIGURATION -o /app/build + +# This stage is used to publish the service project to be copied to the final stage +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./ADWSProxy.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration) +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "ADWSProxy.dll"] \ No newline at end of file diff --git a/ADWSProxy/LDAP/DataHolder.cs b/ADWSProxy/LDAP/DataHolder.cs index 6ff4735..b3d88aa 100644 --- a/ADWSProxy/LDAP/DataHolder.cs +++ b/ADWSProxy/LDAP/DataHolder.cs @@ -1,19 +1,16 @@ using Flexinets.Ldap.Core; -using System; namespace ADWSProxy.LDAP { - internal class DataHolder + public class DataHolder(string name, object data, UniversalDataType? dataType) { - public DataHolder(string name, object data, UniversalDataType? dataType) + public object Data { get; } = data; + public UniversalDataType DataType { get; } = dataType ?? throw new ArgumentNullException(nameof(dataType)); + public string Name { get; } = name; + + public override string ToString() { - Name = name ?? throw new ArgumentNullException(nameof(name)); - Data = data ?? throw new ArgumentNullException(nameof(data)); - DataType = dataType ?? throw new ArgumentNullException(nameof(DataType)); + return $"Name:{Name}, DataType:{DataType}, Data:{Data}"; } - - public object Data { get; } - public UniversalDataType DataType { get; } - public string Name { get; } } -} \ No newline at end of file +} diff --git a/ADWSProxy/LDAP/Helpers.cs b/ADWSProxy/LDAP/Helpers.cs index e8eb09a..f9130c4 100644 --- a/ADWSProxy/LDAP/Helpers.cs +++ b/ADWSProxy/LDAP/Helpers.cs @@ -1,12 +1,75 @@ using Flexinets.Ldap.Core; -using System.Collections.Generic; -using System.Linq; +using log4net; using System.Reflection; +using System.Security.Principal; +using System.Text; namespace ADWSProxy.LDAP { internal static class Helpers { + private static readonly ILog logger = LogHelper.GetLogger(typeof(Helpers)); + + public static string ConvertByteSidToStringSid(byte[] bytes) + { + if (bytes == null || bytes.Length < 8) + return string.Empty; + + // 1. Generate the SID string using the cross-platform manual parser + string manualSid = ParseSidManually(bytes); + + // 2. Perform Windows-specific validation if requested + if (logger.IsDebugEnabled && OperatingSystem.IsWindows()) + { + try + { + var nativeSid = new SecurityIdentifier(bytes, 0).ToString(); + + if (!string.Equals(manualSid, nativeSid, StringComparison.OrdinalIgnoreCase)) + { + // Generate Base64 for easier external debugging + string base64 = Convert.ToBase64String(bytes); + + logger.Warn($"SID Mismatch! Manual: {manualSid} | Native: {nativeSid} | Raw Base64: {base64}"); + + return nativeSid; + } + } + catch (Exception ex) + { + string base64 = Convert.ToBase64String(bytes); + logger.Debug($"Native SID validation failed. Manual: {manualSid} | Base64: {base64}", ex); + } + } + + return manualSid; + } + private static string ParseSidManually(byte[] bytes) + { + byte revision = bytes[0]; + int count = bytes[1]; + + long authority = 0; + for (int i = 2; i <= 7; i++) + { + authority = (authority << 8) | bytes[i]; + } + + StringBuilder sb = new(); + sb.Append($"S-{revision}-{authority}"); + + for (int i = 0; i < count; i++) + { + int offset = 8 + (i * 4); + if (offset + 4 > bytes.Length) break; + + uint subAuthority = BitConverter.ToUInt32(bytes, offset); + sb.Append($"-{subAuthority}"); + } + + return sb.ToString(); + } + public static LdapAttribute AddItemsToResponse(this LdapAttribute response, List items) { var list = new LdapAttribute(UniversalDataType.Sequence); @@ -31,9 +94,9 @@ public static LdapAttribute AddItemsToResponse(this LdapAttribute response, List return response; } - public static byte[] GetRawValue(this LdapAttribute ldapAttribute) + public static byte[]? GetRawValue(this LdapAttribute ldapAttribute) { - return (byte[])typeof(LdapAttribute).GetField("Value", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(ldapAttribute); + return typeof(LdapAttribute).GetField("Value", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(ldapAttribute) as byte[]; } /// @@ -42,8 +105,7 @@ public static byte[] GetRawValue(this LdapAttribute ldapAttribute) public static IEnumerable NTLMMatchedDN() { return - new List - { + [ 0x4e,0x54,0x4c,0x4d,0x53,0x53,0x50,0x00, // NTLMSSP\0 0x02,0x00,0x00,0x00, // NTLMSSP_CHALLENGE // Target Name: @@ -104,7 +166,7 @@ public static IEnumerable NTLMMatchedDN() 0x00,0x00, // Item Length: 0 // End attribute 0x04,0x00 // End of bind response - }; + ]; } } } \ No newline at end of file diff --git a/ADWSProxy/LDAP/LdapResultRawMatchedDNAttribute.cs b/ADWSProxy/LDAP/LdapResultRawMatchedDNAttribute.cs index a335120..e2d27ec 100644 --- a/ADWSProxy/LDAP/LdapResultRawMatchedDNAttribute.cs +++ b/ADWSProxy/LDAP/LdapResultRawMatchedDNAttribute.cs @@ -1,6 +1,4 @@ using Flexinets.Ldap.Core; -using System.Collections.Generic; -using System.Linq; namespace ADWSProxy.LDAP { @@ -9,7 +7,7 @@ internal class LdapResultRawMatchedDNAttribute : LdapAttribute /// /// This is a copy of LdapResultAttribute. However, for that class it was only possible to set the MatchedDN as a string. This resulted in changes to the data compared to sending a byte array directly. /// - internal LdapResultRawMatchedDNAttribute(LdapOperation operation, LdapResult result, IEnumerable matchedDN = null, string diagnosticMessage = "") : base(operation) + internal LdapResultRawMatchedDNAttribute(LdapOperation operation, LdapResult result, IEnumerable? matchedDN = null, string diagnosticMessage = "") : base(operation) { ChildAttributes.Add(new LdapAttribute(UniversalDataType.Enumerated, (byte)result)); if (matchedDN != null) diff --git a/ADWSProxy/LDAP/Listener.cs b/ADWSProxy/LDAP/Listener.cs index 1078042..b407291 100644 --- a/ADWSProxy/LDAP/Listener.cs +++ b/ADWSProxy/LDAP/Listener.cs @@ -1,28 +1,22 @@ using ADWSProxy.ADWS; using Flexinets.Ldap.Core; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; using System.Net; using System.Net.Sockets; -using System.Security.Principal; using System.Text; -using System.Threading.Tasks; namespace ADWSProxy.LDAP { internal class Listener : IDisposable { - private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + private static readonly log4net.ILog logger = LogHelper.GetLogger(typeof(Listener)); - public Listener(IPEndPoint endpoint, string domainController, int adwsPort, string instance, bool useWindowsAuth, NetworkCredential credential = null) + public Listener(IPEndPoint endpoint, string domainController, int adwsPort, string instance, AdwsEndpoint mode, NetworkCredential? credential = null) { logger.Info($"Constructing new {GetType().FullName}"); TcpListener = new TcpListener(endpoint); - ADWSConnection = new Connection(domainController, adwsPort, instance, useWindowsAuth, credential); + ADWSConnection = new Connection(domainController, adwsPort, instance, mode, credential); Instance = instance; } @@ -48,20 +42,20 @@ public void Stop() /// Handle bindrequests /// /// - private bool HandleBindRequest(Stream stream, LdapPacket requestPacket) + private static bool HandleBindRequest(Stream stream, LdapPacket requestPacket) { logger.Info($"Handling bind request"); var bindrequest = requestPacket.ChildAttributes.SingleOrDefault(o => o.LdapOperation == LdapOperation.BindRequest); - var passwordAttribute = bindrequest.ChildAttributes[2]; + var passwordAttribute = bindrequest?.ChildAttributes[2]; - LdapAttribute ldapResultPacket = null; + LdapAttribute? ldapResultPacket = null; - switch (passwordAttribute.ContextType) + switch (passwordAttribute?.ContextType) { case 0: logger.Debug("Simple authentication"); - var username = bindrequest.ChildAttributes[1].GetValue(); + var username = bindrequest?.ChildAttributes[1].GetValue(); var password = passwordAttribute.GetValue(); logger.Debug($"Credentials: {username}:{password}"); ldapResultPacket = new LdapResultAttribute(LdapOperation.BindResponse, LdapResult.success); @@ -83,7 +77,7 @@ private bool HandleBindRequest(Stream stream, LdapPacket requestPacket) break; default: - logger.Error($"Unknown authentication type: '{passwordAttribute.ContextType}'"); + logger.Error($"Unknown authentication type: '{passwordAttribute?.ContextType}'"); ldapResultPacket = new LdapResultAttribute(LdapOperation.BindResponse, LdapResult.success, matchedDN: string.Empty); break; } @@ -93,7 +87,7 @@ private bool HandleBindRequest(Stream stream, LdapPacket requestPacket) responsePacket.ChildAttributes.Add(ldapResultPacket); var responseBytes = responsePacket.GetBytes(); stream.Write(responseBytes, 0, responseBytes.Length); - return ldapResultPacket.ChildAttributes.First(i => i.DataType == UniversalDataType.Enumerated).GetRawValue()[0] == (byte)LdapResult.success; + return ldapResultPacket?.ChildAttributes.First(i => i.DataType == UniversalDataType.Enumerated)!.GetRawValue()![0] == (byte)LdapResult.success; } private void HandleClient(TcpClient client) @@ -122,7 +116,7 @@ private void HandleClient(TcpClient client) if (isBound) { - logger.Debug("Client is bound. We can continue."); + logger.Debug("Client is bound. We can continue"); if (requestPacket.ChildAttributes.Any(o => o.LdapOperation == LdapOperation.SearchRequest)) { @@ -131,9 +125,9 @@ private void HandleClient(TcpClient client) } logger.Info("Packet handling done!"); } - catch (System.ArgumentException ex) + catch (ArgumentException ex) { - logger.Error("ArgumentException. Continuing.", ex); + logger.Error("ArgumentException. Continuing", ex); } catch (Exception ex) { @@ -148,83 +142,37 @@ private void HandleSearchRequest(NetworkStream stream, LdapPacket requestPacket) logger.Debug("Handling Search request"); var searchRequest = requestPacket.ChildAttributes.SingleOrDefault(o => o.LdapOperation == LdapOperation.SearchRequest); - var dnAttribute = searchRequest.ChildAttributes.First(); - var scopeAttribute = searchRequest.ChildAttributes[1]; - var filterAttributes = searchRequest.ChildAttributes.Where(item => item.Class == TagClass.Context); - var propertiesAttribute = searchRequest.ChildAttributes.Last(); + var dnAttribute = searchRequest?.ChildAttributes.First(); + var scopeAttribute = searchRequest?.ChildAttributes[1]; + var filterAttributes = searchRequest?.ChildAttributes.Where(item => item.Class == TagClass.Context); + var propertiesAttribute = searchRequest?.ChildAttributes.Last(); - var filter = ParseFilters(filterAttributes); - var properties = ParseProperties(propertiesAttribute); - var dn = dnAttribute.GetValue(); + var filter = ParseFilters(filterAttributes!); + var properties = ParseProperties(propertiesAttribute!); + var dn = dnAttribute?.GetValue(); - var scopeValue = scopeAttribute.GetValue(); - - string scope; - switch (scopeValue) + var scopeValue = scopeAttribute!.GetValue(); + string scope = scopeValue switch { - case "\u0001": - scope = "onelevel"; - break; - - case "\u0002": - scope = "subtree"; - break; - - case "\0": - scope = "base"; - break; - - default: - throw new NotImplementedException($"'{scopeValue}' is an unknown scope identifier"); - } - + "\u0001" => "onelevel", + "\u0002" => "subtree", + "\0" => "base", + _ => throw new NotImplementedException($"'{scopeValue}' is an unknown scope identifier"), + }; logger.Info($"Request DN = {dn}"); logger.Info($"Request filter = {filter}"); logger.Info($"Request properties = {string.Join(",", properties)}"); logger.Info($"Request scopeIdentifier = {scopeValue}, Scope: {scope}"); - // TODO: Check if there is a more elegant solution to this. - if (dn.Equals("") && filter.ToLower().Equals("(objectclass=*)") && scope == "base") - { - try - { - var rootDSE = ADWSConnection.GetRootDSE(); - var rootDSEEntryPacket = new LdapPacket(requestPacket.MessageId); - var rootDSEResultEntry = new LdapAttribute(LdapOperation.SearchResultEntry); - - rootDSEResultEntry.ChildAttributes.Add(new LdapAttribute(UniversalDataType.OctetString, string.Empty)); - rootDSEResultEntry = rootDSEResultEntry.AddItemsToResponse(rootDSE); - - rootDSEEntryPacket.ChildAttributes.Add(rootDSEResultEntry); - - byte[] responseEntryBytes = rootDSEEntryPacket.GetBytes(); - stream.Write(responseEntryBytes, 0, responseEntryBytes.Length); - - var ldapPacket = new LdapPacket(requestPacket.MessageId); - ldapPacket.ChildAttributes.Add(new LdapResultAttribute(LdapOperation.SearchResultDone, LdapResult.success)); - var ldapPacketBytes = ldapPacket.GetBytes(); - stream.Write(ldapPacketBytes, 0, ldapPacketBytes.Length); - } - catch (Exception ex) - { - logger.Error(ex.Message, ex); - var ldapPacket = new LdapPacket(requestPacket.MessageId); - ldapPacket.ChildAttributes.Add(new LdapResultAttribute(LdapOperation.SearchResultDone, LdapResult.operationError, diagnosticMessage: ex.Message)); - var ldapPacketBytes = ldapPacket.GetBytes(); - stream.Write(ldapPacketBytes, 0, ldapPacketBytes.Length); - } - return; - } - var blockedProperties = new List(); // Bloodhound.py requested the a number of non existing properties during testing. // These are removed from the request as this would cause an exception when sent to the ADWS endpoint. // Root cause of this issue has not been investigated as manually blocking these properties works for now. - if (dn.ToLower().StartsWith("cn=aggregate,cn=schema,cn=configuration,dc=") - && filter.ToLower().Equals("(objectclass=subschema)") + if (dn!.StartsWith("cn=aggregate,cn=schema,cn=configuration,dc=", StringComparison.OrdinalIgnoreCase) + && filter.Equals("(objectclass=subschema)", StringComparison.OrdinalIgnoreCase) && scope.Equals("base")) { - blockedProperties.AddRange(new[] { "createtimestamp", "ldapsyntaxes", "matchingrules", "matchingruleuse", "ditstructurerules", "nameforms" }); + blockedProperties.AddRange(["createtimestamp", "ldapsyntaxes", "matchingrules", "matchingruleuse", "ditstructurerules", "nameforms"]); } foreach (var blockedProperty in blockedProperties) { @@ -232,7 +180,7 @@ private void HandleSearchRequest(NetworkStream stream, LdapPacket requestPacket) } logger.Debug($"Filtered request properties = {string.Join(",", properties)}"); - ADWSConnection.Enumerate(dn, filter, properties, scope, ((string, List) result) => + ADWSConnection.Enumerate(dn!, filter, properties, scope, result => { logger.Info($"Result DN = {result.Item1}"); @@ -254,76 +202,62 @@ private void HandleSearchRequest(NetworkStream stream, LdapPacket requestPacket) stream.Write(responseDoneBytes, 0, responseDoneBytes.Length); } - private void LogPacket(LdapAttribute attribute) + private static void LogPacket(LdapAttribute attribute) { var sb = new StringBuilder(); RecurseAttributes(sb, attribute); logger.Debug($"Recieved LDAP Packet dump\n{sb}"); } - private string ParseFilter(LdapAttribute filterAttribute, StringBuilder sb = null) + private static string ParseFilter(LdapAttribute filterAttribute, StringBuilder? sb = null) { + sb ??= new StringBuilder(); + var context = (LdapFilterChoice?)filterAttribute.ContextType; if (context == null) { - return null; + return sb.ToString(); } - if (sb == null) - { - sb = new StringBuilder(); - } - - sb.Append("("); + sb.Append('('); switch (context) { case LdapFilterChoice.and: - sb.Append("&"); + sb.Append('&'); break; case LdapFilterChoice.or: - sb.Append("|"); + sb.Append('|'); break; case LdapFilterChoice.not: - sb.Append("!"); + sb.Append('!'); break; case LdapFilterChoice.substrings: var subStringAttribute = filterAttribute.ChildAttributes[1].ChildAttributes.First(); string substring = subStringAttribute.GetValue(); - string value; - switch (subStringAttribute.ContextType) + string value = subStringAttribute.ContextType switch { - case 0: - value = $"{substring}*"; - break; - - case 1: - value = $"*{substring}*"; - break; - - case 2: - value = $"*{substring}"; - break; - - default: - throw new NotImplementedException($"Unknown ContextType: '{subStringAttribute.ContextType}' in subStringAttribute"); - } - + 0 => $"{substring}*", + 1 => $"*{substring}*", + 2 => $"*{substring}", + _ => throw new NotImplementedException($"Unknown ContextType: '{subStringAttribute.ContextType}' in subStringAttribute"), + }; sb.Append($"{filterAttribute.ChildAttributes[0].GetValue()}={value}"); break; case LdapFilterChoice.equalityMatch: var name = filterAttribute.ChildAttributes[0].GetValue(); - if (name.ToLowerInvariant() == "objectsid") + if (!string.IsNullOrEmpty(name) && name.Equals("objectsid", StringComparison.OrdinalIgnoreCase)) { - var bytesValue = filterAttribute.ChildAttributes[1].GetRawValue(); + var bytesValue = filterAttribute.ChildAttributes[1].GetRawValue()!; string sid; try { - sid = new SecurityIdentifier(bytesValue, 0).ToString(); + // sid = new SecurityIdentifier(bytesValue, 0).ToString(); + sid = Helpers.ConvertByteSidToStringSid(bytesValue); } catch (Exception ex) { @@ -356,7 +290,7 @@ private string ParseFilter(LdapAttribute filterAttribute, StringBuilder sb = nul break; case LdapFilterChoice.extensibleMatch: - var extensibleMatchValue = filterAttribute.ChildAttributes[2].GetRawValue(); + var extensibleMatchValue = filterAttribute.ChildAttributes[2].GetRawValue()!; if (extensibleMatchValue.Length == 1 && extensibleMatchValue.First() == 0xff) { @@ -373,22 +307,22 @@ private string ParseFilter(LdapAttribute filterAttribute, StringBuilder sb = nul throw new NotImplementedException($"Unknown ContextType: '{filterAttribute.ContextType}' in filterAttribute"); } - foreach (var child in filterAttribute.ChildAttributes.Where(item => item.ChildAttributes.Any())) + foreach (var child in filterAttribute.ChildAttributes.Where(item => item.ChildAttributes.Count != 0)) { ParseFilter(child, sb); } - sb.Append(")"); + sb.Append(')'); return sb.ToString(); } - private string ParseFilters(IEnumerable filterAttribute) + private static string ParseFilters(IEnumerable filterAttribute) { var sb = new StringBuilder(); foreach (var attr in filterAttribute) { var temp = ParseFilter(attr); - if (!temp.StartsWith("(")) + if (!temp.StartsWith('(')) { temp = $"({temp})"; } @@ -397,7 +331,7 @@ private string ParseFilters(IEnumerable filterAttribute) return sb.ToString(); } - private List ParseProperties(LdapAttribute attributes) + private static List ParseProperties(LdapAttribute attributes) { var result = new List(); if (attributes != null) @@ -415,7 +349,7 @@ private List ParseProperties(LdapAttribute attributes) return result; } - private void RecurseAttributes(StringBuilder sb, LdapAttribute attribute, int depth = 1) + private static void RecurseAttributes(StringBuilder sb, LdapAttribute attribute, int depth = 1) { if (attribute != null) { diff --git a/ADWSProxy/LogHelper.cs b/ADWSProxy/LogHelper.cs new file mode 100644 index 0000000..1b4a013 --- /dev/null +++ b/ADWSProxy/LogHelper.cs @@ -0,0 +1,15 @@ +using log4net; + +namespace ADWSProxy +{ + internal static class LogHelper + { + private static readonly string RepoName = LogManager.GetRepository(typeof(LogHelper).Assembly).Name; + + public static ILog GetLogger(Type type) + { + // This overload is AOT-safe because it doesn't call GetCallingAssembly() + return LogManager.GetLogger(RepoName, type); + } + } +} diff --git a/ADWSProxy/LoggerConfig.cs b/ADWSProxy/LoggerConfig.cs index b5943a0..eef7605 100644 --- a/ADWSProxy/LoggerConfig.cs +++ b/ADWSProxy/LoggerConfig.cs @@ -4,7 +4,6 @@ using log4net.Filter; using log4net.Layout; using log4net.Repository.Hierarchy; -using System.IO; namespace ADWSProxy { @@ -12,7 +11,7 @@ internal class LoggerConfig { public static void ConfigureLogger(string ConsoleFilterLevel, string LogDirectory) { - var hierarchy = (Hierarchy)LogManager.GetRepository(); + var hierarchy = (Hierarchy)LogManager.GetRepository(typeof(LoggerConfig).Assembly); // Pattern layout var patternLayout = new PatternLayout diff --git a/ADWSProxy/Program.cs b/ADWSProxy/Program.cs index d2868ae..73f3a7f 100644 --- a/ADWSProxy/Program.cs +++ b/ADWSProxy/Program.cs @@ -1,27 +1,22 @@ -using ADWSProxy.LDAP; -using CommandLine.Text; -using CommandLine; -using DNS.Server; +using ADWSProxy.DNS; +using ADWSProxy.LDAP; +using ARSoft.Tools.Net.Dns; using log4net; -using Newtonsoft.Json; -using System; -using System.Globalization; -using System.Linq; +using Microsoft.Extensions.Configuration; using System.Net; -using System.Net.NetworkInformation; namespace ADWSProxy { - internal class Program + public class Program { - private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + private static readonly ILog logger = LogHelper.GetLogger(typeof(Program)); // Handles IPv4 and IPv6 notation. private static IPEndPoint CreateIPEndPoint(string endPoint) { string[] ep = endPoint.Split(':'); if (ep.Length < 2) throw new FormatException("Invalid endpoint format"); - IPAddress ip; + IPAddress? ip; if (ep.Length > 2) { if (!IPAddress.TryParse(string.Join(":", ep, 0, ep.Length - 1), out ip)) @@ -36,85 +31,126 @@ private static IPEndPoint CreateIPEndPoint(string endPoint) throw new FormatException("Invalid ip-adress"); } } - if (!int.TryParse(ep[ep.Length - 1], NumberStyles.None, NumberFormatInfo.CurrentInfo, out int port)) + if (!int.TryParse(ep[^1], out int port)) { throw new FormatException("Invalid port"); } return new IPEndPoint(ip, port); } - private static void Main(string[] args) + public static void Main(string[] args) { - var parser = new Parser(with => with.HelpWriter = null); - var parsedArgs = parser.ParseArguments(args); + if (args.Any(a => a.Equals("--help", StringComparison.OrdinalIgnoreCase) || a.Equals("-h", StringComparison.OrdinalIgnoreCase))) + { + CommandLineOptions.ShowHelp(); + return; + } - if (parsedArgs.Tag == ParserResultType.NotParsed) + var configuration = new ConfigurationBuilder() + .AddCommandLine(args, new Dictionary{ + { "-u", "username" }, + { "-p", "password" }, + { "-D", "domain" }, + { "-m", "mode" }, + { "-dc", "domaincontroller" }, + { "-gc", "globalcatalog" } + }) + .Build(); + + var options = new CommandLineOptions(); + configuration.Bind(options); + + if (string.IsNullOrWhiteSpace(options.DomainController)) { - var helpText = HelpText.AutoBuild(parsedArgs, h => - { - h.Copyright = $"Created by Rabobank Red Team"; - h.AutoVersion = true ; - return h; - }); - Console.WriteLine(helpText); - Console.WriteLine("Press enter to close"); - Console.ReadLine(); - Environment.Exit(1); + logger.Error("Error: --domaincontroller is required"); + CommandLineOptions.ShowHelp(); return; } - LoggerConfig.ConfigureLogger(parsedArgs.Value.ConsoleLogLevel, parsedArgs.Value.LogDirectory); + try + { + _ = options.GetNetworkCredential(); + } + catch (Exception ex) + { + logger.Error($"Error: {ex.Message}"); + CommandLineOptions.ShowHelp(); + return; + } - logger.Info("Starting ADWSproxy."); + LoggerConfig.ConfigureLogger(options.ConsoleLogLevel, options.LogDirectory); - var exitCode = 0; - Listener LDAPListener = null; - Listener GCListener = null; + logger.Info("Starting ADWSproxy"); - var credentials = parsedArgs.Value.GetNetworkCredential(); + var exitCode = 0; + Listener? LDAPListener = null; + Listener? GCListener = null; try { - var LDAPEndpoint = $"0.0.0.0:{parsedArgs.Value.LDAPPort}"; - LDAPListener = new Listener(CreateIPEndPoint(LDAPEndpoint), parsedArgs.Value.DomainController, parsedArgs.Value.ADWSDCPort, parsedArgs.Value.LDAPInstance, parsedArgs.Value.UseWindowsAuth.GetValueOrDefault(), credentials); + const string gcInstance = "ldap:3268"; + string ldapInstance = options.OnlyUseGCBackend ? gcInstance : "ldap:389"; + var LDAPEndpoint = $"{options.ListenIP}:{options.LDAPPort}"; + var dc = options.DomainController; + ArgumentNullException.ThrowIfNullOrWhiteSpace(dc); + + LDAPListener = new Listener(CreateIPEndPoint(LDAPEndpoint), dc, options.ADWSDCPort, ldapInstance, options.Mode, options.GetNetworkCredential()); LDAPListener.Start(); - logger.Info($"Succesfully started the LDAPListener on {LDAPEndpoint} using instance {parsedArgs.Value.LDAPInstance}"); + logger.Info($"Succesfully started the LDAPListener on {LDAPEndpoint} using instance {ldapInstance}"); - if (string.IsNullOrWhiteSpace(parsedArgs.Value.GlobalCatalog)) + var gc = options.GlobalCatalog; + if (string.IsNullOrWhiteSpace(gc)) { logger.Info($"No Global Catalog server defined so no Global Catalog listener has been started"); } else { - var GCEndpoint = $"0.0.0.0:{parsedArgs.Value.GCPort}"; - GCListener = new Listener(CreateIPEndPoint(GCEndpoint), parsedArgs.Value.GlobalCatalog, parsedArgs.Value.ADWSGCPort, parsedArgs.Value.GCInstance, parsedArgs.Value.UseWindowsAuth.GetValueOrDefault(), credentials); + var GCEndpoint = $"{options.ListenIP}:{options.GCPort}"; + + GCListener = new Listener(CreateIPEndPoint(GCEndpoint), gc, options.ADWSGCPort, gcInstance, options.Mode, options.GetNetworkCredential()); GCListener.Start(); - logger.Info($"Succesfully started the GCListener on {GCEndpoint} using instance {parsedArgs.Value.GCInstance}"); + logger.Info($"Succesfully started the GCListener on {GCEndpoint} using instance {gcInstance}"); } - try + if (options.SkipDns) + { + logger.Info("Skipping DNS listener startup"); + } + else { - var dnsEndpoint = CreateIPEndPoint($"0.0.0.0:{parsedArgs.Value.DnsPort}"); - if (StartDNS(true, dnsEndpoint, parsedArgs.Value.LDAPPort, parsedArgs.Value.GCPort)) + try { - logger.Info($"Succesfully started the DNSListener on {dnsEndpoint}"); + if (StartDNS(options.ExitOnDNSStartError, options.LDAPPort, options.GCPort, options.HostIP)) + { + logger.Info($"Succesfully started the DNSListener"); + } + else + { + const string errorString = "Error starting DNSListner"; + throw new Exception(errorString); + } } - else + catch (Exception ex) { - const string errorString = "Error starting DNSListner"; - throw new Exception(errorString); + logger.Error(ex.Message, ex); } } - catch (Exception ex) - { - logger.Error(ex.Message, ex); - } + try { - var rootDSE = LDAPListener.ADWSConnection.GetRootDSE(); - logger.Info("Succesfully got RootDSE via LDAPListener"); - logger.Debug($"LDAP RootDSE: {JsonConvert.SerializeObject(rootDSE)}"); + if (options.SkipRootDSE) + { + logger.Info("Skipping RootDSE test for LDAP"); + + } + else + { + logger.Info($"Trying to get RootDSE via LDAPListener"); + var rootDSE = LDAPListener.ADWSConnection.GetRootDSE(); + logger.Info("Succesfully got RootDSE via LDAPListener"); + logger.Debug($"LDAP RootDSE: {string.Join("; ", rootDSE.Select(d => d.ToString()))}"); + } } catch (Exception ex) { @@ -125,9 +161,16 @@ private static void Main(string[] args) { if (GCListener != null) { - var rootDSE = GCListener.ADWSConnection.GetRootDSE(); - logger.Info("Succesfully got RootDSE via GCListener"); - logger.Debug($"GC RootDSE: {JsonConvert.SerializeObject(rootDSE)}"); + if (options.SkipRootDSE) { + logger.Info("Skipping RootDSE test for GC"); + } + else + { + logger.Info($"Trying to get RootDSE via GCListener"); + var rootDSE = GCListener.ADWSConnection.GetRootDSE(); + logger.Info("Succesfully got RootDSE via GCListener"); + logger.Debug($"GC RootDSE: {string.Join("; ", rootDSE.Select(d => d.ToString()))}"); + } } } catch (Exception ex) @@ -148,28 +191,27 @@ private static void Main(string[] args) Environment.Exit(exitCode); } - /// - /// This wil start a DNS Server listening on UDP/53. - /// - private static bool StartDNS(bool ExitOnDNSStartError, IPEndPoint dnsEndpoint, ushort ldapPort, ushort gcPort) + private static bool StartDNS(bool ExitOnDNSStartError, ushort ldapPort, ushort gcPort, string? hostIp = null) { - bool alreadyinuse = IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners().Any(p => p.Port == dnsEndpoint.Port); - if (alreadyinuse) + try + { + IPAddress? h = string.IsNullOrWhiteSpace(hostIp) ? null : IPAddress.Parse(hostIp); + var resolver = new Resolver(ldapPort, gcPort, h); + DnsServer server = new(10, 10); + server.QueryReceived += resolver.OnQueryReceived; + server.Start(); + logger.Info("DNS Server is live on UDP and TCP port 53"); + return true; + } + catch (Exception ex) { - string errorMessage = $"Port UDP/{dnsEndpoint.Port} is already in use, unable to start DNS resolver."; - logger.Error(errorMessage); + logger.Error("Error starting DNS server", ex); if (ExitOnDNSStartError) { Environment.Exit(1); } return false; } - else - { - DnsServer dnsServer = new DnsServer(new DNS.Resolver(ldapPort, gcPort), dnsEndpoint); - dnsServer.Listen(); - return true; - } } } } \ No newline at end of file diff --git a/ADWSProxy/Properties/AssemblyInfo.cs b/ADWSProxy/Properties/AssemblyInfo.cs deleted file mode 100644 index b1e1bb5..0000000 --- a/ADWSProxy/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ADWSProxy")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ADWSProxy")] -[assembly: AssemblyCopyright("Copyright © 2024")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("750e2653-08cf-4c6d-b82a-1e96fb256e63")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ADWSProxy/Properties/launchSettings.json b/ADWSProxy/Properties/launchSettings.json new file mode 100644 index 0000000..93b92fb --- /dev/null +++ b/ADWSProxy/Properties/launchSettings.json @@ -0,0 +1,13 @@ +{ + "profiles": { + "ADWSProxy": { + "commandName": "Project", + "commandLineArgs": "--domaincontroller dc01 --globalcatalog dc01 --consoleloglevel DEBUG" + }, + "Container (Dockerfile)": { + "commandName": "Docker", + "DockerfileRunArguments": "-p 389:389 -p 3268:3268", + "commandLineArgs": "--domaincontroller dc01 --globalcatalog dc01 --consoleloglevel DEBUG" + } + } +} \ No newline at end of file diff --git a/ADWSProxy/packages.config b/ADWSProxy/packages.config deleted file mode 100644 index aded6f7..0000000 --- a/ADWSProxy/packages.config +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/ADWSProxyCore.slnLaunch b/ADWSProxyCore.slnLaunch new file mode 100644 index 0000000..6fae58b --- /dev/null +++ b/ADWSProxyCore.slnLaunch @@ -0,0 +1,32 @@ +[ + { + "Name": "Test (Docker)", + "Projects": [ + { + "Path": "ADWSProxy\\ADWSProxy.csproj", + "Action": "Start", + "DebugTarget": "Container (Dockerfile)" + }, + { + "Path": "TestClient\\TestClient.csproj", + "Action": "Start", + "DebugTarget": "Container (Dockerfile)" + } + ] + }, + { + "Name": "Test", + "Projects": [ + { + "Path": "ADWSProxy\\ADWSProxy.csproj", + "Action": "Start", + "DebugTarget": "ADWSProxy" + }, + { + "Path": "TestClient\\TestClient.csproj", + "Action": "Start", + "DebugTarget": "TestClient" + } + ] + } +] \ No newline at end of file diff --git a/ADWSProxyCore.slnx b/ADWSProxyCore.slnx new file mode 100644 index 0000000..8d07981 --- /dev/null +++ b/ADWSProxyCore.slnx @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Readme.md b/Readme.md index c4e4e6b..f49c99b 100644 --- a/Readme.md +++ b/Readme.md @@ -1,76 +1,146 @@ -# ADWSProxy +# ADWSProxy (.NET 8.0) + +A high-performance, cross-platform Active Directory Web Services (ADWS) proxy built on **.NET 8.0 LTS**. This tool bridges the gap for LDAP-based tools in environments where traditional LDAP ports (389/636) are blocked, but ADWS (9389) remains open. + +--- + +## Key Features +* **Cross-Platform:** Runs on Windows, Linux, and MacOS. +* **Docker Ready:** Optimized for lightweight Linux containers (Alpine/Debian). +* **Native SID Parsing:** Includes a custom binary-to-string SID parser, eliminating dependencies on Windows-only system libraries. +* **Modern Tooling:** Built using .NET 8 (LTS) SDK and `dotnet-svcutil`. + +--- ## Usage -``` +### Command Line Arguments +```text --adwsdcport (Default: 9389) The ADWS port to proxy to on the domain controller --adwsgcport (Default: 9389) The ADWS port to proxy to on the global catalog --consoleloglevel (Default: INFO) Set the log level for the console output - --dnsport (Default: 53) The DNS port to proxy from - -D, --domain The domain to authenticate to ADWS - --domaincontroller Required. The domain controller to proxy to - --exitondnsstarterror (Default: true) Exit the application if the DNS port is already in use - --gcinstance (Default: ldap:3268) The GC instance within ADWS + --domaincontroller Required. The domain controller to proxy to for NTDS + --exitondnsstarterror (Default: true) Exit if the DNS port is already in use --gcport (Default: 3268) The GC port to proxy from - --globalcatalog The global catalog to proxy to - --ldapinstance (Default: ldap:389) The LDAP instance within ADWS + --globalcatalog (Default: only DC/NTDS is used) The global catalog to proxy to + --hostip (Default: system IPv4) Override the IP in the DNS respones --ldapport (Default: 389) The LDAP port to proxy from - --logdirectory (Default: .) The log directory to output runtime logs. Defaults to the current working directory. - -p, --password The password to authenticate to ADWS + --listenip (Default: 0.0.0.0) The IP to listen on for LDAP/GC requests + --logdirectory (Default: .) The log directory for runtime logs + -m, --mode (Default: Windows) Set the ADWS endpoint mode: Windows or Username + --onlyusegcbackend (Default: false) Force ADWS to use GC instance (ldap:3268) for all backend communication + --skipdns (Default: false) Skip starting the DNS listener + --skiprootdse (Default: false) Skip querying the RootDSE during startup + +These credentials can either be ommited or all need to be filled in. If empty then the current Windows domain session will be used. -u, --username The username to authenticate to ADWS - --usewindowsauth (Default: true) Use Windows Authentication or Username/Password with TLS + -p, --password The password to authenticate to ADWS + -D, --domain The domain to authenticate to ADWS --help Display this help screen. --version Display version information. + ``` + + ### Starting the Proxy + +The proxy requires valid credentials if executed outside of a domain-joined Windows session (e.g., when running on Linux or in Docker). + +#### Server 2025 + +Windows Server 2025 has removed the `/UserName` endpoints so only `--mode Windows` is supported. + +This mode can be used without explicitly noting credentials by using the current Windows session: + +```powershell +.\ADWSProxy.exe --domaincontroller "dc01.[...]" ``` -The Proxy can be started with the following command. Make sure that if either of `--domain`, `--username` or `--password` is set that all three values are set and corrent. These three values can be ommited if the Proxy is executed within the context of a domain joined user. +It's also possible to explicitly set credentials to use, for instance when running from a non domain joined machine or a machine that is joined to a different domain. +```powershell +.\ADWSProxy.exe -u "user" -p "password" --domain "[...]" --domaincontroller "dc01.[...]" ``` -PS> .\ADWSProxy.exe --domain [...] --username [...] --password [...] --domaincontroller dc01.[...] --globalcatalog dc01.[...] -[ INFO ] Starting LDAP2ADWS proxy. -[ INFO ] Constructing new ADWSProxy.LDAP.Listener -[ INFO ] Constructing new ADWSProxy.ADWS.Connection -[ INFO ] Succesfully started the LDAPListener on 0.0.0.0:389 -[ INFO ] Constructing new ADWSProxy.LDAP.Listener -[ INFO ] Constructing new ADWSProxy.ADWS.Connection -[ INFO ] Succesfully started the GCListener on 0.0.0.0:3268 -[ INFO ] Constructing new ADWSProxy.DNS.Resolver -[ INFO ] Succesfully started the DNSListener on 0.0.0.0:53 -[ INFO ] Succesfully got RootDSE -Pressing Enter will close the application + +#### Older versions + +Older versions of Windows do support the `/UserName` endpoints so we can also use those to obtain data via ADWS: + +```powershell +.\ADWSProxy.exe -m "Username" -u "user" -p "password" --domain "[...]" --domaincontroller "dc01.[...]" ``` -[Bloodhound-Python](https://github.com/dirkjanm/BloodHound.py) can be run by setting the `-ns` argument to the DNS resolver of the Proxy. This proxy will return the machine hosting the Proxy as the Domain Controller and the Global Catalog for the domain. -The values for `-u` and `-p` does not matter as the Proxy does not check credentials. `--auth ntlm` needs to be used as the Proxy only supports Simple and NTLM authentication at this point. +### Linux/Docker Example: + +Building the image from source: +```bash +$ git clone https://github.com/RabobankRedTeam/ADWSProxy.git +$ cd ADWSProxy +$ docker build -f ADWSProxy/Dockerfile -t adwsproxy -q . +$ docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +adwsproxy latest [...] ``` -PS> hostname -WinDev -PS> python -m bloodhound -u x -p x -d [...] --auth ntlm -ns 127.0.0.1 -c dconly -INFO: Found AD domain: [...] -INFO: Connecting to LDAP server: WinDev -INFO: Found 1 domains -INFO: Found 2 domains in the forest -INFO: Found 2495 users -INFO: Connecting to GC LDAP server: WinDev -INFO: Connecting to LDAP server: WinDev -INFO: Found 552 groups -INFO: Found 2 gpos -INFO: Found 223 ous -INFO: Found 19 containers -INFO: Found 102 computers -INFO: Found 1 trusts -INFO: Done in 00M 41S + +Using the image: + +```bash +$ docker run \ + -p 53:53/tcp -p 53:53/udp -p 389:389/tcp -p 3268:3268/tcp \ + --hostname DESKTOP-KGL8YVZ \ + -it adwsproxy:latest \ + --mode Windows \ + --username "user" \ + --password "password" \ + --domaincontroller dc01.[...] \ + --domain [...] ``` -## About +## Technical Details + +### Binary SID Parsing -[ActiveDirectoryWebService.cs](ADWSProxy/ADWS/ActiveDirectoryWebService.cs) was the only generated code used within the tool. The following command was used to generate this code: +To ensure full Linux compatibility, this version of ADWSProxy bypasses the `System.Security.Principal.Windows` namespace. It manually decodes the 28-byte binary `objectSid` blobs returned by ADWS into the standard string format (`S-1-5-21-...`) using a zero-dependency bit-shifter. +### Code Generation + +The ADWS client proxy code (`ActiveDirectoryWebService.cs`) is generated using `dotnet-svcutil`. This ensures compatibility with the .NET 8.0 `System.ServiceModel` stack. + +```powershell +dotnet --fx-version 8.0.23 "C:\Users\luc\.dotnet\tools\.store\dotnet-svcutil\8.0.0\dotnet-svcutil\8.0.0\tools\net8.0\any\dotnet-svcutil.dll" ` + net.tcp://dc01.[...]:9389/ActiveDirectoryWebServices/mex ` + --namespace "*,ADWSProxy.ADWS" ` + --outputFile "ActiveDirectoryWebService.cs" ` + --serializer XmlSerializer ` + --targetFramework net8.0 ` + --sync ``` -SvcUtil.exe /nologo /noconfig /t:code /n:*,ADWSProxy.ADWS net.tcp://[...]:9389/ActiveDirectoryWebServices/mex /serializer:XmlSerializer + +### Mandatory RPC Sealing and Signing + +Server 2025 enforces strict integrity requirements. All NTLM/Kerberos tokens must negotiate 128-bit encryption and message signing (Seal & Sign). + +>Technical Note: This tool automatically configures ProtectionLevel.EncryptAndSign to meet this requirement. If you encounter 0x80090302 (Invalid Token), ensure your client machine's clock is synchronized with the Domain Controller. + +### NTLMv1 Retirement + +Server 2025 has effectively retired NTLMv1. If running this tool from a Linux environment, ensure you have the `gss-ntlmssp` package installed to support modern NTLMv2/Negotiate handshakes. + +## Integration Testing (Bloodhound) + +[Bloodhound-Python](https://github.com/dirkjanm/BloodHound.py) can be used with this proxy by setting the `-ns` argument to the proxy's IP. The proxy spoofs the LDAP response to make itself appear as the Domain Controller. + +```bash +# Example using NTLM authentication through the proxy +python3 -m bloodhound -u x -p x -d [...] --auth ntlm -ns 127.0.0.1 -c DCOnly ``` -## Blog post +>Technical Note: Bloodhound-Python can't run with `only-use-gc-backend` set to true as the dataset returned by the GC is less complete than the default dataset. + +## Blog Post & Background + +Detailed research into ADWS exploitation and the architecture of this tool is available on the [Rabobank TechBlog](https://rabobank.jobs/en/techblog/adws-an-unconventional-path-into-active-directory-luc-kolen/). + +## Test client -More information about ADWS and the development of this tool can be found within the [Rabobank TechBlog](https://rabobank.jobs/en/techblog/adws-an-unconventional-path-into-active-directory-luc-kolen/). +A test client that can run queries via the following methods; ADWS, ADWS-Global Catalog, LDAP(S), and LDAP(S)-Global Catalogis available. A sample [tests.json](/TestClient/tests.json) file is included with the repository. +Note that the test client has only been tested with Server 2022 and may not be fully compatible with Server 2025. diff --git a/TestClient/ADWSHelpers.cs b/TestClient/ADWSHelpers.cs new file mode 100644 index 0000000..de42122 --- /dev/null +++ b/TestClient/ADWSHelpers.cs @@ -0,0 +1,72 @@ +using ADWSProxy; +using log4net; +using System.Net; + +namespace TestClient +{ + internal class ADWSHelpers(string server, int instancePort = 389, NetworkCredential? credential = null) + { + private static readonly ILog log = LogManager.GetLogger(typeof(ADWSHelpers)); + + private ADWSProxy.ADWS.Connection Connection { get; set; } = new ADWSProxy.ADWS.Connection(server, 9389, $"ldap:{instancePort}", AdwsEndpoint.Windows, credential); + + internal int ExecuteAdws(string baseDn, string filter, string scope, List attributes) + { + var results = new List<(string Dn, List<(string Name, string DataType, object Data)> Attributes)>(); + Connection.Enumerate(baseDn, filter, attributes, scope.ToString(), result => + { + var (dn, dataHolders) = result; + results.Add((dn, dataHolders.Select(dh => (dh.Name, dh.DataType.ToString(), dh.Data)).ToList())); + }); + + try + { + var jsonOutputHasBase64Content = false; + var serializableResults = results.Select(r => new + { + DistinguishedName = r.Dn, + Attributes = r.Attributes.GroupBy(attr => attr.Name, StringComparer.OrdinalIgnoreCase).ToDictionary( + group => group.Key, + group => group.SelectMany(attr => + { + if (attr.Data is string stringData) + { + return [stringData]; + } + if (attr.Data is byte[] byteArray) + { + jsonOutputHasBase64Content = true; + return [Convert.ToBase64String(byteArray)]; + } + if (attr.Data is System.Collections.IEnumerable enumerable) + { + return enumerable.Cast().Select(item => + { + if (item is byte[] itemBytes) + { + jsonOutputHasBase64Content = true; + return Convert.ToBase64String(itemBytes); + } + return item.ToString() ?? string.Empty; + }); + } + return [attr.Data?.ToString() ?? string.Empty]; + })) + }).ToList(); + + if (jsonOutputHasBase64Content) + { + log.Debug("Some attributes were detected as binary data and have been Base64 encoded in the JSON output"); + } + + LoggerConfig.LogDebug(log, "Result", serializableResults); + } + catch (Exception ex) + { + log.Error("Error occurred while serializing ADWS results", ex); + + } + return results.Count; + } + } +} \ No newline at end of file diff --git a/TestClient/BenchmarkConfig.cs b/TestClient/BenchmarkConfig.cs new file mode 100644 index 0000000..d6d8dc5 --- /dev/null +++ b/TestClient/BenchmarkConfig.cs @@ -0,0 +1,8 @@ +namespace TestClient +{ + internal class BenchmarkConfig + { + public required string Server { get; set; } + public required List Queries { get; set; } + } +} diff --git a/TestClient/CommandLineOptions.cs b/TestClient/CommandLineOptions.cs new file mode 100644 index 0000000..0302153 --- /dev/null +++ b/TestClient/CommandLineOptions.cs @@ -0,0 +1,23 @@ +namespace TestClient +{ + internal class CommandLineOptions + { + public string TestFile { get; set; } = "./tests.json"; + public bool PauseBetweenEngines { get; set; } = false; + + public string? Username { get; set; } = null; + public string? Password { get; set; } = null; + public string? Domain { get; set; } = null; + + public static void ShowHelp() + { + Console.WriteLine("ADWS/LDAP Test Client Options:"); + Console.WriteLine(" -f, --testfile Path to the configuration tests JSON (Default: ./tests.json)"); + Console.WriteLine(" -pause, --pausebetweenengines If true, pauses for user input between tests (Default: false)"); + Console.WriteLine(" -h, --help Show this help dialog"); + Console.WriteLine(" -u, --username Username for authentication"); + Console.WriteLine(" -p, --password Password for authentication"); + Console.WriteLine(" -d, --domain Domain for authentication"); + } + } +} diff --git a/TestClient/Dockerfile b/TestClient/Dockerfile new file mode 100644 index 0000000..521a25b --- /dev/null +++ b/TestClient/Dockerfile @@ -0,0 +1,42 @@ +# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. + +# This stage is used when running from VS in fast mode (Default for Debug configuration) +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base +RUN apt-get update && apt-get install -y --no-install-recommends \ + gss-ntlmssp \ + libldap-2.5-0 \ + iputils-ping \ + netcat-openbsd \ + dnsutils \ + nano \ + && rm -rf /var/lib/apt/lists/* + +RUN mkdir -p /etc/ldap /etc/openldap \ + && echo "TLS_REQCERT never" >> /etc/ldap/ldap.conf \ + && echo "TLS_REQCERT never" >> /etc/openldap/ldap.conf + +USER $APP_UID +WORKDIR /app + +USER app + +# This stage is used to build the service project +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["TestClient/TestClient.csproj", "TestClient/"] +RUN dotnet restore "./TestClient/TestClient.csproj" +COPY . . +WORKDIR "/src/TestClient" +RUN dotnet build "./TestClient.csproj" -c $BUILD_CONFIGURATION -o /app/build + +# This stage is used to publish the service project to be copied to the final stage +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./TestClient.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration) +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "TestClient.dll"] \ No newline at end of file diff --git a/TestClient/LDAPHelpers.cs b/TestClient/LDAPHelpers.cs new file mode 100644 index 0000000..8095391 --- /dev/null +++ b/TestClient/LDAPHelpers.cs @@ -0,0 +1,145 @@ +using log4net; +using System.Data; +using System.DirectoryServices.Protocols; +using System.Net; + +namespace TestClient +{ + internal class LDAPHelpers(string server, int port = 389, NetworkCredential? credential = null, bool secure = false) + { + private static readonly ILog log = LogManager.GetLogger(typeof(LDAPHelpers)); + + private readonly LdapDirectoryIdentifier ldapDirectoryIdentifier = new(server, port); + + internal int ExecuteLdap(string baseDn, string filter, string scope, List attributes) + { + // Null credentials + AuthType.Negotiate uses current implicit Windows Session Token + // Linux clients should use AuthType.Basic with explicit credentials, as Negotiate is not widely supported outside of Windows environments + AuthType authType; + var activeCredential = credential; + if (OperatingSystem.IsWindows()) + { + authType = AuthType.Negotiate; + } + else + { + authType = AuthType.Basic; + } + + if (credential != null) + { + activeCredential = new NetworkCredential( + @$"{credential.UserName}@{credential.Domain}", + credential.Password + ); + } + + using LdapConnection connection = new(ldapDirectoryIdentifier, activeCredential, authType); + connection.SessionOptions.SecureSocketLayer = secure; + connection.SessionOptions.ProtocolVersion = 3; + connection.SessionOptions.ReferralChasing = ReferralChasingOptions.None; + + if (secure) + { + if (OperatingSystem.IsWindows()) + { + connection.SessionOptions.VerifyServerCertificate = (conn, cert) => + { + log.Debug($"Server Cert Subject: '{cert?.Subject}' Issuer: {cert?.Issuer}"); + return true; + }; + connection.SessionOptions.QueryClientCertificate = (conn, trustedCAs) => null; + } + } + else + { + if (OperatingSystem.IsWindows()) + { + connection.SessionOptions.Signing = true; + connection.SessionOptions.Sealing = true; + } + } + + connection.Bind(); + + SearchScope ldapScope; + switch (scope.ToLowerInvariant()) + { + case "subtree": + ldapScope = SearchScope.Subtree; + break; + case "one": + ldapScope = SearchScope.OneLevel; + break; + case "base": + ldapScope = SearchScope.Base; + break; + default: + log.Warn($"Unknown scope '{scope}' specified. Using default scope/subtree"); + ldapScope = SearchScope.Subtree; + break; + } + + SearchRequest request = new(baseDn, filter, ldapScope, attributes?.ToArray()); + var sdControl = new SecurityDescriptorFlagControl(SecurityMasks.Dacl | SecurityMasks.Owner | SecurityMasks.Group); + request.Controls.Add(sdControl); + var response = (SearchResponse)connection.SendRequest(request); + + try + { + var jsonOutputHasBase64Content = false; + var serializableResults = response.Entries.Cast().Select(e => new + { + e.DistinguishedName, + Attributes = e.Attributes.AttributeNames.Cast().ToDictionary( + attrName => attrName, + attrName => e.Attributes[attrName].GetValues(typeof(byte[])).Cast().Select(byteArray => + { + if (byteArray == null || byteArray.Length == 0) + { + return string.Empty; + } + + // Look for non-printable control characters to determine if it is raw binary data + bool isPrintableText = true; + for (int i = 0; i < byteArray.Length; i++) + { + byte b = byteArray[i]; + // Flags true binary structures if we see bytes below space (32) + // that aren't common formatting characters like horizontal tabs or line feeds + if (b < 32 && b != 9 && b != 10 && b != 13) + { + isPrintableText = false; + jsonOutputHasBase64Content = true; + break; + } + } + + if (isPrintableText) + { + string decodedString = System.Text.Encoding.UTF8.GetString(byteArray); + return decodedString; + } + + // If it is an ntSecurityDescriptor or objectGUID block, translate it to Base64 + return Convert.ToBase64String(byteArray); + }).ToList() + ) + }).ToList(); + + if (jsonOutputHasBase64Content) + { + log.Debug("Some attributes were detected as binary data and have been Base64 encoded in the JSON output"); + } + + LoggerConfig.LogDebug(log, "Result", serializableResults); + } + catch (Exception ex) + { + log.Error("Error occurred while serializing LDAP results", ex); + } + + return response.Entries.Count; + } + } +} \ No newline at end of file diff --git a/TestClient/LdapQueryTest.cs b/TestClient/LdapQueryTest.cs new file mode 100644 index 0000000..3fb63cc --- /dev/null +++ b/TestClient/LdapQueryTest.cs @@ -0,0 +1,13 @@ +namespace TestClient +{ + internal class LdapQueryTest + { + public required string Name { get; set; } + public required string TargetOU { get; set; } + public required string Filter { get; set; } + public required string Scope { get; set; } + public required List Attributes { get; set; } + public required List Engines { get; set; } + + } +} diff --git a/TestClient/LoggerConfig.cs b/TestClient/LoggerConfig.cs new file mode 100644 index 0000000..787b894 --- /dev/null +++ b/TestClient/LoggerConfig.cs @@ -0,0 +1,97 @@ +using log4net; +using log4net.Appender; +using log4net.Filter; +using log4net.Layout; +using log4net.Repository.Hierarchy; +using System.Text.Json; + +namespace TestClient +{ + internal class LoggerConfig + { + + private static readonly JsonSerializerOptions jsonOptions = new() + { + WriteIndented = false + }; + public static void LogDebug(ILog log, string message, object data) + { + log.Debug($"{message} - {JsonSerializer.Serialize(data, jsonOptions)}"); + } + + public static void InitializeProgrammaticLogging() + { + Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); + + // 1. Define the shared pattern layout + PatternLayout patternLayout = new() + { + ConversionPattern = "%date %logger - %message%newline" + }; + patternLayout.ActivateOptions(); + + // 2. Filter out DEBUG logs (Shared by Info file and Console) + LevelRangeFilter infoAndAboveFilter = new() + { + LevelMin = log4net.Core.Level.Info, + LevelMax = log4net.Core.Level.Fatal + }; + infoAndAboveFilter.ActivateOptions(); + + // 3. Trace File Appender (Captures ALL levels down to DEBUG) + RollingFileAppender traceAppender = new() + { + Name = "TraceFileAppender", + File = Path.Combine(Directory.GetCurrentDirectory(), "trace.log"), + AppendToFile = true, + RollingStyle = RollingFileAppender.RollingMode.Size, + MaxFileSize = 100 * 1024 * 1024, + MaxSizeRollBackups = 500, + StaticLogFileName = true, + Layout = patternLayout + }; + traceAppender.ActivateOptions(); + + // 4. Info File Appender (INFO and ERROR only) + RollingFileAppender infoAppender = new() + { + Name = "InfoFileAppender", + File = Path.Combine(Directory.GetCurrentDirectory(), "info.log"), + AppendToFile = true, + RollingStyle = RollingFileAppender.RollingMode.Size, + MaxFileSize = 100 * 1024 * 1024, + MaxSizeRollBackups = 500, + StaticLogFileName = true, + Layout = patternLayout + }; + infoAppender.AddFilter(infoAndAboveFilter); + infoAppender.ActivateOptions(); + + // 5. Console Appender (INFO and ERROR only) + ConsoleAppender consoleAppender = new() + { + Name = "ConsoleAppender", + Layout = patternLayout + }; + consoleAppender.AddFilter(infoAndAboveFilter); + consoleAppender.ActivateOptions(); + + // 6. Attach all three destinations to the root hierarchy + hierarchy.Root.AddAppender(traceAppender); + hierarchy.Root.AddAppender(infoAppender); + hierarchy.Root.AddAppender(consoleAppender); + + // Ensure root level allows DEBUG to pass through to the Trace appender + hierarchy.Root.Level = log4net.Core.Level.Debug; + + if (hierarchy.GetLogger("ADWSProxy") is Logger proxyLogger) + { + proxyLogger.Level = log4net.Core.Level.Verbose; + proxyLogger.Additivity = false; + } + + hierarchy.Configured = true; + hierarchy.RaiseConfigurationChanged(EventArgs.Empty); + } + } +} \ No newline at end of file diff --git a/TestClient/Program.cs b/TestClient/Program.cs new file mode 100644 index 0000000..225e91f --- /dev/null +++ b/TestClient/Program.cs @@ -0,0 +1,95 @@ +using log4net; +using Microsoft.Extensions.Configuration; +using System.Net; +using System.Text.Json; +using TestClient; + +ILog log = LogManager.GetLogger(typeof(Program)); + +LoggerConfig.InitializeProgrammaticLogging(); + +if (args.Any(a => a.Equals("--help", StringComparison.OrdinalIgnoreCase) || a.Equals("-h", StringComparison.OrdinalIgnoreCase))) +{ + CommandLineOptions.ShowHelp(); + return; +} + +var configuration = new ConfigurationBuilder() + .AddCommandLine(args, new Dictionary{ + { "-f", "testfile" }, + { "-pause", "pausebetweenengines" }, + { "-u", "username" }, + { "-p", "password" }, + { "-d", "domain" } + }) + .Build(); + +var options = new CommandLineOptions(); +configuration.Bind(options); + +if (string.IsNullOrWhiteSpace(options.TestFile)) +{ + options.TestFile = Path.Combine(Directory.GetCurrentDirectory(), "tests.json"); + log.Info($"No JSON file path provided. Using default: {options.TestFile}"); +} + +if (!File.Exists(options.TestFile)) +{ + log.Error($"JSON configuration file not found at path: {options.TestFile}"); + return; +} +string jsonString = File.ReadAllText(options.TestFile); +if (string.IsNullOrWhiteSpace(jsonString)) +{ + log.Error("JSON configuration file is empty"); + return; +} + +if (jsonString.Contains("{{DOMAIN_DN}}")) +{ + log.Info("Found {{DOMAIN_DN}} placeholder in JSON. Attempting to calculate base DN from current environment"); + + string? currentDnsDomain = options.Domain ?? Environment.GetEnvironmentVariable("USERDNSDOMAIN"); + if (string.IsNullOrWhiteSpace(currentDnsDomain)) + { + log.Error("Current DNS domain is empty. {{DOMAIN_DN}} placeholder can not be replaced"); + return; + } + var baseDN = string.Join(",", currentDnsDomain.Split('.').Select(part => $"DC={part.ToUpperInvariant()}")); + log.Info("Calculated base DN: " + baseDN); + jsonString = jsonString.Replace("{{DOMAIN_DN}}", baseDN); +} + +if (jsonString.Contains("{{USERNAME}}")) +{ + string currentUsername = options.Username ?? Environment.UserName; + if (string.IsNullOrWhiteSpace(currentUsername)) + { + log.Error("Current username is empty. {{USERNAME}} placeholder can not be replaced"); + return; + } + log.Info("Replacing {{USERNAME}} placeholder with current username: " + currentUsername); + jsonString = jsonString.Replace("{{USERNAME}}", currentUsername); +} + +NetworkCredential? credentials = null; +if (!string.IsNullOrWhiteSpace(options.Username) && !string.IsNullOrWhiteSpace(options.Password) && !string.IsNullOrWhiteSpace(options.Domain)) +{ + if (string.IsNullOrWhiteSpace(options.Username) && string.IsNullOrWhiteSpace(options.Password) && string.IsNullOrWhiteSpace(options.Domain)) + { + log.Error("Incomplete credentials provided. All of Username, Password, and Domain must be provided to replace placeholders. If the goal is to use the current user's credentials, please do not provide any credential arguments."); + return; + } + else + { + credentials = new NetworkCredential(options.Username, options.Password, options.Domain); + } +} + +log.Debug(jsonString); + +BenchmarkConfig? config = JsonSerializer.Deserialize( + jsonString, + new JsonSerializerOptions() { PropertyNameCaseInsensitive = true } +); +ProgramHelpers.ExecuteTests(config, options.PauseBetweenEngines, credentials); diff --git a/TestClient/ProgramHelpers.cs b/TestClient/ProgramHelpers.cs new file mode 100644 index 0000000..949e71e --- /dev/null +++ b/TestClient/ProgramHelpers.cs @@ -0,0 +1,113 @@ +using log4net; +using System.Diagnostics; +using System.Net; + +namespace TestClient +{ + internal static class ProgramHelpers + { + private static readonly ILog log = LogManager.GetLogger(typeof(ProgramHelpers)); + + internal static void ExecuteTests(BenchmarkConfig? config, bool pauseBetweenEngines, NetworkCredential? credential = null) + { + if (config == null || config.Queries == null) + { + log.Error("Failed to parse configuration file"); + return; + } + + foreach (var test in config.Queries) + { + log.Info($"Loaded Test Case: {test.Name}"); + log.Info($" Target OU: {test.TargetOU}"); + log.Info($" Filter: {test.Filter}"); + log.Info($" Scope: {test.Scope}"); + log.Info($" Attributes: {string.Join(", ", test.Attributes)}"); + log.Info($" Engines: {string.Join(", ", test.Engines)}"); + + int? ldapResults = null, ldapsResults = null, ldapGcResults = null, ldapsGcResults = null, adwsResults = null, adwsGcResults = null; + long? ldapTime = null, ldapsTime = null, ldapGcTime = null, ldapsGcTime = null, adwsTime = null, adwsGcTime = null; + + var adwsHelper = new ADWSHelpers(config.Server, 389, credential); + var adwsGcHelper = new ADWSHelpers(config.Server, 3268, credential); + + var ldapHelper = new LDAPHelpers(config.Server, 389, credential, secure: false); + var ldapsHelper = new LDAPHelpers(config.Server, 636, credential, secure: true); + var ldapGcHelper = new LDAPHelpers(config.Server, 3268, credential, secure: false); + var ldapsGcHelper = new LDAPHelpers(config.Server, 3269, credential, secure: true); + foreach (var engine in test.Engines) + { + if (pauseBetweenEngines) + { + log.Info($"Pausing before next test ('{test.Name}' using engine '{engine}'). Press any key to continue..."); + Console.ReadKey(); + } + + log.Info($"Executing test '{test.Name}' on engine '{engine}'"); + + try + { + var stopwatch = Stopwatch.StartNew(); + switch (engine.ToLowerInvariant()) + { + case "ldap": + ldapResults = ldapHelper.ExecuteLdap(test.TargetOU, test.Filter, test.Scope, test.Attributes); + stopwatch.Stop(); + ldapTime = stopwatch.ElapsedMilliseconds; + break; + case "ldaps": + ldapsResults = ldapsHelper.ExecuteLdap(test.TargetOU, test.Filter, test.Scope, test.Attributes); + stopwatch.Stop(); + ldapsTime = stopwatch.ElapsedMilliseconds; + break; + case "ldap-gc": + ldapGcResults = ldapGcHelper.ExecuteLdap(test.TargetOU, test.Filter, test.Scope, test.Attributes); + stopwatch.Stop(); + ldapGcTime = stopwatch.ElapsedMilliseconds; + break; + case "ldaps-gc": + ldapsGcResults = ldapsGcHelper.ExecuteLdap(test.TargetOU, test.Filter, test.Scope, test.Attributes); + stopwatch.Stop(); + ldapsGcTime = stopwatch.ElapsedMilliseconds; + break; + case "adws": + adwsResults = adwsHelper.ExecuteAdws(test.TargetOU, test.Filter, test.Scope, test.Attributes); + stopwatch.Stop(); + adwsTime = stopwatch.ElapsedMilliseconds; + break; + case "adws-gc": + adwsGcResults = adwsGcHelper.ExecuteAdws(test.TargetOU, test.Filter, test.Scope, test.Attributes); + stopwatch.Stop(); + adwsGcTime = stopwatch.ElapsedMilliseconds; + break; + + default: + log.Warn($"Unknown engine '{engine}' specified for test '{test.Name}'. Skipping"); + continue; + } + } + catch (Exception ex) + { + log.Error($" Error executing test '{test.Name}' on engine '{engine}'", ex); + } + } + + if (ldapResults.HasValue) + log.Info($" Results: {ldapResults} entries returned for LDAP in {ldapTime} ms"); + if (ldapsResults.HasValue) + log.Info($" Results: {ldapsResults} entries returned for LDAPS in {ldapsTime} ms"); + if (ldapGcResults.HasValue) + log.Info($" Results: {ldapGcResults} entries returned for LDAP-GC in {ldapGcTime} ms"); + if (ldapsGcResults.HasValue) + log.Info($" Results: {ldapsGcResults} entries returned for LDAPS-GC in {ldapsGcTime} ms"); + if (adwsResults.HasValue) + log.Info($" Results: {adwsResults} entries returned for ADWS in {adwsTime} ms"); + if (adwsGcResults.HasValue) + log.Info($" Results: {adwsGcResults} entries returned for ADWS-GC in {adwsGcTime} ms"); + + log.Info($"Finished test '{test.Name}'"); + log.Info("-----------------------------"); + } + } + } +} \ No newline at end of file diff --git a/TestClient/Properties/launchSettings.json b/TestClient/Properties/launchSettings.json new file mode 100644 index 0000000..b95c3d3 --- /dev/null +++ b/TestClient/Properties/launchSettings.json @@ -0,0 +1,11 @@ +{ + "profiles": { + "TestClient": { + "commandName": "Project" + }, + "Container (Dockerfile)": { + "commandName": "Docker", + "commandLineArgs": "-u USER -p PASSWORD -d DOMAIN" + } + } +} \ No newline at end of file diff --git a/TestClient/TestClient.csproj b/TestClient/TestClient.csproj new file mode 100644 index 0000000..068038c --- /dev/null +++ b/TestClient/TestClient.csproj @@ -0,0 +1,28 @@ + + + + Exe + net8.0 + enable + enable + Linux + true + + + + + + + + + + + + + + + Always + + + + diff --git a/TestClient/tests.json b/TestClient/tests.json new file mode 100644 index 0000000..375b76d --- /dev/null +++ b/TestClient/tests.json @@ -0,0 +1,37 @@ +{ + "Server": "dc01", + "Queries": [ + { + "Name": "RootDSE Discovery", + "TargetOU": "", + "Filter": "(objectClass=*)", + "Scope": "Base", + "Attributes": [ "defaultNamingContext", "dnsHostName", "rootDomainNamingContext" ], + "Engines": [ "ADWS", "LDAP", "LDAPS" ] + }, + { + "Name": "Self-Context check", + "TargetOU": "{{DOMAIN_DN}}", + "Filter": "(sAMAccountName={{USERNAME}})", + "Scope": "Subtree", + "Attributes": [ "distinguishedName", "cn", "memberOf", "ntSecurityDescriptor" ], + "Engines": [ "ADWS", "ADWS-GC", "LDAP", "LDAPS", "LDAP-GC", "LDAPS-GC" ] + }, + { + "Name": "Organizational layout", + "TargetOU": "{{DOMAIN_DN}}", + "Filter": "(objectClass=organizationalUnit)", + "Scope": "Subtree", + "Attributes": [ "distinguishedName", "name", "gPLink", "description" ], + "Engines": [ "ADWS", "LDAPS" ] + }, + { + "Name": "Admin group case-insensitive inventory", + "TargetOU": "{{DOMAIN_DN}}", + "Filter": "(&(objectCategory=group)(sAMAccountName=*admin*))", + "Scope": "Subtree", + "Attributes": [ "distinguishedName", "cn", "sAMAccountName", "description" ], + "Engines": [ "ADWS", "ADWS-GC", "LDAPS", "LDAPS-GC" ] + } + ] +} \ No newline at end of file