GETPASS
Section: Linux Programmer's Manual (3)
Updated: 2000-12-05
Index
JM Home Page
roff page
名前
getpass - パスワードを取得する
書式
#include <unistd.h>
char *getpass( const char * prompt );
説明
この関数は obsolete である。用いないこと。
getpass()
関数は
/dev/tty
(プロセスの制御端末) をオープンし、文字列
prompt
を出力する。そして echo をオフにし、一行 (「パスワード」)
を読み込み、端末の状態を元に戻して、再び
/dev/tty
をクローズする。
返り値
getpass()
関数は入力されたパスワード
(の最初の
PASS_MAX
バイトまで) が書きこまれた、
スタティックなバッファーへのポインターを返す。
末尾の改行は含まれない。この文字列は NULL バイト ('\0') で終端される。
このバッファーは、以降の関数コールで上書きされるかもしれない。
エラーが起こると、端末の状態を復元し、
errno
を適切な値に設定して、NULL を返す。
エラー
この関数は以下のような場合に失敗しうる。
- ENXIO
-
プロセスが制御端末を持っていない。
ファイル
/dev/tty
準拠
SUSv2 には存在するが、過去の名残 (LEGACY) と位置付けられている。
POSIX.1-2001 で削除された。
注意
libc4 と libc5 では、
prompt
は
/dev/tty
にではなく
stderr
に出力された。さらに、
/dev/tty
がオープンできない場合は、パスワードは
stdin
から読み込まれた。
スタティックなバッファーの長さは 128 バイトだったので、
パスワードの最初の 127 文字だけが返された。
パスワードを読んでいる途中には、シグナルの発行
(SIGINT,
SIGQUIT,
SIGSTOP,
SIGTSTOP)
は無効にされ、
それぞれに対応する文字 (通常は Ctrl-C, Ctrl-\, Ctrl-Z, Ctrl-Y)
はそのままパスワードの一部として渡された。
libc 5.4.19 からは行編集が無効にされ、
したがってバックスペースなどもパスワードの一部とみなされるようになった。
glibc2 では、
/dev/tty
がオープンできない場合は
prompt
は
stderr
に書き出され、パスワードは
stdin
から読み込まれた。
パスワードの長さには制限はなく、
行編集も無効にはされなかった。
SUSv2 によれば、
PASS_MAX
の値が 8 以下の場合は、この値は
<limits.h>
で定義されていなければならない。
いずれの場合でもこの値は
sysconf(_SC_PASS_MAX)
によって取得できる。
しかし、POSIX.2 は定数
PASS_MAX,
_SC_PASS_MAX
と関数
getpass()
を取り下げた。
libc4 と libc5 では、
PASS_MAX
と
_SC_PASS_MAX
は一度もサポートされたことはない。
glibc2 は
_SC_PASS_MAX
を受付け、
BUFSIZE
(例えば 8192) を返す。
バグ
この関数を呼び出したプロセスは、
できる限り早くそのパスワードを消去 (ゼロクリア) し、
クリアテキストのパスワードが
そのプロセスのアドレス空間で見えないようにすべきである。
関連項目
crypt(3)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- ファイル
-
- 準拠
-
- 注意
-
- バグ
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:43 GMT, November 19, 2007