マルチレベルディレクトリ (MLD) を使用すると、アプリケーションを複数の機密ラベルで実行し、プロセスが開始された機密ラベルでシングルレベルディレクトリ (SLD) のデータにアクセスできます。この例は、stobsl(3) を使用して ASCII 文字列をバイナリに変換し、そのバイナリラベルを getsldname(1) に渡すことによって、zelda MLD 内の Confidential の SLD の名前を取得する方法を示しています。/export/home/zelda MLD のラベルは ADMIN_LOW であり、プロセスは Confidential で実行しています。このプロセスには MLD に対する必須読み取りアクセスがあり、プロセスの機密ラベルが SLD の機密ラベルより優位であるため、プロセスは特権を必要としません。
#include <tsol/mld.h> char *file = "/export/home/zelda"; char buffer[3*1024]; bslabel_t senslabel; int length, flags, retval, error; main() { /* Confidential のSLD 名を得る */ retval = stobsl("CONFIDENTIAL", &senslabel, NEW_LABEL, &error); length = sizeof(buffer); retval = getsldname(file, &senslabel, buffer, length); printf("SLD Name = %s¥n", buffer); }
printf 文によって、ラベルが ADMIN_LOW の SLD の名前が出力されます。SLD の名前の意味については、第 8 章「マルチレベルディレクトリ」を参照してください。
SLD Name = .SLD.2
mldstat(2) と mldlstat(2) システムコールを使用すると、MLD、または MLD であるシンボリックリンクのファイル属性情報を表示できます。これらのシステムコールの詳細は、stat(2) のマニュアルページと第 8 章「マルチレベルディレクトリ」を参照してください。