Строки 21-24. Блок end {}. Этот блок отвечает за уничтожение файла PID. Однако файл PID был создан во время работы сервера в качестве суперпользователя. Поэтому для уничтожения файла необходимо снова приобрести привилегии суперпользователя, для чего значение действующего UID устанавливается равным значению реального UID.
Если выполнение этого блока происходит в то время, когда сервер не запущен от имени суперпользователя, то все действия, связанные с изменением привилегий, окончатся неудачей. Явная проверка такой ситуации не предусмотрена, поскольку запуск от имени непривилегированного пользователя не удастся выполнить, прежде всего, потому, что будет получен отказ при выполнении других операций, требующих доступа с правами суперпользователя, таких как открытие привилегированного порта. Для применения возможностей нового кода модуля Daemon необходимо изменить основной сценарий сервера. Для этого требуется внести следующие изменения.
1. Новые константы USER и GROUP. В начале файла значение константы PORT изменяем на 1002, а в качестве значения константы PIDFILE задается имя файла, расположенного в каталоге /var/run. Затем определяются две новые константы, USER и GROUP, содержащие имена пользователя и группы, под которыми будет работать сервер. Эти имена должны соответствовать действительным записям в файлах /etc/passwd и /etc/group, поэтому установим их значения в соответствии со своей системой.
use constant PORT => 1002; use constant PIDFILE => '/var/run/eliza__root. pid'; use constant USER => 'nobody'; use constant GROUP => 'nogroup';
2. Передача значений констант USERи GROUPподпрограмме init_server (). После открытия приемного сокета вызывается подпрограмма init_server () с иcпользованием ее новой формы вызова с тремя параметрами, и ей передаются имя файла PID и значения констант USЕR и GROUР.