日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
GETPWENT(3) FreeBSD ライブラリ関数マニュアル GETPWENT(3)
名称
getpwent, getpwent_r, getpwnam, getpwnam_r, getpwuid, getpwuid_r,
setpassent, setpwent, endpwent -- パスワードデータベースの操作
ライブラリ
標準 C ライブラリ (libc, -lc)
書式
#include <pwd.h>
struct passwd *
getpwent(void);
int
getpwent_r(struct passwd *pwd, char *buffer, size_t bufsize,
struct passwd **result);
struct passwd *
getpwnam(const char *login);
int
getpwnam_r(const char *name, struct passwd *pwd, char *buffer,
size_t bufsize, struct passwd **result);
struct passwd *
getpwuid(uid_t uid);
int
getpwuid_r(uid_t uid, struct passwd *pwd, char *buffer, size_t bufsize,
struct passwd **result);
int
setpassent(int stayopen);
void
setpwent(void);
void
endpwent(void);
解説
これらの関数は、passwd(5) に記述されているパスワードデータベースファイル
を操作します。データベースの各エントリは、インクルードファイル <pwd.h> で
見つけられる構造体 passwd によって定義されています:
struct passwd {
char *pw_name; /* ユーザ名 */
char *pw_passwd; /* 暗号化されたパスワード */
uid_t pw_uid; /* ユーザ uid */
gid_t pw_gid; /* ユーザ gid */
time_t pw_change; /* パスワードの変更時刻 */
char *pw_class; /* ユーザアクセスクラス */
char *pw_gecos; /* Honeywell ログイン情報 */
char *pw_dir; /* ホームディレクトリ */
char *pw_shell; /* デフォルトのシェル */
time_t pw_expire; /* アカウント有効期限 */
int pw_fields; /* 内部: 詰めものフィールド */
};
関数 getpwnam() と getpwuid() は、それぞれ、与えられたログイン名または
ユーザ uid に対してパスワードデータベースを検索し、常に、最初に遭遇したも
のを返します。
getpwent() 関数は、パスワードデータベースをシーケンシャルに読み込み、ユー
ザの完全なリストを処理したいプログラムを対象としています。
関数 getpwent_r(), getpwnam_r() と getpwuid_r() は、それぞれ getpwent(),
getpwnam() と getpwuid() のスレッドセーフバージョンです。呼び出し側は、
pwd, buffer, bufsize と result 引数の検索の結果のための記憶域を提供しなけ
ればなりません。これらの関数が成功するとき、pwd 引数は、書き入れられ、そ
の引数へのポインタは、result に格納されます。エントリが見つけられないか、
または、エラーが起こるなら、result は、NULL に設定されます。
setpassent() 関数は、2 つの目的を達成します。最初に、getpwent() は、デー
タベースの先頭に ``リワインド'' します。さらに、stayopen が 0 でないな
ら、ファイル記述子は、オープンされたままとされ、すべてのルーチンのための
その後のアクセスを著しく速度を上げます。(この後者の機能は、デフォルトでそ
のファイル記述子をクローズしないので、getpwent() のために不要です。)
プログラムが実行している間に更新されるなら、データベースは、時代遅れにな
るので、ファイル記述子をオープンしたままにする長く実行しているプログラム
に対して危険です。
setpwent() 関数は、0 の引数を付けた setpassent() と同じです。
endpwent() 関数は、あらゆるオープンしているファイルをクローズします。
これらのルーチンは、パスワードファイルを ``見えなくする (shadow)'' ため
に、書かれました、例えば、特定のプログラムにだけ、暗号化されたパスワード
にアクセスすることを許可します。それらを呼び出すプロセスに 0 の実効ユーザ
ID (uid) があるなら、暗号化されたパスワードが返され、そうでなければ、返さ
れた構造体のパスワードフィールドは、文字列 `*' を指します。
戻り値
関数 getpwent(), getpwnam() と getpwuid() は、成功すれば、passwd 構造体へ
の有効なポインタを返し、エントリが見つけられないか、またはエラーが起こる
なら、NULL を返します。エラーが起こるなら、errno は、設定されます。存在し
ないエントリとエラーを区別する必要があるなら、これらの関数のいずれかを呼
び出す前に、プログラムは、errno を明示的に 0 に設定しなければならないこと
に注意してください。関数 getpwent_r(), getpwnam_r() と getpwuid_r() は、
エラーが起こらなかったなら、0 を返すか、または失敗を示すエラー番号を返し
ます。一致するエントリが見つけられないなら、それは、エラーではありませ
ん。(したがって、result が NULL であり、返り値が 0 であるなら、一致してい
るエントリは、存在しません。)
setpassent() 関数は、失敗すると、0 を返し、成功すると、1 を返します。
endpwent() と setpwent() 関数は、返り値がありません。
関連ファイル
/etc/pwd.db 安全ではないパスワードデータベースファイル
/etc/spwd.db 安全なパスワードデータベースファイル
/etc/master.passwd 現在のパスワードファイル
/etc/passwd Version 7 形式のパスワードファイル
互換性
代替のパスワードデータベースの指定を許可する歴史的な関数 setpwfile(3)
は、非推奨となっていて、もはや利用可能ではありません。
エラー
これらのルーチンは、次に加えて、open(2), dbopen(3), socket(2) と
connect(2) で明記されたエラーのいずれかのために失敗します:
[ERANGE] buffer と bufsize 引数によって指定されたバッファが、結
果を格納するために十分なサイズがありませんでした。呼び
出し側は、より大きなバッファで再試行するべきです。
関連項目
getlogin(2), getgrent(3), nsswitch.conf(5), passwd(5), pwd_mkdb(8),
vipw(8), yp(8)
規格
getpwent(), getpwnam(), getpwnam_r(), getpwuid(), getpwuid_r(),
setpwent() と endpwent() 関数は、ISO/IEC 9945-1:1996 (``POSIX.1'') に適合
しています。
歴史
getpwent(), getpwnam(), getpwuid(), setpwent() と endpwent() 関数は、
Version 7 AT&T UNIX で登場しました。setpassent() 関数は、4.3BSD-Reno で登
場しました。getpwent_r(), getpwnam_r() と getpwuid_r() 関数は、
FreeBSD 5.1 で登場しました。
バグ
関数 getpwent(), getpwnam() と getpwuid() は、それらの結果を内部の静的オ
ブジェクトに残し、そのオブジェクトへのポインタを返します。同じ関数への続
く呼び出しは、同じオブジェクトを修正します。
関数 getpwent(), getpwent_r(), endpwent(), setpassent() と setpwent()
は、ネットワーク化された環境でほとんど役に立たず、可能であるなら、避けら
れるべきです。getpwent() と getpwent_r() 関数は、複数のソースが
nsswitch.conf(5) で指定されるなら、二重の情報を削除する試みを行いません。
FreeBSD 13.2 November 28, 2022 FreeBSD 13.2