User Directory Erweiterung

Einleitung

Die User Directory Erweiterung generiert Einträge für die Benutzerverzeichnisse und berechnet deren aktuelle Grösse.

Fakten

Name

User Directory

Bezeichner

UserDirectory

Version

1.2

Funktionen

Adapter

Abschnitte

  • Default: primary

  • Der Abschnitt kann konfiguriert werden.

Informationsblöcke

  • UserDirectory

Features

  • Erstellt Einträge für alle Benutzerverzeichnisse basierend auf bestehenden Werten eines Benutzerobjekts.

  • Jedes Verzeichnis kann getestet werden, ob es existiert.

  • Berechnet die Grösse und Limiten aller Benutzerverzeichnisse.

  • Bestehende Verzeichnisse und deren Limiten können mit eigenen Skripten generiert und bearbeitet werden.

  • Als Sicherheitsfeature verwendet die Erweiterung den externen Directory Scanner Service um die Grössen der Verzeichnisse zu berechnen, dadurch braucht nur dieser Service mit seiner limitierten Funktionalität erhöhte Privilegien.

  • Die berechnete Tabelle kann an verschiedene Anforderungen angepasst werden.

Übersicht und Architektur

Die User Directory Erweiterung bietet korrekte Verknüpfungen zu den Benutzerverzeichnissen. Zudem wird die Grösse und Limite von jedem dieser Verzeichnisse berechnet.

Für die Verwaltung von Benutzerprofilen existieren spezialisierte Systeme welche an die jeweiligen Firmenumgebungen angepasst sind. Diese Erweiterung unterstützt daher verschiedenste Methoden um die benötigten Verzeichnisse und Limiten aus bestehenden Werten zu extrahieren. Weiter kann jedes Verzeichnis getestet werden, ob es existiert, und so nur die tatsächlich vorhandenen Verzeichnisse angezeigt werden.

Mit dieser Flexibilität lässt sich die Erweiterung an jede Firmenumgebung anpassen.

Architektur

Die Architektur des Systems wird in the folgenden Illustration gezeigt:

../../../_images/architecture-overview.jpg

Die Erweiterung läuft dabei im Kontext des Raptor Systems und greift für alle Dateiabfragen über ein eigenes API auf den Directory Scanner Service zu. Die Schnittstelle zwischen der Erweiterung und dem Directory Scanner Service ist mit SSL verschlüsselt und wird durch das Secret System geschützt.

Nur der Directory Scanner Service benötigt höhere Zugriffsrechte um auf die Profilverzeichnisse zuzugreifen. Durch die limitierte Funktionalität des Services lassen sich die höheren Zugriffsrechte nicht missbrauchen.

Funktionsweise

Die Erweiterung verwendet ein einfaches Auftragssystem, in dem jeder Auftrag eine Reihe von Zuständen (Schritten) durchläuft. Damit werden die Daten für das Raptor System erzeugt, sobald diese angefragt werden. Dieses System wurde gewählt, da es in jeder Situation stabil und zuverlässig läuft.

Starten eines neuen Auftrags

Fragt der Benutzer die Daten eines Objekts an, stellt der Server eine Anfrage nach den fehlenden Daten. Diese Anfrage erstellt automatisch einen neuen Auftrag innerhalb der Erweiterung. Der Prozess eines solchen Auftrags wird in der folgenden Illustration gezeigt.

../../../_images/job-process.jpg

In dem Prozessdiagramm erkennt man auch sehr klar den Vorteil des gewählten Systems. Ein Auftrag kann an einem beliebigen Punkt scheitern oder es kann eine Zeitüberschreitung auftreten, es wird dabei aber lediglich der einzelne Auftrag mit einem Fehler beendet. Probleme des Raptor Systems oder des Directory Scanner Service haben keinen Einfluss auf die Stabilität der Erweiterung.

Warten auf Eingabewerte

Im ersten Schritt des Auftrags wartet dieser, bis alle gewünschten Eingabewerte des Raptor Systems verfügbar sind. Falls die Konfiguration für Pfade oder Limiten Werte des Objekts benötigt, müssen diese zuerst verfügbar sein, bevor weitere Prozesse starten können.

An diesem Punkt überprüft der Auftrag, ob alle benötigten Werte verfügbar sind. Ist dies der Fall, wird dieser Schritt ohne verzögerung abgeschlossen. Falls benötigte Werte nicht geliefert werden, wird der Auftrag mit einem Fehler abgebrochen.

Falls gar keine Eingabewerte aus dem Objekt benötigt werden wird dieser Schnitt sogar ganz übersprungen.

Erzeugen der Pfade

Im nächsten Schritt werden die Pfade erzeugt, welche du in der Liste Paths konfiguriert hast (siehe Die Liste Paths). Alle Verzeichnispfade welche durch die Konfiguration erzeugt wurden, werden in einer Liste gesammelt.

Falls in diesem Schritt ein Problem auftritt wird der Auftrag mit einem Fehler abgebrochen. Dies kann beispielsweise durch einen Problem in einem Skript oder fehlerhaften Eingabewert passieren.

Nachdem alle Verzeichnispfade erfolgreich erzeugt wurden, wechselt der Auftrag zum nächsten Schritt.

Prüfen ob die Pfade existieren

Als nächstes werden die gesammelten Verzeichnisse überprüft, ob diese auch tatsächlich auf den jeweiligen Dateiservern existieren. Dazu wird eine Verbindung zum Directory Scanner Service hergestellt.

Der Auftrag wartet bei diesem Schritt bis die Resultate des Directory Scanner Service verfügbar sind. Verzeichnisse, welche nicht existieren, werden aus der Liste entfernt.

Falls keine Verzeichnispfade überprüft werden müssen, wird dieser Schritt übersprungen.

Der Auftrage wird in den folgenden Fällen mit einem Fehler abgebrochen: Bei einem Fehler von dem Directory Scanner Service, einer Zeitüberschreitung, falls die Abfrage eines Pfades abgelehnt wird oder falls keine Verbindung aufgebaut werden kann.

Erzeugen der Limiten

Die verbleibenden Verzeichnispfade werden mit den Einträgen abgeglichen, welche du in der der Liste Limits konfiguriert hast (siehe Die Liste Limits). Die berechnete Limite wird dem jeweiligen Verzeichnispfad hinzugefügt.

Falls keine Limiten konfiguriert sind, wird dieser Schritt übersprungen und alle Verzeichnispfade bleiben ohne Limit.

Bei fehlenden Eingabewerten oder einem Fehler in einem Konfigurierten Skript wird der Auftrag mit einem Fehler abgebrochen.

Berechnen der Verzeichnisgrössen

In dem nächsten Schritt werden die aktuellen Verzeichnisgrössen berechnet. Dazu wird eine Verbindung zum Directory Scanner Service aufgebaut und die Verzeichnispfade für die Berechnung übermittelt.

Der Auftrag wartet bei diesem Schritt bis die Resultate für alle Verzeichnispfade berechnet wurden. Die Dauer für die Resultate kann abhängig von der Grösse und Komplexität der Verzeichnisse sowie der Netzwerk- und Dateiserverperformance zwischen Sekunden bis Minuten dauern.

Es existieren daher für diesen Schritt zwei verschiedene Werte für eine Zeitüberschreitung. Ein Wert für alle Berechnungen bis zu diesem Punkt und ein zweiter Wert inklusive der Dauer für die Berechnung der Verzeichnisgrösse.

Die berechneten Resultate werden mit den Verzeichnispfaden gespeichert und der letzte Schritt gestartet.

Falls bei der Berechnung einen Fehler passiert oder eine Zeitüberschreitung eintritt wird der Auftrag mit einem Fehler abgebrochen.

Erstellen der Tabelle mit den Resultaten

Im letzten Schritt wird die Tabelle mit allen Resultaten erstellt und zurück an das Raptor System gesendet.

Fehler im Auftrag

Tritt in einem Auftrag ein Fehler auf, wird je nach schwere des Fehlers der ganze Auftrag abgebrochen, oder nur einzelne Verzeichnispfade nicht berechnet.

Konfiguration

Das Konfigurationsschema

Module

UserDirectory

Value

ValueLabel

Optional

String

  • Maximum length: 32

  • Must match this regular expression: [^\p{Zl}\p{Zp}\p{C}]+

Default Value:

User Directories

Value

ValueSection

Optional

String

  • Maximum length: 64

  • Must match this regular expression: [a-zA-Z]+

Default Value:

primary

Value

ValueOrderIndex

Optional

Integer

  • Minimum value: 1

  • Maximum value: 1000

Default Value:

800

List

TableColumns

Optional

Complex list definition

Value

Identifier

String

  • Must be one of this: Identifier, Name, Path, Limit, Size, Usage, Actions

Value

Title

Optional

String

  • Must not be empty.

  • Maximum length: 64

  • Must match this regular expression: [^\p{Zl}\p{Zp}\p{C}]+

Value

IsVisible

Optional

Boolean

Default Value:

Yes

Value

IsActionParameter

Optional

Boolean

Default Value:

No

Value

ActionParameterName

Optional

String

  • Must not be empty.

  • Maximum length: 64

  • Must match this regular expression: [a-z0-9]+

List

TableActions

Optional

Complex list definition

Value

Label

String

  • Must not be empty.

  • Maximum length: 64

Value

Arguments

StringList

Value

ProgramPath

Optional

String

Value

SizeFormat

Optional

String

  • Must be one of this: Bytes, Formatted

Default Value:

Formatted

Value

TextOnError

Optional

String

  • Maximum length: 64

  • Must match this regular expression: [^\p{Zl}\p{Zp}\p{C}]+

Default Value:

[error]

List

Paths

Complex list definition

Value

Identifier

Optional

String

  • Maximum length: 64

  • Must match this regular expression: [-_a-zA-Z0-9]+

Value

Name

Optional

String

  • Maximum length: 128

  • Must match this regular expression: [^\p{Zl}\p{Zp}\p{C}]+

Default Value:

None

Value

InformationBlockName

String

  • Maximum length: 64

  • Must match this regular expression: [-_a-zA-Z0-9]+

Value

ValueName

String

  • Maximum length: 64

  • Must match this regular expression: [-_a-zA-Z0-9]+

Value

Script

Optional

String

Value

RemoveNonExistingPaths

Optional

Boolean

Default Value:

No

List

Limits

Complex list definition

Value

Identifier

Optional

String

  • Maximum length: 64

  • Must match this regular expression: [-_a-zA-Z0-9]+

Value

PathFilter

Optional

String

  • Must be a valid regular expression.

Value

InformationBlockName

String

  • Maximum length: 64

  • Must match this regular expression: [-_a-zA-Z0-9]+

Value

ValueName

String

  • Maximum length: 64

  • Must match this regular expression: [-_a-zA-Z0-9]+

Value

Script

Optional

String

Value

Factor

Optional

Integer

  • Minimum value: 1

Default Value:

1

Value

JobProcessingTimeout

Optional

Integer

  • Minimum value: 5

Default Value:

10

Value

JobSizeCalculationTimeout

Optional

Integer

  • Minimum value: 5

Default Value:

900

Value

Host

Optional

String

Default Value:

127.0.0.1

Value

Port

Optional

Integer

  • Minimum value: 1

  • Maximum value: 65535

Default Value:

17661

Value

SslProfile

String

  • Must not be empty.

Value

Key

String

  • Must not be empty.

Value

Secret

Password

  • Must not be empty.

Value

ReconnectDelay

Optional

Integer

  • Minimum value: 1

Default Value:

10

Value

StartupTimeout

Optional

Integer

  • Minimum value: 5

Default Value:

10

Value

ShutdownTimeout

Optional

Integer

  • Minimum value: 5

Default Value:

10

Value

CallTimeout

Optional

Integer

  • Minimum value: 60

Default Value:

600

Der Wert ValueLabel

Mit dem optionalen Wert ValueLabel kannst du einen eigenes Label für den Wert mit den Benutzerverzeichnissen setzen. Du solltest diesen Text so kurz wie möglich halten, sowie auf Spezialzeichen verzichten. Überprüfe dein eigenes Label zusammen mit den anderen Werten im Client.

../../../_images/value-label.jpg

Das Label wo und wie es im Client dargestellt wird.

Das folgenden Beispiel konfiguriert das Label „Profiles“ für die Benutzerverzeichnisse:

<Value name="ValueLabel">Profiles</Value>

Wir empfehlen diesen Wert wegzulassen und dadurch den Standartwert zu verwenden.

Der Wert ValueSection

Mit dem optionalen Wert ValueSection verschiebst du die Tabelle mit den Benutzerverzeichnissen in einen anderen Abschnitt. Du konfigurierst hier den Bezeichner des Abschnitts. Aus diesem Bezeichner wird dann automatisch der Titel gebildet. Der Bezeichner darf maximal 64 Zeichen enthalten und nur Buchstaben enthalten.

Felder welche den selben Abschnittsbezeichner haben, werden automatisch unter diesem Abschnitt zusammengefasst. Es spielt dabei keine Rolle, ob der Abschnitt von dieser, oder einer anderen Erweiterung erstellt wurde. Einige zusätzliche Informationen zu den Abschnitten findest du im Kapitel Der Wert SectionOrder.

../../../_images/section-title.jpg

Der Titel eines Abschnitts wie er im Client dargestellt wird.

Das folgende Beispiel verschiebt die Tabelle mit den Benutzerverzeichnissen in den neuen Abschnitt „User Profile“:

<Value name="ValueSection">userProfile</Value>

Lässt diesen Wert weg, wird der Standartwert primary verwendet.

Der Wert ValueOrderIndex

Mit dem optionalen Wert ValueOrderIndex setzt du einen individuelle Position wo das Feld mit den Benutzerverzeichnissen innerhalb des Abschnitts platziert wird. Dazu definierst du hier einen Reihenfolgeindex zwischen 1 und 1000. Lässt du den Wert weg, wird 800 verwendet, welches die Standartreihenfolge verwendet.

Die folgende Illustration zeigt ein Beispiel wie der Reihenfolgeindex des Felds die Reihenfolge innerhalb jedes Abschnitts definiert.

../../../_images/raptor-client-value-order.jpg

Die Reihenfolgeindexe definieren die Reihenfolge der Felder im Client

Das folgende Beispiel setzt den Reihenfolgeindex auf den Wert 120 und verschiebt damit das Feld weiter nach oben:

<Value name="ValueOrderIndex">120</Value>

Die Liste TableColumns und TableActions

Mit den optionalen Liste TableColumns und TableActions, kannst du die Tabelle mit den Benutzerverzeichnissen praktisch beliebig anpassen. Lässt du diese Listen weg, wird die Tabelle mit dem default Layout angezeigt.

Alle Details zu diesem Thema findest du im Kapitel Tabellenkonfiguration.

Die folgende Tabelle zeigt dir alle möglichen Spalten welche du in deiner Tabelle verwenden kannst:

Bezeichner

Typ

Beschreibung

Identifier

Text

Der konfigurierte Bezeichner des Eintrags

Name

Text

Der konfigurierte Name

Path

Text

Der Verzeichnispfad

Size

Zahl

Die Grösse des Verzeichnisses

Limit

Zahl

Die Limite für das Verzeichniss

Usage

Zahl

Wie viel der Limite bereits verwendet wird in Prozent

Actions

Der Bezeichner für die Spalte mit den Aktionen

Das folgende Beispiel konfiguriert ein eigenes Layout für die Tabelle:

<List name="TableColumns">
    <ListEntry>
        <Value name="Identifier">Name</Value>
    </ListEntry>
    <ListEntry>
        <Value name="Identifier">Path</Value>
    </ListEntry>
    <ListEntry>
        <Value name="Identifier">Usage</Value>
    </ListEntry>
    <ListEntry>
        <Value name="Identifier">Size</Value>
        <Value name="Title">Total Size</Value>
    </ListEntry>
</List>

Der Wert SizeFormat

Mit dem optionalen Wert SizeFormat wählst du das Format in welchem die Verzeichnisgrössen angezeigt werden. Dabei hast du die Wahl zwischen zwei verschiedenen Formaten:

Bezeichner

Format

Bytes

Der Wert wird als einfache Zahl mit der anzahl der Bytes angezeigt.

Formatted

Der Wert wird in einem kurzen Format, mit einem passenden Suffix angezeigt.

Das folgende Beispiel zeigt dir, wie du die Ausgabe als einfache Zahl konfigurierst:

<Value name="SizeFormat">Bytes</Value>

Lässt du diesen Wert weg, wird der Standartwert Formatted verwendet.

Der Wert TextOnError

Mit dem optionalen Wert TextOnError` kannst du einen individuellen Text bei Fehlern setzen. Dieser Text wird in der Tabelle für Einträge angezeigt, welche nicht berechnet werden konnten. Dieser Text muss kurz sein, maximal 64 Zeichen und darf keine Sonderzeichen enthalten.

Lässt du diesen Wert weg, wird der Standartwert [error] verwendet.

Die Liste Paths

Mit der Liste Paths konfigurierst du die Quellen für alle angezeigten Benutzerverzeichnisse. Mit jedem Eintrag in dieser Liste kannst du einen oder mehrere Verzeichnisse erzeugen, welche der Tabelle hinzugefügt werden.

Du kannst dabei einfach einen bestehenden Wert des Objekts verwenden, optional diesen mit einem Skript modifizieren oder gar den Wert komplett mit einem Skript erzeugen, ohne Eingabewerte aus dem Objekt.

Der Wert Identifier

Der optionale Wert Identifier kann ein eindeutiger Bezeichner für eine Quelle sein. Diesen Bezeichner kannst du dann beispielsweise in deinen Skripten verwenden um einzelne Quellen zu unterscheiden.

Lässt du diesen Wert weg, wird ein Bezeichner automatisch generiert.

Der Wert Name

Mit dem optionalen Wert Name kannst du einem Verzeichnispfad einen Namen geben, der in der Tabelle angezeigt wird. Dieser Name ist reine Dekoration und hat für das System keine Bedeutung. Lässt du den Namen weg ist dieser leer für die konfigurierte Quelle.

Der Wert InformationBlockName

Mit dem Wert InformationBlockName wählst du den Informationsblock aus welchem ein Wert für die Quelle des Pfads ausgewählt wird. Dieser Wert in kombination mit ValueName wählt den Eingabewert für diese Quelle.

Mit dem speziellen Bezeichner None gibst du an, dass ein folgender Skript ohne Eingabewert auskommt.

Der Wert ValueName

Mit dem Wert ValueName wählst du den Wert aus dem in InformationBlockName konfigurierten Informationsblock. Dieser Wert in kombination mit InformationBlockName wählt den Eingabewert für diese Quelle.

Mit dem speziellen Bezeichner None gibst du an, dass ein folgender Skript ohne Eingabewert auskommt.

Der Wert Script

Der optionale Wert Script definiert einen Skript welcher entweder den Eingabewert konvertiert/verwendet oder ohne Eingabewert einen oder mehrere Pfade erzeugt. Details dazu findest du in Kapitel Betriebsarten der Pfad-Einträge und Das Skript Interface.

Der Wert RemoveNonExistingPaths

Mit der Option RemoveNonExistingPaths wählst du, ob nicht existierende Pfade aus der Tabelle entfernt werden sollen. Setzt du diesen Wert auf Yes, wird jeder Pfad überprüft und falls er nicht gefunden wird entfernt.

Lässt du diesen Wert weg, wird der Standartwert No verwendet. In diesem Fall werden alle Pfade behalten, unabhängig davon ob sie tatsächlich vorhanden sind.

Die Liste Limits

Mit der Liste Limits konfigurierst du die Limiten für einen Pfad. Alle Einträge in dieser Liste werden in der Reihenfolge getestet, in der du sie definierst. Sobald einer der Einträge auf einen Pfad passt wird dessen konfigurierte Limite verwendet. Danach werden keine weiteren Einträge mehr getestet.

Der Wert Identifier

Mit dem optionalen Wert Identifier kannst du einem Eintrag in der Liste einen eindeutigen Bezeichner geben. Dieser Bezeichner wird in der Logdatei verwendet, damit du einen Eintrag eindeutig identifizieren kannst.

Lässt du den Wert weg, wird automatisch ein eindeutiger Bezeichner generiert.

Der Wert PathFilter

Der optionale Wert PathFilter definiert einen Regulären Ausdruck welcher auf den den Pfad passen muss. Falls du einen Regulären Ausdruck definierst, muss dieser auf den Pfad passen, ansonsten wird dieser Eintrag übersprungen. Lässt du diesen Wert weg, passt dieser Eintrag auf jeden Pfad.

Der Wert InformationBlockName

Mit dem Wert InformationBlockName wählst du den Informationsblock aus welchem ein Wert für die Quelle der Limite ausgewählt wird. Dieser Wert in Kombination mit ValueName wählt den Eingabewert für diese Quelle.

Mit dem speziellen Bezeichner None gibst du an, dass ein folgender Skript ohne Eingabewert auskommt.

Im Kapitel Betriebsarten der Limit-Einträge findest du Details dazu, wie ein Eingabewert interpretiert werden kann.

Der Wert ValueName

Mit dem Wert ValueName wählst du den Wert für die Quelle der Limite, aus dem in InformationBlockName konfigurierten Informationsblock. Dieser Wert in Kombination mit InformationBlockName wählt den Eingabewert für diese Quelle.

Mit dem speziellen Bezeichner None gibst du an, dass ein folgender Skript ohne Eingabewert auskommt.

Im Kapitel Betriebsarten der Limit-Einträge findest du Details dazu, wie ein Eingabewert interpretiert werden kann.

Der Wert Script

Der optionale Wert Script definiert einen Skript welcher entweder den Eingabewert konvertiert/verwendet oder ohne Eingabewert eine Limite erzeugt. Details dazu findest du in Kapitel Betriebsarten der Limit-Einträge und Das Skript Interface.

Der Wert Factor

Mit dem optionalen Wert Factor konfigurierst du einen Faktor um den Eingabewert in eine Limite zu konvertieren. Definierst du einen Faktor, wird der Eingabewert, den du mit InformationBlockName und ValueName konfiguriert hast mit dem Faktor multipliziert und als Limite verwendet.

Du kannst entweder ein Skript oder ein Faktor verwenden, aber nicht beides.

Der Wert JobProcessingTimeout

Mit dem optionalen Wert JobProcessingTimeout änderst du, wie lange ein Job dauern darf. Dieser Wert wird in Sekunden angegeben.

Wir empfehlen diesen Wert wegzulassen und den Standartwert zu verwenden.

Der Wert JobSizeCalculationTimeout

Mit dem optionalen Wert JobSizeCalculationTimeout änderst du, wie lange die Berechnung von Verzeichnisgrössen dauern darf. Dieser Wert wird in Sekunden angegeben.

Wir empfehlen diesen Wert wegzulassen und den Standartwert zu verwenden.

Die Gruppe DirectoryScannerService

Mit der Gruppe DirectoryScannerService konfigurierst du alle Angaben für die Verbindung mit dem Directory Scanner Service. Die meisten Werte in dieser Gruppe sind optional, lediglich Key und Secret müssen zwingend angegeben werden.

Der Wert Host

Mit dem optionalen Wert Host setzt du den Hostnamen oder die IP Adresse des Servers auf dem der Directory Scanner Service läuft. Lässt du den Wert weg, wird localhost verwendet.

Der Wert Port

Mit dem optionalen Wert Port, ändert du den Port welcher für die Verbindung zum Directory Scanner Service verwendet wird. Lässt du diesen Wert weg, wird der Standartwert 17661 verwendet.

Der Wert SslProfile

Mit SslProfile bestimmst du die SSL-Konfiguration für deine Verbindung. Stelle sicher, dass der Name, den du hier einfügst, in der Liste profiles im SSL Konfigurationsmodul vorhanden ist. In Kapitel Eigene SSL Zertifikate verwenden erfährst du mehr darüber, wie du das SSL-Profil richtig einrichtest.

Du hast auch die Möglichkeit, diesen Wert auf legacy zu setzen. Das ist besonders hilfreich, wenn du eine Migration durchführen oder ältere Installationen unterstützen möchtest. In diesem Fall verwendet das System die integrierten Zertifikate, die mit älteren Versionen des Directory Scanner Services kompatibel sind.

Warnung

Wir empfehlen allerdings ausdrücklich, immer eigene Zertifikate und Schlüssel zu verwenden. Diese sollten den korrekten Servernamen enthalten und von einer internen Zertifizierungsstelle deines Unternehmens ausgestellt werden. Mit dieser Methode stellst du sicher, dass deine Verbindung sicher und authentifiziert ist.

1<Module name="UserDirectory">
2    ...
3    <Group name="DirectoryScannerService">
4        <Value name="SslProfile">legacy</Value>
5        <Value name="Key">[key]</Value>
6        <Value name="Secret">[secret]</Value>
7    </Group>
8</Module>

Der Wert Key

Mit dem Wert Key setzt du den Schlüssel für die Verbindung zu dem Directory Scanner Service. Mehr dazu findest du im Kapitel Das Secret System.

Der Wert Secret

Mit dem Wert Secret setzt du das Geheimnis zum Schlüssel für die Verbindung zum Directory Scanner Service. Mehr dazu findest du im Kapitel Das Secret System.

Der Wert ReconnectDelay

Mit dem optionalen Wert ReconnectDelay änderst du wie viele Sekunden der Client wartet, nachdem eine Verbindung abbricht. Lässt du diesen Wert weg, wird den Standartwert von 10 Sekunden verwendet.

Wir empfehlen diesen Wert wegzulassen und den Standartwert zu verwenden.

Der Wert StartupTimeout

Mit dem optionalen Wert StartupTimeout änderst du wie lange ein Verbindungsaufbau dauern darf. Dieser Wert wird in Sekunden angegeben.

Wir empfehlen diesen Wert wegzulassen und den Standartwert zu verwenden.

Der Wert ShutdownTimeout

Mit dem optionalen Wert ShutdownTimeout änderst du wie lange ein Verbindungsabbau dauern darf. Dieser Wert wird in Sekunden angegeben.

Wir empfehlen diesen Wert wegzulassen und den Standartwert zu verwenden.

Der Wert CallTimeout

Mit dem optionalen Wert CallTimeout änderst du wie lange eine Abfrage dauern darf. Dieser Wert wird in Sekunden angegeben.

Wir empfehlen diesen Wert wegzulassen und den Standartwert zu verwenden.

Betriebsarten der Pfad-Einträge

Für jeden Eintrag in der Paths Liste gibt es verschiedene Betriebsarten:

  • Ein Wert des Objekts wird direkt als Pfad verwendet.

  • Ein Wert des Objekts wird mit einem Skript konvertiert.

  • Ohne Basis wird ein Skript verwendet um alle Pfade zu generieren.

Das folgende Beispiel verwendet den Wert profile aus dem Informationsblock ActiveDirectoryOR als Pfad für das Benutzerprofil. Dieser Wert wird ohne veränderung übernommen. Der Wert profile muss ein Texttyp sein und einen gültigen Absoluten Pfad zu dem Benutzerprofil enthalten.

Mit dem Wert ValueName wird zudem einen eigenen Namen für diesen Pfad definiert, der in der Tabelle angezeigt wird.

<ListEntry>
    <Value name="Identifier">PathFromValue</Value>
    <Value name="InformationBlockName">ActiveDirectoryOR</Value>
    <Value name="ValueName">profile</Value>
</ListEntry>

Das nächste Beispiel verwendet den Wert commonName aus dem Informationsblock ActiveDirectoryOR als Eingabe für einen Skript. Dieser Skript verwendet dann den Wert um daraus einen Pfad zu erzeugen.

<ListEntry>
    <Value name="Identifier">PathBasedOnValue</Value>
    <Value name="Name">Custom Name</Value>
    <Value name="InformationBlockName">ActiveDirectoryOR</Value>
    <Value name="ValueName">commonName</Value>
    <Value name="Script"><![CDATA[
        "//fileserver01/shares/" + value;
    ]]></Value>
    <Value name="RemoveNonExistingPaths">Yes</Value>
</ListEntry>

Das letzte Beispiel verwendet einen Skript ohne einen Eingabewert. Der Skript erzeugt eine Liste mit möglichen Profilpfaden. Dazu verwendet er den Namen des Objekts, der immer verfügbar ist. Jeder der generierten Pfade wird geprüft, ob dieser tatsächlich existiert. Angezeigt werden nur die existierenden Pfade.

<ListEntry>
    <Value name="Identifier">ExistingCheck</Value>
    <Value name="InformationBlockName">None</Value>
    <Value name="ValueName">None</Value>
    <Value name="Script"><![CDATA[
         var paths = [
            "//fileserver01/shares/" + objectName,
            "//fileserver02/shares/" + objectName,
            "//fileserver03/shares/" + objectName,
            "//fileserver04/shares/" + objectName,
            "//fileserver05/shares/" + objectName];
        paths;
    ]]></Value>
    <Value name="RemoveNonExistingPaths">Yes</Value>
</ListEntry>

Betriebsarten der Limit-Einträge

Für jeden Eintrag in der Limits Liste gibt es drei verschiedene Betriebsarten:

  • Ein Wert des Objekts wird als Limit verwendet. Optional wird dieser mit einem Faktor multipliziert.

  • Ein Wert des Objekts wird mit einem Skript in eine Limite umgewandelt. Optional verwendet der Skript zusätzlich den Namen und Kontext des Objects, sowie der Pfad selbst.

  • Ein Skript erzeugt die Limite ohne Eingabewerte, oder optional mit dem Pfad und/oder mit dem Namen und Kontext des Objekts.

<ListEntry>
    <Value name="Identifier">SimpleValue</Value>
    <Value name="InformationBlockName">ActiveDirectoryOR</Value>
    <Value name="ValueName">profileLimit</Value>
</ListEntry>
<ListEntry>
    <Value name="Identifier">ValueFromObject</Value>
    <Value name="PathFilter">(?i)/example/</Value>
    <Value name="InformationBlockName">ActiveDirectoryOR</Value>
    <Value name="ValueName">profileLimitMb</Value>
    <Value name="Factor">1000000</Value>
</ListEntry>
<ListEntry>
    <Value name="Identifier">LimitBasedOnPathLength</Value>
    <Value name="InformationBlockName">None</Value>
    <Value name="ValueName">None</Value>
    <Value name="Script"><![CDATA[
        path.length * 1000000;
    ]]></Value>
</ListEntry>
<ListEntry>
    <Value name="Identifier">ParsedLimit</Value>
    <Value name="InformationBlockName">ActiveDirectoryOR</Value>
    <Value name="ValueName">profileLimit</Value>
    <Value name="Script"><![CDATA[
        var result = 0;
        var match = /(\d+)(m|g)/.exec(value);
        if (match) {
            var amount = parseInt(match[1]);
            var suffix = match[2];
            if (suffix == "m") {
                amount *= 1000000;
            } else if (suffix == "g") {
                amount *= 1000000000;
            }
            result = amount;
        }
        result;
    ]]></Value>
</ListEntry>

Das Format der Eingabewerte

Falls du Eingabewerte ohne Skript verwendest, werden bereits einige Formatierungen des Wertes interpretiert. Eine Ganzzahl, ohne Suffix wird dabei immer als Bytes interpretiert. Ein solcher Wert kannst du mit dem Faktor grössere Angaben umwandeln.

Textwerte können entweder einfache Ganzzahlen sein, oder einer der folgenden Suffixe enthalten:

Suffix

Factor

byte

1

KB

1000

MB

10002

GB

10003

TB

10004

PB

10005

EB

10006

ZB

10007

YB

10008

KiB

1024

MiB

10242

GiB

10243

TiB

10244

PiB

10245

EiB

10246

ZiB

10247

YiB

10248

Die Gross-/Kleinschreibung der Suffixe wird nicht beachtet. Es kann auch ein Leerzeichen zwischen der Zahl und dem Suffix stehen. Zahlen mit Suffixen können auch Nachkommastellen enthalten, sie werden jedoch immer auf eine ganze Zahl von Bytes gerundet.

Das Skript Interface

Ein Skript muss gültiger JavaScript sein, schnell ausgeführt werden und in keinem Fall die Ausführung blockieren. Es existieren eine Reihe von globalen Variablen welche jeder Skript verwenden kann. Der Skript kann nur diese Variablen als Eingabewerte verwenden, sonst hat er keinen Zugriff auf die Umgebung. Diese Variablen werden in der folgenden Tabellen erklärt.

Interface für Pfade

Variable

Beschreibung

value

Diese Variable enthält den Wert des Objekts welcher Konfiguriert wurde. Handelt es sich dabei um komplexe Werte, wie beispielsweise Tabellen, entspricht das Format dem eines Objektexports aus dem Client.

objectName

Der Name des aktuellen Objekts.

objectContext

Der Kontext des aktuellen Objekts.

objectType

Der Typ des aktuellen Objekts.

Interface für Limiten

Variable

Beschreibung

value

Diese Variable enthält den Wert des Objekts welcher Konfiguriert wurde. Handelt es sich dabei um komplexe Werte, wie beispielsweise Tabellen, entspricht das Format dem eines Objektexports aus dem Client.

path

Der Pfad der für diese Limite verarbeitet wird. Es handelt sich dabei um genau den Pfad, der durch den Paths-Eintrag erzeugt wurde.

objectName

Der Name des aktuellen Objekts.

objectContext

Der Kontext des aktuellen Objekts.

objectType

Der Typ des aktuellen Objekts.

JavaScript Implementierung

Die Skript-Engine unterstützt eine moderne und komplette implementation von JavaScript wie sie in ECMA-262 spezifiziert ist.

Rückgabewert für Pfade

Als Rückgabewert muss der Skript entweder ein Text (String) oder ein Array von Texten zurückliefern. Dazu schreibst du den Wert einfach als letzten Wert in den Skript ohne ein return Statement. Schau dir dazu nochmals die Beispiele weiter oben an.

Rückgabewert für Limiten

Bei Limiten muss der Skript einen Integerwert zurückliefern. Dieser Wert definiert die Limite in Bytes. Dazu schreibst du den Wert einfach als letzten Wert in den Skript ohne ein return Statement. Schau dir dazu nochmals die Beispiele weiter oben an.

Es gibt zwei Spezialwerte welche du zurückliefern kannst:

  • Gib 0 zurück, falls der Pfad kein Limit hat.

  • Gib -1 zurück um diesen Eintrag zu überspringen und weitere Einträge in der Konfiguration zu prüfen.