Изменение исходников irc-сервера Unrealircd под FreeBSD
Изменяем исходный код irc-сервера Unrealircd под свои нужды. В офисе используется irc-клиент kvirc. У него есть полезная функция page
Которая вызывает окно сообщение поверх всех окон. Что бывает весьма полезно.
Однако при массовой рассылки unrealircd блокирует сообщения и выдает
Message target change too fast. Please wait 180 seconds
добавляя секунды простоя за массовое сообщение.
Конечно можно заходить на сервер как оператор или админ, но как показывает практика пароль и логин на такие вещи часто забываются или теряются. Слава богу что unrealircd является свободным и открытым ПО.
Поэтому меняем исходный код.
Функция, которую нам нужно изменить, находиться в этом файле.
Необходимо сделать так, чтобы функция check_for_target_limit возвращала всегда 0.
int check_for_target_limit(aClient *sptr, void *target, const char *name)
{
return 0;
}
Итак, приступим.
Идем в порт и скачиваем исходники (без установки)
# cd /usr/ports/irc/unreal/
make fetch
архив с исходниками скачаются в каталог /usr/ports/distfiles.
# cd /usr/ports/distfiles/
Копируем архив с исходниками в свою папку (я под рутом, значит в /root/)
# cp Unreal3.2.9.tar.gz ~/
# cd ~/
Разархивируем архив
# tar -xzf Unreal3.2.9.tar.gz
Редактируем нужный нам файл
# ee ~/Unreal3.2/src/s_user.c
Сохраняем изменения и удаляем старый архив.
#rm Unreal3.2.9.tar.gz
Теперь архивируем измененные исходники
#tar -czf Unreal3.2.9.tar.gz Unreal3.2
Перемещаем наш архив обратно
# mv Unreal3.2.9.tar.gz /usr/ports/distfiles
Теперь, перед тем как приступить к установке, необходимо пересчитать контрольную сумму.
sendq 32768; /* кол. данных которые можно передать подряд */
recvq 32768; /* допустимый объем получить подряд данных */
};
/*
class servers {
pingfreq 90;
maxclients 10;
sendq 32768;
connfreq 100; /* только для серверов, секунды между попытками соединиться*/
};
*/
//Необходимый блок, задает кто именно может
//подключаться к данному серверу (можно сделать несколько блоков)
allow {
ip *@*;
hostname *@*;
class clients;
// password "gortorg";
maxperip 100;
};
//необходимый блок, определяет какие порты должен слушать сервер
listen *:6667 {
options {
clientsonly;
};
};
//рекомендованный блок, устанавливает пароль
//на перезапуск и остановку сервера
drpass {
restart "sdfSDFSDf4434DFfsdfsd53353";
die "sdf345t34gfrRertfrtERtertDRGd";
};
// спамфильтр
include "spamfilter.conf";
//запрещаем заходить на другие каналы
deny channel {
channel "#*";
reason "sorry";
redirect "#office";
warn off;
};
//разрешаем заходить на канал офиса
allow channel {
channel "#office";
};
//запрещаем передавать все файлы кроме тех, что в исключении
deny dcc {
filename "*";
reason "sorry";
soft no;
};
// исключения для файлов
allow dcc {
filename "*.zip";
};
allow dcc {
filename "*.txt";
};
allow dcc {
filename "*.doc*";
};
allow dcc {
filename "*.pdf";
};
allow dcc {
filename "*.rar";
};
allow dcc {
filename "*.xls*";
};
allow dcc {
filename "*.bmp";
};
allow dcc {
filename "*.gif";
};
allow dcc {
filename "*.png";
};
allow dcc {
filename "*.jpg";
};
allow dcc {
filename "*.tiff";
};
allow dcc {
filename "*.jpeg";
};
//официальный канал (показывается при команде /list)
official-channels {
"#office" {
topic "Добро пожаловать на канал МП Горторг";
};
};
4. Запускаем сервер
# /usr/local/etc/rc.d/unrealircd start
Для перезапуска
# /usr/local/etc/rc.d/unrealircd restart
Для остановки
# /usr/local/etc/rc.d/unrealircd stop
Если выдает ошибки, то разбираемся, часто ошибки связаны с тем, что были допущены опечатки в конфигурационном файле, на что указывает номер строки в сообщении об ошибки.
5. Добавляем сервер в автозапуск при старте системы