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, SIGTTIN と SIGTTOU シグナル (キーボードから、またはバックグラウンドプロセスからの端末の I/O のために生成されたストップシグナル) は、特別に扱われます。ストップされた後、プロセスが再開されるとき、 readpassphrase() は、プロンプトを再印刷し、ユーザは、パスフレーズを入力できます。
規格
readpassphrase() 関数は、拡張であり、移植性が必要であるなら、使用すべきではありません。歴史
readpassphrase() 関数は、 OpenBSD 2.9 ではじめて登場しました。May 31, 2007 | FreeBSD |