Trusted Solaris 開発ガイド

ユーザーエントリとプロファイルエントリの取得

次のコード例は、指定されたユーザーのユーザーエントリとプロファイルエントリを取得します。getuserentbyuid(3) ルーチンは getuserentbyname(3) ルーチンとほとんど変わらないため、示されていません。このコードセグメントのヘッダーファイルと宣言は、最初のプログラムに含まれています。

#include <tsol/user.h>
 #include <tsol/prof.h>

 main()
 {
 	userent_t					*uentry;
 	profent_t					*pentry;
 	profstr_t					*sentry;
 	char					*uname = "zelda";
 	char 					*pname = "All Authorizations";

 		uentry = getuserentbyname(uname, TSOL_DB_SRC_SWITCH);
 		sentry = getprofstrbyname(pname, TSOL_DB_SRC_SWITCH);
 		pentry = getprofentbyname(pname, TSOL_DB_SRC_SWITCH);

/* ユーザーのデータベースのエントリを出力する */

 	printf("User name = %s¥n", uentry->name);
 	printf(User lock = %s¥n", uentry->lock);
 	printf(User password generation = %s¥n", uentry->gen);
 	printf(User profiles = %s¥n", uentry->profiles);
 	printf(User roles = %s¥n", uentry->roles);
 	printf(User idletime = %s¥n", uentry->idletime);
 	printf(User idlecmd = %s¥n", uentry->idlecmd);
 	printf(Label view = %s¥n", uentry->labelview);
 	printf(User label translation = %s¥n", uentry->labeltrans);
 	printf(User minimum label = %s¥n", uentry->labelmin);
 	printf(User maximum label = %s¥n", uentry->labelmax);
 	printf(User type = %s¥n", uentry->usertype);

 /* プロファイルのデータベースのエントリを出力する */

 	printf("Profile name = %s¥n". sentry->name);
 	printf("Description = %s¥n", sentry->desc);
 	printf("Authorizations = %s¥n", sentry->auths);
 	printf("Actions = %s¥n", sentry->actions);
 	printf("Commands = %s ¥n", sentry->cmds);

 	printf("Profile Name = %s¥n", pentry->name);
 	printf("Description = %s¥n", pentry->desc);
 	printf("Authorizations = %s¥n", pentry->auths);
 	printf("Directory = %s¥n", pentry->cmds->dir);
 	printf("File = %s¥n", pentry->cmds->dir);
 	printf("Privs = %s¥n", pentry->cmds->privs);
 	printf("EUID = %s¥n", pentry->cmds->euid);
 	printf("GID = %s¥n", pentry->cmds->egid);
 	printf("Min = %s¥n", pentry->cmds->min);
 	printf("Max = %s¥n", pentry->cmds->max);
 	printf("Actname = %s¥n", pentry->actions->actname);
 	printf("Arg class = %s¥n", pentry->actions->argclass);

 	free_userent(uentry);
 	free_profstr(sentry);
 	free_profent(pentry);
 }

ユーザーデータベースの出力

printf(1) 文によって、ユーザーデータベースから次のように出力されます。最下位ラベルと最上位ラベルは、常に 16 進で返されます。この情報を別の形式にしたい場合は、第 6 章「ラベルのコード例」に挙げられている 16 進からバイナリ、バイナリから ASCII への変換ルーチンを使用してください。


User name = zelda

User lock = open

User password generation = manual 

User profiles = All Authorizations,All

User roles = admin,oper,root,secadmin 

User idle time = 120

User idle command = lock user

Label view = internal,showil,showsl 

User label translation = 0X0000

User Minimum label in hexadecimal = 
0x00040c0000000000000000000000000000000000000000000003fffff
fffffff0000

User Maximum label (clearance) in hexadecimal = 
0x0006cc0000000000000000000000000000000000000000000003fffff
fffffff0000

User type = utnorm

プロファイルデータベースの出力

コード例中の printf 文によって、まず getprofstrbyname(3) の結果が出力され、続いて getprofentbyname(3) の結果が出力されます。

名前を使用してプロファイル文字列を取得する

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


Profile name = All Authorizations 

Description = Grant all authorizations 

Authorizations = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, 
17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,
37,38,39,40,41,42,43,44,45 

Actions = none;*;*;*;*;;;;; 

Commands = none;;;;;; 

名前を使用してプロファイルエントリを取得する

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


Profile name = All Authorizations

Description = Grant all authorizations

Authorizations = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, 
17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,
37,38,39,40,41,42,43,44,45

コマンド情報

Directory = none

File = none

Privs =

EUID =

GID =

Min =

Max =

アクション情報

Actname = none

Arg class = *