Форум русскоязычного сообщества Ubuntu


Автор Тема: Обернуть процесс в UNIX сокет.  (Прочитано 953 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3337
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Обернуть процесс в UNIX сокет.
« : 08 Апреля 2010, 01:09:41 »
Есть задача: необходимо обернуть некий процесс, запускаемый определённой командой, в UNIX сокет. Ну то есть привязать STDIN и STDOUT этого процесса к сокету, чтобы сообщения с STDOUT посылались на сокет, а сообщения с сокета посылались на STDIN. Как только процесс завершится - сокет должен закрыться. Собственно вопрос: как это сделать средствами Perl или на крайняк bash?

Объясню зачем оно надо: есть такой замечательный IMAP сервер Dovecot. И всё хорошо, но управлять им можно только через всё тот же IMAP.  Не беда - в перле есть либы для реализации IMAP, но они все работают только с IP или UNIX сокетами. А нам если мы хотим управлять ящиком пользователя не зная пароля пользователя нужно на сервере запускать PREUATH сессию от имени пользователя. Выглядит это как процесс, который пишет в STDOUT и ждёт ввода с STDIN. Соответственно чтобы иметь возможность работать с этим процессом посредством перловых либ нужно обернуть его в сокет. Вот и вопрос: как это сделать?)))
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Обернуть процесс в UNIX сокет.
« Ответ #1 : 08 Апреля 2010, 09:36:10 »
На мой взгляд проще всего сделать через fifo.
Проведите такой эксперимент, чтобы понять суть.
1. Откройте 2 гном-терминала (ГТ).
2. Создадим fifo.
Наберите в любом ГТ (пусть в ГТ1)
mkfifo Fifo1
2. Читаем fifo (пусть в ГТ2)
cat Fifo1
3. В другом ГТ (ГТ1) что-нибудь кинем в fifo
echo "123456789" > Fifo1
4. Смотрим результат в ГТ2.

 

Оффлайн terrible_user

  • Активист
  • *
  • Сообщений: 438
    • Просмотр профиля
Re: Обернуть процесс в UNIX сокет.
« Ответ #2 : 08 Апреля 2010, 09:51:03 »
вынесу предложение:
xinetd -  'превращает' консольное приложение с его STDIN и STDOUT в сетевое, можно работать с ним через telnet. Или написать клиент, только не на bash, а С, Phyton или т.п. -  что бы умел буферы приема/передачи очищать. fflush(stdout)

Бери больше, кидай дальше

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Обернуть процесс в UNIX сокет.
« Ответ #3 : 08 Апреля 2010, 10:03:11 »
Добавлю для полноты картины.
Когда надоест fifo, его можно удалить.
rm Fifo1

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3337
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Re: Обернуть процесс в UNIX сокет.
« Ответ #4 : 08 Апреля 2010, 12:02:01 »
Собственно поизучав вопрос понял, что сделать-то это можно, но геморно. Посему нашёл обходное решение в данном случае - использвоать MasterUsers в Dovecot и вообще забить на PREAUTH :P
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

 

Страница сгенерирована за 0.053 секунд. Запросов: 25.