Identity Broker Forum
Welcome to the community forum for Identity Broker.
Browse the knowledge base, ask questions directly to the product group, or leverage the community to get answers. Leave ideas for new features and vote for the features or bug fixes you want most.

Logging controller: can't edit pre-existing logger
Currently when editing a log writer on the UI, an ArgumentNullException is thrown. Please let me know if you need additional details.
System.ArgumentNullException was unhandled by user code
Message=Value cannot be null.
Parameter name: id
Source=Unify.Framework.Logging.Engine.Interfaces
ParamName=id
StackTrace:
at Unify.Framework.Logging.CoreLogWriterEngineConfiguration..ctor(Guid id, String name, XElement configuration) in c:\Program Files (x86)\Jenkins\jobs\Framework Core (DEV)\workspace\Source\Logging\Unify.Framework.Logging.Engine.Interfaces\CoreLogWriterEngineConfiguration.cs:line 36
at Unify.Connect.Web.LogWriterAdapterDictionary.Transform(ILogWriterViewInformation sourceValue) in S:\hg\Product\IdentityBroker\v4.0\Source\Studio\Unify.Connect.Web\Models\Logging\Adapters\LogWriterAdapterDictionary.cs:line 60
at Unify.Connect.Web.LogWriterConfigurationViewInformationTwoWayAdapter.Transform(LogWriterConfigurationViewInformation sourceValue) in S:\hg\Product\IdentityBroker\v4.0\Source\Studio\Unify.Connect.Web\Models\Logging\LogWriterConfigurationViewInformationTwoWayAdapter.cs:line 87
at Unify.Connect.Web.LoggingController.CreateOrEditLogWriter(LogWriterConfigurationViewInformation configuration) in S:\hg\Product\IdentityBroker\v4.0\Source\Studio\Unify.Connect.Web\Controllers\LoggingController.cs:line 300
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c_DisplayClass15.<InvokeActionMethodWithFilters>b_12()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
InnerException:

Connector cache timeout unaware of exports causing LDAP errors
The connector cache ConnectorEngineConnectorCache doesn't refresh the timeout when a connector is used for export.
Observation
Modify anchor operations would fail if a state was kept on the connector and used between the modify anchor call and the update entities call. Failures occurred every 1 minute, which is the timeout for the cache expiry.
Task
Clean up ConnectorEngineConnectorCache, as it's not clear how it works. Replace it with DictionaryCache if possible as the caching logic is handled for us. May need to subscribe to events for export and then Touch the connector so that the timeout doesn't expire. Ensure that unit tests are updated.

Improve CSV Connector edge case for empty target file.
The current message thrown when the target CSV file is empty is the following:
Save entities to connector failed. Save entities [Count:40] to connector Test CSV - C:\log\AurionGeneric.csv failed with reason Non-negative number required. Parameter name: value. Duration: 00:00:00.0040002 Error details: System.ArgumentOutOfRangeException: Non-negative number required. Parameter name: value at System.IO.FileStream.set_Position(Int64 value) at Unify.Product.IdentityBroker.CsvConnector.<>c__DisplayClass2a.<AddEntities>b__28(Stream old, Stream new) at Unify.Product.IdentityBroker.FileStreamCommunicator.Shift(UpdateFile fileUpdate) at Unify.Product.IdentityBroker.CsvConnector.AddEntities(IEnumerable`1 entities) at Unify.Product.IdentityBroker.EventNotifierAddingConnectorDecorator.AddEntities(IEnumerable`1 entities) at Unify.TestHarness.Connector.ConnectorTestHarness.<>c__DisplayClass6.<Add>b__5(IEntitySchema schema, IEnumerable`1 entities) at Unify.TestHarness.Connector.ConnectorTestHarness.Shift(Guid sourceId, Action`2 entityHandler) at Unify.TestHarness.Connector.ConnectorTestHarness.Add(Guid sourceId, Guid targetId) at Unify.TestHarness.Connector.ConnectorTestHarnessServiceController.Add(StandardPostData postData)
Instead, the schema field names should be written as the header, with an informational event logged stating that the file was updated with the correct heading.

Upgrade v3.0.8 to v4.0 Exception
The following exception is thrown upgrading from v3.0.8.
Unify.Framework.UnifyServiceInitializeException: 'FK_EntityValue_CollectionKey' is not a constraint. Could not drop constraint. See previous errors. ---> System.Data.SqlClient.SqlEx ception: 'FK_EntityValue_CollectionKey' is not a constraint. Could not drop constraint. See previous errors. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolea n breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cm dHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, Tds ParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult res ult, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs , ICompiledSubQuery[] subQueries, Object lastResult) at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryI nfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompile dSubQuery[] subQueries) at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider .Execute(Expression query) at System.Data.Linq.DataContext.ExecuteCommand(String command, Object[] param eters) at Unify.Framework.Data.LinqContextConversionBase`4.SubmitChanges() at Unify.Product.IdentityBroker.IdentityBrokerEngine.ClearOldPartitions() at Unify.Product.IdentityBroker.IdentityBrokerEngine.Initialize() at Unify.Framework.UnifyEngine`1.Initialize() --- End of inner exception stack trace --- at Unify.Framework.UnifyEngine`1.Initialize() at Unify.Service.Connect.Debug.ProgramProxy.Execute()
This is occurring in v4.0.1, adam has tested it in v4.0.0 and this does not occur; however irrespective of the version some Foreign Key constraints are being missed, such as the listed FK_EntityValue_CollectionKey in conjunction with the FK_EntityValue_Entity constraint.
- v3.0.6 -> v4.0.x

Possibility of Adding AXL to SQL Table Attribute Name Correlation in CISCO UCM connector.
Hi guys,
I've been working with the CISCO UCM connector, one thing I've found is import failures can occur when using the sqlTrust=False communicator option. The issue is the AXL attribute names vary to the names used in the SQL tables.
Name variances are taken into consideration when configuring AXL objects and SQL tables in the connector communicator via the AXLName and SQLName options. However attribute names also vary and the connector first does an AXL executeSQLquery to get all objects, then performs a native AXL Get request to extract data, using the same attribute name for both.
Example:
<entitySchema>
<field name="name" validator="string" key="true" required="true" readonly="true" />
</entitySchema>
Inital request to AXL:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><axlapi:executeSQLQuery xmlns:axlapi="http://www.cisco.com/AXL/API/7.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><sql>SELECT name FROM device</sql></axlapi:executeSQLQuery></SOAP-ENV:Body></SOAP-ENV:Envelope>
Subsequent request to AXL (per object received from first query)
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><axl:getDeviceProfile xmlns:axl="http://www.cisco.com/AXL/API/7.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><name>MTP_2</name></axl:getDeviceProfile></SOAP-ENV:Body></SOAP-ENV:Envelope>
Error returned:
ERROR http-8443-9 axl.AxlValidator - org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'name'. One of '
{"":profileId, "":profileName}' is expected
The subsequent AXL request failes as it requires "profileName" instead of "name" as the "profileName" attribute is the AXL equivalent of the SQL "name" attribute . If profileName is used in entitySchema the first query fails as the attribute is not found in the SQL table.

Tatts Group chris21 Connector time out error for Production env
Currently Identity Broker for chris21 for Tatts Group's Production env has the following error.
20110703,23:41:17,Change detection engine import all items started.,Change detection engine,Information,Change detection engine import all items for connector 34b83581-377c-41b5-afb9-2a705076285f started. 20110703,23:41:17,Stored values request to retrieve started.,Stored values collections,Information,Stored values request to retrieve 34b83581-377c-41b5-afb9-2a705076285f started. 20110703,23:41:17,Stored values request to retrieve succeeded.,Stored values collections,Information,Stored values request to retrieve 34b83581-377c-41b5-afb9-2a705076285f succeeded. Duration: 00:00:00.1718860 20110703,23:41:17,Request to get all entities from connector.,Connector,Information,Request to get all entities from connector 34b83581-377c-41b5-afb9-2a705076285f. 20110703,23:41:17,Chris21 Person Connector,GetAllEntities,Information,Started successfully. 20110703,23:41:17,chris21 GTR HTTP Communicator,List,Information,Started successfully. 20110703,23:42:57,chris21 GTR HTTP Communicator,List,Error,"Exception occured after [00:01:40.0220260] duration. System.Net.WebException: The operation has timed out at System.Net.HttpWebRequest.GetRequestStream() at Unify.Framework.HttpWorker.PerformHttpRequest(String requestString) at Unify.Communicators.Chris21GtrHttpCommunicator.PerformGtrRequest(String gtrRequest) at Unify.Communicators.Chris21GtrCommunicatorBase.List(IEnumerable`1 keyColumnNames)" 20110703,23:42:57,Chris21 Person Connector,GetAllEntities,Error,"Exception occured after [00:01:40.0220260] duration. System.Net.WebException: The operation has timed out at System.Net.HttpWebRequest.GetRequestStream() at Unify.Framework.HttpWorker.PerformHttpRequest(String requestString) at Unify.Communicators.Chris21GtrHttpCommunicator.PerformGtrRequest(String gtrRequest) at Unify.Communicators.Chris21GtrCommunicatorBase.List(IEnumerable`1 keyColumnNames) at Unify.Connectors.Chris21GtrConnector.GetAllEntities(IStoredValueCollection storedValueState)" 20110703,23:42:57,Get all entities from connector failed.,Connector,Warning,"Get all entities from connector 34b83581-377c-41b5-afb9-2a705076285f failed with reason The operation has timed out. Duration: 00:01:40.0220260 Error details: System.Net.WebException: The operation has timed out at System.Net.HttpWebRequest.GetRequestStream() at Unify.Framework.HttpWorker.PerformHttpRequest(String requestString) at Unify.Communicators.Chris21GtrHttpCommunicator.PerformGtrRequest(String gtrRequest) at Unify.Communicators.Chris21GtrCommunicatorBase.List(IEnumerable`1 keyColumnNames) at Unify.Connectors.Chris21GtrConnector.GetAllEntities(IStoredValueCollection storedValueState) at Unify.Framework.MultiKeyedReadingConnectorAdapterBase`1.GetAllEntities(IStoredValueCollection storedValueState) at Unify.Framework.MultiKeyedWritingPollingAndDeletingConnectorAdapter.GetAllEntities(IStoredValueCollection storedValueState) at Unify.Framework.ConnectorToReadingConnectorBridge.GetAllEntities(IStoredValueCollection storedValueState) at Unify.Framework.EventNotifierReadingConnectorDecoratorBase`1.GetAllEntities(IStoredValueCollection storedValues) at Unify.Framework.GetEntityThresholdReadingConnectorDecoratorBase`1.GetAllEntities(IStoredValueCollection storedValues) at Unify.Framework.AuditReadingConnectorDecoratorBase`1.GetAllEntities(IStoredValueCollection storedValues) at Unify.Framework.AuditScopeReadingConnectorDecoratorBase`1.GetAllEntities(IStoredValueCollection storedValues) at Unify.Framework.ChangeDetectionImportAllJob.ImportAllChangeProcess(Guid connectorId) at Unify.Framework.ChangeDetectionImportAllJob.RunBase() at Unify.Framework.JobBase.Run() at Unify.Framework.MutexJobDecorator.Run() at Unify.Framework.DefinedScopeJobAuditTrailJobDecorator.Run() at Unify.Framework.AsynchronousJobExecutor.PerformJobCallback(Object state)"
The full log file is in the attached document file, TattsGroup-Prod-timeout-error-20110703.docx
Note: Tatts Group's chris21 system has now been upgraded to version 7.5.18
However, Anthony Mills said that this time out issue occurred before the chris21 system upgrade taken place. I am not certain how correct this is and whether a change/upgrade in their environments or even IIS server that may contribute/cause this issue.
TattsGroup-Prod-timeout-error-20110703.docx

Improve existing entity search functionality
From Eddie on PRODUCT-2:
"Search" entities in connector or adapter - it would be great to have an option to enter search criteria first rather than have to list all then sort.
It is probably not so bad in many sites, but DET as an example, takes an age to load 109,000 entities, which is a pain when we only want to look at one.
This issue is subject to whatever searches the current database structure can provide. For example, "Starts with" should be fine - "Contains" probably not. Date ranges may or may not be possible. Further investigation and comment required.

Provide statistics about connectors/adapters
Originally from Peter Wass on PRODUCT-2:
Currently there is no easy way to get stats on a connector or adapter. It would be good to be able to see:
Number of current objects
Number of changes in change register
Number of pending exports (to connected system or FIM)
(Note the last two may be the same...)
Date / Time of last run import / export
Number of Errors / Warnings from last import / export run

Less than symbol in text entry fields not escaped
If any standard text fields contain a less than symbol (<) followed by alphabetical characters the following is displayed when the form is submitted.
System.Web.HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (LesserValue="<value"). at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) at System.Web.HttpValueCollection.GetValues(String name) at System.Web.Mvc.NameValueCollectionValueProvider.ValueProviderResultPlaceholder.GetResultFromCollection(String key, NameValueCollection collection, CultureInfo culture) at System.Lazy`1.CreateValue() at System.Lazy`1.LazyInitValue() at System.Web.Mvc.NameValueCollectionValueProvider.ValueProviderResultPlaceholder.get_ValidatedResult() at System.Web.Mvc.NameValueCollectionValueProvider.GetValue(String key, Boolean skipValidation) at System.Web.Mvc.ValueProviderCollection.<>c__DisplayClass9.<GetValue>b__4(IValueProvider provider) at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source) at System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) at System.Web.Mvc.DefaultModelBinder.GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder) at System.Web.Mvc.DefaultModelBinder.BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) at System.Web.Mvc.DefaultModelBinder.BindProperties(ControllerContext controllerContext, ModelBindingContext bindingContext) at System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) at System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) at System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
Customer support service by UserEcho