Listenerhandler: filter mit Negation

german

#1

Bei einem selbst erstellten Handler-Modul wird die handler-Funktion aufgerufen, obwohl das “Trigger”-Attribut keine Änderung erfahren hat. Unten die Deklaration der beiden Module. Auffällig ist, dass bei beiden Filtern die Negation ‘!’ mit im Spiel ist. Kann das ein Problem darstellen? Ich erinnere mich, dass die Negation vor längerer Zeit nicht erlaubt war!?.
Im Anhang der Ausschnitt der entsprechenden debug-Ausgabe des listener.logs. Diesem ist zu entnehmen, dass die Attribute, die als Triggerattribute deklariert sind, nicht geändert sind!

import nisgen

name        = 'nis-ethers'
description = 'Update ethers (if macAddress changes)'
filter      = '(&(objectClass=univentionHost)(!(|(macAddress=00:00:00:00:00:00)(macAddress=ff:ff:ff:ff:ff:ff))))'
attributes  = [ 'macAddress' ]

modrdn      = '1' # Additional support for command-parameter in handler()

def handler(dn, new, old, command):
    nisgen.handler(dn, new, old, command, 'ethers')

def initialize():
    nisgen.initialize('ethers')

def postrun():
    nisgen.postrun('ethers')

def clean():
    nisgen.clean('ethers')

----

import nisgen

name        = 'nis-hosts'
description = 'Update hosts (if aRecord changes)'
filter      = '(&(objectClass=univentionHost)(!(|(aRecord=0.0.0.0)(aRecord=255.255.255.255))))'
attributes  = [ 'aRecord' ]

modrdn      = '1' # Additional support for command-parameter in handler()

def handler(dn, new, old, command):
    nisgen.handler(dn, new, old, command, 'hosts')

def initialize():
    nisgen.initialize('hosts')

def postrun():
    nisgen.postrun('hosts')

def clean():
    nisgen.clean('hosts')

listener.log (7.61 KB)


#2

Hallo,

evtl. ist das OR im negierten Block hier ein Problem, sie könnten Prüfen ob der folgende Filter wie erwartet funktioniert:

'(&(objectClass=univentionHost)(!(macAddress=00:00:00:00:00:00))(!(macAddress=ff:ff:ff:ff:ff:ff)))'

Mit freundlichen Grüßen
Janis Meybohm


#3

auch mit geändertem Filter werden Triggervorgänge gestartet, obwohl die MAC-Adresse gleich bleibt:

03.01.12 11:52:18 LISTENER ( ERROR ) : NIS: *** HANDLER *** 03.01.12 11:52:18 LISTENER ( ERROR ) : NIS: Name : nis-ethers 03.01.12 11:52:18 LISTENER ( ERROR ) : NIS: Mapname : ethers 03.01.12 11:52:18 LISTENER ( ERROR ) : NIS: Description : Update ethers (if macAddress changes) 03.01.12 11:52:18 LISTENER ( ERROR ) : NIS: Filter : (&(objectClass=univentionHost)(!(macAddress=00:00:00:00:00:00))(!(macAddress=ff:ff:ff:ff:ff:ff))) 03.01.12 11:52:18 LISTENER ( ERROR ) : NIS: Triggerattributes : ['macAddress'] 03.01.12 11:52:18 LISTENER ( ERROR ) : NIS: Command : Modify (m) 03.01.12 11:52:18 LISTENER ( ERROR ) : NIS: DN=cn=47D9XP1,cn=computers,dc=saacke,dc=de 03.01.12 11:52:18 LISTENER ( ERROR ) : NIS: Attributes old: {'macAddress': ['78:2b:cb:7a:e3:49'], 'uid': ['47D9XP1$'], 'departmentNumber': ['0110'], 'objectClass': ['top', 'univentionHost', 'univentionWindows', 'posixAccount', 'person', 'sambaSamAccount', 'saackeHost'], 'uidNumber': ['2332'], 'sambaAcctFlags': ['[W ]'], 'entryUUID': ['91997b1c-8389-1030-9a07-2decfd0d9c7c'], 'modifiersName': ['cn=admin,dc=saacke,dc=de'], 'entryDN': ['cn=47D9XP1,cn=computers,dc=saacke,dc=de'], 'structuralObjectClass': ['person'], 'cn': ['47D9XP1'], 'hasSubordinates': ['FALSE'], 'creatorsName': ['uid=pcadmin,cn=users,dc=saacke,dc=de'], 'sambaLogonTime': ['1324626819'], 'aRecord': ['172.20.2.181'], 'description': ['0110 / rod'], 'loginShell': ['/bin/false'], 'gidNumber': ['1005'], 'subschemaSubentry': ['cn=Subschema'], 'entryCSN': ['20111223075339Z#000000#00#000000'], 'sambaPwdLastSet': ['1323247278'], 'sambaNTPassword': ['AB874D9059B0D7E8A87D9C905BF414A2'], 'modifyTimestamp': ['20111223075339Z'], 'telephoneNumber': ['pdc'], 'displayName': ['Dell Latitude E6220'], 'name': ['rod'], 'associatedDomain': ['saacke.de'], 'serialNumber': ['47D9XP1'], 'l': ['Suedweststr. 13, Bremen'], 'o': ['SAACKE GmbH'], 'sambaSID': ['S-1-5-21-3337506086-3871218678-1542260769-5664'], 'createTimestamp': ['20111005103603Z'], 'gecos': ['rod'], 'sn': ['47D9XP1'], 'univentionNetworkLink': ['cn=Suedwest,cn=networks,dc=saacke,dc=de'], 'homeDirectory': ['/dev/null'], 'seeAlso': ['cn=Windows Hosts,cn=groups,dc=saacke,dc=de']} 03.01.12 11:52:18 LISTENER ( ERROR ) : NIS: Attributes new: {'macAddress': ['78:2b:cb:7a:e3:49'], 'uid': ['47D9XP1$'], 'departmentNumber': ['0110'], 'objectClass': ['top', 'univentionHost', 'univentionWindows', 'posixAccount', 'person', 'sambaSamAccount', 'saackeHost'], 'uidNumber': ['2332'], 'sambaAcctFlags': ['[W ]'], 'entryUUID': ['91997b1c-8389-1030-9a07-2decfd0d9c7c'], 'modifiersName': ['cn=admin,dc=saacke,dc=de'], 'entryDN': ['cn=47D9XP1,cn=computers,dc=saacke,dc=de'], 'structuralObjectClass': ['person'], 'cn': ['47D9XP1'], 'hasSubordinates': ['FALSE'], 'creatorsName': ['uid=pcadmin,cn=users,dc=saacke,dc=de'], 'sambaLogonTime': ['1325587938'], 'aRecord': ['172.20.2.181'], 'description': ['0110 / rod'], 'loginShell': ['/bin/false'], 'gidNumber': ['1005'], 'subschemaSubentry': ['cn=Subschema'], 'entryCSN': ['20120103105218Z#000000#00#000000'], 'sambaPwdLastSet': ['1323247278'], 'sambaNTPassword': ['AB874D9059B0D7E8A87D9C905BF414A2'], 'modifyTimestamp': ['20120103105218Z'], 'telephoneNumber': ['pdc'], 'displayName': ['Dell Latitude E6220'], 'name': ['rod'], 'associatedDomain': ['saacke.de'], 'serialNumber': ['47D9XP1'], 'l': ['Suedweststr. 13, Bremen'], 'o': ['SAACKE GmbH'], 'sambaSID': ['S-1-5-21-3337506086-3871218678-1542260769-5664'], 'createTimestamp': ['20111005103603Z'], 'gecos': ['rod'], 'sn': ['47D9XP1'], 'univentionNetworkLink': ['cn=Suedwest,cn=networks,dc=saacke,dc=de'], 'homeDirectory': ['/dev/null'], 'seeAlso': ['cn=Windows Hosts,cn=groups,dc=saacke,dc=de']} 03.01.12 11:52:18 LISTENER ( ERROR ) : NIS: ^^^ No further actions in this routine ^^^


#4

Hallo,

ich habe ihre ursprüngliche Frage wohl falsch interpretiert. Da der initial von Ihnen angegebene Filter augenscheinlich funktioniert, braucht dort keine Anpassung vorgenommen werden.
Bzgl. des Trigger-Attribute würde ich Sie bitten die Situation einmal mit Debuglevel 4 zu reprodzieren. Laut univention-directory-listener/src/handlers.c sollten beim Vergleich der Trigger Attribute mit den geänderten Attributen Debugmeldungen ausgegeben werden (in der Funktion “int attribute_has_changed(char** changes, char* attribute)”).

Mit freundlichen Grüßen
Janis Meybohm


#5

Ich habe noch nicht den Debuglevel hochgesetzt aber einen Testhandler einfachster Art geschrieben, der nur die Aufrufe protokolliert. Dieser Testhandler zeigt bei gleichem Trigger-Filter und gleichem Trigger-Attribut nicht das beschriebene Phänomen. Das bedeutet für mich vorerst, dass der Fehler in meinen Programm bzw. der erstellten Bibliothek liegen muss.

Soviel also erst einmal zur Entwarnung.

Im Anhang test-trigger.log die Ausgaben, die zeigen, dass der Handler nur bei wirklichen Änderungen an der
MAC-Adresse getriggert wird.
test-trigger.log (134 KB)


#6

Zur Info,

nach Umstellung des Programmcodes war der Fehler nicht mehr zu beobachten. Im Quelltext wurde die Durchführung des Programmteils vom Bibliotheksteil getrennt (Bibliothek u. Programm sind einer Quelltext-Datei).
Vielleicht lag der Fehler darin, dass ohne den “Programmschutz” der Bibliotheksimport auf ein sys.exit(0) gestossen ist aber alles nur Vermutungen. Die ganaue Ursache habe ich nicht ermitteln können.

...
...
#########################
# END OF LIBRARY nisgen #
#########################

if __name__ == '__main__':

    import ldap.modlist
    from optparse import OptionParser
    ...
   sys.exit(0)