Man page - cuserid(3)

Packages contains this manual

Available languages:

en fr pl ja ru

Manual

GETLOGIN

名 前
書 式
説 明
返 り 値
エ ラ ー
フ ァ イ ル
属 性
準 拠
バ グ
関 連 項 目
こ の 文 書 に つ い て

名 前

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 (): _POSIX_C_SOURCE >= 199506L

cuserid ():
glibc 2.24 以 降 :
(_XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
|| _GNU_SOURCE
glibc 2.23 以 前 :
_XOPEN_SOURCE

説 明

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

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

cuserid () は 、 現 在 の プ ロ セ ス の 実 効 ユ ー ザ ー ID に 対 応 す る ユ ー ザ ー 名 の 文 字 列 へ の ポ イ ン タ ー を 返 す 。 string が ヌ ル ポ イ ン タ ー 以 外 の 場 合 、 string は 少 な く と も L_cuserid 文 字 を 保 持 で き る 配 列 で な け れ ば な ら な い 。 string が ヌ ル ポ イ ン タ ー の 場 合 に は 、 静 的 領 域 に 置 か れ た 文 字 列 へ の ポ イ ン タ ー が 返 さ れ る 。 こ の 文 字 列 は 静 的 領 域 に 割 り 当 て ら れ て お り 、 後 で こ の 関 数 や getlogin () が 呼 び 出 さ れ た 際 に 上 書 き さ れ る こ と が あ る 。

マ ク ロ L_cuserid は integer の 定 数 で 、 ユ ー ザ ー 名 を 保 持 す る た め に 必 要 な 配 列 の 長 さ を 示 す 。 L_cuserid stdio.h で 宣 言 さ れ て い る 。

こ れ ら の 関 数 を 使 う と 、 プ ロ グ ラ ム を 実 行 し て い る ユ ー ザ ー ( cuserid ()) や こ の セ ッ シ ョ ン に ロ グ イ ン し て い る ユ ー ザ ー ( getlogin ()) を 明 確 に 特 定 す る こ と が で き る (た だ し set-user-ID プ ロ グ ラ ム で は 、 状 況 が 違 う こ と も あ る )。

た い て い の 目 的 で は 、 ユ ー ザ ー の 特 定 に は 環 境 変 数 LOGNAME を 調 べ る ほ う が 便 利 で あ る 。 LOGNAME 変 数 は ユ ー ザ ー が 自 由 に 設 定 で き る の で よ り 柔 軟 な 対 応 が 可 能 に な る 。

返 り 値

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

エ ラ ー

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

EMFILE

The per-process limit on the number of open file descriptors has been reached.

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 を 使 う も の も あ る )

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 に つ い て は 、 attributes (7) を 参 照 。

Image grohtml-45826-1.png

In the above table, utent in race:utent signifies that if any of the functions setutent (3), getutent (3), or endutent (3) are used in parallel in different threads of a program, then data races could occur. getlogin () and getlogin_r () call those functions, so we use race:utent to remind users.

準 拠

getlogin () and getlogin_r (): POSIX.1-2001, POSIX.1-2008.

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 () は 「 使 わ な い 」 こ と 。

関 連 項 目

logname (1), geteuid (2), getuid (2), utmp (5)

こ の 文 書 に つ い て

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