Решение нашлось!
В этом мне помог мой очень хороший товарищ Иван Мартюшев, за что ему огромное спасибо!
Сразу хочу рассказать, собственно, для чего именно это вообще всё нужно было: Есть у меня на работе сервер с работающей связкой Squid + SAMS. В настройках самса используется редиректор, встроенный в сквид. И всё бы ничего, да вот только юзвери нынче сильно хитрые пошли. Как и во многих конторах, у нас закрыт доступ на такие сайты, как контакт, одноклассники, маил.ру и прочие развлекаловки, отвлекающие от работы. Однако, юзвери повадились на них попадать через анонимайзеры. Само собой, что в списке запрещённых url содержались такие выражения, как "anonymizer", "anonimaiser", "анонимайзер" и прочие вариации. И эта фишка прекрасно работала, когда, например, юзверь набирал в гугле "anonymizer" или "анонимайзер" -- ему сразу вылазило "доступ закрыт". Однако, если юзверь набирал в гугле, например, "anonyMizer" или "аноНимайзер", то запрет ни шиша не срабатывал, и юзверь спокойно получал список анонимайзеров и делал, чё хотел.
Первое, что мне пришло в голову -- это как-то заставить либо чтобы сквид изначально не был чувствителен к регистру, либо, чтобы SAMS научился подставлять параметр -i к url_regex. Поломав над этим голову, мы с Иваном выбрали второе. Итак, вот как это делается:
Для того, чтобы SAMS начал подставлять параметр -i к url_regex, надо в исходниках найти файл samsdaemon.c. В этом файле находим строчки 874, 876, 922, и 924. Они будут выглядеть вот так соответственно:
Код: Выделить всё
fprintf(fout,"acl _sams_%s url_regex \"%s/%s.sams\"\n",row[1],conf.squidrootdir,row[1]);
printf("acl _sams_%s url_regex \"%s/%s.sams\"\n",row[1],conf.squidrootdir,row[1]);
fprintf(fout,"acl _sams_%s url_regex \"%s/%s.sams\"\n",row[1],conf.squidrootdir,row[1]);
printf("acl _sams_%s url_regex \"%s/%s.sams\"\n",row[1],conf.squidrootdir,row[1]);
Вот в них то и добавляем наш параметр -i. После чего выглядеть они будут вот так:
Код: Выделить всё
fprintf(fout,"acl _sams_%s url_regex -i \"%s/%s.sams\"\n",row[1],conf.squidrootdir,row[1]);
printf("acl _sams_%s url_regex -i \"%s/%s.sams\"\n",row[1],conf.squidrootdir,row[1]);
fprintf(fout,"acl _sams_%s url_regex -i \"%s/%s.sams\"\n",row[1],conf.squidrootdir,row[1]);
printf("acl _sams_%s -i url_regex -i \"%s/%s.sams\"\n",row[1],conf.squidrootdir,row[1]);
После чего пересобираем SAMS. Теперь, он будет создавать правила вот такого вида:
Код: Выделить всё
acl _sams_chat url_regex -i "/etc/squid/chat.sams"
acl _sams_porno url_regex -i "/etc/squid/porno.sams"
Однако, как выяснилось, этим решается лишь половина проблемы. Если url_regex будет содержать кириллицу (например "анонимайзер"), то чувствительность к регистру всё равно будет работать. Чтобы решить эту проблему, пришлось, всё-таки, лезть в исходники Squid. В них нужно кое-что прописать и пересобрать его.
Итак, в исходниках сквида в файле main.cc после строчки 888 нужно вставить конструкцию "setlocale(LC_ALL, "");"
Т.е. кусок кода, после этого, будет выглядеть так:
Код: Выделить всё
static void
mainInitialize(void)
{
setlocale(LC_ALL, "");
/* chroot if configured to run inside chroot */
if (Config.chroot_dir && (chroot(Config.chroot_dir) != 0 || chdir("/") != 0)) {
fatal("failed to chroot");
}
Также, в строку 36 файла main.cc надо добавить - #include <locale.h>
Кусок кода, после этого, получится:
Код: Выделить всё
#include "squid.h"
#include <locale.h>
#include "AccessLogEntry.h"
Потом пересобираем squid, в результате будет работать ignore case для русских букв! Ну, а для того, чтобы гугл не срабатывал даже на запросы подобно "Аннонимайзер", или "Анонимпрайзер", или даже "Анонимайквапзеер", то в список запрещённых url добавляем вот такое регулярное выражение:
А.*Н.*О.*Н.*И.*М.*А.*Й.*з.*е.*р
Буквы можно хоть маленькие, хоть большие -- сейчас это уже значение иметь не будет, поскольку сквид уже не чувствителен к регистру русских букв
Ну, и напоследок, выкладываю готовые rpm-пакеты сквида для Fedora12, Fedora13 i386, а также src.rpm-пакеты подправленных сквида и самса. Их можно пересобрать под свою систему командой rpmbuild --rebuild packetname.src.rpm.
http://letitbit.net/download/85905.8423a8e...s_rpms.rar.html
Прошу прощения за то, что их пришлось выложить на letitbit. Если у кого есть возможность, то переложите в нормальное место, чтоб можно было по прямой ссылке скачивать.