Univention Bugzilla – Bug 23525
mailPrimaryAddress nur mit gültiger Domäne
Last modified: 2013-04-04 07:54:10 CEST
Die mailPrimaryAddress an Benutzern, Gruppen, Shared Folder und Mailinglisten sollte nur noch Mailadressen annehmen, die a) einzigartig innerhalb der Domäne sind (war bisher auch schon so) b) deren Domainpart mit einem der vorhandenen Mail-Domain-Objekten übereinstimmt
Siehe auch Bug 24311
Siehe auch Bug 23525
(In reply to comment #2) > Siehe auch Bug 23525 Gemeint war natürlich Bug 26813.
Um möglichst wenige Änderungen aber generische Änderungen am Code vorzunehmen, wurde nicht die parse() Methode angepasst, sondern eine neue optionale Methode checkLdap() für Syntax-Klassen eingeführt: class MySyntax(ISyntax): @classmethod def checkLdap(self, lo, values): if something: raise univention.admin.uexceptions.valueError, _('something happened!') Die checkLdap()-Methode bekommt ein LDAP-Verbindungsobjekt und den "neuen" Wert (kann eine Liste sein!) der jeweiligen Property übergeben. Der Rückgabewert der Methode wird nicht ausgewertet. Die Funktion kann nur im Fehlerfall eine Exception mit einer Meldung werfen. In der Basis-Syntax ISyntax wurde bereits ein leerer Methoden-Körper als Klassenmethode integriert. Die Klasse simpleLdap aus admin/handlers/__init__.py ruft jetzt die Methoden in folgender Reihenfolge auf: ADD: _ldap_pre_create() _update_policies() hook_ldap_pre_create() <Setzen von Defaultvalues> <forEach property> checkLdap() _ldap_addlist() .... MODIFY: _ldap_pre_modify() _update_policies() hook_ldap_pre_modify() <Setzen von Defaultvalues> <forEach property> checkLdap() _ldap_modlist() .... In syntax.py wurden zwei neue Syntax-Klassen hinzugefügt, die von emailAddress erben: emailAddressValidDomain und primaryEmailAddressValidDomain. Diese beiden Syntaxklassen prüfen, ob für die übergebenen Mailadressen ein entsprechendes Maildomänenobjekt vorhanden ist. Gesucht wird mit dem Filter '(&(objectClass=univentionMailDomainname)(cn=%s))'. Im users/user Modul wurde an der Property die Syntax "emailAddress" durch "primaryEmailAddressValidDomain" ausgetauscht. Weiterhin wurde in den folgenden Modulen die Syntax "emailAddress" durch "emailAddressValidDomain" getauscht: Modul: users/user Property: mailAlternativeAddress Modul: groups/group Property: mailAddress Modul: mail/list Property: mailAddress Modul: mail/folder Property: mailPrimaryAddress Damit können über den UDM nur noch eMail-Adressen für das Mailrouting angegeben werden, für die bereits ein Mail-Domänenobjekt im LDAP existiert. Die Property "mail" in users/user oder die Member eines mail/list-Objektes bleiben davon jedoch unberührt. Um das alte Verhalten wieder herzustellen, kann die alte Syntax wieder der jeweiligen Property zugewiesen werden: ucr set \ directory/manager/web/modules/users/user/properties/mailPrimaryAddress/syntax=emailAddress \ directory/manager/web/modules/users/user/properties/mailAlternativeAddress/syntax=emailAddress \ directory/manager/web/modules/groups/group/properties/mailAddress/syntax=emailAddress \ directory/manager/web/modules/mail/list/properties/mailAddress/syntax=emailAddress \ directory/manager/web/modules/mail/folder/properties/mailPrimaryAddress/syntax=emailAddress Changelogeintrag wurde erstellt univention-directory-manager-modules (7.0.283-2) unstable; urgency=low
Die Fehlermeldungen wurden noch einmal überarbeitet.
Das führt jetzt dazu, dass auf einem 3.0-2 der Standard Import von UCS@school Benutzern nicht mehr funktioniert: root@master451:~# /usr/share/ucs-school-import/scripts/import_user school1 infile is: school1 Processing line 1: A a1 a1 a1 school1 school1-1A Anton1@deadlock45.local 0 1 0 univention verify ou for school nr school1 creating object cn=dcschool1-01,cn=dc,cn=server,cn=computers,ou=school1,dc=deadlock45,dc=local need to create server: cn=dcschool1-01,cn=dc,cn=server,cn=computers,ou=school1,dc=deadlock45,dc=local need to create dhcp server: creating object cn=dcschool1-01,cn=school1,cn=dhcp,ou=school1,dc=deadlock45,dc=local creating object cn=dcschool1v-01,cn=dc,cn=server,cn=computers,ou=school1,dc=deadlock45,dc=local need to create server: cn=dcschool1v-01,cn=dc,cn=server,cn=computers,ou=school1,dc=deadlock45,dc=local need to create dhcp server: creating object cn=dcschool1v-01,cn=school1,cn=dhcp,ou=school1,dc=deadlock45,dc=local need to create group cn=Domain Users school1,cn=groups,ou=school1,dc=deadlock45,dc=local creating object cn=Domain Users school1,cn=groups,ou=school1,dc=deadlock45,dc=local need to create group cn=school1-1A,cn=klassen,cn=schueler,cn=groups,ou=school1,dc=deadlock45,dc=local creating object cn=school1-1A,cn=klassen,cn=schueler,cn=groups,ou=school1,dc=deadlock45,dc=local need to create groupshare cn=school1-1A,cn=klassen,cn=shares,ou=school1,dc=deadlock45,dc=local creating object cn=school1-1A,cn=klassen,cn=shares,ou=school1,dc=deadlock45,dc=local ERROR: <class 'univention.admin.uexceptions.valueError'> The domain part of the primary mail address is not in list of configured mail domains: anton1@deadlock45.local ERROR: create this user manually: uid=a1,cn=schueler,cn=users,ou=school1,dc=deadlock45,dc=local Traceback (most recent call last): File "/usr/share/ucs-school-import/scripts/import_user", line 1446, in create_user exists, dn = create_object(object) File "/usr/share/ucs-school-import/scripts/import_user", line 939, in create_object dn=o.create() File "/usr/lib/pymodules/python2.6/univention/admin/handlers/__init__.py", line 332, in create return self._create() File "/usr/lib/pymodules/python2.6/univention/admin/handlers/__init__.py", line 627, in _create self._call_checkLdap_on_all_property_syntaxes() File "/usr/lib/pymodules/python2.6/univention/admin/handlers/__init__.py", line 1060, in _call_checkLdap_on_all_property_syntaxes prop.syntax.checkLdap(self.lo, self.info.get(pname)) File "/usr/lib/pymodules/python2.6/univention/admin/syntax.py", line 977, in checkLdap raise univention.admin.uexceptions.valueError, self.errMsgDomain % (', '.join(faillist),) valueError: The domain part of the primary mail address is not in list of configured mail domains: anton1@deadlock45.local Es funktioniert, wenn die Mailadresse durch einen Tab ersetzt wird. Wir können es auch so belassen, ungünstig ist es aber trotzdem.
(In reply to comment #6) > Das führt jetzt dazu, dass auf einem 3.0-2 der Standard Import von UCS@school > Benutzern nicht mehr funktioniert: Wir sollten einen Pre-Import-Hook für Benutzer mitbringen, der die Maildomänen anlegt, falls diese noch fehlen → ausgelagert in Bug 27892
OK - Benutzer (mailPrimaryAddress, mailAlternativeAddress, mail nicht) OK - Gruppen OK - Liste (mailPrimaryAddress,univentionMailMember nicht) OK - Folder (mailPrimaryAddress) OK > In der Basis-Syntax ISyntax wurde bereits ein leerer Methoden-Körper als > Klassenmethode integriert. OK > Die Klasse simpleLdap aus admin/handlers/__init__.py ruft jetzt die Methoden in > folgender Reihenfolge auf: > ADD: > _ldap_pre_create() > _update_policies() > hook_ldap_pre_create() > <Setzen von Defaultvalues> > <forEach property> checkLdap() > _ldap_addlist() > .... OK > MODIFY: > _ldap_pre_modify() > _update_policies() > hook_ldap_pre_modify() > <Setzen von Defaultvalues> > <forEach property> checkLdap() > _ldap_modlist() OK > In syntax.py wurden zwei neue Syntax-Klassen hinzugefügt, die von emailAddress > erben: > emailAddressValidDomain und primaryEmailAddressValidDomain. > Diese beiden Syntaxklassen prüfen, ob für die übergebenen Mailadressen ein > entsprechendes Maildomänenobjekt vorhanden ist. Gesucht wird mit dem Filter > '(&(objectClass=univentionMailDomainname)(cn=%s))'. OK > Im users/user Modul wurde an der Property die Syntax "emailAddress" durch > "primaryEmailAddressValidDomain" ausgetauscht. > Weiterhin wurde in den folgenden Modulen die Syntax "emailAddress" durch >" emailAddressValidDomain" getauscht: > Modul: users/user Property: mailAlternativeAddress > Modul: groups/group Property: mailAddress > Modul: mail/list Property: mailAddress > Modul: mail/folder Property: mailPrimaryAddress OK > Um das alte Verhalten wieder herzustellen, kann die alte Syntax wieder der > jeweiligen Property zugewiesen werden: OK, das ganze kann auch von "extern" genutzt werden -> ucr get \ directory/manager/web/modules/users/user/properties/description/syntax mySyntax -> more /usr/lib/pymodules/python2.6/univention/admin/syntax.d/new.py class mySyntax(string): name = 'mySyntax' errMsgDomain = "must be a existing uid %s" @classmethod def checkLdap(self, lo, description): # convert description to array if neccessary description = copy.deepcopy(description) if type(description) == str: description = [ description ] if type(description) != list: return description = description[0] ldapfilter = '(uid=%s)' % description result = lo.searchDn(filter=ldapfilter) if not result: raise univention.admin.uexceptions.valueError, self.errMsgDomain % description -> udm users/user modify --dn uid=t2,cn=users,dc=amd64,dc=de --set description=dsafsaasdsa must be a existing uid dsafsaasdsa: Changelog Eintrag vorhanden.
UCS 3.0-2 has been released: http://forum.univention.de/viewtopic.php?f=54&t=1905 If this error occurs again, please use "Clone This Bug".
*** Bug 24311 has been marked as a duplicate of this bug. ***