スポンサーリンク

GETPWENT(3) FreeBSD ライブラリ関数マニュアル GETPWENT(3)

名称

getpwent, getpwnam, getpwuid, setpassent, setpwent, endpwent − パスワード データベースを操作

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#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() は与えられたユーザ ID をそれぞれパスワードデータベースで検索し、常に最初に遭遇したエントリを 返します。

getpwent() 関数はパスワードデータベースを順次読み込みます。ユーザの完全な リストを処理したいプログラム向きです。

setpassent() 関数は 2 つの目的を果たすものです。まず getpwent() 関数が データベースの最初へ「巻き戻す (rewind)」ようにします。さらに stayopen が 0 でなければ、ファイル記述子をオープンしたままにします。これにより、これ らのルーチンに対するその後のアクセスすべてが極めて高速化されます (ただし getpwent() の場合、デフォルトでファイル記述子をクローズしないので後者の機 能は不要です)。

長時間実行されているプログラムでファイル記述子をオープンしたままにしてお くのは危険です。なぜなら、プログラムが実行されている間にデータベースが更 新されると、オープンしたままにしているデータベースは古い物になってしまう からです。

setpwent() 関数は、引数を 0 にした setpassent() と同じです。

endpwent() 関数は、オープンしているファイルをすべてクローズします。

これらのルーチンは、パスワードファイルを「隠す (shadow)」目的で書かれまし た。たとえば、暗号化パスワードにアクセスできるプログラムを限定できるよう にです。これらのルーチンを呼び出すプロセスの有効ユーザ ID が 0 ならば暗号 化パスワードを返し、その他の場合は戻り値である構造体のパスワードフィール ドはストリング ‘*’ を指すようになります。

YP/NIS の相互作用

yp(4) パスワードデータベースが使用可能な場合、ローカルのデータベースに要 求されたパスワードエントリが見つからないと、 getpwnam() および getpwuid() 関数はそれぞれ、 ‘‘passwd.byname’’ および ‘‘passwd.byuid’’ YP マップを使 用します。 passwd(5) で記述されているようにマップ全体が使用可能である場合 は、 getpwent() 関数は YP マップ ‘‘passwd.byname’’ を一通り読みます。

戻り値

関数 getpwent(), getpwnam() および getpwuid() は、いずれも成功すると、 passwd 構造体への有効なポインタを返します。ファイルの終端に到達するか、も しくはエラーが発生した場合はヌルポインタを返します。 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.3BSD−Reno で登場しました。

互換性

歴史的な理由で存在していた、代替パスワードデータベースの規格を許した関数 setpwfile(3) は非推奨になっており、もう使用できません。

バグ

関数 getpwent(), getpwnam() および getpwuid() は、呼び出し結果を内部の静 的オブジェクトに残し、そのオブジェクトを指すポインタを返します。その後、 同じ関数を呼び出すと、同じオブジェクトを変更していきます。

FreeBSD 10.0 September 20, 1994 FreeBSD 10.0

スポンサーリンク