In Tabellen, die Variablen enthalten, deren Status 'read-create' ist, ist es möglich, neue Tabellenzeilen einzufügen bzw. Zeilen zu löschen ([1]). Hierzu ist eine Variable vom Typ 'row-status' erforderlich, die den Status der Zeile beschreibt bzw. zum Setzen eines neuen Status verwendet werden kann.
Tabellenzeilen können drei Zustände einnehmen:
Ist eine Tabellenzeile 'active', so steht sie dem System zur Verfügung, z.B. ein aktiver User ist in der Passwortdatei eingetragen.
Diese Tabellenzeilen existieren zwar, stehen dem System aber nicht zur Verfügung. Das bedeutet, daß ihre Werte zwar gespeichert sein müssen und ausgelesen werden können, der Eintrag, z.B. in der Passwortdatei, aber nicht existiert. Zeilen mit Status 'notinservice' können jederzeit in den aktiven Status versetzt werden.
Ist der Status einer Zeile 'notready', so sind nicht alle Variablen dieser Zeile derart mit Werten belegt, daß diese Zeile in einen aktiven Zustand versetzt werden könnte. Ein User kann z.B. nicht in die Passwortdatei eingetragen werden, wenn für ihn kein Home Directory bestimmt wurde. Wird einer Variablen einer Zeile, die sich in diesem Zustand befindet, ein Wert zugewiesen, so muß jeweils überprüft werden, ob der Status der Zeile auf 'notinservice' verändert werden muß.
Möchte man den Status einer Zeile ändern, so überschreibt man die Statusvariable der Zeile mit einem der folgenden Werte:
Die Zeile wird in den aktiven Zustand versetzt, d.h. sie wird dem System bekannt gemacht.
Die Zeile wird inaktiviert, d.h. sie ist dem System nach Ausführen der Funktion nicht mehr bekannt, muß allerdings gespeichert werden, um ausgelesen werden zu können bzw. um später wieder aktiviert zu werden.
Hiermit wird eine Zeile gelöscht, ohne daß sie wiederhergestellt werden kann.
Diese Werte werden verwendet, um neue Tabellenzeilen anzulegen. Man setzt die Statusvariable einer noch nicht existierenden Zeile auf einen der beiden Werte, worauf die Zeile angelegt wird und die übrigen Variablen, sofern vorgesehen, mit Default-Werten belegt werden. Der Unterschied der beiden Möglichkeiten besteht darin, daß bei 'createandgo' die Zeile sofort in einen aktiven Zustand versetzt wird, während bei 'createandwait' die Zeile 'notinservice' gesetzt wird. Sollten nicht für alle Variablen Werte zur Verfügung stehen, so wird die 'createandgo'-Aufforderung zurückgewiesen, während bei 'createandwait' die Zeile in den Status 'notready' versetzt wird.
Im Rahmen dieser MIB-Implementierung mußte diese Funktionalität für die Tabellen 'user table' und 'group table' zur Verfügung gestellt werden. Da die Implementierung beider Tabellen recht ähnlich ist, wird hier nur am Beispiel der 'user table' erläutert, wie derartige Tabellen realisiert wurden.
Die Funktion, die für das Setzten des Statusfeldes der 'user table' verantwortlich ist, nennt sich 'set_userStatus()'. Hier wird zuerst überprüft, ob die gewünschte Statusänderung überhaupt möglich ist. Dies kann z.B. nicht der Fall sein, wenn man eine Zeile, die sich im Status 'notready' befindet, in den Status 'active' versetzten möchte. Ist die Änderung möglich, so ist, je nach gewünschter Änderung, eine ganze Reihe von Maßnahmen zu treffen:
Wenn eine Tabellenzeile aus dem aktiven Zustand in den Zustand 'notinservice' gebracht werden soll, so wird der Eintrag des Users aus der Datei /etc/passwd mit Hilfe der Funktion 'change_passwd()' gelöscht. Bevor dies geschieht, werden die Daten dieses Benutzers in einer dynamisch erzeugten Struktur gespeichert, die in eine Liste derartiger Strukturen eingehängt wird. Der Anfang dieser Liste ist in der globalen Variablen 'user_row_p' gespeichert.
Soll eine Zeile in den Status 'active' versetzt werden, so muß sie sich vorher im Status 'notinservice' befinden. Ist dies der Fall, so wird die Zeile aus der Liste der inaktiven Zeilen ausgelesen, dort gelöscht und in die Passwortdatei eingetragen. Außerdem müssen die File-Quotas für diesen User gesetzt werden.
Soll eine neue Tabellenzeile mit dem Befehl 'createandwait' erzeugt werden, so wird Speicherplatz für diesen Eintrag reserviert und die Variablen, für die Defaultwerte vorgesehen sind, werden mit diesen Werten belegt. Die File-Quotas des neuen Users werden auf null gesetzt. Der Status der Zeile wird auf 'notready' gesetzt, da z.B. noch keine User-ID des neuen Users festgelegt wurde.