日本語 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.2-RELEASE-K, 8.0-RELEASE-K は、プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、全翻訳済み)
6.4-STABLE-K, 7.2-STABLE-K, 8.0-STABLE-K は現在、 作成中で日々更新されています。 最新の snapshots を元に作成しています。
GETPWENT(3) FreeBSD Library Functions Manual GETPWENT(3)
名称
getpwent, getpwnam, getpwuid, setpassent, setpwent, endpwent - パスワード
データベースを操作
書式
#include <sys/types.h>
#include <pwd.h>
struct passwd *
getpwent(void)
struct passwd *
getpwnam(const char *login)
struct passwd *
getpwuid(uid_t uid)
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; /* ハネウエルログイン情報*/
char *pw_dir; /* ホームディレクトリ*/
char *pw_shell; /* デフォルトのシェル*/
time_t pw_expire; /* アカウント有効期限*/
int pw_fields; /* 内部: 充てんフィールド*/
};
関数 getpwnam() は与えられたログイン名を、 getpwuid() は与えられたユーザ
uid を、それぞれパスワードデータベースで検索し、常に最初に出会ったエント
リを返します。
getpwent() 関数はパスワードデータベースを順次読み込みます。ユーザの完全リ
ストを処理したいプログラム向きです。
setpassent() 関数は 2 つの目的を遂行します。まず getpwent() にデータベー
スの最初へ ``rewind'' (リワインド) させます。さらに stayopen がゼロでなけ
れば、ファイル記述子をオープンしたままにします。これらルーチンすべての以
後のアクセスが、このためきわめて高速化されます。(ただし getpwent() の場
合、デフォルトで記述子をクローズしないので後者の機能性は不要です。)
プログラム実行中に更新されるとデータベースが古くなるので、長時間実行プロ
グラムでファイル記述子をオープンしたままにすることは危険です。
setpwent() 関数は、引数ゼロを持つ setpassent() と同じです。
endpwent() 関数は、オープンしているファイルをすべてクローズします。
これらのルーチンは、パスワードファイルを ``shadow'' (シャドウ) する目的で
書かれました。たとえば、暗号化パスワードにアクセスできるプログラムが限定
できるようにです。たとえば、これらを呼び出す処理の uid が有効な 0 ならば
パスワードを返し、その他の場合は構造体のパスワードフィールドに、ストリン
グ `*' を示して返します。
YP/NIS の相互作用
yp(4) パスワードデータベースが使用可能な場合、ローカルのデータベースに要
求されたパスワードエントリが見付からないと、 getpwnam() および getpwuid()
関数はそれぞれ、YP マップ ``passwd.byname'' および ``passwd.byuid'' を使
用します。 passwd(5) で記述されたとおりに全体マップが使用可能ならば、
getpwent() 関数は YP マップ ``passwd.byname'' を通ります。
戻り値
関数 getpwent()、 getpwnam() および getpwuid() は、いずれも成功すると、
passwd 構造体の有効なポインタを返します。エンドオブファイルに到達するか
エラーが発生した場合は、null ポインタが返ります。 setpassent() 関数は失敗
した場合は 0 を、成功した場合は 1 を返します。 endpwent() および
setpwent() 関数の戻り値はありません。
関連ファイル
/etc/pwd.db 安全ではないパスワードデータベースファイル
/etc/spwd.db 安全なパスワードデータベースファイル
/etc/master.passwd 現在のパスワードファイル
/etc/passwd Version 7 形式のパスワードファイル
関連項目
getlogin(2)、 getgrent(3)、 yp(4)、 passwd(5)、 pwd_mkdb(8)、 vipw(8)
歴史
getpwent()、 getpwnam()、 getpwuid()、 setpwent() および endpwent() 関数
は、 Version 7 AT&T UNIX で最初に取り入れられました。 setpassent() 関数は
4.3-RenoBSD で最初に取り入れられました。
互換性
代替パスワードデータベースの規格を許した歴史的な関数 setpwfile(3) は、こ
れまで非難されてきましたが、もはや使用できません。
バグ
関数 getpwent()、 getpwnam() および getpwuid() は、それぞれの結果を内部の
静的オブジェクトに残し、そのオブジェクトのポインタを返します。後に続く同
じ関数の呼び出しは、この同じオブジェクトを改変します。
BSD September 20, 1994 2