english version

Я не знаю, должен ли этот текст попасть в RDM/2 или ещё куда, но я хочу в очередной раз привлечь внимание программистов под OS/2 к интерфейсам серверов HTTP. Многие вещи, которые буржуи пытаются реализовать через-сами-знаете-что, весьма просто, быстро и надежно реализуются через интерфейс программирования для HTTP-сервера. Меня всегда передёргивает, когда я вижу на www.altavista.com поиск, реализованный через cgi -- это же миллионы людей напрягают бедный UNIX запуском shell-а, perl-а и прочей другой хлабуды. Они, конечно, богатые, но как только надо сделать что-нибудь немного посложнее ввода формы, накладные расходы и выкрутасы, совершаемые программистами, становятся просто невероятными. Кроме того, меня давно интересовало, как IBM делает свои сайты. То, что часть из них находится под Lotus Notes Domino, я знаю, а вот что такое WebSphere ? Нет, это не описание WebSphere, меня интересовало, как это сделано внутри. И вот благодаря сообществу OS/2 я выкачал WebSphere 3.02 и заглянул в серверную часть. Ба, закомые вещи -- GoServe и ICAPI (в комбинации с Java Servlets). И это правильно.

Cобственно, к чему это я? Возникла у нас проблема, фильтровать доступ пользователей на WWW-сервера, т.е. кому-то можно смотреть одно, кому-то другое, кому-то вообще только домашний сервер. Причём аутентификация должна проходить прозрачно. Т.е. после регистрации в сети пользователь не должен повторно вводить имя и пароль (как это не странно, именно это стало камнем преткновения для коммерческих программ). Сделал я небольшой обзор и ужаснулся: управляемые сервера, интегрированные с NDS или доменом NT, стоят десятки килобаксов. Где же найти такие деньги ? Причём функциональность у них для нас настолько избыточная, что говорить не приходится. Но по линии Novell получили мы BorderManager 2.X. Вроде оно, тем более что пользователи всё равно в Novell-е все зарегистрированы. Поставили -- не работает. Подождали версию 3.X. Поставили -- не работает. Я замучил весь форум novell.bordermanager.x. Безрезультатно. Получили версию 3.5, которая после серии патчей заработала. Однако появилась другая проблема. Стали падать станции с IPX/IP Gateway (оговорюсь, что вариант с IP/IP Gateway у нас так и не заработал). Пользователи стали жаловаться на нестабильную работу винды (она-то и так не подарок). Приняли решение -- убрать BorderManager и IPX/IP Gateway. А чем заменить? Надо делать самим, раз у буржеув руки не оттуда. В результате появилась программа с рабочим названием Rproxy (пока не закончена в полном объёме). Это plugin для IBM WebTraffic (ICS, LotusGo). Который занимается авторизацией пользователей при доступе в интернет. Привязываться к какой-либо операционной системе желания не было, а откуда взять пользователей и правила доступа? Получилось вот что. Plugin имеет собственный набор команд, вот примерный перечень :

ADDUSER=username,[group1,...groupN,] IP-address
ADDUSERQUIET=username,[group1,...groupN,] IP-address
DELETEUSER=username
VIEWUSERS
DELETETRUSTEDHOST=IP-mask
VIEWTRUSTEDHOSTS
VIEWACL
ADDTRUSTEDHOST=IP-mask
VERSION
ADDACLRULE=IP-address,http rule mask,0/1 (deny/permit)
CLEARACL
CLEARTRUSTEDHOSTS
Я думаю, комментировать их излишне. Обращение к командам plugin-а осуществляется по протоколу http, по URL http://server_name/RPROXY_CONTROL_ENTRY?command[=arguments]

База пользователей и ACL динамически загружаются в plugin любой сторонней утилитой, прочитавшей его из любой операционной системы или текстового файла. Программу загрузки можно сделать в виде апплета в броузере и управлять всем хозяйством из него (тем более что уже есть Java API для NDS). Доступ к самим командам plugin-а закрывается стандартными средствами http сервера.

Всё описанное выше является не рекламой программы или решения, а аргументом: подумайте, вместо этих команд могут быть любые ваши, для реализации через Web ваших нужд.

Полные исходные тексты приводятся: rproxy_src.zip, 20k.


[08.11.00]
После первого опубликования информации по Rproxy прошло некоторое время. За это время в проекте произошли некоторые изменения. Основные из них:

  1. объединены в один проект две программы Rproxy и Rhttp. Теперь это один плагин с общим интерфейсом (Rhttp -- это плагин-перекодировщик русских кодовых страниц "на лету");
  2. в плагин встроен интерфейс для чтения текущего IP-траффика;
  3. исправлены некоторые ошибки;
  4. написан клиент для совместной работы с Windows95 и Netware;
  5. добавлена утилита для удаленного выполнения команд.
Изменения представлены в виде исходных текстов и представляют собой скорее инструмент для интересующегося, чем готовый продукт. Однако я с удовольствием помогу в установке и настройке, если кого-нибудь это заинтересует.

Исходные тексты и бинарные файлы: rproxy.zip, 229k.

Андрей А. Породько