[midPoint] New Kerberos connector, paging support questions

Radovan Semancik radovan.semancik at evolveum.com
Mon Apr 24 09:58:28 CEST 2017


On 04/23/2017 12:03 PM, František Dvořák wrote:
> Btw. cookies are not supported, right? (it seems they got eaten by
> midPoint) So support for "next" page (offset 0) is not theoretically
> needed in the connector now?

I do not know for sure. But as far as I know we have done no systematic 
testing of paging cookies. So, if you are saying that they do not work 
then it is likely that they really do not work. Cookies was some kind of 
an afterthought. They are useful and all ... but they were not part of 
the original paging design. That's the reason why they probably do not 
work. Anyway, they are supposed to work and if they do not work I would 
consider that to be a bug.

You may create a bug report for that: 
https://wiki.evolveum.com/display/midPoint/Creating+a+Bug+Report

However, planned midPoint 3.6 is a feature-packed release, we have a lot 
of sponsored features. And together with bug fixes for subscribers those 
new features are currently the highest priority. Therefore I cannot make 
any promises about fixing the paging cookies.

> There is also interesting limitation in ConnId. Sun IdM had separated
> list and get operations (and optionally iterate operation in case of
> optimal way of doing both: list+get), but ConnId has only the full
> iterating.

Indeed. It is one of the known issues: 
https://wiki.evolveum.com/display/midPoint/ICF+Issues#ICFIssues-ReadandSearch

We have no easy solution for this, except for changing ConnId. Which can 
be done, of course. But it is not that easy. Especially that ConnId is 
used by (at least) two competing IDM systems. Any ConnId changes need to 
be handled with care.

What we do in LDAP connector is analysis of the filter. If it looks like 
"get" then we use the more efficient operation. Now this is probably the 
only practical way.

>   This is more painful in case of Kerberos, which has
> operation for listing of principal names but any details must be
> additionally fetched by the connector one-by-one. And reconciliation
> process in midPoint works by calling a big executeQuery() first, and
> then executeQuery() one-by-one.

This is even more complex issue. There is a partial solution. There are 
two OperationOptions that allow return of partial results 
(ALLOW_PARTIAL_RESULTS,ALLOW_PARTIAL_ATTRIBUTE_VALUES). MidPoint is 
using them at some places and they seem to be a good optimization. But I 
do not think we have done optimization for your specific case. Anyway, 
these options together with ATTRS_TO_GET might be (theoretically) used 
for some optimization and might make your case efficient. But  it is 
likely that changes in midPoint will be needed for this to work.

> The attributes intended for correlation and synchronization rules must
> be returned already in the first call. But they won't be needed in most
> cases, so theoretically there are possible some hacks using of
> ALLOW_PARTIAL_ATTRIBUTE_VALUES query option for example. Or it would be
> too much dirty hack?

Depends on where you do it. Connector should follow the ConnId contract 
which means the connector is essentially controlled by commands from 
midPoint. So I'm not sure how you would do this hack in a connector. The 
good solution would probably be for midPoint to use the OperationOptions 
in a less wasteful way. But this is not something that can be fixed in 
an hour. And we haven't see any critical need for this for any other 
connector that we support. Therefore we do not have any specific plan to 
do this now. So, you have the usual options:

https://wiki.evolveum.com/display/midPoint/I+Need+New+Feature

-- 
Radovan Semancik
Software Architect
evolveum.com




More information about the midPoint mailing list