Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Добрый день, уважаемый подписчик. Перед вами 6 выпуск рассылки "Информационный бюллетень от ApacheDev.ru". Это первый выпуск, который вышел на базе сервиса Subscribe.ru. Я надеюсь, что теперь у вас не будет проблем с получением писем, да и архив рассылки всегда будет под рукой. Архив же предыдущих выпусков скоро будет выложен на сайте ApacheDev.ru. Ну а теперь перейдем к более важным вещам :) Из этого выпуска вы узнаете о новых возможностях ModSecurity по нормализации входного потока; о библиотеке Serf, которая предоставляет простой API для выполнения клиентских запросов; и напоследок, сможете прочитать последнюю статью из серии про mod_dav, благодаря которой вы научитесь создавать собственные dav-провайдеры. Приятного чтения. Интересное из мира ApacheНормализирующие возможности ModSecurity 2На сайте ApacheDev.ru опубликована заметка о новых возможностях ModSecurity 2 - функциях нормализации входного потока. Всего предоставлено 19 функций, например: lowercase, removeNulls, compressWhitespace, urlDecode и др. Использование явных преобразований входных данных существенно повышает надежность защиты. Подробнее... Библиотека SerfНедавно на конференции разработчиков Apache наткнулся на библиотеку Serf. Ее рекомендовал Paul Querna для использования при разработке модулей Apache. Основное ее предназначение - это предоставление простого API для реализации функциональности HTTP клиента: отправка запросов, получение ответов и т.п. Исходники Serf можно взять тут: http://svn.webdav.org/repos/projects/serf/trunk/. Также Paul ищет разработчиков, кто создал бы сайт библиотеки Serf. Так что, если у вас есть желание, то пишите на chip(at)force-elite.com. Статья выпускаВ предыдущей статье мы рассмотрели реализацию протокола WebDAV в сервере Apache. В этой статье, которая является последней в серии, мы рассмотрим устройство модуля mod_dav - центрального модуля поддержки протокола WebDAV в Apache. ВведениеКак уже было сказано в предыдущих статьях, модуль mod_dav является интерфейсным модулем, в котором происходит только обработка протокола WebDAV, а реализацию взаимодействия с хранилищем ресурсов, хранения свойств, и т.п. модуль mod_dav делегирует сторонним модулям (back-end модулям или dav-провайдерами). В mod_dav такое взаимодействие реализовано в виде нескольких семейств хуков (сгруппированных по функциональности), обработчики которых должны быть реализованы dav-провайдерами. Всего в mod_dav предоставлено семь групп хуков: обработка двух из них обязательна, а остальных опционально. Сперва мы покажем общую схему, а затем опишем основные группы подробно. Архитектура mod_dav![]() На рисунке изображены все группы хуков, предоставляемых модулем mod_dav. Синим цветом выделены те группы хуков, для которых в dav-провайдере необходимы обработчики. Сейчас мы кратко рассмотрим каждую из этих групп, а ниже уже более детально изучим самые важные их них.
Теперь подробно рассмотрим три наиболее важные группы: dav_hooks_repository, dav_hooks_propdb и dav_hooks_locks. mod_dav: Работа с хранилищем ресурсовДля взаимодействия с хранилищем (репозитарием) ресурсов в mod_dav существует группа хуков dav_hooks_repository. Основное ее предназначение - это обрабатывать входные и выходные потоки хранилища ресурсов. Обработчики этих хуков также обеспечивают выполнение основных файловых операций над ресурсами, например: копирование/перемещение ресурсов, создание коллекции, удаление ресурса и т.п. Рассмотрим все хуки этой группы подробнее:
mod_dav: Работа со свойствамиВторой важнейшей и обязательной группой хуков является группа работы со свойствами. Основной задачей обработчиков этой группы является организация хранения свойств ресурсов и коллекций. Также они обеспечивают выполнения всех операций над свойствами. Рассмотрим эти хуки.
mod_dav: БлокировкиПоследняя группа, которую мы рассмотрим, отвечает за функционирование механизма блокировок. Она не является обязательной, но необходима для реализации методов WebDAV: Lock и Unlock.
Теперь, после рассмотрения основных групп хуков модуля mod_dav, перейдем к практике. И посмотрим на код модуля-провайдера. Я не буду мешать код с текстом, поэтому все пояснения оформлены в виде комментариев к коду. Совет: Нижеизложенный код изучать лучше с конца. Структура dav - провайдера// структура модуля для хранения директив typedef struct { const char *test_dav_directive; }test_dav_server_conf; // Обработчик хука post_config static int test_dav_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) { // Выполняем действия, необходимые для инициализации // Данный обработчик вызывается после загрузки модули и // после обработки конфигурации // (Примечание: Данный обработчик выполняется при загрузке дважды. // Способ обойти такое поведение читайте в статье : // http://apachedev.ru/2006/03/13/problemi-pri-sozdanii-modula/) return OK; } // Создать структуру конфигурации модуля static void *create_server_config(apr_pool_t *p, server_rec *s){ test_dav_server_conf *conf = NULL; conf = (test_dav_server_conf*)apr_palloc(p, sizeof(*conf)); return (void*)conf; } // Обработчик директивы static const char *test_dav_cmd(cmd_parms *cmd, void *config, const char *arg1){ test_dav_server_conf *conf; // Получить указатель на структуру конфигурации модуля conf = ap_get_module_config(cmd->server->module_config, &test_dav_provider_module); // Сохранить значение директивы conf->test_dav_directive = apr_pstrdup(cmd->pool, arg1); return NULL; } // Директивы модуля static const command_rec test_dav_cmds[] = { // Декларация директивы и ее обработчика AP_INIT_TAKE1("tes_dav_directive", test_dav_cmd, NULL, ACCESS_CONF|RSRC_CONF, "Тестовая директива с одним аргументом"), {NULL} }; // Структура DAV провайдера static dav_provider test_dav_provider = { &test_dav_hooks_repos, // Работа с хранилищем &test_dav_hooks_propdb, // Работа со свойствами &test_dav_hooks_locks, // Блокировка NULL, // Версионность NULL, // Связывание NULL // Поиск }; // Регистрация обработчиков хуков static void register_hooks(apr_pool_t *pconf){ ap_hook_post_config(test_dav_post_config, NULL, NULL, APR_HOOK_MIDDLE); // Регистрация DAV провайдера dav_register_provider(pconf, "test_dav_provider", &test_dav_provider); } // Главная структура модуля Apache module AP_MODULE_DECLARE_DATA test_dav_provider_module = { STANDARD20_MODULE_STUFF, NULL, NULL, create_server_config, // создание конфигурации модуля NULL, test_dav_cmds, // список директив модуля register_hooks, // регистрация обработчиков }; Данный код, а также код обработчиков test_dav_hooks_repos, test_dav_hooks_propdb и test_dav_hooks_locks можно скачать в виде архива. ПослесловиеЭто последняя статья из серии про модуль mod_dav. Надеюсь, что она стала вам полезной и сняла часть вопросов, касающихся реализации WebDAV в сервере. Если у вас остались вопросы, то присылайте их мне на info@apachedev.ru. |
В избранное | ||