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

名称

openpam_readwordシェルの引用規則を順守して、ファイルから単語を読み込む

ライブラリ

Pluggable Authentication Module Library (libpam, -lpam)

書式

#include < sys/types.h>
#include < stdio.h>
#include < security/pam_appl.h>
#include < security/openpam.h>

char *
openpam_readword( FILE *f, int *lineno, size_t *lenp);

解説

openpam_readword() 関数は、ファイルから次の単語を読み込み、 malloc(3) で割り付けられた、ヌル文字で終了するバッファに、それを返します。

単語は、空白類でない文字のシーケンスです。しかしながら、次の規則に従って引用されるか、エスケープされるなら、空白類文字を含むことができます:

  • エスケープされていない単一引用 (シングルクォート) または二重引用 (ダブルクォート) は、同じ引用文字が 2 度目に遭遇するとき、終る、引用文字列を導入します。引用それ自体は、取り除かれます。
  • 単一引用文字列または二重引用文字列内では、改行文字を含むすべての空白類文字は、そのまま保存されます。
  • 引用文字列の外側で、バックスラッシュは、その文字が改行でなければ、そのまま保存される次の文字をエスケープし、その場合には、それは廃棄され、読み込みは、あたかもバックスラッシュと改行がそこになかったかのように、次の行の始まりに継続します。あらゆる場合において、バックスラッシュそれ自体は、廃棄されます。
  • 単一引用の文字列内で、二重引用とバックスラッシュは、そのまま保存されます。
  • 二重引用文字列内で、単一引用は、そのまま保存され、バックスラッシュは、二重引用をエスケープするためには使用されないなら、そのまま保存されます。

さらに、行の最初の空白類でない文字がハッシュ文字 (#) であるなら、行の残りは、廃棄されます。しかしながら、ハッシュ文字が単語内に現れるなら、それは、そのまま保存されます。コメントの終りのバックスラッシュは、行の継続をもたらします。

linenoNULL でないなら、引用されるか、またはエスケープされた改行文字が読み込まれるごとに、それが指す整数変数が増加されます。

lenpNULL でないなら、(引用とバックスラッシュが削除された後に) 単語の長さは、それが指す変数に格納されます。

戻り値

成功するなら、 openpam_readword() 関数は、行で遭遇した最初の単語を含んでいる、動的に割り付けられたヌル文字で終了する文字列へのポインタを返します。

呼び出し側は、 free(3) にそれを渡すことによって、返されたバッファを解放することに責任があります。

openpam_readword() が行の終りか、またはあらゆる文字が単語にコピーされる前にファイルに到達するなら、 NULL を返します。前者の場合に、改行は、ファイルに戻されます。

openpam_readword() がファイルの終りに到着するなら、引用またはバックスラッシュのエスケープが有効である間に、 errnoEINVAL を設定し、 NULL を返します。

実装に関する注

解析規則は、通常の POSIX シェルの引用規則と等価になるように意図されています。あらゆる不一致がバグで、エラーを再生するために使用することができるサンプルの入力と共に著者に報告されるべきです。

規格

openpam_readword() 関数は、OpenPAM の拡張です。

作者

openpam_readword() 関数とこのマニュアルページは、 Dag-Erling Smørgrav <des@des.no>によって開発されました。
September 7, 2013 FreeBSD