Printout Header
RSS Feed

Novell ZENworks : Distribution Rules für Application-Objekte


Auf dieser Webseite wollen wir einen Blick auf die Attribute werfen, durch die die Distribution Rules von ZENworks Application-Objekte festgelegt werden:


Novell Logo zenAppInventory
Novell Logo zenAppInventoryTree
Novell Logo zenAppInventoryApplication


Distribution Rules sind bei der Software-Verteilung in Novell ZENWorks-Umgebungen sehr wichtig, da durch sie gesteuert werden kann, das ZEN-Applikationen nur dann auf einer Maschine installiert werden oder verfügbar sind, wenn dort ganz bestimmte Voraussetzungen gegeben sind. Man kann hier für jede Applikation mehrere Kriterien angeben, die mittels einer komplexen logischen UND/ODER Struktur miteinander verknüpft werden können.

KriteriumBlock für Bedingung "Application"

Es handelt sich dabei um LDAP Attribute, deren Inhalt und Zusammenhang untereinander leider nicht intuitiv klar ist. Da auf den Webseiten des Herstellers Novell auch keinerlei Dokumentation über die Interna der ZEN Distribution Rule Attribute zur Verfügung steht, soll dieser Artikel davon handeln, wie man die Distribution Rules von ZEN Applikationen über LDAP Scripte auslesen oder sogar setzen kann.



Objekte und Attribute für Distribution Rules

 

Die Distribution Rules sind generell Eigenschaften von Novell ZENWorks Applikationsobjekten (LDAP-Objektklasse appApplication)

Die Legacy Distribution Rules (<ZEN 6.5) befinden sich in folgenden LDAP-Attributen:

OS Version:     Kriteriumblock in Attribut zen2appInventory
FileExists:        Kriteriumblock in Attribut zen2appInventory
FileVersion:      Kriteriumblock in Attribut zen2appInventory
FileDate:          Kriteriumblock in Attribut zen2appInventory
FileSize:           Kriteriumblock in Attribut zen2appInventory
Application:      String-Zeile in Attribut zen2appInventoryApplications

Die modernen Distribution Rules (>= ZEN 6.5) befinden sich in folgenden LDAP-Attributen:

OS Version:     Kriteriumblock in Attribut zenappInventory
FileExists:        Kriteriumblock in Attribut zenappInventory
FileVersion:      Kriteriumblock in Attribut zenappInventory
FileDate:          Kriteriumblock in Attribut zenappInventory
FileSize:           Kriteriumblock in Attribut zenappInventory
Application:      String-Zeile in Attribut zenappInventoryApplications

Die AND/OR-Verknüpfungen inklusive der entsprechenden Kriterien-Gruppierungen sind im Attribut zenappInventoryTree gespeichert.



Liste der Kriterien-Typen/SubTypen

Criteria Type SubType
Header 2D 02
OS Version 1E 01
FileExists 22 01
FileVersion 22 02
Registry – Key Exists 24 01
Registry – Value Exists 24 02
Registry – Other 24 03




Legacy Rule: Grundsätzlicher Aufbau des zen2appInventory Bitfelds

Es handelt sich um ein LDAP-Attribut vom Typ Octetstring. Also binäre Daten von maximal 2^32 Bit Länge.

Übersicht:

Grundsätzlicher Aufbau des zen2appInventory Bitfelds

Felder:

Feld Länge (Byte) Inhalt
Header 8 Always 0x41 4F 54 20 46 49 4C 45   'AOT FILE'
Criteria 1 – x Variabel, Länge des Kriteriumblocks steht stets im 3. DWORD des Blocks selbst Datenblöcke mit einzelnen Kriterien, es kann auch der Fall auftreten, dass kein Criteria vorhanden ist


Nach der Anfangskennung folgen sofort diverse Kriterienblöcke, die jeweils im ersten DWORD eine Kennung über die Art des Kriteriums tragen. Die verschiedenen Typen von Kriterienblöcken werden in den weiteren Abschniten dieses Artikels genau erläutert.

 

Anmerkung: Der Aufbau fast aller Felder im Inventory basiert auf DWORDs mit Big Endian Byte-Order (wie fast immer bei Novell-Netzwerkdatenstrukturen). Das DWORD 0x11AA22BB wird z.B. als Bytearray "BB 22 AA 11" gespeichert.



Modern Rule: Grundsätzlicher Aufbau des zenappInventory Bitfelds

Es handelt sich um ein LDAP-Attribut vom Typ Octetstring. Also binäre Daten von maximal 2^32 Bit Länge.

Übersicht:

Grundsätzlicher Aufbau des zenappInventory Bitfelds

Felder:

Feld Länge (Byte) Inhalt
Header 8 Always 0x41 4F 54 20 46 49 4C 45   'AOT FILE'
Header Criteria 16 4 Big Endian DWORDs
0x2D 00 00 00
0x02 00 00 00
0x10 00 00 00 (Länge des Header-Criterias)
<Anzahl der restlichen Criteria-Blöcke> als Big Endian DWORD
Criteria 1 – x Variabel, Länge des Kriteriumblocks steht stets im 3. DWORD des Blocks selbst Datenblöcke mit einzelnen Kriterien, es kann auch der Fall auftreten, dass kein Criteria vorhanden ist


Nach der Anfangskennung folgen sofort diverse Kriterienblöcke, die jeweils im ersten DWORD eine Kennung über die Art des Kriteriums tragen. Die verschiedenen Typen von Kriterienblöcken werden in den weiteren Abschniten dieses Artikels genau erläutert.

Anmerkung: Der Aufbau fast aller Felder im Inventory basiert auf DWORDs mit Big Endian Byte-Order (wie fast immer bei Novell-Netzwerkdatenstrukturen). Das DWORD 0x11AA22BB wird z.B. als Bytearray "BB 22 AA 11" gespeichert.



KriteriumBlock f?r Bedingung "OS Version"


Dieses Kriterium kann als einziger oder einer von mehreren Blöcken im LDAP Attribut zenappInventory (bzw. zen2appInventory für Legacy Rules) gespeichert vorkommen.

Übersicht des Kriterium-Blocks:

KriteriumBlock f?r Bedingung "OS Version"

Felder:

Feld Länge (Byte) Inhalt
CriteriaType 4 Kennung 0x1E 00 00 00
SubType 4 Kennung 0x01 00 00 00
TotalLen 4 0x24
Länge des gesamten Kriterium-Blocks, Big Endian DWORD
Flag 4 1. Byte: Operator 0x04 für OSVersion = ValueData
0x08 für OSVersion != ValueData
0x10 für OSVersion < ValueData
0x20 für OSVersion =< ValueData
0x40 für OSVersion > ValueData
0x80 für OSVersion >= ValueData
    2. Byte: Reserved

0x00

    3. Byte: Reserved

0x00

    4. Byte: Show Icon 0x00 für Show=FALSE
0x10 für Show=TRUE
Minor Version 4 DWORD: Die Minor Version, falls es vier Versionsbestandteile gibt, also z.B. bei 5.1.2.3 wäre hier 0x03 00 00 00
Als Wildcard steht hier 0xFF FF FF FF
OS Marker 4 0x02 00 00 00 für Windows 98
0x03 00 00 00 für Windows NT/2000/XP
Major Version 12 3 DWORDs mit den Versionsbestandteilen der Major-Version, also z.B. bei 5.1.2 steht hier
0x05 00 00 00 01 00 00 00 02 00 00 00




KriteriumBlock für Bedingung "File Exists"


Dieses Kriterium kann als einziger oder einer von mehreren Blöcken im LDAP Attribut zenappInventory (bzw. zen2appInventory für Legacy Rules) gespeichert vorkommen.

Übersicht des Kriterium-Blocks:

KriteriumBlock für Bedingung "File Exists"

Felder:

Feld Länge (Byte) Inhalt
CriteriaType 4 Kennung 0x22 00 00 00
SubType 4 Kennung 0x01 00 00 00
TotalLen 4 Länge des gesamten Kriterium-Blocks, Big Endian DWORD
Flag 4 1. Byte: Operator 0x01 für "File exists"
0x02 für "File dont exists"
    2. Byte: Reserved 0x00
    3. Byte: Reserved 0x00
    4. Byte: Show Icon Immer 0x00 für Show=FALSE
Reserved 28 Komplett 0x00
SubjectLen 4 Länge des FilePaths, Big Endian DWORD
Subject steht in SubjectLen Pfadname der Datei




KriteriumBlock für Bedingung "File Version"


Dieses Kriterium kann als einziger oder einer von mehreren Blöcken im LDAP Attribut zenappInventory (bzw. zen2appInventory für Legacy Rules) gespeichert vorkommen.

Übersicht des Kriterium-Blocks:

KriteriumBlock für Bedingung "File Version"

Felder:

Feld Länge (Byte) Inhalt
CriteriaType 4 Kennung 0x22 00 00 00
SubType 4 Kennung 0x02 00 00 00
TotalLen 4 Länge des gesamten Kriterium-Blocks, Big Endian DWORD
Flag 4 1. Byte: Operator 0x04 für FileVersion = ValueData
0x08 für FileVersion != ValueData
0x10 für FileVersion < ValueData
0x20 für FileVersion =< ValueData
0x40 für FileVersion > ValueData
0x80 für FileVersion >= ValueData
    2. Byte: Reserved 0x00
    3. Byte: Reserved 0x00
    4. Byte: Show Icon 0x00 für Show=FALSE
0x10 für Show=TRUE
Reserved 1 0x00 00 00 00
Version 28 4 Big Endian DWORDS mit je einer Versionshierachie, z.B: Version 1.2.3.4:
0x01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00
Reserved 8 Komplett 0x00
SubjectLen 4 Länge des FilePaths, Big Endian DWORD
Subject steht in SubjectLen Pfadname der Datei




KriteriumBlock für Bedingung "Environment"


Dieses Kriterium kann als einziger oder einer von mehreren Blöcken im LDAP Attribut zenappInventory (bzw. zen2appInventory für Legacy Rules) gespeichert vorkommen.

Übersicht des Kriterium-Blocks:

KriteriumBlock für Bedingung "Environment"

Felder:

Feld Länge (Byte) Inhalt
CriteriaType 4 Kennung 0x23 00 00 00
BlockCount 4

Anzahl der InfoBlöcke innerhalb des Kriteriums,
0x01 00 00 00: Nur bei Key-(Dont)Exists Operator, Value nicht vorhanden.
0x02 00 00 00: Nur bei Value-Exists Operator, VarName und Value ist vorhanden.
0x03 00 00 00: Bei allen anderen Kombinationen.

TotalLen 4 Länge des gesamten Kriterium-Blocks, Big Endian DWORD
Flag 4 1. Byte: Operator 0x01 für "Value/Key exists",  (BlockCount steht auf 1 oder
          2, InfoBlock für ValueData nicht vorhanden)
0x02 für "Value/Key dont exists", (BlockCount steht auf 1
          oder 2, InfoBlock für ValueData nicht vorhanden)
0x04 für Value = ValueData  (BlockCount = 3)
0x08 für Value != ValueData  (BlockCount = 3)
0x10 für Value < ValueData  (BlockCount = 3)
0x20 für Value =< ValueData  (BlockCount = 3)
0x40 für Value > ValueData  (BlockCount = 3)
0x80 für Value >= ValueData  (BlockCount = 3)
    2. Byte: Reserved 0x00
    3. Byte: Reserved 0x00
    4. Byte: Show Icon 0x00 für Show=FALSE
0x10 für Show=TRUE
Reserved 4 0x00 00 00 00
VarNameLen 4 Länge des VariablenNamens-Strings, Big Endian DWORD
VarName steht in VarNameLen VariablenName
ValueLen 4 Länge des Values-Strings, Big Endian DWORD
Value steht in ValueLen Value der Environment-Variablen




KriteriumBlock für Bedingung "Registry"


Dieses Kriterium kann als einziger oder einer von mehreren Blöcken im LDAP Attribut zenappInventory (bzw. zen2appInventory für Legacy Rules) gespeichert vorkommen.

Übersicht des Kriterium-Blocks:

KriteriumBlock für Bedingung "Registry"

Felder:

Feld Länge (Byte) Inhalt
CriteriaType 4 Kennung 0x24 00 00 00
BlockCount 4 Anzahl der InfoBlöcke innerhalb des Kriteriums,
0x01 00 00 00: Nur bei Key-(Dont)Exists Operator, Value und ValueData nicht vorhanden.
0x02 00 00 00: Nur bei Value-Exists Operator,ValueData nicht vorhanden.
0x03 00 00 00: Bei allen andere Operatoren: Subject, Value und ValueData vorhanden.
TotalLen 4 Länge des gesamten Kriterium-Blocks, Big Endian DWORD
Flag 4 1. Byte: Operator

0x01 für "Value/Key exists", (BlockCount steht auf 1 oder
          2, InfoBlock für ValueData nicht vorhanden)
0x02 für "Value/Key dont exists", (BlockCount steht auf 1
          oder 2, InfoBlock für ValueData nicht vorhanden)
0x04 für Value = ValueData  (BlockCount = 3)
0x08 für Value != ValueData  (BlockCount = 3)
0x10 für Value < ValueData  (BlockCount = 3)
0x20 für Value =< ValueData  (BlockCount = 3)
0x40 für Value > ValueData  (BlockCount = 3)
0x80 für Value >= ValueData  (BlockCount = 3)

    2. Byte: Reserved 0x00
    3. Byte: Reserved 0x00
    4. Byte: Show Icon 0x00 für Show=FALSE
0x10 für Show=TRUE
Reserved 4 0x00 00 00 00
SubjectLen 4 Länge des RegKey-Strings, Big Endian DWORD
Subject steht in SubjectLen Pfadname des RegKeys
ValueLen 4 Länge des RegValues-Strings, Big Endian DWORD
Value steht in ValueLen Name des RegValues
ValueDataLen 4 Länge des Wert-Eintrages, Big Endian DWORD
Immer 0x04 00 00 00 bei REG_DWORDs, ansonsten Länge des Strings
ValueData steht in Value-DataLen Werteintrag des RegValues für den Wert-Vergleich, entweder eine String oder ein DWORD




KriteriumBlock für Bedingung "Application"


Diese Kriterium wird nicht wie die bisher beschriebenen Distribution Rules im LDAP Attribut zenappInventory (bzw. zen2appInventory) gespeichert, sondern im Attribut zenappInventoryApplications (bzw. zen2appInventoryApplications für Legacy Rules).

Es handelt sich um ein LDAP-Attribut vom Typ Provider-Specific. Dahinter kann sich alles mögliche verstecken, die maximal Größe eines solchen Attributes ist unbekannt.


Offensichtlich handelt es sich aber um einen Multivalued String (Array of Strings), die entsprechend ausgelesen werden können. Jede Zeile dieses String-Array enthält ein Applikationskriterium in folgender Syntax:

KriteriumBlock für Bedingung "Application"

Felder:

Feld Inhalt
App-DN DN des Applikatinsobjektes
Flag Als String ausgeschriebene Dezimalzahl von einem DWORD umgewandelt, der Aufbau des DWORDS:

0x10 00 00 01 für "Show=True Applikation installiert"            (dezimal  268435457)
0x10 00 00 02 für "Show=True Applikation nicht installiert"   (dezimal  268435458)
0x00 00 00 01 für "Show=False Applikation installiert"          (dezimal  1)
0x00 00 00 02 für "Show=False Applikation nicht installiert"  (dezimal  2)




Logische Verknüpfung zwischen den einzelnen Bedingungen


Die Kriterien einer Software Distribution Rule können beliebig mit logischen Operatoren (UND / ODER) miteinander verknüpft und gruppiert werden:

KriteriumBlock für Bedingung "Application"

Entscheidend für die Struktur dieser Logik ist das Attribut zenappInventoryTree. Hier ist der AND/OR-Verknüpfungsbaum der Kriterien gespeichert. Die Möglichkeit zur komplexen logischen Verknüpfung und das LDAP Verzeichnisattribut zenappInventoryTree sind jedoch nicht in den ?lteren Legacy Distribution Rules enthalten.

Aufbau des zenappInventoryTree Attributes (es handelt sich wiederum ein LDAP-Attribut vom Typ Octetstring):

KriteriumBlock für Bedingung "Application"

Felder:

Feld Länge Inhalt
Header 8 Immer 0x41 4F 54 20 46 49 4C 45   "AOT FILE"
FieldType 4 Kennung 0x2D 00 00 00, entspricht auch dem Criteria-Type des ersten Criterias in zenappInventory
SubType 4 Kennung 0x01 00 00 00
TotalLength 4 0x14 00 00 00 Länge des Header-Criterias
LogicCount 4 Anzahl der folgenden 4-Byte Logikblöcke (siehe unten)
Reserved 4 0x00 00 00 00


Darauf folgen beliebig viele Logik-Blöcke von jeweils 4 DWORDs Länge (16 Byte). Jeder Block repräsentiert eine Zeile im Aufbau der Bedingungslogik (siehe obere Screenshot Grafik). Aufbau der Blöcke ist folgender:

KriteriumBlock für Bedingung "Application"

Dabei gelten folgende Werte:

Feld Länge Inhalt
Block Type 4

0x00 00 00 00: Eine normale Bedingung wie z.B. "OS Version", "File Exists", "File Version", "Environment" oder "Registry". Die Daten der eigentlichen Bedingung stehen im Attribut zenappInventory.
0x01 00 00 00: Eine "Application" Bedingung. Die Daten der eigentlichen Bedingung stehen im Attribut zenappInventoryApplications.
0x02 00 00 00: Eine neue logische Gruppe von Bedingungen beginnt.

Operator 4 0x00 00 00 00: UND Verknüpfung
0x01 00 00 00: ODER Verknüpfung
Sibling 4

Nummer des Logikblocks (ab 0 gezählt), der für die betreffende Verknüpfung als zweiter Operand gilt. Falls es keinen weiteren Operanden gibt, steht hier eine -1.


Für Gruppen steht hier die Nummer des Logikblocks, der den ersten Block NACH der Gruppe darstellt. Existiert nach der Gruppe kein weiterer Logikblock, steht hier eine -1.

Zu beachten ist, dass die hier genannten Werte mit umgekehrter Byte-Order (Big Endian) gespeichert wird.

Criteria Number 4

Für normale Bedingungen wie z.B. "OS Version", "File Exists", "File Version", "Environment" oder "Registry" steht hier die Nummer des Kriteriums im Attribut zenappInventory (mit 0 beginend)


Für "Application" Bedingungen steht hier die Nummer des Kriteriums im Attribut zenappInventoryApplications (mit 0 beginend).

Für Gruppen stets -1.

Zu beachten ist, dass die hier genannten Werte mit umgekehrter Byte-Order (Big Endian) gespeichert wird.


Folgende Beispiele geben Logikblöcke für verschiedene Kombinationen und Grupierungen wieder. Jeder Logigblock besteht dabei wie beschrieben aus Block Type, Operator, Sibling und Criteria Number.

KriteriumBlock für Bedingung "Application"