10. 验证 NIS/NYS 安装

如果一切正常(应该如此),您应该能够通过几个简单的命令来验证您的安装。例如,假设您的 passwd 文件由 NIS 提供,那么命令

    % ypcat passwd

应该会显示您的 NIS passwd 文件的内容。命令

    % ypmatch userid passwd

(其中 userid 是任意用户的登录名) 应该会显示该用户在 NIS passwd 文件中的条目。“ypcat”和“ypmatch”程序应包含在您的传统 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 库 2.1 (glibc 2.1) 附带一个名为 getent 的工具。在这种系统上,请使用此程序代替上面的程序。您可以尝试
   getent passwd
   getent passwd login