Perl для системного администрирования


Создание системы учетных записей для работы с пользователями - часть 20


и такой код РАБОТАТЬ НЕ БУДЕТ open(PW,"|passwd Saccount")

print PW $olcipasswd, "\n"; print PW Snewpasswd,"\n";

На этот раз мы должны быть искуснее, чем обычно; нам нужно как-то заставить команду passed думать, что она имеет дело с человеком, а не программой на Perl. Этого можно достичь, если использовать модуль Expect.pm, написанный Остином Шутцом (Austin Schutz), - ведь он устанавливает псевдотерминал (pty), внутри которого выполняется другая программа. Expect.pm основан на известной Tel-программе Expect Дона Либеса (Don Libes). Этот модуль входит в семейство модулей, взаимодействующих с программами. В главе 6 мы рассмотрим его близкого «родственника», модуль Net: :Telnet Джея Роджерса (Jay Rogers).

Эти модули действуют в соответствии со следующей моделью: они ждут вывода программы, посылают ей на ввод данные, ждут ответа, посылают некоторые данные и т. д. Приведенная ниже программа запускает команду passed в псевдотерминале и ждет до тех пор, пока та запросит пароль. Поддержание «разговора» с passwd не должно требовать усилий:

use Expect;

sub InitUnixPasswd {

my (Saccount,Spasswd) = @_;

ft вернуть объект

my $pobj - Expect->spawn($passwdex, Saccount);

die "Unable to spawn $passwdex:$!\n" unless (defined SpoDj):

it не выводить данные на стандартный вывод (т. е.

# работать молча)

$pobj->log_stdout(0);

# Подождать запроса на ввод пароля и запроса на повторение

# пароля, ответить. $pobj->expect(10,"New password: ");

и Linux иногда выводит подсказки раньше, чем он готов к вводу,

print $pob] "$passwd\r"

$pobi->expect(10, "Re-enter new password: "); print $pob] "$passwd\r";

it работает"

Sresul: = (defined ($pobj-~ expectdO.

"successfully changeo")) ? "" : "password crarac.

failed"): в закрываем обьект, ждем 15 секунд, пока процесс завершится

$pobj-'suft_close();

return $resuJ t.:

 }

Модуль Expect.pm очень хорошо подходит для этой подпрограммы, но стоит отметить, что он годится для куда более сложных операций. Подробную информацию можно найти в документации и руководстве по модулю Expect.pm.




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



Книжный магазин