# Kommentar : Beispiel für nismaps.conf # globale Zugriffsliste allow 192.168.10.1 allow 127.0.0.1 deny 192.168.10.0/255.255.255.0 allow 192.168.1.0/24 allow 192.168.2.0/24 allow 192.168.3.0/24 deny 0.0.0.0/0.0.0.0 directory = "/var/yp/maps/"; maxopen = 5; # Zahl der Maps, die gleichzeitig geöffnet werden dürfen #Adabas - Parameter Serverdb = "MMIMS"; Dbuser = "NISSERVER"; Dbpass = "geheim"; #Nun folgen die Domains Domain intern { # Globale Konfigurationsparameter Adabas passwd.byname,passwd { fetch = "SELECT * FROM passwd WHERE login='%s'"; first = "SELECT login FROM passwd"; next = "SELECT login FROM passwd WHERE login>'%s'"; manglefield = 2 ; # default, zur zum test mangle 192.168.3.0/24 } Adabas passwd.byuid { fetch = "SELECT * FROM passwd WHERE uid =%s"; first = "SELECT uid FROM passwd"; next = "SELECT uid FROM passwd WHERE uid >%s"; mangle 192.168.3.0/24 } # Group-Datei mit DB-Prozedur Adabas group.byname,group { fetch = "PROC MDBA.MG.GETGROUP('%s',:erg)"; first = "SELECT gname FROM ugroup"; next = "SELECT gname FROM ugroup WHERE gname>'%s'"; } Adabas group.bygid { fetch = "PROC MDBA.MG.GETGROUPUID(%s,:erg)"; first = "SELECT gid FROM ugroup ORDER BY gid"; next = "SELECT gid FROM ugroup WHERE gid > %s ORDER BY gid "; } BerkleyDb hosts.byname,hosts { } Gdbm hosts.byaddr { deny 192.168.3.0/24 } deny 192.168.2.0/24 }Der passwd-Map ist im der Datenbank etwa wie folgt definiert:
CREATE TABLE passwd ( login VARCHAR(15) KEY, pwd CHAR(15), uid FIXED(6,0) UNIQUE NOT NULL, gid FIXED(6,0), gcos VARCHAR(64), home VARCHAR(32), shell VARCHAR(16) )
Start : globaldecls DomaindecllistDie globalen Deklarationen bestehen aus einer Zugriffsliste gefolgt von einer Zuweisungsliste:
globaldecls : acllist ZuweisungslisteRekursive Definition der Domaindeklarationsliste (diese kann auch leer sein, was allerdings keinen Sinn macht:
Domaindecllist: | Domaindecllist DomaindeclEine Domaindeklaration beginnt mit dem Schlüsselwort "Domain", gefolgt von einem Namen. In geschweiften Klammen folgt erst eine Liste von Map-Deklarationen, dann eine Zugriffsliste. Die Zugriffsliste schränkt den Zugriff auf die Domain noch zusätzlich zu der Globalen Zugriffsliste ein:
Domaindecl : DOMAIN NAME '{' Mapdeclliste acllist '}'Rekursive Definition der Map-Deklarationssliste:
Mapdeclliste : Mapdecl | Mapdeclliste MapdeclEine Map-Deklaration wird eingeleitet durch einen Maptyp. Danach kommt eine Liste der Namen für diese Map, wobei der erste Name der eigentliche ist, die anderen sind aliasnamen:
Mapdecl : MAPTYPE Namelist '{' Zuweisungsliste acllist '}'Die Namesliste besteht aus einer mit Komma getrennten Liste von Namen. Eine Namensliste darf nicht leer sein:
Namelist : NAME | Namelist ',' NAMEEine Zuweisungsliste besteht aus einer mit Semicolon getrennten Folge von Zuweisungen. Sie darf auch leer sein:
Zuweisungsliste : | Zuweisungsliste Zuweisung ';' ;Einem Namen kann man Zeichenketten oder Integerwerte zuweisen:
Zuweisung : NAME '=' STRING | NAME '=' INTEine Zugriffsliste ist leer oder besteht aus einer Folge von Zugriffseinträgen:
acllist : acllist aclentry |Ein Zuweisungseintrag besteht aus dem Schlüsselwort allow,deny,oder mangle gefolgt von der Maske. Die Maske kann aus einer IPv4 gefolgt von / gefolgt von einer netzmaske sein, oder die Netzmaske kann wie bei Ascend mit der Zahl der gesetzten bits angegeben werden. Folgt kein /, so gilt das als einzelner Rechner (oder Netzmaske 255.255.255.255)
aclentry : AORD IPADDR '/' IPADDR | AORD IPADDR | AORD IPADDR '/' INT;
Reservierte Schlässelworte sind:
IPv4-Adressen werden in der üblichen Notation [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ geschrieben.
Integer (INT) ist eine nicht leere Folge von Ziffern: [0-9]+
Namen ist eine Zeichenfolge von Buchstben und Ziffern einschliesslich '.' und '_', beginnend mit einem Buchstaben: [A-Za-z][A-Za-z0-9\._]*
Der MAPTYPE ist auch ein Name, er wird aber in einer internen Liste gesucht. Im Moment gibt es folgende:
Ein STRING wird einfach in doppelten Hochkomatas eingeschlossen: \".*\"
Namen haben den Typ String oder Integer. Die Interpretation der Namen hängt vom Maptyp ab. Der Typ wird unterschieden, d.h. der Maptyp sucht einen Namen und einen Typ.
Ein Maptyp ignoriert Variablen, mit denen er nichts anfangen kann.
Zur Zeit gibt es eine Integervariable namens manglefield, die die Feldnummer angibt, die eventuell ausgeblendet wird. Diese wird auf 2 voreingestellt.
Ebenso sind weitere Variablen denkbar, die weitere Sachen über eine Map steuern.
Für die ADABAS-D-Anbindung gibt es beispeislweise folgede Namen: