Постановка задачи
Freeswitch умеет при помощи mod_curl забирать с определенного урла диалпланы и пользователей. Это очень чуствительная информация, поэтому очень захотелось ограничить доступ к служебным урлам только с localhost.Реализация
One does not simply restrict access to single URL from localhost |
В итоге такая конфигурация решала задачу:
<set name="black"> <array type="String"> <item>-126.-.-.-|/fs/*</item> <item>127.0.0.2-|/fs/*</item> <item>128-.-.-.-|/fs/*</item> </array> </set>
Хватит это терпеть
Пошел искать мейллист, нашел jetty-dev, прошел квест по регистрации и заслал enchansement proposal. Пришел Greg Wilkins, и предложил альтернативное решение: не расширять синтаксис правил фильтрации, а сделать альтернативный режим в котором правило будет применяться только если заматчился URL, для чего нужно вывернуть процесс фильтрации наизнанку.В общем, спустя пару недель, собрался с силами и таки засел за патч. Причем код писать пришлось под убунтой: на винде я так и не смог сконпелировать исходники. Разбил патч на два: выворачивание наизнанку (потратил кучу времени на борьбу с тестовыми случаями - оказалось баг) и добавление режима.
Высокий порог вхождения
Это тема для отдельного поста, но, чтобы заслать патч в какой-нибудь серьезный проект, нужно реально очень сильно этого хотеть. Наученный горьким опытом, я пошел искать официальный гайд по засылке патча, в котором оказались ссылки еще на два гайда: по работе с гитом и герритом. Оооокей, пошел курить.
Читаю: подпишите CLA. Для начала нужно зарегаться, ищу, регистрируюсь, подписываю что весь код написан лично мной. Дальше: прежде чем пушить, убедитесь что создан тикет в багзилле. Оооок, создаю тикет со ссылкой на обсуждение.
Пушу в специальный репозиторий, привязанный к герриту - отлуп, ключ говорит давай. Регаю публичный ключ. Повторяю - отлуп. Не подписал, говорит CLA. Проверил - подписано, повторяю - отлуп. Пошел дальше курить, оказалось в коммите нужно указать специальным тегом, Signed-off-by себя, а ревьюер потом еще себя укажет другими тегами.