I'm experimenting with the "IsDNAsAnchor" management agent capability, but if I set it to true the Management Agent creation dialog loops to the "Configure Anchors" page after I click finish, without showing any error or writing anything in the event log.
You can see the problem in this video.
Is there something particular I should do to get "IsDNAsAnchor" to work properly?
I would like to use the FIM object ID as a DN, and I don't care about having a different anchor attribute.
This piece of code allows to reproduce the problem:
using Microsoft.MetadirectoryServices;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace ecma2_test {
public partial class TestAgent : IMAExtensible2GetParameters,
IMAExtensible2GetCapabilitiesEx,
IMAExtensible2GetSchema,
IMAExtensible2CallExport,
IMAExtensible2CallImport {
// IMAExtensible2GetParameters
public IList<ConfigParameterDefinition> GetConfigParameters(KeyedCollection<string, ConfigParameter> configParameters, ConfigParameterPage page) {
var ret = new List<ConfigParameterDefinition>();
switch (page) {
case ConfigParameterPage.Capabilities:
ret.Add(ConfigParameterDefinition.CreateCheckBoxParameter("IsDNAsAnchor", false));
break;
case ConfigParameterPage.Connectivity:
// see http://social.technet.microsoft.com/Forums/en-US/34c40677-0208-47bf-9371-1efefeb585e6/weird-ecma2-ma-problem-create-management-agent-dialog-loops-to-capabilities-page
ret.Add(ConfigParameterDefinition.CreateCheckBoxParameter("Avoid Catastrophic Failures", true));
break;
}
return ret;
}
public ParameterValidationResult ValidateConfigParameters(KeyedCollection<string, ConfigParameter> configParameters, ConfigParameterPage page) {
return new ParameterValidationResult();
}
// IMAExtensible2GetCapabilitiesEx
public MACapabilities GetCapabilitiesEx(KeyedCollection<string, ConfigParameter> configParameters) {
MACapabilities capabilities = new MACapabilities();
capabilities.IsDNAsAnchor = (configParameters["IsDNAsAnchor"].Value == "1");
return capabilities;
}
// IMAExtensible2GetSchema
public Schema GetSchema(KeyedCollection<string, ConfigParameter> configParameters) {
SchemaType personType = SchemaType.Create("Person", lockAnchorDefinition: true);
personType.Attributes.Add(SchemaAttribute.CreateAnchorAttribute("dn", AttributeType.String));
personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("name", AttributeType.String));
personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("email", AttributeType.String));
Schema schema = Schema.Create();
schema.Types.Add(personType);
return schema;
}
// IMAExtensible2CallExport
public void CloseExportConnection(CloseExportConnectionRunStep exportRunStep) {
throw new NotImplementedException();
}
public int ExportDefaultPageSize {
get { return 1000; }
}
public int ExportMaxPageSize {
get { return 5000; }
}
public void OpenExportConnection(KeyedCollection<string, ConfigParameter> configParameters, Schema types, OpenExportConnectionRunStep exportRunStep) {
throw new NotImplementedException();
}
public PutExportEntriesResults PutExportEntries(IList<CSEntryChange> csentries) {
throw new NotImplementedException();
}
// IMAExtensible2CallImport
public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep) {
throw new NotImplementedException();
}
public GetImportEntriesResults GetImportEntries(GetImportEntriesRunStep importRunStep) {
throw new NotImplementedException();
}
public int ImportDefaultPageSize {
get { return 1000; }
}
public int ImportMaxPageSize {
get { return 5000; }
}
public OpenImportConnectionResults OpenImportConnection(KeyedCollection<string, ConfigParameter> configParameters, Schema types, OpenImportConnectionRunStep importRunStep) {
throw new NotImplementedException();
}
}
}
Paolo Tedesco - http://cern.ch/idm