Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
os.popen(lda_command).write(mail))
Напомню, что все тестовые сценарии мы сохраняем под именем maildigest.py, чтобы не вносить каждый раз изменения в /etc/mail/aliases.
Здесь с помощью той же функции popen() создается канал с утилитой mail.local.suid, на вход которой передается текст сообщения, сохранённого в файле в результате предыдущего эксперимента. Пользователя-получателя указываем явно (admin). В принципе этот сценарий можно выполнить и непосредственно из командной строки, но лучше использовать тот же способ запуска через aliases, чтобы лишний раз убедиться в отсутствии проблем с правами доступа и переменными окружения.
Отправив тестовое сообщение на postmaster, убеждаемся, что доставка выполняется нормально, естественно, при условии, что запускался предыдущий тест, в результате которого должен был сформироваться файл, который в данном случае и используется. Значит, так и будем поступать в дальнейшем.
Сбор статистики и формирование «дайджеста»
Информация об обнаруженном вирусе (его название) содержится в последней строчке уведомления (если быть точнее, то в предпоследней, а последняя – пустая). Если эту строку разбить по пробелам, то нужное нам имя получим во втором поле.
Учитывая, что на моём сервере больших нагрузок не предвидится, для хранения результата я выбрал формат DBM.
В стандартную поставку Python включён модуль anydbm, который самостоятельно определяет, какая именно реализация DBM используется в вашей системе, так что об этом нам заботиться не придётся. Данные в этом формате хранятся в виде пар «имя – значение». Единственный его недостаток в нашем случае – это то, что он позволяет хранить только текстовые данные, т.е. придётся в процессе работы выполнять преобразования сохранённого значения, отражающего количество обнаруженных вирусов данного типа, из строки в число и обратно.
Для удобства будем хранить информацию посуточно, для чего имя db-файла будет формироваться с учётом текущей даты (см. код сценария ниже).
Наконец, при смене даты нам нужно будет формировать и отправлять сводный отчёт за прошедшие сутки. Поскольку отчёт предназначается локальному пользователю, то проще всего будет сформировать «вручную» сообщение с нужными заголовками и воспользоваться тем же LDA для его доставки.
Реализация
Итак, приступим к разработке сценария. Чтобы сохранить целостность восприятия, полностью приведу прокомментированный текст скрипта, а ниже дам некоторые пояснения.
Листинг 3. Сценарий maildigest.py
#!/usr/local/bin/python
# -*- coding: koi8-r -*-
# Импортирование нужных модулей
import os, sys, rfc822, anydbm
from StringIO import StringIO
from time import ctime, strftime
# «Родительские» каталоги для размещения файлов
prefix_bin = '/usr/local/scripts/maildigest/'
prefix_var = '/var/scripts/maildigest/'