Путь к Linux. Руководство по установке и настройке


           

поэтому нам придется воспользоваться функцией


       */
      tty = strrchr(devname, '/');
      if (tty == NULL)
          tty = devname;
      else
          tty++;
      logwtmp(tty, user, "");             /* Добавляем запись wtmp */
      logged_in = TRUE;
      return (UPAP_AUTHACK);
  }
Пароль пользователя помещается в поле pw->pw_passwd,  поэтому нам придется воспользоваться функцией getspnam, которая запишет пароль в spwd->sp_pwdp.
Для выполнения реальной аутентификации мы добавим функцию pwauth, которая будет автоматически выполнять вторичную проверку, если это указано в настройках теневых паролей.
Вот код функции auth.c после модификации, обеспечивающей работу с теневыми паролями:
   /*
   * login - Проверка имени пользователя и его пароля по
   * данным из базы /etc/passwd.
   *
   *
   * Функция модифицирована для работы со средствами поддержки
   * Linux Shadow Password Suite если установлен режим USE_SHADOW
   *
   * Возвращает:
   *      UPAP_AUTHNAK: Регистрация неудачна.
   *      UPAP_AUTHACK: Регистрация прошла успешно.
   * В любом случае msg указывает на соответствующее сообщение.
*/
  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 (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)) {

Содержание  Назад  Вперед