Книга: Разработка приложений в среде Linux. Второе издание
16.1.4. Запись с помощью utempter
16.1.4. Запись с помощью utempter
Приложения со встроенными средствами безопасности, использующие pty, имеют недостаточно полномочий для модификации файлов баз данных. Эти приложения должны предоставлять опцию для использования простой вспомогательной программы, доступной в большинстве систем Linux и в некоторых других системах, но не стандартизованной — утилиты utempter
. Утилита utempter
является setgid (или, при необходимости, setuid) с достаточными полномочиями для модификации баз данных utmp и wtmp. Доступ к ней можно получить через простую библиотеку. Утилита utempter
проверяет, владеет ли процесс tty, который пытается войти в базу данных utmp до разрешения операции, utempter
предназначена только для pty; другие tty обычно открываются демонами с достаточными полномочиями для модификации файлов системных баз данных.
#include <utempter.h>
void addToUtmp(const char *pty, const char *hostname, int ptyfd);
void removeLineFromUtmp(const char *pty, int ptyfd);
void removeFromUtmp(void);
Функция addToUtmp()
принимает три аргумента. Первый, pty
, является полным путем к добавляемому pty. Второй, hostname
, может быть NULL
или сетевым именем системы, из которой сетевое подключение использует этот порожденный pty (что запускает ut_host
, рассматриваемый в следующем разделе главы). Третий, ptyfd
, должен быть открытым файловым дескриптором, ссылающимся на устройство, названное в аргументе pty
.
Функция removeLineFromUtmp()
принимает два аргумента; они определяются в точности как аргументы с таким же именем, передаваемые функции addToUtmp()
.
Некоторые существующие приложения записываются с помощью структуры, усложняющей хранение имени и файлового дескриптора для очистки элемента utmp. Из-за этого библиотека utempter
поддерживает кэш самого позднего имени устройства и файлового дескриптора, передаваемого addToUtmp()
, и удобную функцию removeFromUtmp()
, не принимающую никаких аргументов и действующую как removeLineFromUtmp()
на кэшированную информацию. Это подходит только для приложений, добавляющих лишь один элемент utmp
; более сложные приложения, использующие более одного pty, должны вместо этого применять removeLineFromUtmp()
.
- Повышение производительности приложений с помощью хранимых процедур
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Организация пользователей в группы с помощью ролей
- 4.4.3. Чтение и запись
- Обработка запросов с помощью PHP
- 1.18. Запись телефонных звонков
- Как сделать перезапись файлов в Проводнике более удобной?
- Как с помощью компьютера подшутить над друзьями и коллегами?
- Как составить психологический портрет с помощью Сети?
- Хочу следить за «здоровьем» винчестера. С помощью какой программы это можно делать?
- Не могу войти в систему под учетной записью администратора, поскольку среди имен пользователей, отображаемых на экране п...
- Как открыть каталог с помощью командной строки?