Реализация прикладного шлюза

Опубликовано в Технологии > Серверные технологии

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

Большинство систем UNIX, включая Linux, позволяет системному администратору легко подготовить необходимые компоненты. Администратор может создать специальный адрес назначения электронной почты rfc, добавив его к файлу псевдонимов электронной почты, или создать учетную запись для фиктивного пользователя rfc и обеспечить перенаправление всей почты для этого пользователя в программу. Почти все системы UNIX позволяют перенаправлять электронную почту в программу любому отдельно взятому пользователю, поэтому построить и отладить прикладной шлюз электронной почты может даже непривилегированный пользователь.

Кроме прочих задач, прикладной шлюз должен осуществить выборку документа RFC. В данном примере реализации для выборки документа RFC используется отдельная программа. Эта программа, показанная ниже, представляет собой сценарий командного интерпретатора.

Сценарий rfc принимает параметр, который либо задает номер RFC, либо содержит слово index (для обозначения списка документов RFC). Он создает необходимые команды протокола FTP, а затем вызывает программу ftp. Команды служат для программы ftp указанием, что нужно открыть соединение с узлом сетевого информационного центра Network Information Center и выбрать копию указанного документа RFC.

Сценарий rfc сложнее по сравнению с минимально необходимым кодом, поскольку содержит средства оптимизации. Этот код предусматривает кэширование копии каждого полученного документа RFOB каталоге /usr/tmp/RFC. Перед выборкой документа RFC сценарий rfc проверяет, не находится ли в данный момент в этом кэше его копия. Если в кэше имеется копия, то сценарий осуществляет ее выборку, исключая тем самым ненужный сетевой трафик.

19.12. Код прикладного шлюза

После установки сценария rfc в системе построение прикладного шлюза для доступа к документам RFC значительно упрощается. Необходимый для этого код находится в файле rfcd. Как и программа rfc, приведенная выше, программа rfcd представляет собой сценарий командного интерпретатора. В ней для выборки документа RFC используется программа rfc, а для передачи результатов запросившему их пользователю применяется обычная программа электронной почты (/bin/mail).

Хотя код этого сценария может показаться сложным для пользователей, не знакомых со сценариями командного интерпретатора и утилитой awk, должно быть очевидно, что для создания сценария, выполняющего такие сложные действия, потребовался лишь небольшой объем программного кода.

По сути, сценарий rfcd считывает почтовое сообщение и извлекает из него содержимое строк From: и Subject:; В нем для выполнения основной работы используется программа awk, которая просматривает каждую строку входящего почтового сообщения. В этой программе принято предположение, что строка Subject: содержит номер RFC, а строка From: содержит адрес электронной почты отправителя. Адрес отправителя становится адресом назначения при формировании ответа сценарием rfcd.

После обнаружения пустой строки программа awk, входящая в состав сценария rfcd, определяет, что достигнут конец почтового заголовка. Она прекращает обработку, формирует и выводит программу командного интерпретатора. Поскольку сценарий rfcd перенаправляет вывод программы awk непосредственно в командный интерпретатор (sh), сформированная программа выполняется немедленно.

Если входящее сообщение содержит в своем заголовке строку Subject:, имеющую правильный формат, то сформированная программа вызывает сценарий /usr/local/bin/rfc для получения указанного документа RFC и программу /bin/mail для передачи документа пользователю, приславшему запрос. Если же почтовое сообщение не содержит строки темы или в этой строке находится нечто иное, чем цифры или пробелы, то программа awk завершает работу без выработки какого-либо кода. В случае преждевременного завершения работы программы awk сценарий rfcd не предпринимает попыток получить документ RFC или даже отправить какую-либо почту (т.е. в этой версии не предусматривается передача пользователю сообщений об ошибках).