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