EN JA
READPASSPHRASE(3)
READPASSPHRASE(3) FreeBSD Library Functions Manual READPASSPHRASE(3)

名称

readpassphraseユーザからパスフレーズを取得する

書式

#include < readpassphrase.h>

char *
readpassphrase( const char *prompt, char *buf, size_t bufsiz, int flags);

解説

readpassphrase() 関数は、プロンプトを表示し、 /dev/tty からパスフレーズを読み込みます。このファイルがアクセスできず、 RPP_REQUIRE_TTY フラグが設定されていないなら、 readpassphrase() は、標準エラー出力にプロンプトを表示し、標準入力から読み込みます。この場合、エコーをオフにすることは、一般的にできません。

bufsiz -1 文字まで (一つは、 ヌル文字 のためにあります) 与えられるバッファ buf に読み込まれます。どんな追加の文字と終了する改行 (またはリターン) 文字も廃棄されます。

readpassphrase() 関数は、次のオプションの flags を取ります:

RPP_ECHO_OFF
エコーをオフにする (デフォルトの振る舞い)。
RPP_ECHO_ON
エコーをオンのままとする。
RPP_REQUIRE_TTY
tty がないなら、失敗する。
RPP_FORCELOWER
小文字の入力を強制する。
RPP_FORCEUPPER
大文字の入力を強制する。
RPP_SEVENBIT
入力から高位ビットを取り除く。
RPP_STDIN
標準入力 (stdin) からパスフレーズを強制的に読み込む。

呼び出しプロセスは、プロセスのアドレス空間で平文 (クリアテキスト) のパスフレーズを目に見えるようにしておくことを回避するためにできるだけ早くパスフレーズを 0 にするべきです。

戻り値

成功して終了すれば、 readpassphrase() ヌル文字で終了したパスフレーズへのポインタを返します。エラーに遭遇した場合、端末の状態は、復旧され、 NULL ポインタが返されます。

関連ファイル

/dev/tty

使用例

次のコードの破片は、バッファ passbuf/dev/tty からパスフレーズを読み込みます。

char passbuf[1024]; 
 
... 
 
if (readpassphrase("Response: ", passbuf, sizeof(passbuf), 
    RPP_REQUIRE_TTY) == NULL) 
 errx(1, "unable to read passphrase"); 
 
if (compare(transform(passbuf), epass) != 0) 
 errx(1, "bad passphrase"); 
 
... 
 
memset(passbuf, 0, sizeof(passbuf));

エラー

[ EINTR]
readpassphrase() 関数は、シグナルによって中断されました。
[ EINVAL]
bufsiz 引数が 0 です。
[ EIO]
プロセスは、制御端末から読み込むことを試みるバックグラウンドプロセスのメンバで、プロセスは、 SIGTTIN シグナルを無視するか、またはブロックしているか、またはプロセスグループは、孤児にされます。
[ EMFILE]
プロセスは、オープンファイル記述子のためのその制限に既に到着しました。
[ ENFILE]
システムファイルテーブルが満杯です。
[ ENOTTY]
制御端末がありません。そして、 RPP_REQUIRE_TTY フラグが指定されました。

シグナル

readpassphrase() 関数は、次のシグナルを捕獲します:

SIGALRM  SIGHUP  SIGINT 
SIGPIPE  SIGQUIT  SIGTERM 
SIGTSTP  SIGTTIN  SIGTTOU

上記のシグナルの 1 つがインタセプトされるとき、端末のエコーは、以前にオフにされていたならば、復旧されます。 readpassphrase() が呼ばれたとき、シグナルのハンドラがシグナルに対してインストールされたならば、そのハンドラが実行されます。ハンドラがシグナルのために前もってインストールされなかったなら、デフォルトのアクションは、 sigaction(2) のように起こされます。

SIGTSTP, SIGTTINSIGTTOU シグナル (キーボードから、またはバックグラウンドプロセスからの端末の I/O のために生成されたストップシグナル) は、特別に扱われます。ストップされた後、プロセスが再開されるとき、 readpassphrase() は、プロンプトを再印刷し、ユーザは、パスフレーズを入力できます。

関連項目

sigaction(2), getpass(3)

規格

readpassphrase() 関数は、拡張であり、移植性が必要であるなら、使用すべきではありません。

歴史

readpassphrase() 関数は、 OpenBSD 2.9 ではじめて登場しました。
May 31, 2007 FreeBSD