次のコード例は、指定されたユーザーのユーザーエントリとプロファイルエントリを取得します。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 = *