Manpages

名 前

getlogin, getlogin_r, cuserid − ユ ー ザ ー 名 を 取 得 す る

書 式

#include <unistd.h>

char *getlogin(void);
int getlogin_r(char *
buf, size_t bufsize);

#include <stdio.h>

char *cuserid(char *string);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

getlogin_r(): _REENTRANT || _POSIX_C_SOURCE >= 199506L
cuserid
(): _XOPEN_SOURCE

説 明

getlogin() は 、 現 在 の プ ロ セ ス の 制 御 端 末 に ロ グ イ ン し て い る ユ ー ザ ー 名 の 文 字 列 へ の ポ イ ン タ ー を 返 す 。 ユ ー ザ ー 名 が 決 定 で き な い 場 合 は ヌ ル ポ イ ン タ ー を 返 す 。 文 字 列 は 静 的 領 域 に 割 り 当 て ら れ て お り 、 こ の 後 で こ の 関 数 や cuserid() が 呼 び 出 さ れ た 際 に 上 書 き さ れ る こ と が あ る 。

getlogin_r() は 、 上 記 の 同 じ ユ ー ザ ー 名 を 、 大 き さ bufsize の 配 列 buf に 入 れ て 返 す 。

cuserid() は 、 現 在 の プ ロ セ ス の 実 効 ユ ー ザ ー ID に 対 応 す る ユ ー ザ ー 名 の 文 字 列 へ の ポ イ ン タ ー を 返 す 。 string が ヌ ル ポ イ ン タ ー 以 外 の 場 合 、 string は 少 な く と も L_cuserid 文 字 を 保 持 で き る 配 列 で な け れ ば な ら な い 。 string が ヌ ル ポ イ ン タ ー の 場 合 に は 、 静 的 領 域 に 置 か れ た 文 字 列 へ の ポ イ ン タ ー が 返 さ れ る 。 こ の 文 字 列 は 静 的 領 域 に 割 り 当 て ら れ て お り 、 後 で こ の 関 数 や getlogin() が 呼 び 出 さ れ た 際 に 上 書 き さ れ る こ と が あ る 。 マ ク ロ L_cuserid は integer の 定 数 で 、 ユ ー ザ ー 名 を 保 持 す る た め に 必 要 な 配 列 の 長 さ を 示 す 。 L_cuseridstdio.h で 宣 言 さ れ て い る 。 こ れ ら の 関 数 を 使 う と 、 プ ロ グ ラ ム を 実 行 し て い る ユ ー ザ ー (cuserid()) や こ の セ ッ シ ョ ン に ロ グ イ ン し て い る ユ ー ザ ー (getlogin()) を 明 確 に 特 定 す る こ と が で き る (た だ し set−user−ID プ ロ グ ラ ム で は 、 状 況 が 違 う こ と も あ る )。 た い て い の 目 的 で は 、 ユ ー ザ ー の 特 定 に は 環 境 変 数 LOGNAME を 調 べ る ほ う が 便 利 で あ る 。 LOGNAME 変 数 は ユ ー ザ ー が 自 由 に 設 定 で き る の で よ り 柔 軟 な 対 応 が 可 能 に な る 。

返 り 値

getlogin() は 成 功 し た 場 合 は ユ ー ザ ー 名 へ の ポ イ ン タ ー を 返 す 。 失 敗 し た 場 合 は NULL を 返 し 、 errno に エ ラ ー の 原 因 を 示 す 値 を 設 定 す る 。 getlogin_r() は 成 功 す る と 0 を 返 し 、 失 敗 す る と 0 以 外 を 返 す 。

エ ラ ー

POSIX で は 以 下 の エ ラ ー が 規 定 さ れ て い る :

EMFILE 呼 び 出 し 元 プ ロ セ ス が オ ー プ ン し て い る フ ァ イ ル 数 が す で に プ ロ セ ス あ た り の 上 限 に 達 し て い る 。

ENFILE シ ス テ ム 全 体 で オ ー プ ン し て い る フ ァ イ ル 数 が す で に 上 限 に 達 し て い る 。

ENXIO 呼 び 出 し 元 プ ロ セ ス に は 制 御 端 末 が な い 。

ERANGE

(getlogin_r) (終 端 の ヌ ル バ イ ト ('\0') も 含 め た ) ユ ー ザ ー 名 の 長 さ が bufsize よ り も 長 い 。

Linux/glibc に は 以 下 の エ ラ ー も あ る 。

ENOENT

utmp フ ァ イ ル に 対 応 す る エ ン ト リ ー が な か っ た 。

ENOMEM

passwd 構 造 体 を 割 り 当 て る の に 十 分 な メ モ リ ー が な い 。

ENOTTY

標 準 入 力 が 端 末 を 参 照 し て い な い (「 バ グ 」 の 節 を 参 照 )。

フ ァ イ ル

/etc/passwd パ ス ワ ー ド デ ー タ ベ ー ス の フ ァ イ ル
/var/run/utmp

(伝 統 的 に は /etc/utmp が 使 わ れ て い る ; libc の 中 に は /var/adm/utmp を 使 う も の も あ る )

属 性

マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 )

getlogin() 関 数 は ス レ ッ ド セ ー フ で は な い 。

getlogin_r() 関 数 は ス レ ッ ド セ ー フ で あ る 。

cuserid() 関 数 は 、 例 外 付 き の ス レ ッ ド セ ー フ で あ る 。 パ ラ メ ー タ ー NULL で 呼 び 出 し た 場 合 は ス レ ッ ド セ ー フ で は な い 。

準 拠

getlogin() と getlogin_r() は POSIX.1−2001 で 規 定 さ れ て い る 。

System V に も cuserid() が あ る が 、 こ れ は 実 効 ユ ー ザ ー ID で は な く 、 実 ユ ー ザ ー ID を 使 用 す る 。 cuserid() 関 数 は 1988 年 版 の POSIX に は 含 ま れ て い た が 、 1990 年 版 で は 削 除 さ れ た 。 SUSv2 に 存 在 し た が 、 POSIX.1−2001 で 削 除 さ れ た 。

OpenBSD に は getlogin() と setlogin() が あ り 、 セ ッ シ ョ ン に 対 応 し た ユ ー ザ ー 名 が あ る 。 制 御 端 末 が な い セ ッ シ ョ ン の 場 合 で あ っ て も 、 対 応 す る ユ ー ザ ー 名 が あ る 。

バ グ

残 念 な が ら 、 getlogin() を だ ま す の は そ れ ほ ど 難 し い こ と で は な い 。 別 の プ ロ グ ラ ム が utmp フ ァ イ ル を 壊 し て し ま う と 、 全 く 動 作 し な い こ と も あ る 。 ま た ロ グ イ ン 名 の 最 初 の 8 文 字 し か 返 さ な い こ と も 多 い 。 ま た 、 プ ロ グ ラ ム の 制 御 端 末 に 現 在 ロ グ イ ン し て い る ユ ー ザ ー は 、 プ ロ グ ラ ム を 実 行 し た ユ ー ザ ー で な い 場 合 も あ る 。 セ キ ュ リ テ ィ の 絡 む 用 途 に は 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), utmp(5)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。