Laszlo Miklosik created SYNCOPE-1102:
----------------------------------------

             Summary: Syncope 1.1.5 unique attribute update inserts additional 
value
                 Key: SYNCOPE-1102
                 URL: https://issues.apache.org/jira/browse/SYNCOPE-1102
             Project: Syncope
          Issue Type: Bug
    Affects Versions: 1.1.5
            Reporter: Laszlo Miklosik


To reproduce:

- make sure you have a unique attribute in the Syncope schema (e.g. called 
privateEmailAddress)
- create a user via POST and use value 'a...@gmail.com' for this unique 
attribute
- then try to update this via the Syncope REST API and to change it into 
'b...@gmail.com' (by using the below POST payload):
{code}
{
  "attributesToBeUpdated": [
    {
      "schema": "privateEmailAddress",
      "valuesToBeAdded": [
        "b...@gmail.com"
      ],
      "valuesToBeRemoved": [
        "a...@gmail.com"
      ]
    }
  ]
}
{code}
- after this the Syncope MySQL data gets incorrect (the unique attribute will 
have 2 values in table UAttrUniqueValue) and you cannot e.g. delete anymore the 
user.

- You then can find the old unique attribute value using query:

{code}
select min(id) from UAttrUniqueValue group by ATTRIBUTE_ID having 
count(stringValue) > 1
{code}

and you can fix the Syncope data inconsistency by deleting the related row from 
UAttrUniqueValue.

- Root cause comes from line 467:

{code}
                for (Long attributeValueId : valuesToBeRemoved) {
                    attributeValueDAO.delete(attributeValueId, 
attrUtil.attrValueClass());
                }
{code}
where the delete call uses the same argument values in case of both the 
non-unique and unique attributes, this in fact a non-unique attributes is tried 
to be deleted.

Note: as UserMod payloads are not used anymore in Syncope 2 REST API, it's 
likely that this issue is not happening on Syncope 2, but might reproduce on 
Syncope 1.1.6-1.2.10.

Note: I have a patch I applied in our overlay and can provide it if necessary.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to