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


Пример


Вот, наконец, долгожданный пример, демонстрирующий использование механизма поддержки теневых паролей программой, которая нуждается в этом механизме, но изначально его не обслуживает. Пример использует сервер протокола Point-to-Point (pppd-1.2.1d), который имеет режим аутентификации пользователей PAP, с использованием записей из файла /etc/passwd вместо PAP и CHAP файлов.

Этот режим используется не слишком часто, но если вы установите Shadow Suite то он просто не будет работать вообще, поскольку пароли более не хранятся в файле /etc/passwd.

Программы аутентификации пользователей  pppd-1.2.1d вы можете найти в файле  /usr/src/pppd-1.2.1d/pppd/auth.c.

Вначале вам придется добавить в начало этого файла несколько директив, включающих заголовочные файлы. Обратите вниамание на директивы условной компиляции.

  #ifdef HAS_SHADOW

  #include <shadow.h>

  #include <shadow/pwauth.h>

  #endif

Следующий шаг — модификация исходного кода. Мы продолжаем модифицировать файл auth.c.

Вот функция auth.c до модификации:

   /*

   * login - Проверка имени пользователя и его пароля по

   * данным из базы /etc/passwd.

   *

   * Возвращает:

   *      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;

      if ((pw = getpwnam(user)) == NULL) {

          return (UPAP_AUTHNAK);

      }

       /*

       * XXX Если пароля нет, регистрируемся без него.

       */

      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);

      /*

       * Заполняем запись wtmp для этого пользователя.




Начало  Назад  Вперед