Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
getspnam, getspnam_r, getspent, getspent_r, setspent, endspent,fgetspent, fgetspent_r, sgetspent, sgetspent_r, putspent, lckpwdf, ulckpwdf - shadow パスワードファイルのエント リーを取得する
書式
/* 一般的な shadow パスワードファイル API */ #include <shadow.h> struct spwd *getspnam(const char *name); struct spwd *getspent(void); void setspent(void); void endspent(void); struct spwd *fgetspent(FILE *stream); struct spwd *sgetspent(const char *s); int putspent(const struct spwd *p, FILE *stream); int lckpwdf(void); int ulckpwdf(void); /* GNU による拡張 */ #include <shadow.h> int getspent_r(struct spwd *spbuf, char *buf, size_t buflen, struct spwd **spbufp); int getspnam_r(const char *name, struct spwd *spbuf, char *buf, size_t buflen, struct spwd **spbufp); int fgetspent_r(FILE *stream, struct spwd *spbuf, char *buf, size_t buflen, struct spwd **spbufp); int sgetspent_r(const char *s, struct spwd *spbuf, char *buf, size_t buflen, struct spwd **spbufp); glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): getspent_r(), getspnam_r(), fgetspent_r(), sgetspent_r(): glibc 2.19 以降: _DEFAULT_SOURCE glibc 2.19 以前: _BSD_SOURCE || _SVID_SOURCE
説明
昔は暗号化されたパスワードをパスワードファイルに 見えるように公開しておいても安全だと考え られていた。 Julianne Frances Haugh は shadow パスワードスイートを実装した。 これは暗号化 されたパスワードを、root のみが読むことができる shadow パスワードデータベース (例えば、 ローカルの shadow パスワードファイル /etc/shadow, NIS, LDAP) に保持する。 以下で説明する関数は、伝統的なパスワードデータベースに対する 関数に似ている (例えば getpwnam(3) や getpwent(3) を参照)。 getspnam() 関数は、ユーザー名 name にマッチする shadow パスワードデータベースのエントリー を 要素毎に分解し、各要素を格納した構造体へのポインターを返す。 getspent() 関数は shadow パスワードデータベースにおける次のエントリーへのポインターを返 す。 入力ストリームにおける位置は、 setspent() で初期化される。 読み込みが終わった後に、 endspent() を呼び出すと、リソースを解放できる。 fgetspent() 関数は getspent() に似ているが、 setspent() で暗黙のうちにオープンされるスト リームではなく、与えられたストリームを使う。 sgetspent() 関数は与えられた文字列 s を解析し struct spwd に格納する。 putspent() 関数は与えられた struct spwd *p の内容を shadow パスワードファイル形式のテキス ト行で stream に書き出す。 空文字列として、 値が NULL の文字列エントリーと値が -1 の数値エ ントリーが 書き出される。 lckpwdf() 関数は、 shadow パスワードデータベースを 多重同時アクセスから守るためのものであ る。 この関数はロックの獲得を試み、 成功した場合は 0 を返す。 失敗した場合 (15 秒以内に ロックが取得できなかった場合) は -1 を返す。 ulckpwdf() 関数はロックを再び解放する。 shadow パスワードファイルへの直接アクセスから 保護する手段がない点に注意すること。 lckpwdf() を使うプログラムだけがロックを通知できる。 これらの関数はオリジナルの shadow API を構成していた関数であり、 いろいろなシステムで広く 利用可能である。 リエントラント版 パスワードデータベースに対するリエントラント版と同じように、 glibc には shadow パスワード ファイルに対してリエントラント版がある。 getspnam_r() 関数は getspnam() と似ているが、取 得した shadow パスワード構造体を spbuf が指す領域に格納する。 shadow パスワード構造体は文 字列群へのポインターを含み、 これらの文字列群はサイズ buflen のバッファー buf に格納され る。 *spbufp には (成功した場合は) 結果へのポインターが格納され、 (エントリーが見つからな かった場合またはエラーが起こった場合は) NULL が格納される。 関数 getspent_r(), fgetspent_r(), sgetspent_r() はそれぞれリエントラントでないバージョンと 同様の機能を持つ。 glibc でないシステムにもこれらと同じ名前の関数があるが、 プロトタイプが異なることも多い。 構造体 shadow パスワード構造体は <shadow.h> で以下のように定義されている: struct spwd { char *sp_namp; /* ログイン名 */ char *sp_pwdp; /* 暗号化されたパスワード */ long sp_lstchg; /* 最終更新日 (1970-01-01 00:00:00 +0000 (UTC) からの日数) */ long sp_min; /* 変更が出来るようになるまでの最短日数 */ long sp_max; /* 変更をしなくてもよい最長日数 */ long sp_warn; /* パスワードが期限切れになる前に ユーザーに変更の警告を出す日数 */ long sp_inact; /* パスワードが期限切れになってから アカウントが無効になるまでの日数 */ long sp_expire; /* アカウントが無効になる日付 (1970-01-01 00:00:00 +0000 (UTC) からの日数) */ unsigned long sp_flag; /* 予約フィールド */ };
返り値
ポインターを返す関数は、これ以上エントリーがない場合や 処理中にエラーが発生した場合 NULL を返す。 int を返り値として持つ関数は、 成功した場合 0 を返し、失敗した場合、 -1 を返し、 errno にエラーの原因を示す値を設定する。 リエントラント版でない関数では、返り値が静的な領域を指しており、 引き続いてこれらの関数を 呼び出した場合に上書きされる可能性がある。 リエントラント版の関数は、成功した場合に 0 を返す。 エラーの場合は、エラー番号が返される。
エラー
EACCES 呼び出し元が shadow パスワードファイルにアクセスする許可を持っていない。 ERANGE 与えられたバッファーが小さすぎる。
ファイル
/etc/shadow ローカルの shadow パスワードデータベースファイル /etc/.pwd.lock ロックファイル インクルードファイル <paths.h> は定数 _PATH_SHADOW を定義している。 これは shadow パスワー ドファイルのパス名である。
属性
この節で使用されている用語の説明については、 attributes(7) を参照。 ┌─────────────────┬───────────────┬────────────────────────────────┐ │インターフェース │ 属性 │ 値 │ ├─────────────────┼───────────────┼────────────────────────────────┤ │getspnam() │ Thread safety │ MT-Unsafe race:getspnam locale │ ├─────────────────┼───────────────┼────────────────────────────────┤ │getspent() │ Thread safety │ MT-Unsafe race:getspent │ │ │ │ race:spentbuf locale │ ├─────────────────┼───────────────┼────────────────────────────────┤ │setspent(), │ Thread safety │ MT-Unsafe race:getspent locale │ │endspent(), │ │ │ │getspent_r() │ │ │ ├─────────────────┼───────────────┼────────────────────────────────┤ │fgetspent() │ Thread safety │ MT-Unsafe race:fgetspent │ ├─────────────────┼───────────────┼────────────────────────────────┤ │sgetspent() │ Thread safety │ MT-Unsafe race:sgetspent │ ├─────────────────┼───────────────┼────────────────────────────────┤ │putspent(), │ Thread safety │ MT-Safe locale │ │getspnam_r(), │ │ │ │sgetspent_r() │ │ │ ├─────────────────┼───────────────┼────────────────────────────────┤ │lckpwdf(), │ Thread safety │ MT-Safe │ │ulckpwdf(), │ │ │ │fgetspent_r() │ │ │ └─────────────────┴───────────────┴────────────────────────────────┘ In the above table, getspent in race:getspent signifies that if any of the functions setspent(), getspent(), getspent_r(), or endspent() are used in parallel in different threads of a program, then data races could occur.
準拠
shadow パスワードデータベースと関連 API は POSIX.1 には記載されていない。しかしながら、多 くの他のシステムでも 同様の API が提供されている。
関連項目
getgrnam(3), getpwnam(3), getpwnam_r(3), shadow(5)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。