Durante il processo di sincronizzazione LDAP, può capitare di incorrere in un errore del tipo “The Guest user cannot be deleted”. Alfresco, prima di effettuare una sincronizzazione, lancia una query di ricerca sul server LDAP per recuperare tutti gli aggiornamenti su utenti e gruppi. Se tra i risultati di ricerca, l’utente Guest non risulta più presente, tenterà di cancellarlo dal suo database.
Sebbene tale operazione risulti legittima per utenti LDAP ordinari, non è possibile per Guest, poichè su Alfresco è un utente di sistema.
Il messaggio di errore che compare nel log è qualcosa di simile a questo:
ESEMPIO
L’esempio classico è quello in cui Alfresco viene integrato con un’istanza Microsoft Active Directory in cui è già presente l’utente built-in Guest. Di seguito riporto una visione ad alto livello del caso d’uso, per ulteriori dettagli vedere Alfresco Synchronization Subsystem
Step 1 – Viene eseguita l’importazione utenti LDAP su Alfresco la prima volta.
Step 2 – Le proprietà per la base di ricerca LDAP su Alfresco puntano a un elemento che include l’utente Guest di AD, per esempio:
ldap.synchronization.groupSearchBase=dc\=testad,dc\=com ldap.synchronization.userSearchBase=dc\=testad,dc\=com
Step 3 – Dopo l’importazione, l’utente Guest (già presente su Alfresco perchè di sistema) viene considerato a tutti gli effetti come un utente LDAP.
Step 4 – L’utente Guest, come tutti gli altri utenti LDAP viene aggiornato dopo ogni processo di sincronizzazione LDAP.
Step 5 – Supponiamo di modificare la base di ricerca LDAP impostata per la sincronizzazione facendola puntare a un elemento dell’albero che non include più l’utente Guest.
Step 6 – Durante il processo di sincronizzazione, si verifica l’errore “The Guest user cannot be deleted”.
ldap.synchronization.groupSearchBase=ou\=MilanoUO,dc\=testad,dc\=com ldap.synchronization.userSearchBase=ou\=MilanoUO,dc\=testad,dc\=com
SOLUZIONE 1
Questa soluzione è valida solo quando viene effettuata la prima importazione utenti LDAP. Se infatti l’utente Guest viene importato per errore su Alfresco, sarà considerato sempre un utente LDAP e sottoposto quindi agli aggiornamenti durante le successive sincronizzazioni.
### Exclude always the Guest user from the person query ldap.synchronization.personQuery=(&(objectclass\=user)(!(cn\=Guest))(userAccountControl\:1.2.840.113556.1.4.803\:\=512)) ldap.synchronization.personDifferentialQuery=(&(objectclass\=user)(!(cn\=Guest))(userAccountControl\:1.2.840.113556.1.4.803\:\=512))
SOLUZIONE 2
Anche questa soluzione è valida solo quando viene effettuata la prima importazione utenti LDAP. Se infatti l’utente Guest viene importato per errore su Alfresco, sarà considerato sempre un utente LDAP e sottoposto quindi agli aggiornamenti durante le successive sincronizzazioni.
### Restrict the LDAP user query to a sub section of tree on the LDAP server where the Guest user will never be included ldap.synchronization.groupSearchBase=ou\=MyNoGuestUnit,dc\=testad,dc\=com ldap.synchronization.userSearchBase=ou\=MyNoGuestUnit,dc\=testad,dc\=com
SOLUZIONE 3
Disabilitare la funzionalità di cancellazione utente durante il processo di sincronizzazione.
### If false, then no sync job will be allowed to delete users or groups synchronization.allowDeletions=false
SOLUZIONE 4
L’utente Guest è già stato importato per errore su Alfresco, ma è stata cambiata la query di ricerca LDAP per cui Alfresco punta a un elemento dell’albero che non include più l’utente Guest. In questo caso si può valutare la possibilità di spostare l’utente Guest di Active Directory nel nodo dell’albero da cui parte la query LDAP di Alfresco.
### The sub section of tree on the LDAP server includes the Guest user ldap.synchronization.groupSearchBase=ou\=MilanoUO,dc\=testad,dc\=com ldap.synchronization.userSearchBase=ou\=MilanoUO,dc\=testad,dc\=com