|
HOME > Linux Tips ( 目次 ) > Linux コマンド 一覧表 > g > getlogin - ライブラリコールの説明 getlogin - ライブラリコールの説明 - Linux コマンド集 一覧表名前getlogin, getlogin_r, cuserid - ユーザー名を取得する 書式
#include <unistd.h>
説明getlogin ()は、現在のプロセスの制御端末にログインしているユーザー名の文字列への ポインタを返す。ユーザー名が決定できない場合は null ポインタを返す。 文字列は静的領域に割り当てられており、この後でこの関数や cuserid () が呼び出された際に上書きされることがある。 getlogin_r ()は、上記の同じユーザ名を、大きさ bufsize の配列 buf に入れて返す。 cuserid () は、現在のプロセスの実効ユーザーID に対応するユーザー名の 文字列へのポインタを返す。 string が null ポインタ以外の場合、string は少なくとも L_cuserid 文字を保持できる配列でなければならない。 string が null ポインタの場合には、静的領域に置かれた文字列への ポインタが返される。この文字列は静的領域に割り当てられており、後で この関数や getlogin () が呼び出された際に上書きされることがある。 マクロ L_cuserid は integer の定数で、ユーザー名を保持するために 必要な配列の長さを示す。 L_cuserid は stdio.h で宣言されて いる。 これらの関数を使うと、プログラムを実行しているユーザー (cuserid ()) や このセッションにログインしているユーザー (getlogin ()) を明確に特定す ることができる (ただし set-user-ID プログラムでは、状況が違うこともある)。 たいていの目的では、ユーザーの特定には環境変数 LOGNAME を調べ るほうが便利である。LOGNAME 変数はユーザーが自由に設定できるので より柔軟な対応が可能になる。 返り値getlogin ()は成功した場合はユーザ名へのポインタを返し、失敗した場合は NULL を返す。 getlogin_r ()は成功すると 0 を返し、失敗すると 0 以外を返す。 エラーPOSIX では以下のエラーが規定されている:
ファイル
/etc/passwd パスワードデータベースのファイル/etc/utmp (か /var/adm/utmp 、あるいは最近では、 とにかくどこかにある utmp - 正確な場所は libc のバージョンによる) 準拠
getlogin
()と
getlogin_r
()は POSIX.1-2001 で規定されている。
OpenBSD には getlogin () と setlogin () があり、 セッションに対応したユーザ名がある。制御端末がない セッションの場合であっても、対応するユーザ名がある。 バグ残念ながら、 getlogin ()をだますのはそれほど難しいことではない。別のプログラムが utmp ファイルを 壊してしまうと、全く動作しないこともある。またログイン名の最初の 8 文字 しか返さないことも多い。またプログラムを制御している tty に 現在ログインしているユーザーは、プログラムを実行した ユーザーでない場合もある。 セキュリティの絡む用途には getlogin ()を用いるべきではない。 glibc は POSIX 仕様には従っておらず、 /dev/tty ではなく "標準入力 (stdin)" を使う。これはバグである。 (SunOS 5.8 や HP-UX 11.11 や FreeBSD 4.8 といった他の最近のシステムはいずれも、 標準入力 がリダイレクトされた場合でもログイン名を返す。) cuserid ()が何を行っているのか、実際のところを知っている者は誰もいない; 移植性が求められるプログラムでは cuserid ()は使うべきではない。 というかどんなプログラムでも使うべきではない: 代わりに getpwuid(geteuid()) を用いるべきである (これが意図していることならば、だが)。 cuserid ()は「使わない」こと。 関連項目
geteuid
(2),
getuid
(2)
|
|