Secret プロセスは、読み取りのために somefile を開いて読み取り操作を実行し、このファイルを閉じます。Confidential の /export/home/heartyann シングルレベルディレクトリ内の somefile がアクセスされるように、完全な装飾パス名が使用されます。
完全な装飾パス名は、マルチレベルディレクトリの装飾方法を使用し、どのシングルレベルディレクトリが必要か正確に指定します。代わりに通常のパス名が使用されると、プロセスが Secret で動作しているため Secret のシングルレベルディレクトリがアクセスされます。
完全な装飾パス名の詳細は、「装飾名」を参照してください。マルチレベルとシングルレベルのディレクトリを処理するインタフェースの詳細は、第 8 章「マルチレベルディレクトリ」で説明します。次の例では、わかりやすさのために使われている完全装飾パス名がハードコードされていますが、この方法は第 8 章「マルチレベルディレクトリ」では使いません。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
main()
{
int filedes, retval;
ssize_t size;
char readbuf[1024];
char *buffer = "Write to File.";
char *file = "/export/home/.MLD.heartyann/.SLD.1/filetoexec";
char *argv[10] = {"filetoexec"};
filedes = open("/export/home/.MLD.heartyann/.SLD.1/somefile", O_RDONLY);
size = read(filedes, readbuf, 29);
retval = close(filedes);
open(2) システムコールに対する必須アクセスチェック - プロセスは /export/home/heartyann に対する必須検索アクセスと、somefile に対する必須読み取りアクセスを必要とします。このプロセスは Secret で動作しているので、両方の必須アクセスチェックの条件を満たしています。
open(2) システムコールに対する任意アクセスチェック - プロセスは /export/home/heartyann に対する任意検索アクセスと、somefile に対する任意読み取りアクセスを必要とします。このディレクトリパスと somefile 上のその他ユーザーに対するアクセス権ビットは、必要な任意の検索権と読み取り権を与えます。
read(2) システムコールに対する必須アクセスチェック - 必須アクセスチェックは、somefile が開かれたときに実行されます。ほかにはアクセスチェックは行われません。
read(2) システムコールに対する任意アクセスチェック - 任意アクセスチェックは、somefile が開かれたときに実行されます。ほかにはアクセスチェックは行われません。