Trusted Solaris 開発ガイド

MLD 名と SLD 名の照会

次のコードは、getmldadorn(2) システムコールを使用して MLD 装飾を照会し、getsldname(2) システムコールを使用して Top Secret SLD の SLD 名を照会します。この例では、Top Secret の SLD はまだ存在しないため、getsldname(2) に対する呼び出しがこれを作成します。

プロセスは、認可上限 Top Secret を使用して Confidential で動作しています。このプロセスは、Top Secret ラベルの変換に sys_trans_label 特権、Top Secret SLD の作成に file_upgrade_sl 特権、そして Top Secret SLD 情報のアクセスに file_mac_search 特権と file_mac_read 特権を必要とします。

#include <tsol/label.h>

 main()
 {	
 	int			retval, error, length;
 	bslabel_t			label;
 	char	 		*buffer[1025], *buf[1025], *string = "TOP SECRET";
 	char			*file = "/export/home/zelda";

 	retval = getmldadorn(file, buffer);
 	printf("MLD adornment = %s¥n", buffer);

/* 有効セット内で sys_trans_label をオン (有効) にする */
 	retval = stobsl(string, &label, NEW_LABEL, &error);
/* sys_trans_label をオフ (無効) にする */

 	length = sizeof(buf);

/* file_upgrade_sl、file_mac_search、file_mac_read */
/*をオン (有効) にする */
 	retval = getsldname(file, &label, buf, length);
/* file_upgrade_sl、file_mac_search、file_mac_read */
/*をオフ (無効) にする*/

 	printf("SLD name = %s¥n", buf);
 }

printf(1) 文によって、次のように出力されます

MLD adornment = .MLD.

SLD name = .SLD.3

次の例は、mldgetcwd(3) ルーチンを使用して現在の作業ディレクトリ (MLD と現在の SLD) を照会し、adornfc(1) ルーチンを使用してこの MLD の装飾名を取得します。続いて、mldrealpath(1) ルーチンを使用して resolvefile (解決済みファイル) に格納されたパス名内の余分なスラッシュを削除し、実際のパスを見つけます。このプロセスは、Confidential で動作しています。

#include <tsol/label.h>
 #include <sys/types.h>

 main()
 {	
 	int			 retval;
 	char	 		*buffer[1025];
 	char			*file = "/export/home/zelda";
 	char			*string2, *name[1025], *string3, *resolved[1025];
 	size_t			size;

/* 文字列のエラーを解決する */
 	char			*resolvefile = "./";

 	size = sizeof(buffer);
 	string2 = (char *)mldgetcwd(buffer, size);
 	printf("Current working directory = %s¥n", buffer);

 	retval = adornfc(file, name);
 	printf("Adorned name = %s¥n", name);

 	string3 = (char *)mldrealpath(resolvefile, resolved);
 	printf("Real path = %s¥n", resolved);
 }

printf 文によって、次のように出力されます。


注 -

adornfc(1) ルーチンに対するファイルパラメータに SLD 名が含められる場合、装飾名は /export/home/zelda/.MLD..SLD.1 のように SLD が追加された形式で返されます。


Current working directory = /export/home/.MLD.zelda/.SLD.2

Adorned name = /export/home/.MLD.zelda

Real path = /export/home/.MLD.zelda/.SLD.2

次の例は、/export/home/zelda MLD の属性情報を取得します。stat(2) システムコールマクロは、printf(1) 文で MLD がディレクトリであるか通常のファイルであるかを確認します。そして、ctime(3C) ルーチンによって、返された秒単位の時間がユーザーが読める形式に変換されます (詳細は、ctime(3C) のマニュアルページを参照)。

#include <tsol/label.h>
 #include <sys/stat.h>

 main()
 {	
 	int 			retval;
 	struct			stat statbuf;
 	char			*file = "/export/home/zelda";

 	retval = mldstat(file, &statbuf);

 	printf("Is file system object a directory? = %d¥n", S_ISDIR(statbuf.st_mode));

 	printf("Is file system object a regular file? = %d¥n", S_ISREG(statbuf.st_mode));

 	printf("Number of links = %d¥n", statbuf.st_nlink);
 	printf("Owner's user ID = %d¥n", statbuf.st_uid);
 	printf("Owner's group Id = %d¥n", statbuf.st_gid);
 	printf("Last access time = %s¥n", ctime(&statbuf.st_atime));
 	printf("Last modify time = %s¥n", ctime(&statbuf.st_mtime));
 	printf("Last status change = %s¥n", ctime(&statbuf.st_ctime));
 }

printf 文によって、次のように出力されます。

Is file system object a directory? = 1

Is file system object a regular file? = 0

Number of links = 6

Owner's user ID = 29378

Owner's group Id = 10

Last access time = Wed May 28 10:58:25 1997

Last modify time = Wed May 28 09:39:18 1997

Last status change = Wed May 28 09:39:18 1997