Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2120372
  • 博文数量: 1647
  • 博客积分: 80000
  • 博客等级: 元帅
  • 技术积分: 9980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 15:15
文章分类

全部博文(1647)

文章存档

2011年(1)

2008年(1646)

我的朋友

分类:

2008-10-28 18:16:20


  接下来要做的事情是变更实际码, 我们将变更 auth.c 档。
  
  变更前 auth.c 档 function 为:
  
  
  --------------------------------------------------------------------------------
  
  /*
  * login - Check the user name and password against the system
  * password database, and login the user if OK.
  *
  * returns:
  * UPAP_AUTHNAK: Login failed.
  * UPAP_AUTHACK: Login succeeded.
  * In either case, msg points to an appropriate message.
  */
  static int
  login(user, passwd, msg, msglen)
  char *user;
  char *passwd;
  char **msg;
  int *msglen;
  {
  struct passwd *pw;
  char *epasswd;
  char *tty;
  
  if ((pw = getpwnam(user)) == NULL) {
  return (UPAP_AUTHNAK);
  }
  /*
  * XXX If no passwd, let them login without one.
  */
  if (pw->pw_passwd == '\0') {
  return (UPAP_AUTHACK);
  }
  
  epasswd = crypt(passwd, pw->pw_passwd);
  if (strcmp(epasswd, pw->pw_passwd)) {
  return (UPAP_AUTHNAK);
  }
  
  syslog(LOG_INFO, "user %s logged in", user);
  
  /*
  * Write a wtmp entry for this user.
  */
  tty = strrchr(devname, '/');
  if (tty == NULL)
  tty = devname;
  else
  tty++;
  logwtmp(tty, user, ""); /* Add wtmp login entry */
  logged_in = TRUE;
  
  return (UPAP_AUTHACK);
  }
  
  
  --------------------------------------------------------------------------------
  
  使用者的密码被放在 pw->pw_passwd,所以我们需新增 getspnam function,这将会把密码放到 spwd->sp_pwdp。
  
  我们将新增 pwauth function 来表示真正的权限。 这将在 shadow 档设定时自动产生第二个权限。
  
  变更为可以支援 shadow 後的 auth.c function:
  
  
  
  --------------------------------------------------------------------------------
  
  /*
  * login - Check the user name and password against the system
  * password database, and login the user if OK.
  *
  * This function has been modified to support the Linux Shadow Password
  * Suite if USE_SHADOW is defined.
  *
  * returns:
  * UPAP_AUTHNAK: Login failed.
  * UPAP_AUTHACK: Login succeeded.
  * In either case, msg points to an appropriate message.
  */
  static int
  login(user, passwd, msg, msglen)
  char *user;
  char *passwd;
  char **msg;
  int *msglen;
  {
  struct passwd *pw;
  char *epasswd;
  char *tty;
  
  #ifdef USE_SHADOW
  struct spwd *spwd;
  struct spwd *getspnam();
  #endif
  
  if ((pw = getpwnam(user)) == NULL) {
  return (UPAP_AUTHNAK);
  }
  
  #ifdef USE_SHADOW
  spwd = getspnam(user);
  if (spwd)
  pw->pw_passwd = spwd->sp-pwdp;
  #endif
  
  /*
  * XXX If no passwd, let NOT them login without one.
  */
  if (pw->pw_passwd == '\0') {
  return (UPAP_AUTHNAK);
  }
  #ifdef HAS_SHADOW
  if ((pw->pw_passwd && pw->pw_passwd[0] == '@'
  && pw_auth (pw->pw_passwd+1, pw->pw_name, PW_LOGIN, NULL))
  || !valid (passwd, pw)) {
  return (UPAP_AUTHNAK);
  }
  #else
  epasswd = crypt(passwd, pw->pw_passwd);
  if (strcmp(epasswd, pw->pw_passwd)) {
  return (UPAP_AUTHNAK);
  }
  #endif
  
  syslog(LOG_INFO, "user %s logged in", user);
  
  /*
  * Write a wtmp entry for this user.
  */
  tty = strrchr(devname, '/');
  if (tty == NULL)
  tty = devname;
  else
  tty++;
  logwtmp(tty, user, ""); /* Add wtmp login entry */
  logged_in = TRUE;
  
  return (UPAP_AUTHACK);
  }
  
  
  --------------------------------------------------------------------------------
  
  严谨的□例将启发我们在作其他改变的帮助。 原始的版本如果在 /etc/passwd 档没有任何密码,可允许存取传回的 UPAP_AUTHACK 。这是不好的,因为签入的使用是使用一个允许存取 PPP process的帐号,然後检查帐号密码,该帐号密码是由 RAP 、在 /etc/passwd 档的帐号和 /etc/shadow 档的密码供应。
  
  
  所以如果我们设定原本版本对每个使用者,如 ppp 可以在 shell 执行,然後任何人可以获得 ppp 链结透过设定他们对使用者 ppp 的 PAP 和 null 的密码。
  
  
  我们修正 UPAP_AUTHNAK 取代 UPAP_AUTHACK 如果密码栏位是空的。
  
  有趣的是 pppd-2.2.0 有相同的问题。
  
  接下来我们需要变更 Makefile 以便让两件事发生:
  
  USE_SHADOW 必须被重新定义且libshadow.a 需要被新增到链结 process。
  
  
  编辑 Makefile 且新增:
  
  LIBS = -lshadow
  
  然後我们找到这一行:
  
  COMPILE_FLAGS = -I.. -D__=1 -DGIDSET_TYPE=gid_t
  
  然後改变它变成:
  
  COMPILE_FLAGS = -I.. -D__=1 -DGIDSET_TYPE=gid_t -DUSE_SHADOW
  
  现在执行 make 跟 install.
【责编:admin】

--------------------next---------------------

阅读(286) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~