すべてがうまく行ったら、 簡単なコマンドを使ってインストールのチェックを行って下さい。 例えばパスワードファイルが NIS/NYS で共有されている場合は、
% ypcat passwd |
というコマンドで NIS のパスワードファイルの内容が見られるはずです。 また
% ypmatch userid passwd |
とすれば、 指定したユーザのエントリがパスワードファイルから取り出されて表示されます (userid には適当なユーザのログイン名を入れます)。 なお ypcat や ypmatch は、 trad-NIS や NYS の配布パッケージに入っています。
ユーザーによるログインができない場合には、 以下のプログラムをクライアントで実行してみて下さい。
#include <stdio.h>
#include <pwd.h>
#include <sys/types.h>
int
main(int argc, char *argv[])
{
struct passwd *pwd;
if(argc != 2)
{
fprintf(stderr,"Usage: getwpnam username\n");
exit(1);
}
pwd=getpwnam(argv[1]);
if(pwd != NULL)
{
printf("name.....: [%s]\n",pwd->pw_name);
printf("password.: [%s]\n",pwd->pw_passwd);
printf("user id..: [%d]\n", pwd->pw_uid);
printf("group id.: [%d]\n",pwd->pw_gid);
printf("gecos....: [%s]\n",pwd->pw_gecos);
printf("directory: [%s]\n",pwd->pw_dir);
printf("shell....: [%s]\n",pwd->pw_shell);
}
else
fprintf(stderr,"User \"%s\" not found!\n",argv[1]);
exit(0);
} |
このプログラムをユーザ名をパラメータとして実行しますと、 そのユーザに対して getpwnam 関数が返す情報が全て表示されます。 これによって、どのエントリが間違っているかがわかるでしょう。 よくある間違いとしては、パスワードのフィールドが "*" によって上書きされている、などがあります。
GNU C Library 2.1 (glibc 2.1) には getent というツールがついてきます。 そのようなシステムでは、上記の代わりにこちらを使いましょう。
% getent passwd |
% getent passwd login |