diff -uNrd ircd-ratbox-1.3-1/INSTALL ircd-1.4-FreedomBG/INSTALL
--- ircd-ratbox-1.3-1/INSTALL	Thu Nov 21 16:18:18 2002
+++ ircd-1.4-FreedomBG/INSTALL	Fri May 14 07:55:35 2004
@@ -1,266 +1,10 @@
-                            Hybrid INSTALL Document
-
-   $Id: INSTALL,v 7.34 2002/11/21 21:18:18 leeh Exp $
-
-   Copyright (c) 2001 by ircd-hybrid team
-   Copyright (c) 2002 ircd-ratbox development team
-
-     ----------------------------------------------------------------------
-
-   +------------------------------------------------------------------------+
-   | Note for those who dont bother reading docs                            |
-   |                                                                        |
-   | Reading INSTALL is now a must, as the old DPATH is now specified when  |
-   | configure is run.                                                      |
-   |                                                                        |
-   | - You now need to ./configure --prefix="/path/to/install/it"           |
-   |                                                                        |
-   |   Important: The old config format WILL NOT WORK. Please see point 6!  |
-   |                                                                        |
-   |   The old kline format WILL NOT WORK. Please see point 7!              |
-   +------------------------------------------------------------------------+
-
-     ----------------------------------------------------------------------
-
-                                  HOW TO BUILD
-
-   As of hybrid-4, the distribution uses GNU autoconf instead of the old
-   Config script. The Makefile has also been updated to include CFLAGS
-   defines for popular modern OSes.
-
-   1. 
-
-       Read the ChangeLog file to find out about the exciting new features in
-       this version. Other good reads are doc/whats-new.txt, BUGS,
-       doc/example.conf, and README.FIRST.
-
-       An example.conf for EFnet is in doc/ with the values "approved" on 12
-       December 2001.
-
-   2. 
-
-       Run the configure script. It will create include/setup.h and the
-       Makefiles to match your system. In ircd-ratbox, the paths are now handled
-       with the --prefix option to configure, not in config.h.
-       /usr/local/ircd is the default if no prefix is specified.
-
-       ./configure --prefix="/usr/local/ircd"
-
-         Note: There are some special optional parameters to the configure
-         script that some admins may wish to use.
-
-          * 
-
-            --enable-kqueue - Use the superior kqueue(2) system call as
-            opposed to the default poll(2). This is currently only available
-            on FreeBSD 4.1 or higher.
-
-          * 
-
-            --enable-devpoll - Enable the superior /dev/poll support on
-            Solaris. Linux /dev/poll is broken and will not work with this
-            option.
-
-          * 
-
-            --enable-rtsigio - Enable the superior Linux RealTime Signal I/O
-            system. This is currently only available on 2.4 Linux kernel
-            versions or later.
-
-          * 
-
-            --enable-openssl - Enable the openssl dependent crypto functions.
-            This will allow CHALLENGE to work and encrypted links. On systems
-            where the configure script can automatically detect OpenSSL, this
-            option is not necessary. If configure cannot find OpenSSL, you
-            must specify a path with this option
-            (--enable-openssl=/path/to/openssl)
-
-          * 
-
-            --enable-ipv6 - Enable IPv6 support.
-
-          * 
-
-            --disable-shared-modules - Disable module support. This option is
-            more secure, but reduces a lot of the flexibility in Hybrid 7.
-            This may need to be used on some systems without a working dl
-            library.
-
-          * 
-
-            --disable-assert - Disable some of the debugging code. This
-            should be used on all production servers for maximum speed and to
-            prevent cores from things that shouldn't normally happen.
-
-          * 
-
-            --enable-small-net - Tunes the server for smaller networks by
-            reducing the startup memory footprint. This should really only be
-            used for *small* networks, as this tends to be a performance hit
-            on larger networks.
-
-          * 
-
-            --with-nicklen - Sets the maximum NICK length. Note that this
-            must be consistant across your entire network.
-
-          * 
-
-            --with-maxclients - Sets the maximum number of clients support by
-            the server. Note that this also twiddles the HARD_FDLIMIT_ define
-            so it is no longer necessary to modify include/config.h for this.
-            If HARD_FDLIMIT_ ends up being larger that FD_SETSIZE when using
-            select() for your I/O loop, s_bsd_select.c will refuse to compile
-            (and tell you to use poll instead). Take this error's advice and
-            use --enable-poll or something a bit more efficient. You'll be
-            happier at the end of the day for it.
-
-   3. 
-
-       Look over the "include/config.h" file. This allows you to change the
-       few remaining hard coded options of how the ircd will operate. Most
-       admins will only have to change a few settings. USE_SYSLOG is the only
-       one that most admins will need to edit.
-
-         Note: Note that you must have permission by the sysadmin to send
-         messages to the system log files.
-
-         All other settings in config.h are not necessary to edit.
-
-   4. 
-
-       make should build ircd.
-
-   5. 
-
-       make install will install the server, modules(1), and tools in the
-       path defined in config.h and the prefix specified when configure was
-       run.
-
-       (1) Unless the server was compiled without module support.
-
-   6. 
-
-       If you wish to enable the user log, oper log, and failed oper log,
-       issue these commands at the shell prompt (in the prefix directory)
-
- $ touch logs/userlog
- $ touch logs/operlog
- $ touch logs/foperlog
-
-         Note: If you use different names in ircd.conf, you must 'touch' the
-         specific names.
-
-   7. 
-
-       If you are upgrading from Hybrid 5 or Hybrid 6, the config file has
-       changed drastically...
-
-       There is a utility to convert your old config file to the new format.
-       In prefix/bin there is something called "convertconf". Its usage is:
-       ./convertconf (old config file to convert) (converted file name)
-
-       Convertconf will NOT convert I: lines.  You must use "convertilines"
-       for this which contains a much superior method of conversion and
-       will group I: together under one auth {};.
-
-       Once this is done, move your new config to prefix/etc/ircd.conf and
-       EDIT IT! There are still things that need changing in the config,
-       including the fact that classes MUST be above auth/connect blocks!
-
-   8. 
-
-       If you are upgrading from Hybrid 5 or Hybrid 6, the kline file has
-       also changed...
-
-       There is a utility to convert the old kline configuration file to the
-       new format. In prefix/bin there is a program called "convertklines".
-       Its usage is: ./convertklines (old kline.conf filename) (new
-       kline.conf filename) (dline.conf filename).
-
-       Once this is done, move the new files into the prefix/etc/ directory
-       under their proper names. By default, the kline file is named
-       kline.conf and the dline file is named dline.conf.
-
-     ----------------------------------------------------------------------
-
-                                HOW TO GET HELP
-
-   Send Check or Money Order to... just kidding! You're on your own for
-   support. Try asking other ircd-ratbox admins on EFnet if you can't fix it
-   yourself. If you do fix anything, however, please send context or unified
-   diffs to ircd-ratbox@lists.ratbox.org so the fixes can be incorporated into
-   the next release of ircd-hybrid. If ratbox crashes on you, PLEASE contact
-   ircd-ratbox@lists.ratbox.org ASAP with a backtrace of the core.
-
-   DISCUSSION: There is a mailing list for discussion of ratbox issues,
-    To subscribe, visit:
-       http://lists.ratbox.org/cgi-bin/mailman/listinfo/ircd-ratbox
-       
-     ----------------------------------------------------------------------
-
-                                     NOTES
-
-   The best way to get a backtrace of the core is to follow this sequence of
-   instructions:
-
-   1. 
-
-       Change to the directory containing the core file
-
-   2. 
-
-       Run gdb on the binary and the core file. With an unmodified ircd-ratbox
-       installation, an example command line is below (in the /usr/local/ircd
-       directory)
-
- $ gdb bin/ircd ircd.core
-
-   3. 
-
-       At the "(gdb)" prompt, enter the command "bt"
-
-   4. 
-
-       Save the output of the backtrace command and send it to
-       ircd-ratbox@lists.ratbox.org
-
-   5. 
-
-       Be sure to save the ircd binary, the modules, and the core file in a
-       safe place in case the developers need to look deeper than a backtrace
-       provides.
+                                  How to INSTALL FreedomBG IRCd 
+1.Type (this line)				  
 
-     ----------------------------------------------------------------------
+./configure --prefix="/home/ircd/ircd2" --enable-FreedomBG --with-maxclients=200 && make && make install
 
-                                 OPENSSL NOTES
+2. Type (if you want)
 
-   Older FreeBSD machines sometimes have the obsolete ports version of
-   OpenSSL libcrypto in /usr/local/lib. When configure is used with
-   --enable-openssl, and libintl is detected in /usr/local/lib, the
-   /usr/local/lib directory will be searched BEFORE the system /usr/lib for
-   libraries by the linker. The linker may try to link to the old
-   /usr/local/lib libcrypto instead of the system /usr/lib libcrypto. Some
-   older versions may cause error messages similar to the following:
+make in contrib/ - [and than cp the *.so files in dir /module/special/ and uncoment #-lines in ircd.conf/]
 
- gcc -g -O2 -DIRCD_PREFIX=\"/home/wcampbel/ircd\" -Wl,-export-dynamic
- -L/usr/local/lib -o ircd blalloc.o channel.o vchannel.o class.o client.o
- dline_conf.o event.o fdlist.o fileio.o hash.o irc_string.o ircd.o ircdauth.o
- ircd_signal.o linebuf.o list.o listener.o m_error.o match.o memdebug.o
- modules.o motd.o mtrie_conf.o oldparse.o numeric.o packet.o parse.o res.o rsa.o
- restart.o s_auth.o s_bsd.o s_bsd_kqueue.o s_conf.o s_debug.o s_gline.o s_log.o
- s_misc.o s_serv.o s_stats.o s_user.o scache.o send.o sprintf_irc.o tools.o
- whowas.o lex.yy.o y.tab.o version.o -lintl -ldescrypt  -lcrypto -lfl
- rsa.o: In function `get_randomness':
- /home/wcampbel/dev/ircd-ratbox/src/rsa.c(.text+0x60): undefined reference to
- `RAND_pseudo_bytes'
- /usr/local/lib/libcrypto.so: undefined reference to `ERR_load_RSAREF_strings'
- /usr/local/lib/libcrypto.so: undefined reference to `RSA_PKCS1_RSAref'
- *** Error code 1
 
-   If this is the case, you may need to rerun configure without the
-   --enable-openssl option, manually edit src/Makefile and modules/Makefile
-   to put -L/usr/lib before the -L/usr/local/lib in LDFLAGS, or remove the
-   old OpenSSL from /usr/local, and recompile all applications that use
-   libcrypto to use the system one.
diff -uNrd ircd-ratbox-1.3-1/configure ircd-1.4-FreedomBG/configure
--- ircd-ratbox-1.3-1/configure	Wed Oct 15 14:06:49 2003
+++ ircd-1.4-FreedomBG/configure	Thu May 13 20:15:05 2004
@@ -61,6 +61,9 @@
 ac_help="$ac_help
   --enable-shared-modules      Enable shared modules.
   --disable-shared-modules     Disable shared modules. "
+ac_help="$ac_help
+
+  --enable-FreedomBG	       Enable FreedomBG's stuff. "
 
 # Initialize some variables set by options.
 # The variables have the same names as the options, with
@@ -2544,6 +2547,7 @@
 	echo "$ac_t""$cf_rlimit_type" 1>&6
 fi
 
+
 echo $ac_n "checking for OpenSSL""... $ac_c" 1>&6
 echo "configure:2549: checking for OpenSSL" >&5
 # Check whether --enable-openssl or --disable-openssl was given.
@@ -3760,9 +3764,9 @@
 fi
 
 
-ac_cv_nicklen="9"
+ac_cv_nicklen="15"
 ac_cv_maxclients="3000"
-ac_cv_topiclen="120"
+ac_cv_topiclen="150"
 
 # Check whether --with-nicklen or --without-nicklen was given.
 if test "${with_nicklen+set}" = set; then
@@ -4652,6 +4656,26 @@
 
 fi
 
+echo $ac_n "checking whether to enable FreedomBG stuff""... $ac_c" 1>&6
+echo "configure:4660: checking whether to enable FreedomBG stuff..." >&5
+# Check whether --enable-FreedomBG was given.
+if test "${enable_FreedomBG+set}" = set; then
+  enableval="$enable_FreedomBG"
+   cf_enable_FreedomBG=$enableval 
+else
+   cf_enable_FreedomBG="no" 
+fi
+
+if test "X$cf_enable_FreedomBG" != "Xno" ; then
+    FreedomBG_CONF="example.FreedomBG.conf"
+    FreedomBG_SRCS="m_svshint.c m_svsjoin.c m_svspart.c m_svsnick.c \\"
+    IRC_CFLAGS="$IRC_CFLAGS -DFreedomBG"
+    echo "$ac_t""enabled" 1>&6
+else
+    FreedomBG_SRCS=" "
+    FreedomBG_CONF=" "
+    echo "$ac_t""disabled" 1>&6
+fi
 
 
 
@@ -4841,6 +4865,8 @@
 s%@MODULES_DEFINE@%$MODULES_DEFINE%g
 s%@MODULES_LIBS@%$MODULES_LIBS%g
 s%@MOD_TARGET@%$MOD_TARGET%g
+s%@FreedomBG_SRCS@%$FreedomBG_SRCS%g
+s%@FreedomBG_CONF@%$FreedomBG_CONF%g
 s%@SSL_INCLUDES@%$SSL_INCLUDES%g
 s%@SSL_LIBS@%$SSL_LIBS%g
 s%@INCDEP@%$INCDEP%g
@@ -5089,3 +5115,7 @@
 fi
 
 echo "$ac_t""Server is configured with NICKLEN=$ac_cv_nicklen and MAX_CLIENTS=$ac_cv_maxclients" 1>&6
+
+if test "${enable_FreedomBG+set}" = set; then
+    echo "$ac_t""FreedomBG's stuff is ready!" 1>&6
+fi
\ No newline at end of file
diff -uNrd ircd-ratbox-1.3-1/contrib/spy_whois_notice.c ircd-1.4-FreedomBG/contrib/spy_whois_notice.c
--- ircd-ratbox-1.3-1/contrib/spy_whois_notice.c	Thu Jun 26 10:01:05 2003
+++ ircd-1.4-FreedomBG/contrib/spy_whois_notice.c	Fri May 14 05:47:40 2004
@@ -54,7 +54,7 @@
       IsOper(data->client_p) && (data->client_p != data->source_p) 
       && data->client_p->umodes & UMODE_SPY) 
     {
-      sendto_one(data->client_p, ":%s NOTICE %s :*** Notice -- %s (%s@%s) is doing a whois on you [%s]",
+      sendto_one(data->client_p, ":%s NOTICE %s :*** Notice -- %s (%s@%s) is doing a /whois on you [%s]",
                  me.name, data->client_p->name, data->source_p->name, data->source_p->username,
                  data->source_p->host, data->source_p->user->server);
     }
diff -uNrd ircd-ratbox-1.3-1/contrib/spy_whois_notice_global.c ircd-1.4-FreedomBG/contrib/spy_whois_notice_global.c
--- ircd-ratbox-1.3-1/contrib/spy_whois_notice_global.c	Thu Jun 26 10:01:05 2003
+++ ircd-1.4-FreedomBG/contrib/spy_whois_notice_global.c	Fri May 14 05:48:00 2004
@@ -54,7 +54,7 @@
       IsOper(data->client_p) && (data->client_p != data->source_p) 
       && data->client_p->umodes & UMODE_SPY) 
     {
-      sendto_one(data->client_p, ":%s NOTICE %s :*** Notice -- %s (%s@%s) is doing a whois on you [%s]",
+      sendto_one(data->client_p, ":%s NOTICE %s :*** Notice -- %s (%s@%s) is doing a remote /whois on you [%s]",
                  me.name, data->client_p->name, data->source_p->name, data->source_p->username,
                  data->source_p->host, data->source_p->user->server);
     }
diff -uNrd ircd-ratbox-1.3-1/demo-conf/AllCheck ircd-1.4-FreedomBG/demo-conf/AllCheck
--- ircd-ratbox-1.3-1/demo-conf/AllCheck	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/demo-conf/AllCheck	Fri May 14 07:46:50 2004
@@ -0,0 +1,9 @@
+#!/bin/sh
+# This is the crontab script for AllCheck
+# Powered by WebLinuxHelp Team
+#  
+
+###############################
+rm -f /home/user/ircd/core
+/home/user/ircd/bin/ircdCheck
+###############################
diff -uNrd ircd-ratbox-1.3-1/demo-conf/cluster.conf ircd-1.4-FreedomBG/demo-conf/cluster.conf
--- ircd-ratbox-1.3-1/demo-conf/cluster.conf	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/demo-conf/cluster.conf	Fri May 14 07:52:14 2004
@@ -0,0 +1,10 @@
+
+cluster {
+        name = "irc.evo.bg";
+        type = kline, unkline, xline;
+};
+
+cluster {
+        name = "irc.weblinuxhelp.com";
+        type = kline, unkline, xline;
+};
diff -uNrd ircd-ratbox-1.3-1/demo-conf/hubs.conf ircd-1.4-FreedomBG/demo-conf/hubs.conf
--- ircd-ratbox-1.3-1/demo-conf/hubs.conf	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/demo-conf/hubs.conf	Fri May 14 07:46:50 2004
@@ -0,0 +1,12 @@
+connect {
+        name = "irc.weblinuxhelp.com";
+        host = "62.178.40.225";
+        send_password = "FreedomBG";
+        encrypted = no;
+        accept_password = "FreedomBG";
+        hub_mask = "*"; 
+        #leaf_mask = "*"; 
+        class = "server";
+        port = 6667;
+        autoconn = yes;
+};
\ No newline at end of file
diff -uNrd ircd-ratbox-1.3-1/demo-conf/ircd.conf ircd-1.4-FreedomBG/demo-conf/ircd.conf
--- ircd-ratbox-1.3-1/demo-conf/ircd.conf	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/demo-conf/ircd.conf	Sat May 15 06:53:01 2004
@@ -0,0 +1,169 @@
+#####################################################
+#         20.05.2004 FreedomBG® IRC Server          #
+#####################################################
+
+serverinfo {
+        name = "irc.server.com";
+        description = "FreedomBG® IRC Server";
+        network_name = "FreedomBG Network";
+        network_desc = "FreedomBG Network";
+        hub = no;
+        #vhost = "62.172.22.222";
+};
+admin {
+        name = "nick";
+        description = "Server Team®";
+        email = "admin@server.com";
+};
+logging {
+        log_level = L_INFO;
+        fname_userlog = "logs/userlog";
+        fname_operlog = "logs/operlog";
+        fname_foperlog = "logs/foperlog";
+};
+class "users" {
+        ping_time = 2 minutes;
+        number_per_ident = 5;
+        number_per_ip = 8;
+        number_per_ip_global = 10;
+        max_number = 400;
+        sendq = 100 kbytes;
+};
+class "restricted" {
+        ping_time = 1 minute 30 seconds;
+        number_per_ip = 3;
+        max_number = 100;
+        sendq = 60kb;
+};
+class "opers" {
+        ping_time = 5 minutes;
+        number_per_ip = 10;
+        max_number = 100;
+        sendq = 100kbytes;
+};
+class "server" {
+        ping_time = 5 minutes;
+        connectfreq = 5 minutes;
+        max_number = 1;
+        sendq=10 megabytes;
+};
+listen {
+#       host = "62.178.40.225";
+        port = 6667; 
+};
+
+################### INCLUDE CONF ##########################
+
+.include "/home/user/ircd/etc/spoofs.conf"
+.include "/home/user/ircd/etc/opers.conf"
+.include "/home/user/ircd/etc/cluster.conf"
+.include "/home/user/ircd/etc/shared.conf"
+.include "/home/user/ircd/etc/hubs.conf"
+.include "/home/user/ircd/etc/qlines.conf"
+.include "/home/user/ircd/etc/spam.conf"
+
+###########################################################
+
+auth {
+        user = "*@*";
+        class = "users";
+        no_tilde = yes;
+};
+
+######################
+# DON'T TOUCH HERE ! #
+######################
+
+channel {
+        use_invex = yes;
+        use_except = yes;
+        use_knock = yes;
+        knock_delay = 5 minutes;
+        knock_delay_channel = 1 minute;
+        max_chans_per_user = 15;
+        quiet_on_ban = no;
+        max_bans = 25;
+        persist_time = 0;
+        default_split_user_count = 0;
+        default_split_server_count = 0;
+        no_create_on_split = no;
+        no_join_on_split = no;
+        no_oper_resvs = no;
+};
+serverhide {
+        flatten_links = no;
+        links_delay = 5 minutes;
+        hidden = no;
+        disable_hidden = no;
+        hide_servers = no;
+        disable_remote_commands = no;
+        disable_local_channels = no;
+};
+general {
+        tkline_expire_notices = yes;
+        default_floodcount = 8;
+        failed_oper_notice = yes;
+        dots_in_ident=2;
+        dot_in_ip6_addr = no;
+        min_nonwildcard = 4;
+        max_accept = 20;
+        anti_nick_flood = yes;
+        max_nick_time = 60 seconds;
+        max_nick_changes = 2;
+        anti_spam_exit_message_time = 15 minutes;
+        ts_warn_delta = 99999  seconds; 
+        ts_max_delta = 99999  seconds; 
+        client_exit = yes;
+        kline_with_reason = yes;
+        kline_with_connection_closed = no;
+        kline_delay = 0 seconds;
+        non_redundant_klines = yes;
+        warn_no_nline = yes;
+        stats_o_oper_only=yes;
+        stats_P_oper_only=no;
+        stats_i_oper_only=yes;
+        stats_k_oper_only=masked;
+        caller_id_wait = 1 minute;
+        pace_wait_simple = 1 second;
+        pace_wait = 30 seconds;
+        short_motd = no;
+        ping_cookie = no;
+        connect_timeout = 30 seconds;
+        disable_auth = no;
+        no_oper_flood = yes;
+        glines = yes;
+        gline_time = 1 day;
+        idletime = 0;
+        max_targets = 4;
+        client_flood = 20;
+        use_help = yes;
+        use_whois_actually = yes;
+        message_locale = "custom";
+        oper_only_umodes = bots, cconn, debug, full, skill, nchange,
+                     rej, spy, external, operwall, locops, unauth;
+        oper_umodes = locops, servnotice, operwall, wallop, spy, cconn, skill, rej, unauth, bots, external, debug;
+};
+
+modules {
+        path = "/home/ircd/ircd/modules";
+        path = "/home/ircd/ircd/modules/autoload";
+        #path = "/home/ircd/ircd/modules/special";
+        #module = "m_svsnick.so";
+        #module = "m_svsjoin.so";
+        #module = "m_mode.so";
+        #module = "spy_whois_notice.so";
+        #module = "spy_whois_notice_global.so";
+        #module = "spy_trace_notice.so";
+        #module = "spy_motd_notice.so";
+        #module = "spy_links_notice.so";
+        #module = "spy_info_notice.so";
+        #module = "spy_admin_notice.so";
+        #module = "spy_stats_notice.so";
+        #module = "m_omode.so";
+        #module = "m_opme.so";
+        #module = "m_ojoin.so";
+        #module = "m_force.so";
+        #module = "m_okick.so";
+        #module = "m_mkpasswd.so";
+};
+
diff -uNrd ircd-ratbox-1.3-1/demo-conf/ircd.motd ircd-1.4-FreedomBG/demo-conf/ircd.motd
--- ircd-ratbox-1.3-1/demo-conf/ircd.motd	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/demo-conf/ircd.motd	Fri May 14 07:46:50 2004
@@ -0,0 +1,8 @@
+                         ..:: Server Team® ::.. 
+==========================================================================                                                      
+      Server Policy:  No FLOOD , SPAM , ABUSE & ADVERTISE !
+==========================================================================
+      You can connect on port 6667 !    Server Administrator: nick
+==========================================================================
+                 For more INFO:   admin@server.com
+==========================================================================
diff -uNrd ircd-ratbox-1.3-1/demo-conf/opers.conf ircd-1.4-FreedomBG/demo-conf/opers.conf
--- ircd-ratbox-1.3-1/demo-conf/opers.conf	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/demo-conf/opers.conf	Fri May 14 07:46:50 2004
@@ -0,0 +1,201 @@
+###########################################################
+################ WebLinuxHelp®'s Opers ####################
+###########################################################
+
+         operator "nick" {
+         user = "*@backup.host.cx";
+         encrypted = yes;
+         password = "3TVoMkLfxJuWQ";
+         class = "opers";
+         flags = global_kill,
+                 remote,
+                 kline,
+                 unkline,
+                 gline,
+                 nick_changes,
+                 xline,
+                 operwall;
+ };
+  
+operator "----------- * BackUp Operators * -------------" {
+        user =  "*@*";
+        encrypted = yes;
+        password = "no-PASSWORD-detected";
+        class = "opers";
+        flags = global_kill;
+};
+
+operator "bot-nick" {
+        user =  "*ident@spoof.server.com";
+        encrypted = yes;
+        password = "$1$8U20ENMp$/WUHpuqW7he69T0IWyjXI/";
+        class = "opers";
+        flags = remote,
+                unkline,
+                kline,
+                nick_changes,
+                xline;
+};
+operator "----------- * TCM & Bots * -------------" {
+        user =  "*@*";
+        encrypted = yes;
+        password = "no-PASSWORD-detected";
+        class = "opers";
+        flags = global_kill;
+};
+
+operator "local-3" {
+        user =  "*@local-3.local.irc.server.com";
+        encrypted = yes;
+        password = "zYBk9wE92VZhQ";
+        class = "opers";
+        flags = remote,
+                unkline,
+                kline,
+                nick_changes,
+                xline,
+                operwall;
+};
+
+operator "local-2" {
+        user =  "*@local-2.local.irc.server.com";
+        encrypted = yes;
+        password = "WfxxuriOJnm0U";
+        class = "opers";
+        flags = remote,
+                unkline,
+                kline,
+                nick_changes,
+                xline,
+                operwall;
+};
+
+operator "local-1" {
+        user =  "*@local-1.local.irc.server.com";
+        encrypted = yes;
+        password = "$1$h8P52loq$AY0zZfT0ID3jyzAXaELjj0";
+        class = "opers";
+        flags = remote,
+                unkline,
+                kline,
+                nick_changes,
+                xline,
+                operwall;
+};
+
+operator "----------- * Local Operators * -------------" {
+        user =  "*@*";
+        encrypted = yes;
+        password = "no-PASSWORD-detected";
+        class = "opers";
+        flags = global_kill;
+};
+
+operator "global-2" {
+        user =  "*@global-2.server.com";
+        encrypted = yes;
+        password = "$1$RMzaWBc8$KIIsMSe27PbXdxctBEdYZ1";
+        class = "opers";
+        flags = global_kill,
+                remote,
+                kline,
+                unkline,
+                gline,
+                nick_changes,
+                xline,
+                operwall;
+};
+
+operator "ssh" {
+        user =  "*@global-1.server.com";
+        encrypted = yes;
+        password = "lYdNGaWfXOuD.";
+        class = "opers";
+        flags = global_kill,
+                remote,
+                kline,            
+                unkline,
+                gline,
+                nick_changes,
+                xline,
+                operwall;
+};
+operator "----------- * Global Operators * -------------" {
+        user =  "*@*";
+        encrypted = yes;
+        password = "no-PASSWORD-detected";
+        class = "opers";
+        flags = global_kill;
+};
+operator "admin" {
+        user = "*@admin.server.com";
+        encrypted = yes;
+        password = "$1$Ah/kzKLc$SKrQ5glaL044qRNiVFQDw1";
+        class = "opers";
+        flags = global_kill,
+                remote,
+                kline,        
+                unkline,
+                gline,
+                nick_changes,
+                die,
+                rehash,
+                admin,
+                xline,
+                operwall;
+};
+operator "----------- * Owner * -------------" {
+        user =  "*@*";
+        encrypted = yes;
+        password = "no-PASSWORD-detected";
+        class = "opers";
+        flags = global_kill;
+};
+operator "owner" {
+        user = "*@owner.server.com";
+        encrypted = yes;
+        password = "$1$Ah/kzKLc$SKrQ5glaL044qRNiVFQDw1";
+        class = "opers";
+        flags = global_kill,
+                remote,
+                kline,        
+                unkline,
+                gline,
+                nick_changes,
+                die,
+                rehash,
+                admin,
+                xline,
+                operwall;
+};
+operator "----------- * Main Administrator * -------------" {
+        user =  "*@*";
+        encrypted = yes;
+        password = "no-PASSWORD-detected";
+        class = "opers";
+        flags = global_kill;
+};
+operator "==================================================" {
+        user =  "*@*";
+        encrypted = yes;
+        password = "no-PASSWORD-detected";
+        class = "opers";
+        flags = global_kill;
+};
+
+operator "----------- * irc.server.com * -------------" {
+        user =  "*@*";
+        encrypted = yes;
+        password = "no-PASSWORD-detected";
+        class = "opers";
+        flags = global_kill;
+};
+operator "==================================================" {
+        user =  "*@*";
+        encrypted = yes;
+        password = "no-PASSWORD-detected";
+        class = "opers";
+        flags = global_kill;
+};
+
+
diff -uNrd ircd-ratbox-1.3-1/demo-conf/qlines.conf ircd-1.4-FreedomBG/demo-conf/qlines.conf
--- ircd-ratbox-1.3-1/demo-conf/qlines.conf	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/demo-conf/qlines.conf	Fri May 14 07:46:50 2004
@@ -0,0 +1,24 @@
+resv {
+        reason = "Services nick";
+        nick = "nickserv";
+        nick = "chanserv";
+        nick = "operserv";
+        nick = "seenserv";
+        nick = "memoserv";
+        nick = "statserv";
+        nick = "splitserv";
+        nick = "AS";
+        nick = "CS";
+        nick = "OS";
+        nick = "NS";
+        nick = "MS";
+        nick = "SS";
+        nick = "Seen";
+        nick = "Global";
+        nick = "Gliner";
+        nick = "X";
+        nick = "Y";
+        nick = "SockClean";
+        nick = "GlineServ";
+};
+
diff -uNrd ircd-ratbox-1.3-1/demo-conf/shared.conf ircd-1.4-FreedomBG/demo-conf/shared.conf
--- ircd-ratbox-1.3-1/demo-conf/shared.conf	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/demo-conf/shared.conf	Fri May 14 05:37:39 2004
@@ -0,0 +1,25 @@
+shared {
+        name = "FreedomBG.Gliner";
+        type = all;
+};
+shared {
+        name = "FreedomBG.SocksCleaner";
+        type = all;
+};
+shared {
+        name = "FreedomBG.Services";
+        type = all;
+};
+
+shared {
+        name = "FreedomBG.Stats";
+        type = all;
+};
+
+shared {
+        name = "FreedomBG.NetLink";
+        type = all;
+};
+
+
+
diff -uNrd ircd-ratbox-1.3-1/demo-conf/spam.conf ircd-1.4-FreedomBG/demo-conf/spam.conf
--- ircd-ratbox-1.3-1/demo-conf/spam.conf	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/demo-conf/spam.conf	Fri May 14 07:46:50 2004
@@ -0,0 +1,34 @@
+gecos {
+        name = "*sex*";
+        reason = "Possible spambot";
+        action = warn;
+};
+
+gecos {
+        name = "*BitchX*";
+        reason = "Possible Lamer";
+        action = warn;
+};
+
+gecos {
+        name = "*http:*";
+        reason = "Possible spambot";
+        action = reject;
+};
+
+gecos {
+        name = "*www.*";
+        reason = "Possible spambot";
+        action = reject;
+};
+
+
+spamcheck {
+          adv_text = "*http*";
+          adv_text = "*ftp*";
+          adv_text = "*join #*";
+          adv_text = "*elate v #*";
+          adv_text = "*come to #*";
+          adv_text = "*www.*";
+};
+
diff -uNrd ircd-ratbox-1.3-1/demo-conf/spoofs.conf ircd-1.4-FreedomBG/demo-conf/spoofs.conf
--- ircd-ratbox-1.3-1/demo-conf/spoofs.conf	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/demo-conf/spoofs.conf	Fri May 14 07:46:50 2004
@@ -0,0 +1,15 @@
+########################################################
+################ FreedomBG®'s Spoofs ###################
+########################################################
+
+################### OPERS Spoofs ##########################
+auth {
+        user = "*ident@62.172.22.222";
+        password = "parola";
+        spoof = "admin.server.com";
+        flags = kline_exempt, exceed_limit, gline_exempt;
+        no_tilde = yes;
+	class = "opers";
+};
+
+###########################################################
diff -uNrd ircd-ratbox-1.3-1/doc/Makefile.in ircd-1.4-FreedomBG/doc/Makefile.in
--- ircd-ratbox-1.3-1/doc/Makefile.in	Fri Sep 13 18:20:51 2002
+++ ircd-1.4-FreedomBG/doc/Makefile.in	Thu May 13 20:37:27 2004
@@ -30,7 +30,7 @@
 mandir          = @prefix@/man8
 MANPAGES        = ircd.8
 
-CONFS		= example.conf example.efnet.conf
+CONFS		= example.conf example.efnet.conf @FreedomBG_CONF@
 DEFAULTCONFS	= kline.conf dline.conf xline.conf resv.conf
 DEFAULTCONFSCP  = ircd.motd
 
diff -uNrd ircd-ratbox-1.3-1/doc/example.FreedomBG.conf ircd-1.4-FreedomBG/doc/example.FreedomBG.conf
--- ircd-ratbox-1.3-1/doc/example.FreedomBG.conf	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/doc/example.FreedomBG.conf	Mon May 17 03:37:36 2004
@@ -0,0 +1,3 @@
+Pls copy all files from demo-conf/ to etc/ ! Thanks ! :+)
+
+PS: Edit them ! :+) /FreedomBG Team/
diff -uNrd ircd-ratbox-1.3-1/doc/ircd.motd ircd-1.4-FreedomBG/doc/ircd.motd
--- ircd-ratbox-1.3-1/doc/ircd.motd	Thu Jun 26 10:01:14 2003
+++ ircd-1.4-FreedomBG/doc/ircd.motd	Thu May 13 20:37:43 2004
@@ -1,2 +1,8 @@
-This is the default ircd-ratbox MOTD.  You could replace it, but then noone
-would find out how much you love goats..
+   Welcome to FreedomBG network and thank you for using this server!
+-------------------------------------------------------------------
+Flood, SPAM, any kind of abuse & illegal activities concerning the
+correct functionality of the server/network or any legal rights,
+property or trademarks are forbidden. This may cause you to be 
+banned from the server or the entire network!
+-------------------------------------------------------------------
+     We hope that you'll enjoy your stay - FreedomBG Network Team
\ No newline at end of file
diff -uNrd ircd-ratbox-1.3-1/help/opers/cmode ircd-1.4-FreedomBG/help/opers/cmode
--- ircd-ratbox-1.3-1/help/opers/cmode	Tue Jul  8 10:12:41 2003
+++ ircd-1.4-FreedomBG/help/opers/cmode	Thu May 13 20:29:45 2004
@@ -12,6 +12,15 @@
      +i     - Invite only.  Users need to be /invite'd or match a +I to
               join the channel.
 
+ * The following modes are available only when compiled with --enable-FreedomBG *
+     +q	    - Join filter. Allows only NS identified users to join channel.
+     +z	    - No Repeat. Forbids repeating in the channel.
+     +H     - No SPAM. Forbits messages containing SPAM phrases.
+     +M     - Users with unregistered nicknames can not talk in the channel.
+     +C     - CTCP filter. CTCP messages are allowed only from +v/+o users.
+     +O     - Opers only. Only IRC operators can join the channel.
+     +A     - Admins only. Only IRC server admins can join the channel.
+     
 WITH PARAMETERS:
      +k     - Key.  Requires users to issue /join #channel KEY to join.
               PARAMS: /mode #channel +k key
diff -uNrd ircd-ratbox-1.3-1/help/users/umode ircd-1.4-FreedomBG/help/users/umode
--- ircd-ratbox-1.3-1/help/users/umode	Tue Nov 20 22:22:51 2001
+++ ircd-1.4-FreedomBG/help/users/umode	Thu May 13 20:29:10 2004
@@ -8,3 +8,8 @@
                   Use the /oper command to attain this.
          +i     - Designates this client 'invisible'.
          +g     - "caller id" mode only allow accept clients to message you
+
+ * The following modes are available only when compiled with --enable-FreedomBG *
+	 +S	- Silence mode allows only NS identified clients to message you
+	 +T	- Translation mode, translates ISO-8859-5 cyrillic to latin
+	 +Y	- Translation mode, translates windows-1251 cyrillic to latin
\ No newline at end of file
diff -uNrd ircd-ratbox-1.3-1/include/channel_mode.h ircd-1.4-FreedomBG/include/channel_mode.h
--- ircd-ratbox-1.3-1/include/channel_mode.h	Thu Nov  6 19:00:37 2003
+++ ircd-1.4-FreedomBG/include/channel_mode.h	Thu May 13 20:22:27 2004
@@ -87,6 +87,24 @@
 #define MODE_INVEX	0x2000
 #define MODE_HIDEOPS    0x4000
 
+#ifdef FreedomBG
+
+#define MODE_NOCOLOR        0x1000  
+#define MODE_JOINF	    0x10000
+#define MODE_NOCTCP	    0x20000
+#define MODE_NOTALK	    0x40000
+#define MODE_NOSPAM	    0x80000
+#define MODE_NOREPEAT       0x100000
+
+#define MODE_ADMONLY	0x0200
+#define MODE_OPRONLY	0x8000
+
+#define NoColorChannel(x)       ((x) && ((x)->mode.mode & MODE_NOCOLOR))
+#define NoRepeatChannel(x)      ((x) && ((x)->mode.mode & MODE_NOREPEAT))
+#define AdminOnlyChan(x)	((x) && ((x)->mode.mode & MODE_ADMONLY))
+#define OpersOnlyChan(x)	((x) && ((x)->mode.mode & MODE_OPRONLY))
+#endif
+
 /*
  * mode flags which take another parameter (With PARAmeterS)
  */
diff -uNrd ircd-ratbox-1.3-1/include/client.h ircd-1.4-FreedomBG/include/client.h
--- ircd-ratbox-1.3-1/include/client.h	Thu Nov 27 15:20:10 2003
+++ ircd-1.4-FreedomBG/include/client.h	Thu May 13 20:23:50 2004
@@ -21,7 +21,7 @@
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
  *
- *  $Id: client.h,v 7.206.2.7 2003/11/27 20:20:10 leeh Exp $
+ *  $Id: client.h,v 9.33 2004/05/27 22:11:12 castello Exp $
  */
 
 #ifndef INCLUDED_client_h
@@ -69,6 +69,10 @@
 {
 	dlink_list channel;	/* chain of channel pointer blocks */
 	dlink_list invited;	/* chain of invite pointer blocks */
+#ifdef FreedomBG
+	dlink_list nokick;      /* chain of channels where the user can't be kicked */
+	dlink_list    repeat;         /* chain of last phrases per channel blocks */
+#endif
 	char *away;		/* pointer to away message */
 	time_t last_away;	/* Away since... */
 	time_t last;
@@ -89,6 +93,14 @@
 	dlink_list users;
 };
 
+#ifdef FreedomBG
+struct Repeat {
+  struct Channel *chptr;      /* last phrase block */
+  char *text;
+  time_t lastphrase;
+};
+#endif
+
 struct SlinkRpl
 {
 	int command;
@@ -126,6 +138,10 @@
 	unsigned int umodes;	/* opers, normal users subset */
 	unsigned int flags;	/* client flags */
 	unsigned int flags2;	/* ugh. overflow */
+    
+  #ifdef FreedomBG
+	unsigned int      svsflags;   
+  #endif
 
 	int hopcount;		/* number of servers to this 0 = local */
 	unsigned short status;	/* Client type */
@@ -384,6 +400,15 @@
 #define UMODE_OPER         0x20000	/* Operator */
 #define UMODE_ADMIN        0x40000	/* Admin on server */
 
+#ifdef FreedomBG
+#define FLAGS_SILENCE      0x400000 
+#define FLAGS_TRANSWIN     0x1000000 
+#define FLAGS_TRANSISO     0x2000000 
+#define FLAGS_SVS_IDENT    0x00100  
+#define FLAGS_SVS_ADMIN    0x00200  
+#define FLAGS_SVS_GLINER   0x00400
+#endif 
+
 #define UMODE_ALL	   UMODE_SERVNOTICE
 
 
@@ -419,13 +444,27 @@
 #define FLAGS2_FLOODDONE        0x800000
 #define FLAGS2_EXEMPTSPAMBOT	0x1000000
 
+#ifdef FreedomBG
+#define SEND_UMODES  (UMODE_INVISIBLE | UMODE_OPER | UMODE_WALLOP | \
+                      UMODE_ADMIN | UMODE_CALLERID | FLAGS_SILENCE | \
+				      FLAGS_TRANSWIN | FLAGS_TRANSISO)
+#define ALL_UMODES   (SEND_UMODES | UMODE_SERVNOTICE | UMODE_CCONN | \
+                      UMODE_REJ | UMODE_SKILL | UMODE_FULL | UMODE_SPY | \
+                      UMODE_NCHANGE | UMODE_OPERWALL | UMODE_DEBUG | \
+                      UMODE_BOTS | UMODE_EXTERNAL | UMODE_LOCOPS | \
+ 					  UMODE_ADMIN | UMODE_UNAUTH | UMODE_CALLERID | UMODE_OPERSPY | \
+					  FLAGS_SILENCE | FLAGS_TRANSWIN | FLAGS_TRANSISO)
+#else
 #define SEND_UMODES  (UMODE_INVISIBLE | UMODE_OPER | UMODE_WALLOP | \
                       UMODE_ADMIN)
 #define ALL_UMODES   (SEND_UMODES | UMODE_SERVNOTICE | UMODE_CCONN | \
                       UMODE_REJ | UMODE_SKILL | UMODE_FULL | UMODE_SPY | \
                       UMODE_NCHANGE | UMODE_OPERWALL | UMODE_DEBUG | \
                       UMODE_BOTS | UMODE_EXTERNAL | UMODE_LOCOPS | \
- 		      UMODE_ADMIN | UMODE_UNAUTH | UMODE_CALLERID | UMODE_OPERSPY)
+ 					  UMODE_ADMIN | UMODE_UNAUTH | UMODE_CALLERID | UMODE_OPERSPY)
+#endif /* FreedomBG */
+
+
 
 #define FLAGS_ID     (FLAGS_NEEDID | FLAGS_GOTID)
 
@@ -494,12 +533,32 @@
 #define SetCallerId(x)		((x)->umodes |= UMODE_CALLERID)
 #define IsSetCallerId(x)	((x)->umodes & UMODE_CALLERID)
 
+#ifdef FreedomBG
+#define HasSilence(x)           ((x)->umodes & FLAGS_SILENCE)
+#define SetSilence(x)           ((x)->umodes |= FLAGS_SILENCE)
+#define IsSetTransWin(x)        ((x)->umodes & FLAGS_TRANSWIN)
+#define IsSetTransISO(x)        ((x)->umodes & FLAGS_TRANSISO)
+#endif
+
 #define SetNeedId(x)            ((x)->flags |= FLAGS_NEEDID)
 #define IsNeedId(x)             (((x)->flags & FLAGS_NEEDID) != 0)
 
 #define SetGotId(x)             ((x)->flags |= FLAGS_GOTID)
 #define IsGotId(x)              (((x)->flags & FLAGS_GOTID) != 0)
 
+#ifdef FreedomBG
+#define IsNSId(x)               ((x)->svsflags & FLAGS_SVS_IDENT)
+#define SetNSId(x)              ((x)->svsflags |= FLAGS_SVS_IDENT)
+#define ClearNSId(x)            ((x)->svsflags &= ~FLAGS_SVS_IDENT)
+
+#define IsOSId(x)               ((x)->svsflags & FLAGS_SVS_ADMIN)
+#define SetOSId(x)              ((x)->svsflags |= FLAGS_SVS_ADMIN)
+#define ClearOSId(x)            ((x)->svsflags &= ~FLAGS_SVS_ADMIN)
+#define SetGLId(x)		((x)->svsflags |= FLAGS_SVS_GLINER)
+#define IsGLId(x)		((x)->svsflags & FLAGS_SVS_GLINER)
+#define ClearGLId(x)		((x)->svsflags &= ~FLAGS_SVS_GLINER);
+#endif
+
 /*
  * flags2 macros.
  */
@@ -591,5 +650,11 @@
 extern struct User *make_user(struct Client *);
 extern struct Server *make_server(struct Client *);
 
+#ifdef FreedomBG
+extern char *translate(struct Client *client_p, char *buf);
+void add_nokick_chan(struct Client * cptr, char * chan);
+void del_nokick_chan(struct Client * cptr, char * chan);
+void clear_nokick_list(struct Client * cptr);
+#endif
 
 #endif /* INCLUDED_client_h */
diff -uNrd ircd-ratbox-1.3-1/include/defaults.h ircd-1.4-FreedomBG/include/defaults.h
--- ircd-ratbox-1.3-1/include/defaults.h	Sat Sep  6 16:18:11 2003
+++ ircd-1.4-FreedomBG/include/defaults.h	Thu May 13 20:18:52 2004
@@ -50,8 +50,8 @@
 #define TS_WARN_DELTA_MIN     10	/* min value for ts_warn_delta */
 #define TS_WARN_DELTA_DEFAULT 30	/* default for ts_warn_delta */
 /* ServerInfo default values */
-#define NETWORK_NAME_DEFAULT "EFnet"	/* default for network_name */
-#define NETWORK_DESC_DEFAULT "Eris Free Network"	/* default for network_desc */
+#define NETWORK_NAME_DEFAULT "FreedomBG"	/* default for network_name */
+#define NETWORK_DESC_DEFAULT "FreedomBG Network"	/* default for network_desc */
 /* General defaults */
 #define CLIENT_FLOOD_DEFAULT 20	/* default for client_flood */
 #define CLIENT_FLOOD_MAX     2000
diff -uNrd ircd-ratbox-1.3-1/include/modules.h ircd-1.4-FreedomBG/include/modules.h
--- ircd-ratbox-1.3-1/include/modules.h	Tue Jul  8 10:19:07 2003
+++ ircd-1.4-FreedomBG/include/modules.h	Thu May 13 20:18:25 2004
@@ -137,6 +137,11 @@
 extern struct Message squit_msgtab;
 extern struct Message stats_msgtab;
 extern struct Message svinfo_msgtab;
+#ifdef FreedomBG
+extern struct Message svshint_msgtab;
+extern struct Message svsjoin_msgtab;
+extern struct Message svsnick_msgtab;
+#endif
 extern struct Message testline_msgtab;
 extern struct Message time_msgtab;
 extern struct Message topic_msgtab;
diff -uNrd ircd-ratbox-1.3-1/include/numeric.h ircd-1.4-FreedomBG/include/numeric.h
--- ircd-ratbox-1.3-1/include/numeric.h	Sun Oct 12 08:50:43 2003
+++ ircd-1.4-FreedomBG/include/numeric.h	Thu May 13 20:16:24 2004
@@ -21,7 +21,7 @@
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
  *
- *  $Id: numeric.h,v 7.39.2.2 2003/10/12 12:50:43 leeh Exp $
+ *  $Id: numeric.h,v 9.1 2005/05/27 11:53:13 castello Exp $
  */
 
 #ifndef INCLUDED_numeric_h
@@ -117,6 +117,12 @@
 #define RPL_LOCALUSERS       265
 #define RPL_GLOBALUSERS      266
 
+#ifdef FreedomBG
+#define RPL_IDENTUSERS       267        
+#define RPL_OSIDUSERS        268	
+#define RPL_GLIDUSERS        269	
+#endif
+
 #define RPL_ACCEPTLIST	     281
 #define RPL_ENDOFACCEPT      282
 
@@ -151,6 +157,12 @@
 #define RPL_LISTEND          323
 #define RPL_CHANNELMODEIS    324
 
+#ifdef FreedomBG
+#define RPL_SILENCE          325
+#define RPL_WHOISSVSHINT     326          
+#define RPL_OS_ID            327        
+#endif
+
 #define RPL_CREATIONTIME     329
 
 #define RPL_NOTOPIC          331
@@ -220,6 +232,10 @@
 #define ERR_NOTOPLEVEL       413
 #define ERR_WILDTOPLEVEL     414
 
+#ifdef FreedomBG
+#define ERR_SERV_NICK        415       
+#endif
+
 #define ERR_TOOMANYMATCHES   416
 
 #define ERR_UNKNOWNCOMMAND   421
@@ -243,6 +259,10 @@
 
 #define ERR_NOTREGISTERED    451
 
+#ifdef FreedomBG
+#define ERR_NOREPEATING	     452
+#endif
+
 #define ERR_ACCEPTFULL       456
 #define ERR_ACCEPTEXIST      457
 #define ERR_ACCEPTNOT        458
@@ -255,6 +275,11 @@
 #define ERR_YOUWILLBEBANNED  466
 #define ERR_KEYSET           467
 
+#ifdef FreedomBG
+#define ERR_ADMINCHAN        469  // +A chan mode err
+#define ERR_OPERCHAN         470  // +O chan mode err
+#endif
+
 #define ERR_CHANNELISFULL    471
 #define ERR_UNKNOWNMODE      472
 #define ERR_INVITEONLYCHAN   473
@@ -271,7 +296,18 @@
 #define ERR_RESTRICTED       484
 #define ERR_BANNEDNICK       485
 
+#ifdef FreedomBG
+#define ERR_NOCOLOR          489
+#define ERR_JOINF            490
+#endif
+
 #define ERR_NOOPERHOST       491
+
+#ifdef FreedomBG
+#define ERR_NOCTCP           492
+#define ERR_NOTALK           493
+#define ERR_NOSPAM           494
+#endif
 
 #define ERR_UMODEUNKNOWNFLAG 501
 #define ERR_USERSDONTMATCH   502
diff -uNrd ircd-ratbox-1.3-1/include/patchlevel.h ircd-1.4-FreedomBG/include/patchlevel.h
--- ircd-ratbox-1.3-1/include/patchlevel.h	Fri Jan  9 15:05:13 2004
+++ ircd-1.4-FreedomBG/include/patchlevel.h	Thu May 13 20:22:05 2004
@@ -21,9 +21,12 @@
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
  *
- *  $Id: patchlevel.h,v 7.50.2.15 2004/01/09 20:05:13 androsyn Exp $
+ *  $Id: patchlevel.h,v 9.2 2004/05/11 21:15:03 castello Exp $
  */
-
+#ifndef FreedomBG
 #ifndef PATCHLEVEL
-#define PATCHLEVEL   "ircd-ratbox-1.3-1"
+#define PATCHLEVEL   "ircd-1.3-stable-FreedomBG"
+#endif
+#else
+#define PATCHLEVEL   "ircd-1.4-stable-FreedomBG"
 #endif
diff -uNrd ircd-ratbox-1.3-1/include/s_conf.h ircd-1.4-FreedomBG/include/s_conf.h
--- ircd-ratbox-1.3-1/include/s_conf.h	Fri Dec 19 12:32:49 2003
+++ ircd-1.4-FreedomBG/include/s_conf.h	Thu May 13 20:19:16 2004
@@ -444,6 +444,11 @@
 
 extern int yylex(void);
 
+#ifdef FreedomBG
+extern void add_adv_text(void *);
+extern int IsAdvQuit(char *);
+#endif
+
 extern unsigned long cidr_to_bitmask[];
 
 extern char conffilebuf[IRCD_BUFSIZE + 1];
diff -uNrd ircd-ratbox-1.3-1/include/s_misc.h ircd-1.4-FreedomBG/include/s_misc.h
--- ircd-ratbox-1.3-1/include/s_misc.h	Sat Jun 28 05:22:56 2003
+++ ircd-1.4-FreedomBG/include/s_misc.h	Thu May 13 20:22:47 2004
@@ -42,5 +42,11 @@
 #define _GMKv(x)  ( (x > _1TER) ? (float)(x/_1TER) : ((x > _1GIG) ? \
                (float)(x/_1GIG) : ((x > _1MEG) ? (float)(x/_1MEG) : (float)x)))
 
+#ifdef FreedomBG
+
+extern long     s_check( char * szName );
+
+extern char *strip_color(const char *, int);
+#endif
 
 #endif
diff -uNrd ircd-ratbox-1.3-1/include/s_serv.h ircd-1.4-FreedomBG/include/s_serv.h
--- ircd-ratbox-1.3-1/include/s_serv.h	Thu Nov  6 19:00:37 2003
+++ ircd-1.4-FreedomBG/include/s_serv.h	Thu May 13 20:23:17 2004
@@ -21,7 +21,7 @@
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
  *
- *  $Id: s_serv.h,v 7.80.2.3 2003/11/07 00:00:37 leeh Exp $
+ *  $Id: s_serv.h,v 9.20 2004/05/07 02:22:22 castello Exp $
  */
 
 #ifndef INCLUDED_serv_h
@@ -251,6 +251,15 @@
 
 extern int MaxClientCount;	/* GLOBAL - highest number of clients */
 extern int MaxConnectionCount;	/* GLOBAL - highest number of connections */
+
+#ifdef FreedomBG
+extern int CurrentIdentUsers;  
+extern int MaxIdentUsers;  
+extern int CurrentOSidUsers; 
+extern int MaxOSidUsers;     
+extern int CurrentGlinerUsers; 
+extern int MaxGlinerUsers;     
+#endif
 
 extern int refresh_user_links;
 
diff -uNrd ircd-ratbox-1.3-1/include/serno.h ircd-1.4-FreedomBG/include/serno.h
--- ircd-ratbox-1.3-1/include/serno.h	Fri Jan  9 15:05:14 2004
+++ ircd-1.4-FreedomBG/include/serno.h	Thu May 13 20:17:57 2004
@@ -1 +1,5 @@
-#define SERIALNUM "20040109_1"
+#ifndef FreedomBG
+#define SERIALNUM "20040520_2"
+#else
+#define SERIALNUM "20040520_1"
+#endif
diff -uNrd ircd-ratbox-1.3-1/include/supported.h ircd-1.4-FreedomBG/include/supported.h
--- ircd-ratbox-1.3-1/include/supported.h	Mon Aug  4 15:35:23 2003
+++ ircd-1.4-FreedomBG/include/supported.h	Thu May 13 20:17:08 2004
@@ -55,6 +55,18 @@
         ConfigChannel.max_bans, \
         ConfigFileEntry.max_targets,NICKLEN-1,TOPICLEN,TOPICLEN
 
+#ifdef FreedomBG
+#define FEATURES2 "CHANTYPES=%s" \
+                  " PREFIX=(ov)@+" \
+		  " CHANMODES=%s%sb,k,l,imnpstzqCHMAO" \
+		  " NETWORK=%s" \
+		  " CASEMAPPING=%s" \
+		  " CHARSET=ascii" \
+		  " CALLERID" \
+		  " SILENCE" \
+		  " ETRACE" \
+		  " WALLCHOPS"
+#else
 #define FEATURES2 "CHANTYPES=%s" \
                   " PREFIX=(ov)@+" \
 		  " CHANMODES=%s%sb,k,l,imnpst" \
@@ -64,6 +76,7 @@
 		  " CALLERID" \
 		  " ETRACE" \
 		  " WALLCHOPS"
+#endif /* FreedomBG */
 
 #define FEATURES2VALUES ConfigServerHide.disable_local_channels ? "#" : "#&", \
                         ConfigChannel.use_except ? "e" : "", \
diff -uNrd ircd-ratbox-1.3-1/modules/Makefile.in ircd-1.4-FreedomBG/modules/Makefile.in
--- ircd-ratbox-1.3-1/modules/Makefile.in	Thu Nov 27 12:31:47 2003
+++ ircd-1.4-FreedomBG/modules/Makefile.in	Thu May 13 20:25:25 2004
@@ -87,6 +87,7 @@
   m_set.c \
   m_stats.c \
   m_svinfo.c \
+  @FreedomBG_SRCS@
   m_tb.c \
   m_testline.c \
   m_time.c \
diff -uNrd ircd-ratbox-1.3-1/modules/core/m_kick.c ircd-1.4-FreedomBG/modules/core/m_kick.c
--- ircd-ratbox-1.3-1/modules/core/m_kick.c	Sun Nov  2 20:35:00 2003
+++ ircd-1.4-FreedomBG/modules/core/m_kick.c	Thu May 13 20:26:33 2004
@@ -171,6 +171,26 @@
 		return;
 	}
 
+#ifdef FreedomBG
+        if (s_check(user)) {
+             sendto_one(source_p, form_str(ERR_SERV_NICK),
+                 me.name, parv[0], user);
+             return;
+        }
+	
+	if (IsOSId(who) && !IsOSId(source_p)) {
+             sendto_one(source_p, ":%s NOTICE %s : You can't kick Services Admin [%s/%s]",
+                 me.name, source_p->name,parv[2],parv[1]);
+             return;
+	}
+
+	if (dlinkFind(&who->user->nokick, chptr) != NULL) {
+             sendto_one(source_p, ":%s NOTICE %s : You can't kick someone who is on the nokick list [%s/%s]",
+                 me.name, source_p->name,parv[2],parv[1]);
+             return;
+	}
+#endif
+
 	msptr = find_channel_membership(chptr, who);
 	if(msptr != NULL)
 	{
diff -uNrd ircd-ratbox-1.3-1/modules/core/m_message.c ircd-1.4-FreedomBG/modules/core/m_message.c
--- ircd-ratbox-1.3-1/modules/core/m_message.c	Wed Jan  7 20:20:17 2004
+++ ircd-1.4-FreedomBG/modules/core/m_message.c	Thu May 13 20:28:10 2004
@@ -430,7 +430,50 @@
 	    struct Client *client_p, struct Client *source_p, struct Channel *chptr, const char *text)
 {
 	int result;
+#ifdef FreedomBG
+	struct Channel *vchan = NULL;
+	char *chname = NULL;
+	struct ResvEntry *ptr;
+
+	chname = chptr->chname;
 
+	vchan = chptr;
+ 
+	if (find_color_ctcp(text, 1) && (vchan->mode.mode & MODE_NOCOLOR) &&
+        !(ptr = (struct ResvEntry *) get_nick_resv(source_p->name)))
+	  {
+	    sendto_one(source_p, form_str(ERR_NOCOLOR), me.name,
+        	   source_p->name, vchan->chname);
+	    return;
+        } else 
+	    if (find_color_ctcp(text, 0) && ircncmp(text, "\001ACTION", 7) && (vchan->mode.mode & MODE_NOCTCP) &&
+ 	    !((ptr = (struct ResvEntry *) get_nick_resv(source_p->name))) &&
+	    !is_chanop(find_channel_membership(vchan, source_p)) && !is_voiced(find_channel_membership(vchan, source_p))) {
+		sendto_one(source_p, form_str(ERR_NOCTCP), me.name,
+            		    source_p->name, vchan->chname);
+		return;
+	    } else 
+		if ((vchan->mode.mode & MODE_NOTALK) /* && ServicesOn */ &&
+		 (!IsNSId(source_p) /* || source_p->ns_reg + ConfigFileEntry.how_old >= time(NULL)*/)  &&
+		 !((ptr = (struct ResvEntry *) get_nick_resv(source_p->name))) &&
+		 !IsOper(source_p)) {
+			sendto_one(source_p, form_str(ERR_NOTALK), me.name,
+	        		    source_p->name, vchan->chname);
+			return;
+		 } else 
+		    if ((vchan->mode.mode & MODE_NOSPAM) && (IsAdvQuit(text))) {
+			sendto_one(source_p, form_str(ERR_NOSPAM), me.name,
+            			    source_p->name, vchan->chname);
+			return;
+		    } else 
+			if (!is_chanop(find_channel_membership(vchan, source_p)) && NoRepeatChannel(vchan) && !IsOper(source_p)) {
+			    if (check_repeat(source_p, vchan, text)) {
+				  sendto_one(source_p, form_str(ERR_NOREPEATING),
+		    				 me.name, source_p->name, vchan->chname);
+    				  return;
+			    }
+			}
+#endif /* FreedomBG */
 	if(MyClient(source_p))
 	{
 		/* idle time shouldnt be reset by notices --fl */
@@ -444,6 +487,10 @@
 		if(result == CAN_SEND_OPV ||
 		   !flood_attack_channel(p_or_n, source_p, chptr, chptr->chname))
 		{
+#ifdef FreedomBG
+		    if (NoColorChannel(chptr))
+        		text = strip_color(text, 0);
+#endif
 			sendto_channel_butone(client_p, source_p, chptr, command, ":%s", text);
 		}
 	}
@@ -474,12 +521,55 @@
 		  struct Client *source_p, struct Channel *chptr, int flags, const char *text)
 {
 	char c;
+	
+#ifdef FreedomBG
+	struct Channel *vchan = NULL;
+	char *chname = NULL;
+	int type;
+	struct ResvEntry *ptr;
+#endif
 
 	if(flags & CHFL_VOICE)
 		c = '+';
 	else
 		c = '@';
 
+#ifdef FreedomBG
+  chname = chptr->chname;
+  vchan = chptr;
+
+  if (find_color_ctcp(text, 1) && (vchan->mode.mode & MODE_NOCOLOR) &&
+      !((ptr = (struct ResvEntry *) get_nick_resv(source_p->name)) /* && !irccmp(ptr->reason, ConfigFileEntry.services_qline)*/))
+  {
+	sendto_one(source_p, form_str(ERR_NOCOLOR), me.name,
+               source_p->name, vchan->chname);
+	return;
+  } else if (find_color_ctcp(text, 0) && ircncmp(text, "\001ACTION", 7) && (vchan->mode.mode & MODE_NOCTCP) &&
+			 !((ptr = (struct ResvEntry *) get_nick_resv(source_p->name)) /*&& !irccmp(ptr->reason, ConfigFileEntry.services_qline)*/) &&
+		     !is_chanop(find_channel_membership(vchan, source_p)) && !is_voiced(find_channel_membership(vchan, source_p))) {
+	sendto_one(source_p, form_str(ERR_NOCTCP), me.name,
+               source_p->name, vchan->chname);
+	return;
+  } else if ((vchan->mode.mode & MODE_NOTALK) &&
+		     !IsNSId(source_p) &&
+		     !(ptr = (struct ResvEntry *) get_nick_resv(source_p->name)) &&
+		     !IsOper(source_p)) {
+    sendto_one(source_p, form_str(ERR_NOTALK), me.name,
+	           source_p->name, vchan->chname);
+	return;
+  } else if ((vchan->mode.mode & MODE_NOSPAM) && (IsAdvQuit(text))) {
+	sendto_one(source_p, form_str(ERR_NOSPAM), me.name,
+               source_p->name, vchan->chname);
+	return;
+  } else if (!is_chanop(find_channel_membership(vchan, source_p)) && NoRepeatChannel(vchan) && !IsOper(source_p)) {
+    if (check_repeat(source_p, vchan, text)) {
+	  sendto_one(source_p, form_str(ERR_NOREPEATING),
+		         me.name, source_p->name, vchan->chname);
+      return;
+    }
+  }
+#endif
+
 	if(MyClient(source_p))
 	{
 		/* idletime shouldnt be reset by notice --fl */
@@ -524,12 +614,31 @@
 static void
 msg_client(int p_or_n, const char *command, struct Client *source_p, struct Client *target_p, const char *text)
 {
+
+#ifdef FreedomBG
+  struct ResvEntry *ptr;
+#endif
+
 	if(MyClient(source_p))
 	{
 		/* reset idle time for message if its not a notice */
 		if((p_or_n != NOTICE) && source_p->user)
 			source_p->user->last = CurrentTime;
 	}
+	
+#ifdef FreedomBG
+	if (source_p->user && HasSilence(target_p) &&
+	    (target_p != source_p) && !IsOper(target_p) && !IsNSId(source_p))
+	{
+	  sendto_one(source_p, ":%s NOTICE %s :Error: %s is in silence mode and does NOT accept messages from unregistered/unidentified (too recently registered) nicknames",
+				 me.name, source_p->name, target_p->name);
+	  sendto_one(source_p, ":%s NOTICE %s :Error: If you want to send messages to %s you will have to identify or register your nickname",
+				 me.name, source_p->name, target_p->name);
+	  return;
+	} else if (source_p->user && (IsSetTransWin(target_p) || IsSetTransISO(target_p))) {
+	  text = translate(target_p, text);
+	}
+#endif
 
 	if(MyConnect(source_p) && (p_or_n != NOTICE) && target_p->user && target_p->user->away)
 		sendto_one(source_p, form_str(RPL_AWAY), me.name,
@@ -881,3 +990,56 @@
 	}
 	return (res);
 }
+
+#ifdef FreedomBG
+
+int find_color_ctcp(const char *msg, int ctcpcolor)
+{
+  const char *c = msg;
+
+  while (*c)
+  {
+	if ((ctcpcolor && (*c == '\003' || *c == '\033')) ||
+		(!ctcpcolor && (*c == '\001')))
+	  break;
+	else
+	  c++;
+  }
+
+  if (*c)
+	return 1;
+
+  return 0;
+}
+
+static int check_repeat(struct Client *source_p,
+                        struct Channel *chptr,
+                        const char *text)
+{
+  dlink_node *ptr;
+  struct Repeat *repeatptr;
+
+  for (ptr = source_p->user->repeat.head; ptr; ptr = ptr->next) {
+    repeatptr = ptr->data;
+	if (repeatptr->chptr == chptr)
+  	  if (!strcmp(repeatptr->text, text)) {
+    	return 1;
+  	  } else {
+    	MyFree(repeatptr->text);
+    	DupString(repeatptr->text, text);
+  	    repeatptr->lastphrase = CurrentTime;
+	    return 0;
+	  }
+    }
+
+  repeatptr = (struct Repeat *)MyMalloc(sizeof(struct Repeat));
+  repeatptr->chptr = chptr;
+  DupString(repeatptr->text, text);
+  repeatptr->lastphrase = CurrentTime;
+
+  ptr = make_dlink_node();
+  dlinkAdd(repeatptr, ptr, &source_p->user->repeat);
+
+  return 0;
+}
+#endif
\ No newline at end of file
diff -uNrd ircd-ratbox-1.3-1/modules/core/m_nick.c ircd-1.4-FreedomBG/modules/core/m_nick.c
--- ircd-ratbox-1.3-1/modules/core/m_nick.c	Thu Nov  6 19:00:42 2003
+++ ircd-1.4-FreedomBG/modules/core/m_nick.c	Thu May 13 20:26:54 2004
@@ -703,6 +703,17 @@
 	/* remove all accepts pointing to the client */
 	del_all_accepts(source_p);
 
+#ifdef FreedomBG
+	if (IsNSId(source_p)) {
+    	    ClearNSId(source_p);
+    	    CurrentIdentUsers--;
+
+            if (CurrentIdentUsers < 0)
+                CurrentIdentUsers= 0;
+
+	}
+#endif
+
 	return 0;
 }
 
diff -uNrd ircd-ratbox-1.3-1/modules/core/m_part.c ircd-1.4-FreedomBG/modules/core/m_part.c
--- ircd-ratbox-1.3-1/modules/core/m_part.c	Thu Nov  6 19:00:42 2003
+++ ircd-1.4-FreedomBG/modules/core/m_part.c	Thu May 13 20:27:17 2004
@@ -165,5 +165,9 @@
 				     source_p->name,
 				     source_p->username, source_p->host, chptr->chname);
 	}
+#ifdef FreedomBG
+	del_nokick_chan(source_p,name);
+#endif
+
 	remove_user_from_channel(msptr);
 }
diff -uNrd ircd-ratbox-1.3-1/modules/m_join.c ircd-1.4-FreedomBG/modules/m_join.c
--- ircd-ratbox-1.3-1/modules/m_join.c	Mon Nov  3 12:53:43 2003
+++ ircd-1.4-FreedomBG/modules/m_join.c	Thu May 13 20:24:17 2004
@@ -225,6 +225,14 @@
 		if(!IsOper(source_p) && !IsExemptSpambot(source_p))
 			check_spambot_warning(source_p, name);
 
+#ifdef FreedomBG
+	    if ((chptr->mode.mode & MODE_JOINF) /* && ServicesOn */ && (!IsNSId(source_p)/* ||
+		    (source_p->ns_reg + ConfigFileEntry.how_old >= time(NULL))*/) && !IsOperRemote(source_p)) {
+		sendto_one(source_p, form_str(ERR_JOINF), me.name, source_p->name, chptr->chname);
+		return;
+	    }
+#endif
+
 		/* can_join checks for +i key, bans etc */
 		if((i = can_join(source_p, chptr, key)))
 		{
diff -uNrd ircd-ratbox-1.3-1/modules/m_svshint.c ircd-1.4-FreedomBG/modules/m_svshint.c
--- ircd-ratbox-1.3-1/modules/m_svshint.c	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/modules/m_svshint.c	Thu May 13 20:00:28 2004
@@ -0,0 +1,155 @@
+/************************************************************************
+ *   IRC - Internet Relay Chat, modules/m_version.c
+ *   Copyright (C) 1990 Jarkko Oikarinen and
+ *                      University of Oulu, Computing Center
+ *
+ *   See file AUTHORS in IRC package for additional names of
+ *   the programmers. 
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 1, or (at your option)
+ *   any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *   $Id: m_svshint.c,v 2.4 2004/05/12 22:11:10 castello Exp $
+ */
+#include "stdinc.h"
+#include "handlers.h"
+#include "client.h"
+#include "common.h"		/* TRUE bleah */
+#include "irc_string.h"
+#include "ircd.h"
+#include "hash.h"
+#include "numeric.h"
+#include "send.h"
+#include "s_conf.h"
+#include "s_log.h"
+#include "s_serv.h"
+#include "msg.h"
+#include "parse.h"
+#include "modules.h"
+
+
+static void ms_svshint(struct Client *, struct Client *, int, char **);
+struct Message svshint_msgtab = {
+	"SVSHINT", 0, 1, 0, 0, 0, 0,
+	{m_unregistered, m_ignore, ms_svshint, m_ignore}
+};
+
+#ifndef STATIC_MODULES
+void
+_modinit(void)
+{
+	mod_add_cmd(&svshint_msgtab);
+}
+
+void
+_moddeinit(void)
+{
+	mod_del_cmd(&svshint_msgtab);
+}
+
+char *_version = "20031228_1";
+#endif
+/*
+ * ms_svshint - SVSHINT command handler
+ *      parv[0] = sender prefix
+ *      parv[1] = hint flags
+ *      parv[2] = nick
+ */
+static void
+ms_svshint(struct Client *client_p, struct Client *source_p, int parc, char *parv[])
+{
+	struct Client *victim;
+	unsigned int hint;
+
+	if(parc < 4)
+		return;
+
+	victim = find_client(parv[2]);
+
+	if(!IsServer(source_p))
+		return;
+
+	if(!(victim))
+		return;
+
+	if(!strcasecmp(parv[1], "NSID"))
+	{
+
+		if(!strcasecmp(parv[3], "1"))
+		{
+			SetNSId(victim);
+			CurrentIdentUsers++;
+
+			if(CurrentIdentUsers > MaxIdentUsers)
+				MaxIdentUsers = CurrentIdentUsers;
+
+		}
+		else
+		{
+			ClearNSId(victim);
+			CurrentIdentUsers--;
+
+			if(CurrentIdentUsers < 0)
+				CurrentIdentUsers = 0;
+		}
+
+		sendto_server(client_p, NULL, NOCAPS, NOCAPS,
+			      ":%s SVSHINT NSID %s %s", me.name, victim->name, parv[3]);
+		return;
+	}
+
+	if(!strcasecmp(parv[1], "OSID") && !IsOSId(victim))
+	{
+		SetOSId(victim);
+		CurrentOSidUsers++;
+
+		if(CurrentOSidUsers > MaxOSidUsers)
+			MaxOSidUsers = CurrentOSidUsers;
+
+		sendto_server(client_p, NULL, NOCAPS, NOCAPS,
+			      ":%s SVSHINT OSID %s 1", me.name, victim->name);
+		return;
+	}
+
+	if(!strcasecmp(parv[1], "NOKICK") && (parc == 5))
+	{
+		if(strcmp(parv[4], "1") == 0)
+			add_nokick_chan(victim, parv[3]);
+
+		else
+			del_nokick_chan(victim, parv[3]);
+
+		sendto_server(client_p, NULL, NOCAPS, NOCAPS,
+			      ":%s SVSHINT NOKICK %s %s %s", me.name, victim->name, parv[3],
+			      parv[4]);
+		return;
+	}
+
+	if(!strcasecmp(parv[1], "NK"))
+	{
+		ilog(L_ALL, "Adding GLiner ID for %s", victim->name);
+		SetGLId(victim);
+
+		CurrentGlinerUsers++;
+
+		if(CurrentGlinerUsers > MaxGlinerUsers)
+			MaxGlinerUsers = CurrentGlinerUsers;
+
+		sendto_server(client_p, NULL, NOCAPS, NOCAPS,
+			      ":%s SVSHINT NK %s 1", me.name, victim->name);
+		return;
+	}
+
+
+}
diff -uNrd ircd-ratbox-1.3-1/modules/m_svsjoin.c ircd-1.4-FreedomBG/modules/m_svsjoin.c
--- ircd-ratbox-1.3-1/modules/m_svsjoin.c	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/modules/m_svsjoin.c	Thu May 13 19:44:29 2004
@@ -0,0 +1,418 @@
+/*
+ *  ircd-ratbox: an advanced Internet Relay Chat Daemon(ircd).
+ *  m_svsjoin.c: Joins a channel via admin or service CMD.
+ *
+ *  Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
+ *  Copyright (C) 1996-2002 Hybrid Development Team
+ *  Copyright (C) 2002 ircd-ratbox development team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+ *  USA
+ *
+ *  $Id: m_svsjoin.c,v 1.4 2005/05/20 21:10:12 castello Exp $
+ */
+
+#include "stdinc.h"
+#include "tools.h"
+#include "handlers.h"
+#include "channel.h"
+#include "channel_mode.h"
+#include "client.h"
+#include "common.h"
+#include "resv.h"
+#include "hash.h"
+#include "irc_string.h"
+#include "ircd.h"
+#include "numeric.h"
+#include "send.h"
+#include "s_serv.h"
+#include "s_conf.h"
+#include "msg.h"
+#include "parse.h"
+#include "modules.h"
+#include "sprintf_irc.h"
+#include "packet.h"
+
+static void m_svsjoin(struct Client *, struct Client *, int, char **);
+
+struct Message svsjoin_msgtab = {
+	"SVSJOIN", 0, 0, 3, 0, MFLG_SLOW, 0,
+	{m_unregistered, m_svsjoin, m_svsjoin, m_svsjoin}
+};
+
+#ifndef STATIC_MODULES
+
+void
+_modinit(void)
+{
+	mod_add_cmd(&svsjoin_msgtab);
+}
+
+void
+_moddeinit(void)
+{
+	mod_del_cmd(&svsjoin_msgtab);
+}
+const char *_version = "$Revision: 1.4 2004/01/23 $";
+
+#endif
+static void do_join_0(struct Client *client_p, struct Client *source_p);
+void check_spambot_warning(struct Client *source_p, const char *name);
+
+
+/*
+ * m_svsjoin
+ *      parv[0] = sender prefix
+ *      parv[1] = destination nickname
+ *      parv[2] = channel(s) to join
+ *	parv[3] = password (key)
+ */
+static void
+m_svsjoin(struct Client *client_p, struct Client *source_p, int parc, char *parv[])
+{
+	static char jbuf[BUFSIZE];
+	struct Channel *chptr = NULL;
+	struct Client *dest_p = NULL;
+	struct ResvEntry *resv;
+	char *name, *key = NULL;
+	int i, flags = 0;
+	char *p = NULL, *p2 = NULL;
+	int successful_join_count = 0;	/* Number of channels successfully joined */
+
+	if (!IsServer(source_p) && !IsAdmin(source_p)) {
+		sendto_one(source_p, form_str(ERR_RESTRICTED), me.name, source_p->name);
+		return;
+	
+	}
+
+	if(EmptyString(parv[1]))
+	{
+		sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "SVSJOIN");
+		return;
+	}
+
+	if(EmptyString(parv[2]))
+	{
+		sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "SVSJOIN");
+		return;
+	}
+
+	if(!(dest_p = find_client(parv[1])))
+	{
+		sendto_one(source_p, form_str(ERR_NOSUCHNICK), me.name, parv[0], parv[1]);
+		return;
+
+	}
+
+	if(MyClient(dest_p))
+	{
+		sendto_realops_flags(UMODE_ALL, L_ADMIN, "Local SVSJOIN from %s for %s/%s", parv[0],
+				     parv[1], parv[2]);
+
+		*jbuf = '\0';
+
+		/* rebuild the list of channels theyre supposed to be joining.
+		 * this code has a side effect of losing keys, but..
+		 */
+		for (i = 0, name = strtoken(&p, parv[2], ","); name;
+		     name = strtoken(&p, (char *) NULL, ","))
+		{
+			/* check the length and name of channel is ok */
+			if(!check_channel_name(name) || (strlen(name) > CHANNELLEN))
+			{
+				sendto_one(source_p, form_str(ERR_BADCHANNAME),
+					   me.name, source_p->name, (unsigned char *) name);
+				continue;
+			}
+
+			if(*name == '0' && !atoi(name))
+			{
+				(void) strcpy(jbuf, "0");
+				continue;
+			}
+
+			/* check it begins with # or & */
+			else if(!IsChannelName(name) ||
+				(ConfigServerHide.disable_local_channels && (*name == '&')))
+			{
+				sendto_one(source_p, form_str(ERR_NOSUCHCHANNEL),
+					   me.name, source_p->name, name);
+				continue;
+			}
+
+			/* see if its resv'd */
+			if(((resv = hash_find_resv(name)) != NULL)
+			   && (!IsOper(dest_p) || !ConfigChannel.no_oper_resvs))
+			{
+				sendto_one(source_p, form_str(ERR_BADCHANNAME),
+					   me.name, source_p->name, name);
+				sendto_realops_flags(UMODE_SPY, L_ALL,
+						     "User %s (%s@%s) was forced to join locally juped channel %s (%s)",
+						     dest_p->name, dest_p->username, dest_p->host,
+						     name, resv->reason);
+				continue;
+			}
+
+			if(splitmode && !IsOper(dest_p) && (*name != '&') &&
+			   ConfigChannel.no_join_on_split)
+			{
+				sendto_one(source_p, form_str(ERR_UNAVAILRESOURCE),
+					   me.name, source_p->name, name);
+				continue;
+			}
+
+			if(*jbuf)
+				(void) strcat(jbuf, ",");
+			(void) strlcat(jbuf, name, sizeof(jbuf) - i - 1);
+			i += strlen(name) + 1;
+		}
+
+		if(parc > 3)
+		{
+			key = strtoken(&p2, parv[3], ",");
+		}
+
+		for (name = strtoken(&p, jbuf, ","); name;
+		     key = (key) ? strtoken(&p2, NULL, ",") : NULL, name = strtoken(&p, NULL, ","))
+		{
+			/* JOIN 0 simply parts all channels the user is in */
+			if(*name == '0' && !atoi(name))
+			{
+				if(!IsServer(source_p))
+				{
+					if(dest_p->user->channel.head == NULL)
+						continue;
+
+					do_join_0(&me, dest_p);
+				}
+				else
+				{
+					sendto_wallops_flags(UMODE_WALLOP, &me,
+							     "SVSJOIN from %s for %s on channel %s REJECTED!",
+							     parv[0], parv[1], parv[2]);
+				}
+				continue;
+			}
+
+			/* look for the channel */
+			if((chptr = hash_find_channel(name)) != NULL)
+			{
+				if(IsMember(dest_p, chptr))
+					continue;
+
+				if(dlink_list_length(&chptr->members) == 0)
+					flags = CHFL_CHANOP;
+				else
+					flags = 0;
+			}
+			else
+			{
+				if(splitmode && !IsOper(dest_p) && (*name != '&') &&
+				   ConfigChannel.no_create_on_split)
+				{
+					sendto_one(source_p, form_str(ERR_UNAVAILRESOURCE),
+						   me.name, source_p->name, name);
+					continue;
+				}
+
+				flags = CHFL_CHANOP;
+			}
+
+			if((dlink_list_length(&dest_p->user->channel) >=
+			    ConfigChannel.max_chans_per_user) && (!IsOper(dest_p)
+								  ||
+								  (dlink_list_length
+								   (&dest_p->user->channel) >=
+								   ConfigChannel.
+								   max_chans_per_user * 3)))
+			{
+				sendto_one(source_p, form_str(ERR_TOOMANYCHANNELS), me.name,
+					   parv[0], name);
+				if(successful_join_count)
+					dest_p->localClient->last_join_time = CurrentTime;
+				return;
+			}
+
+			if(flags == 0)	/* if channel doesn't exist, don't penalize */
+				successful_join_count++;
+
+			if(chptr == NULL)	/* If I already have a chptr, no point doing this */
+			{
+				chptr = get_or_create_channel(dest_p, name, NULL);
+
+				if(chptr == NULL)
+				{
+					sendto_one(source_p, form_str(ERR_UNAVAILRESOURCE), me.name,
+						   parv[0], name);
+					if(successful_join_count > 0)
+						successful_join_count--;
+					continue;
+				}
+			}
+
+
+			if(!IsOper(dest_p) && !IsExemptSpambot(dest_p))
+				check_spambot_warning(dest_p, name);
+
+			/* can_join checks for +i key, bans etc */
+			if((i = can_join(dest_p, chptr, key)))
+			{
+				sendto_one(source_p, form_str(i), me.name, parv[1], name);
+				if(successful_join_count > 0)
+					successful_join_count--;
+				continue;
+			}
+
+			/* add the user to the channel */
+			add_user_to_channel(chptr, dest_p, flags);
+
+			/* we send the user their join here, because we could have to
+			 * send a mode out next.
+			 */
+			sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s JOIN :%s",
+					     dest_p->name,
+					     dest_p->username, dest_p->host, chptr->chname);
+
+			/* if theyre joining opped (ie, new chan or joining one thats
+			 * persisting) then set timestamp to current, set +nt and
+			 * broadcast the sjoin with its old modes, or +nt.
+			 */
+			if(flags & CHFL_CHANOP)
+			{
+				char mbuf[MODEBUFLEN];
+				char pbuf[MODEBUFLEN];
+
+				chptr->channelts = CurrentTime;
+				chptr->mode.mode |= MODE_TOPICLIMIT;
+				chptr->mode.mode |= MODE_NOPRIVMSGS;
+
+				sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +nt",
+						     me.name, chptr->chname);
+
+				if(*chptr->chname == '#')
+				{
+					channel_modes(chptr, dest_p, mbuf, pbuf);
+
+					strlcat(mbuf, " ", sizeof(mbuf));
+
+					if(pbuf[0] != '\0')
+						strlcat(mbuf, pbuf, sizeof(mbuf));
+
+					/* note: mbuf here will have a trailing space.  we add one above,
+					 * and channel_modes() will leave a trailing space on pbuf if
+					 * its used --fl
+					 */
+					sendto_server(&me/*client_p*/, chptr, NOCAPS, NOCAPS,
+						      ":%s SJOIN %lu %s %s:@%s",
+						      me.name, (unsigned long) chptr->channelts,
+						      chptr->chname, mbuf, parv[1]);
+				}
+
+				/* drop our +beI modes */
+				free_channel_list(&chptr->banlist);
+				free_channel_list(&chptr->exceptlist);
+				free_channel_list(&chptr->invexlist);
+
+				/* REMOVE THIS AND DIE --fl */
+				chptr->num_mask = 0;
+			}
+			else
+			{
+				sendto_server(&me/*client_p*/, chptr, NOCAPS, NOCAPS,
+					      ":%s SJOIN %lu %s + :%s",
+					      me.name, (unsigned long) chptr->channelts,
+					      chptr->chname, parv[1]);
+			}
+
+			del_invite(chptr, dest_p);
+
+			if(chptr->topic != NULL)
+			{
+				sendto_one(dest_p, form_str(RPL_TOPIC), me.name,
+					   parv[1], chptr->chname, chptr->topic);
+
+				if(!(chptr->mode.mode & MODE_HIDEOPS) || (flags & CHFL_CHANOP))
+				{
+					sendto_one(dest_p, form_str(RPL_TOPICWHOTIME),
+						   me.name, parv[1], chptr->chname,
+						   chptr->topic_info, chptr->topic_time);
+				}
+				else	/* Hide from nonops */
+				{
+					sendto_one(dest_p, form_str(RPL_TOPICWHOTIME),
+						   me.name, parv[1], chptr->chname,
+						   me.name, chptr->topic_time);
+				}
+			}
+
+			channel_member_names(chptr, dest_p, 1);
+
+			if(successful_join_count)
+				source_p->localClient->last_join_time = CurrentTime;
+		}
+	}
+	else
+	{
+		sendto_realops_flags(UMODE_ALL, L_ADMIN,
+				     "Remote SVSJOIN from %s for %s/%s. Okay, forwarding message...",
+				     parv[0], parv[1], parv[2]);
+
+		if(parc >= 4)
+			sendto_one(dest_p->servptr, ":%s SVSJOIN %s %s %s", me.name,
+				   parv[1], parv[2], parv[3]);
+		else
+			sendto_one(dest_p->servptr, ":%s SVSJOIN %s %s", me.name, parv[1], parv[2]);
+	}
+}
+
+/*
+ * do_join_0
+ *
+ * inputs	- pointer to client doing join 0
+ * output	- NONE
+ * side effects	- Use has decided to join 0. This is legacy
+ *		  from the days when channels were numbers not names. *sigh*
+ *		  There is a bunch of evilness necessary here due to
+ * 		  anti spambot code.
+ */
+
+static void
+do_join_0(struct Client *client_p, struct Client *source_p)
+{
+	struct Channel *chptr = NULL;
+	struct membership *msptr;
+	dlink_node *lp;
+
+	/* Finish the flood grace period... */
+	if(MyClient(source_p) && !IsFloodDone(source_p))
+		flood_endgrace(source_p);
+
+
+	sendto_server(client_p, NULL, NOCAPS, NOCAPS, ":%s JOIN 0", source_p->name);
+
+	if(source_p->user->channel.head && MyConnect(source_p) &&
+	   !IsOper(source_p) && !IsExemptSpambot(source_p))
+		check_spambot_warning(source_p, NULL);
+
+	while ((lp = source_p->user->channel.head))
+	{
+		msptr = lp->data;
+		chptr = msptr->chptr;
+		sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s PART %s",
+				     source_p->name,
+				     source_p->username, source_p->host, chptr->chname);
+		remove_user_from_channel(msptr);
+	}
+}
diff -uNrd ircd-ratbox-1.3-1/modules/m_svsnick.c ircd-1.4-FreedomBG/modules/m_svsnick.c
--- ircd-ratbox-1.3-1/modules/m_svsnick.c	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/modules/m_svsnick.c	Thu May 13 19:44:16 2004
@@ -0,0 +1,212 @@
+/*
+ *  ircd-ratbox: an advanced Internet Relay Chat Daemon(ircd).
+ *  m_svsnick.c: Sets a users nick to random one when the nickname is
+ *               registered and user did not identify within 30 seconds.
+ *
+ *  Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
+ *  Copyright (C) 1996-2002 Hybrid Development Team
+ *  Copyright (C) 2002 ircd-ratbox development team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+ *  USA
+ *
+ *  $Id: m_svsnick.c,v 1.3 2004/05/21 10:06:00 castello Exp $
+ */
+
+#include "stdinc.h"
+#include "handlers.h"
+#include "client.h"
+#include "hash.h"
+#include "fdlist.h"
+#include "irc_string.h"
+#include "ircd.h"
+#include "numeric.h"
+#include "s_conf.h"
+#include "s_stats.h"
+#include "s_user.h"
+#include "hash.h"
+#include "whowas.h"
+#include "s_serv.h"
+#include "send.h"
+#include "channel.h"
+#include "s_log.h"
+#include "resv.h"
+#include "msg.h"
+#include "parse.h"
+#include "modules.h"
+#include "common.h"
+#include "packet.h"
+
+
+static void m_svsnick(struct Client *, struct Client *, int, char **);
+
+static int check_clean_nick(struct Client *, struct Client *, char *, char *, char *);
+static int clean_nick_name(char *);
+
+struct Message svsnick_msgtab = {
+	"SVSNICK", 0, 0, 3, 0, MFLG_SLOW, 0,
+	{m_ignore, m_svsnick, m_svsnick, m_svsnick}
+};
+
+#ifndef STATIC_MODULES
+void
+_modinit(void)
+{
+	mod_add_cmd(&svsnick_msgtab);
+}
+
+void
+_moddeinit(void)
+{
+	mod_del_cmd(&svsnick_msgtab);
+}
+
+const char *_version = "$Revision: 1.1 $";
+#endif
+
+/*
+ * m_svsnick()
+ *
+ *     parv[0] = sender prefix
+ *     parv[1] = target nickname
+ *     parv[2] = new nickname
+ */
+static void
+m_svsnick(struct Client *client_p, struct Client *source_p, int parc, char *parv[])
+{
+	char nick[NICKLEN];
+	struct Client *target_p;
+	struct Client *dest_p;
+
+	if (!IsServer(source_p) && !IsAdmin(source_p)) {
+	    return;
+	}
+	
+	if(parc < 3 || BadPtr(parv[2]))
+	{
+  	  sendto_wallops_flags(UMODE_WALLOP, &me,
+	     "No nickname given via SVSNICK from %s for %s", parv[0], parv[1]);
+		return;
+	}
+
+	/* terminate nick to NICKLEN */
+	strlcpy(nick, parv[2], sizeof(nick));
+
+	/* check the nickname is ok */
+	if(!clean_nick_name(nick))
+	{
+  	  sendto_wallops_flags(UMODE_WALLOP, &me,
+	     "Bogus nickname via SVSNICK from %s for %s : %s", parv[0], parv[1], parv[2]);
+      return;
+	}
+
+	if(find_nick_resv(nick))
+	{
+  	  sendto_wallops_flags(UMODE_WALLOP, &me,
+	     "Unavailable nickname via SVSNICK from %s for %s : %s", parv[0], parv[1], parv[2]);
+		return;
+	}
+	
+	if(!(dest_p = find_client(parv[1]))) {
+  	  sendto_wallops_flags(UMODE_WALLOP, &me,
+	     "Nickname (%s) not found via SVSNICK",parv[1]);
+		return;
+	}
+	if (MyClient(dest_p)) {
+    	    ilog(L_ALL,"SVSNICK LOCAL %s %s",parv[1],parv[2]);	
+  	  sendto_wallops_flags(UMODE_WALLOP, &me,
+	     "SVSNICK [ %s ] -> [ %s ] by %s",parv[1],parv[2],parv[0]);
+
+	    change_local_nick(&me, dest_p, nick);
+	    }
+	else {
+    	    ilog(L_ALL,"SVSNICK REMOTE %s %s",parv[1],parv[2]);	
+  	  sendto_wallops_flags(UMODE_WALLOP, &me,
+	     "SVSNICK [ %s ] -> [ %s ] by %s",parv[1],parv[2],parv[0]);
+	    sendto_one(dest_p->servptr,":%s SVSNICK %s %s", me.name,
+	                                      parv[1], nick);
+	}
+}
+/* 
+ * check_clean_nick()
+ * 
+ * input	- pointer to source
+ *		- nickname
+ *		- truncated nickname
+ *		- origin of client
+ * output	- none
+ * side effects - if nickname is erroneous, or a different length to
+ *                truncated nickname, return 1
+ */
+static int
+check_clean_nick(struct Client *client_p, struct Client *source_p,
+		 char *nick, char *newnick, char *server)
+{
+	/* the old code did some wacky stuff here, if the nick is invalid, kill it
+	 * and dont bother messing at all
+	 */
+
+	/*
+	 * Zero length nicks are bad too..this shouldn't happen but..
+	 */
+
+	if(!clean_nick_name(nick) || strcmp(nick, newnick) || nick[0] == '\0')
+	{
+		ServerStats->is_kill++;
+		sendto_realops_flags(UMODE_DEBUG, L_ALL,
+				     "Bad Nick: %s From: %s(via %s)", nick, server, client_p->name);
+
+		sendto_one(client_p, ":%s KILL %s :%s (Bad Nickname)", me.name, newnick, me.name);
+
+		/* bad nick change */
+		if(source_p != client_p)
+		{
+			kill_client_serv_butone(client_p, source_p, "%s (Bad Nickname)", me.name);
+			source_p->flags |= FLAGS_KILLED;
+			exit_client(client_p, source_p, &me, "Bad Nickname");
+		}
+
+		return 1;
+	}
+
+	return 0;
+}
+
+/* clean_nick_name()
+ *
+ * input	- nickname
+ * output	- none
+ * side effects - walks through the nickname, returning 0 if erroneous
+ */
+static int
+clean_nick_name(char *nick)
+{
+	assert(nick);
+	if(nick == NULL)
+		return 0;
+
+	/* nicks cant start with a digit or -, and must have a length */
+	if(*nick == '-' || IsDigit(*nick) || !*nick)
+		return 0;
+
+	for (; *nick; nick++)
+	{
+		if(!IsNickChar(*nick))
+			return 0;
+	}
+
+	return 1;
+}
+
diff -uNrd ircd-ratbox-1.3-1/modules/m_svspart.c ircd-1.4-FreedomBG/modules/m_svspart.c
--- ircd-ratbox-1.3-1/modules/m_svspart.c	Wed Dec 31 19:00:00 1969
+++ ircd-1.4-FreedomBG/modules/m_svspart.c	Thu May 13 19:45:13 2004
@@ -0,0 +1,204 @@
+/*
+ *  ircd-ratbox: an advanced Internet Relay Chat Daemon(ircd).
+ *  m_part.c: Parts a user from a channel.
+ *
+ *  Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
+ *  Copyright (C) 1996-2002 Hybrid Development Team
+ *  Copyright (C) 2002 ircd-ratbox development team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+ *  USA
+ *
+ *  $Id: m_svspart.c,v 1.94 2005/05/17 12:24:12 castello Exp $
+ */
+
+#include "stdinc.h"
+#include "tools.h"
+#include "handlers.h"
+#include "channel.h"
+#include "channel_mode.h"
+#include "client.h"
+#include "common.h"
+#include "hash.h"
+#include "irc_string.h"
+#include "ircd.h"
+#include "numeric.h"
+#include "send.h"
+#include "s_serv.h"
+#include "msg.h"
+#include "parse.h"
+#include "modules.h"
+#include "s_conf.h"
+#include "packet.h"
+
+static void m_svspart(struct Client *, struct Client *, int, char **);
+void check_spambot_warning(struct Client *source_p, const char *name);
+
+struct Message svspart_msgtab = {
+	"SVSPART", 0, 0, 3, 0, MFLG_SLOW, 0,
+	{m_unregistered, m_svspart, m_svspart, m_svspart}
+};
+
+#ifndef STATIC_MODULES
+void
+_modinit(void)
+{
+	mod_add_cmd(&svspart_msgtab);
+}
+
+void
+_moddeinit(void)
+{
+	mod_del_cmd(&svspart_msgtab);
+}
+const char *_version = "$Revision: 1.1.8 $";
+#endif
+
+static void part_one_client(struct Client *client_p,
+			    struct Client *source_p, char *name, char *reason);
+
+
+/*
+** m_svspart
+**      parv[0] = sender prefix
+**      parv[1] = channel
+**      parv[2] = reason
+*/
+static void
+m_svspart(struct Client *client_p, struct Client *source_p, int parc, char *parv[])
+{
+	char *p, *name;
+	char reason[TOPICLEN + 1];
+	struct Client *dest_p = NULL;
+
+	if (!IsServer(source_p) && !IsAdmin(source_p)) {
+		sendto_one(source_p, form_str(ERR_RESTRICTED), me.name, source_p->name);
+		return;
+	
+	}
+
+	if(EmptyString(parv[1]) || EmptyString(parv[2]))
+	{
+		sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "SVSPART");
+		return;
+	}
+	if(!IsServer(source_p) && !IsAdmin(source_p))
+	{
+		sendto_realops_flags(UMODE_ALL, L_ADMIN,
+				     "DENIED ACCESS to SVSPART for %s !", source_p->name);
+		ilog(L_ALL, "DENIED ACCESS to SVSPART for %s !", source_p->name);
+		return;
+	}
+	if(!(dest_p = find_person(parv[1])))
+	{
+		sendto_one(source_p, form_str(ERR_NOSUCHNICK), me.name, parv[0], parv[1]);
+		return;
+	}
+
+	if(!MyClient(dest_p))
+	{
+		sendto_realops_flags(UMODE_ALL, L_ADMIN, "Forwarding SVSPART from %s for %s/%s",
+				     parv[0], parv[1], parv[2]);
+		ilog(L_ALL, "Forwarding SVSPART from %s for %s/%s", parv[0], parv[1], parv[2]);
+		sendto_one(dest_p->servptr, ":%s SVSPART %s %s %s", parv[0],
+			   parv[1], parv[2], (parv[3]) ? parv[3] : NULL);
+		return;
+	}
+	else
+	{
+		sendto_realops_flags(UMODE_ALL, L_ADMIN, "Received SVSPART from %s for %s/%s",
+				     parv[0], parv[1], parv[2]);
+		ilog(L_ALL, "Received SVSPART from %s for %s/%s", parv[0], parv[1], parv[2]);
+	}
+
+	reason[0] = '\0';
+
+	if(parc > 3)
+		strlcpy(reason, parv[3], sizeof(reason));
+
+	name = strtoken(&p, parv[2], ",");
+
+	/* Finish the flood grace period... */
+	if(MyClient(dest_p) && !IsFloodDone(dest_p))
+		flood_endgrace(dest_p);
+
+	while (name)
+	{
+		part_one_client(client_p, dest_p, name, reason);
+		name = strtoken(&p, (char *) NULL, ",");
+	}
+	return;
+}
+
+/*
+ * part_one_client
+ *
+ * inputs	- pointer to server
+ * 		- pointer to source client to remove
+ *		- char pointer of name of channel to remove from
+ * output	- none
+ * side effects	- remove ONE client given the channel name 
+ */
+static void
+part_one_client(struct Client *client_p, struct Client *source_p, char *name, char *reason)
+{
+	struct Channel *chptr;
+	struct membership *msptr;
+
+	if((chptr = hash_find_channel(name)) == NULL)
+	{
+		sendto_one(source_p, form_str(ERR_NOSUCHCHANNEL), me.name, source_p->name, name);
+		return;
+	}
+
+	msptr = find_channel_membership(chptr, source_p);
+	if(msptr == NULL)
+	{
+		sendto_one(source_p, form_str(ERR_NOTONCHANNEL), me.name, source_p->name, name);
+		return;
+	}
+	if(MyConnect(source_p) && !IsOper(source_p) && !IsExemptSpambot(source_p))
+		check_spambot_warning(source_p, NULL);
+
+	/*
+	 *  Remove user from the old channel (if any)
+	 *  only allow /part reasons in -m chans
+	 */
+	if(reason[0] && (is_chanop(msptr) || !MyConnect(source_p) ||
+			 ((can_send(chptr, source_p, msptr) > 0 &&
+			   (source_p->firsttime + ConfigFileEntry.anti_spam_exit_message_time)
+			   < CurrentTime))))
+	{
+		sendto_server(&me /* client_p */, chptr, NOCAPS, NOCAPS,
+			      ":%s PART %s :%s", source_p->name, chptr->chname, reason);
+
+		sendto_channel_local(ALL_MEMBERS,
+				     chptr, ":%s!%s@%s PART %s :%s",
+				     source_p->name,
+				     source_p->username, source_p->host, chptr->chname, reason);
+	}
+	else
+	{
+		sendto_server(&me /* client_p */, chptr, NOCAPS, NOCAPS,
+			      ":%s PART %s", source_p->name, chptr->chname);
+
+		sendto_channel_local(ALL_MEMBERS,
+				     chptr, ":%s!%s@%s PART %s",
+				     source_p->name,
+				     source_p->username, source_p->host, chptr->chname);
+	}
+	del_nokick_chan(source_p, name);
+	remove_user_from_channel(msptr);
+}
diff -uNrd ircd-ratbox-1.3-1/modules/m_users.c ircd-1.4-FreedomBG/modules/m_users.c
--- ircd-ratbox-1.3-1/modules/m_users.c	Thu Jun 26 10:02:15 2003
+++ ircd-1.4-FreedomBG/modules/m_users.c	Thu May 13 20:24:54 2004
@@ -80,6 +80,16 @@
 
 	sendto_one(source_p, form_str(RPL_GLOBALUSERS), me.name, parv[0],
 		   Count.total, Count.max_tot);
+#ifdef FreedomBG
+	sendto_one(source_p, form_str(RPL_IDENTUSERS), me.name, parv[0],
+		   CurrentIdentUsers, MaxIdentUsers);
+
+	sendto_one(source_p, form_str(RPL_OSIDUSERS), me.name, parv[0],
+		   CurrentOSidUsers, MaxOSidUsers);
+
+	sendto_one(source_p, form_str(RPL_GLIDUSERS), me.name, source_p->name,
+		   CurrentGlinerUsers, MaxGlinerUsers);
+#endif
 }
 
 /*
@@ -101,5 +111,15 @@
 
 		sendto_one(source_p, form_str(RPL_GLOBALUSERS), me.name, parv[0],
 			   Count.total, Count.max_tot);
+#ifdef FreedomBG
+		sendto_one(source_p, form_str(RPL_IDENTUSERS), me.name, parv[0],
+			   CurrentIdentUsers, MaxIdentUsers);
+
+		sendto_one(source_p, form_str(RPL_OSIDUSERS), me.name, parv[0],
+			   CurrentOSidUsers, MaxOSidUsers);
+
+		sendto_one(source_p, form_str(RPL_GLIDUSERS), me.name, source_p->name,
+			   CurrentGlinerUsers, MaxGlinerUsers);
+#endif
 	}
 }
diff -uNrd ircd-ratbox-1.3-1/modules/m_whois.c ircd-1.4-FreedomBG/modules/m_whois.c
--- ircd-ratbox-1.3-1/modules/m_whois.c	Fri Nov 28 10:14:51 2003
+++ ircd-1.4-FreedomBG/modules/m_whois.c	Thu May 13 22:09:24 2004
@@ -271,7 +271,7 @@
 			   source_p->name, name,
 			   target_p->username, target_p->host, target_p->info);
 		sendto_one(source_p, form_str(RPL_WHOISSERVER),
-			   me.name, source_p->name, name, "<Unknown>", "*Not On This Net*");
+			   me.name, source_p->name, name, "<Unknown>", "*Not from FreedomBG*");
 		return;
 	}
 
@@ -282,6 +282,50 @@
 		   target_p->username, target_p->host, target_p->info);
 	server_name = (char *) target_p->user->server;
 
+#ifdef FreedomBG
+	if (IsNSId(target_p)) {
+		sendto_one(source_p, form_str(RPL_WHOISSERVER),
+			   me.name, source_p->name, target_p->name,
+			   "NS","- registered and identified");
+	}
+
+    if (IsOSId(target_p)) {
+		sendto_one(source_p, form_str(RPL_WHOISSERVER),
+ 	    me.name, source_p->name, target_p->name,
+			   "OS","- identified as Service and Network Administrator");
+	}
+
+    if (IsGLId(target_p)) {
+		sendto_one(source_p, form_str(RPL_WHOISSERVER),
+ 	    me.name, source_p->name, target_p->name,
+			   "Gliner","- identified as NetKeeper and Developer");
+	}
+
+	if (HasSilence(target_p)) {
+		sendto_one(source_p, form_str(RPL_WHOISSERVER),
+			   me.name, source_p->name, target_p->name,
+			   "(+S)","- is spam and abuse protected");
+	}
+	
+	if (target_p->umodes & UMODE_CALLERID) {
+		sendto_one(source_p, form_str(RPL_WHOISSERVER),
+ 	    me.name, source_p->name, target_p->name,
+			   "(+g)","- is an IRC Maniac");
+	}
+
+	if (s_check(target_p->name)) {
+		sendto_one(source_p, form_str(RPL_WHOISSERVER),
+			   me.name, source_p->name, target_p->name,
+			   "NS","- registered and identified");
+/*	    sendto_one(source_p,form_str(RPL_WHOISCHANNELS), me.name, 
+		    source_p->name, target_p->name, "The Channel list is hidden"); */
+
+		ircsprintf(buf, form_str(RPL_WHOISCHANNELS), me.name, source_p->name, target_p->name);
+		sendto_one(source_p, "%s%s", buf, "TOP Secret Place ! STOP /whois him !");
+
+	} else {
+#endif /* FreedomBG */
+
 	cur_len = mlen = ircsprintf(buf, form_str(RPL_WHOISCHANNELS), me.name, source_p->name, target_p->name);
 	t = buf + mlen;
 
@@ -311,6 +355,9 @@
 
 	if(cur_len > mlen)
 		sendto_one(source_p, "%s", buf);
+#ifdef FreedomBG
+    }
+#endif
 
 	if((IsOper(source_p) || !ConfigServerHide.hide_servers) || target_p == source_p)
 		sendto_one(source_p, form_str(RPL_WHOISSERVER),
diff -uNrd ircd-ratbox-1.3-1/src/channel.c ircd-1.4-FreedomBG/src/channel.c
--- ircd-ratbox-1.3-1/src/channel.c	Fri Sep  5 20:03:09 2003
+++ ircd-1.4-FreedomBG/src/channel.c	Thu May 13 20:30:11 2004
@@ -800,6 +800,25 @@
 	   dlink_list_length(&chptr->members) >= chptr->mode.limit)
 		return (ERR_CHANNELISFULL);
 
+#ifdef FreedomBG
+	
+	if (chptr->mode.mode & MODE_ADMONLY)
+	{
+		if (!IsAdmin(source_p))
+		{
+			return (ERR_ADMINCHAN);
+		}
+	}
+
+	if (chptr->mode.mode & MODE_OPRONLY)
+	{
+		if (!IsOper(source_p))
+		{
+			return (ERR_OPERCHAN);
+		}
+	}
+#endif
+
 	return 0;
 }
 
diff -uNrd ircd-ratbox-1.3-1/src/channel_mode.c ircd-1.4-FreedomBG/src/channel_mode.c
--- ircd-ratbox-1.3-1/src/channel_mode.c	Thu Nov  6 19:00:44 2003
+++ ircd-1.4-FreedomBG/src/channel_mode.c	Thu May 13 20:31:40 2004
@@ -21,7 +21,7 @@
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
  *
- *  $Id: channel_mode.c,v 7.107.2.7 2003/11/07 00:00:44 leeh Exp $
+ *  $Id: channel_mode.c,v 9.1 2004/05/07 11:01:22 castello Exp $
  */
 
 #include "stdinc.h"
@@ -333,6 +333,27 @@
 	if(chptr->mode.mode & MODE_NOPRIVMSGS)
 		*mbuf++ = 'n';
 
+#ifdef FreedomBG
+	if (chptr->mode.mode & MODE_NOCOLOR)
+    		*mbuf++ = 'c';
+        
+	// from ircd fuis
+	if (chptr->mode.mode & MODE_NOTALK)
+		*mbuf++ = 'M';
+	if (chptr->mode.mode & MODE_NOSPAM)
+		*mbuf++ = 'H';
+	if (chptr->mode.mode & MODE_NOREPEAT)
+		*mbuf++ = 'z';
+	if (chptr->mode.mode & MODE_NOCTCP)
+		*mbuf++ = 'C';
+	if (chptr->mode.mode & MODE_JOINF)
+		*mbuf++ = 'q';
+	if (chptr->mode.mode & MODE_ADMONLY)
+		*mbuf++ = 'A';
+	if (chptr->mode.mode & MODE_OPRONLY)
+		*mbuf++ = 'O';
+#endif /* FreedomBG */
+
 	if(chptr->mode.limit)
 	{
 		*mbuf++ = 'l';
@@ -1043,6 +1064,16 @@
 		return;
 	}
 
+#ifdef FreedomBG
+	
+	if ((dir == MODE_DEL) && s_check(opnick))
+	{
+        sendto_one(source_p, form_str(ERR_SERV_NICK),
+                 me.name, source_p->name, opnick);
+             return;
+	}
+#endif
+
 	if(MyClient(source_p) && (++mode_limit > MAXMODEPARAMS))
 		return;
 
@@ -1275,21 +1306,41 @@
 static struct ChannelMode ModeTable[255] =
 {
   {chm_nosuch, NULL},
+#ifdef FreedomBG
+  {chm_simple, (void *) MODE_ADMONLY},            /* A */
+#else
   {chm_nosuch, NULL},                             /* A */
+#endif
   {chm_nosuch, NULL},                             /* B */
+#ifdef FreedomBG
+  {chm_simple, (void *) MODE_NOCTCP},             /* C */
+#else
   {chm_nosuch, NULL},                             /* C */
+#endif
   {chm_nosuch, NULL},                             /* D */
   {chm_nosuch, NULL},                             /* E */
   {chm_nosuch, NULL},                             /* F */
   {chm_nosuch, NULL},                             /* G */
+#ifdef FreedomBG
+  {chm_simple, (void *) MODE_NOSPAM},             /* H */
+#else
   {chm_nosuch, NULL},                             /* H */
+#endif
   {chm_invex, NULL},                              /* I */
   {chm_nosuch, NULL},                             /* J */
   {chm_nosuch, NULL},                             /* K */
   {chm_nosuch, NULL},                             /* L */
+#ifdef FreedomBG
+  {chm_simple, (void *) MODE_NOTALK},             /* M */
+#else
   {chm_nosuch, NULL},                             /* M */
+#endif
   {chm_nosuch, NULL},                             /* N */
+#ifdef FreedomBG
+  {chm_simple, (void *) MODE_OPRONLY},            /* O */ 
+#else
   {chm_nosuch, NULL},                             /* O */
+#endif
   {chm_nosuch, NULL},                             /* P */
   {chm_nosuch, NULL},                             /* Q */
   {chm_nosuch, NULL},                             /* R */
@@ -1309,7 +1360,11 @@
   {chm_nosuch, NULL},
   {chm_nosuch, NULL},				  /* a */
   {chm_ban, NULL},                                /* b */
+#ifdef FreedomBG
+  {chm_simple, (void *) MODE_NOCOLOR},            /* c */
+#else
   {chm_nosuch, NULL},                             /* c */
+#endif
   {chm_nosuch, NULL},                             /* d */
   {chm_except, NULL},                             /* e */
   {chm_nosuch, NULL},                             /* f */
@@ -1323,7 +1378,11 @@
   {chm_simple, (void *) MODE_NOPRIVMSGS},         /* n */
   {chm_op, NULL},                                 /* o */
   {chm_simple, (void *) MODE_PRIVATE},            /* p */
+#ifdef FreedomBG
+  {chm_simple, (void *) MODE_JOINF},              /* q */
+#else
   {chm_nosuch, NULL},                             /* q */
+#endif
   {chm_nosuch, NULL},                             /* r */
   {chm_simple, (void *) MODE_SECRET},             /* s */
   {chm_simple, (void *) MODE_TOPICLIMIT},         /* t */
@@ -1332,7 +1391,11 @@
   {chm_nosuch, NULL},                             /* w */
   {chm_nosuch, NULL},                             /* x */
   {chm_nosuch, NULL},                             /* y */
+#ifdef FreedomBG
+  {chm_simple, (void *) MODE_NOREPEAT},           /* z */
+#else
   {chm_nosuch, NULL},                             /* z */
+#endif
 };
 /* *INDENT-ON* */
 
diff -uNrd ircd-ratbox-1.3-1/src/client.c ircd-1.4-FreedomBG/src/client.c
--- ircd-ratbox-1.3-1/src/client.c	Thu Nov 27 15:20:14 2003
+++ ircd-1.4-FreedomBG/src/client.c	Thu May 13 20:35:53 2004
@@ -21,7 +21,7 @@
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
  *
- *  $Id: client.c,v 7.385.2.13 2003/11/27 20:20:14 leeh Exp $
+ *  $Id: client.c,v 9.3 2005/05/27 22:22:11 castello Exp $
  */
 #include "stdinc.h"
 #include "config.h"
@@ -57,6 +57,10 @@
 #include "balloc.h"
 #include "listener.h"
 
+#ifdef FreedomBG
+#define SERVICESHOST	"FreedomBG.Services"
+#define GLINERHOST	"FreedomBG.Gliner"
+#endif
 
 static void check_pings_list(dlink_list * list);
 static void check_unknowns_list(dlink_list * list);
@@ -848,6 +852,30 @@
 			--Count.oper;
 		if(IsInvisible(client_p))
 			--Count.invisi;
+
+#ifdef FreedomBG
+		if (IsNSId(client_p)) {
+		    CurrentIdentUsers--;
+			if (CurrentIdentUsers < 0) {
+				CurrentIdentUsers = 0;
+		    }
+		}
+
+		if (IsGLId(client_p)) {
+		    CurrentGlinerUsers--;
+			if (CurrentGlinerUsers < 0) {
+				CurrentGlinerUsers = 0;
+            }
+		}
+
+		if (IsOSId(client_p)) {
+		    CurrentOSidUsers--;
+			if (CurrentOSidUsers < 0) {
+				CurrentOSidUsers = 0;
+            }
+        }
+#endif
+
 	}
 
 	if(splitchecking && !splitmode)
@@ -1147,6 +1175,41 @@
 		   (source_p->flags & FLAGS_KILLED) == 0)
 			sendto_one(target_p, ":%s SQUIT %s :%s", from->name, source_p->name,
 				   comment);
+
+#ifdef FreedomBG
+		if (!strcasecmp(GLINERHOST, source_p->name)) {
+			dlink_node *gptr;
+
+		    CurrentGlinerUsers = 0;
+			for (gptr = global_client_list.head; gptr; gptr = gptr->next) {
+				target_p = gptr->data;
+                if (IsServer(target_p) || IsMe(target_p))
+					    continue;
+				if (IsGLId(target_p)) {
+					   ClearGLId(target_p);
+			    }
+			}
+		}
+
+		if (!strcasecmp(SERVICESHOST, source_p->name)) {
+            dlink_node *ptr;
+	
+            CurrentIdentUsers = 0;
+            CurrentOSidUsers = 0;
+            for (ptr = global_client_list.head; ptr; ptr = ptr->next) {
+				target_p = ptr->data;
+                if (IsServer(target_p) || IsMe(target_p))
+					    continue;
+				if (IsNSId(target_p)) {
+                   ClearNSId(target_p);
+			    }
+                if (IsOSId(target_p)) {
+                   ClearOSId(target_p);
+			    }
+             } 
+        }
+#endif /* FreedomBG */
+
 	}
 	else if(IsPerson(source_p))	/* ...just clean all others with QUIT... */
 	{
@@ -1854,6 +1917,15 @@
 
 	del_all_accepts(source_p);
 
+#ifdef FreedomBG
+	if (IsNSId(source_p)) {
+        CurrentIdentUsers--;
+        if (CurrentIdentUsers < 0)
+                CurrentIdentUsers = 0;
+	    ClearNSId(source_p);
+	}
+#endif
+
 	/* fd_desc is long enough */
 	fd_note(client_p->localClient->fd, "Nick: %s", nick);
 
@@ -2078,3 +2150,70 @@
 		BlockHeapFree(user_heap, user);
 	}
 }
+
+#ifdef FreedomBG
+
+static char cyr2lat[] = {
+  'A', 'B', 'V', 'G', 'D', 'E', 'Z', 'Z', 'I', 'J', 'K', 'L', 'M', 'N',
+  'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'C', '4', '6', '@', 'Y', '#',
+  'J', '#', 'U', 'Q',
+  'a', 'b', 'v', 'g', 'd', 'e', 'z', 'z', 'i', 'j', 'k', 'l', 'm', 'n',
+  'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', '4', '6', '@', 'y', '#',
+  'j', '#', 'u', 'q'
+};
+
+char *translate(struct Client *client_p, char *buf)
+{
+  unsigned char *p = buf;
+  int offset;
+
+  if (IsSetTransWin(client_p))
+    offset = 192;
+  else if (IsSetTransISO(client_p))
+    offset = 176;
+  else
+    return buf;
+
+  while (*p)
+  {
+	if ((*p >= offset) && (*p < offset + 2*32))
+  	  *p = cyr2lat[*p - offset];
+    ++p;
+  }
+
+  return buf;
+}
+
+void add_nokick_chan(struct Client * cptr, char * chan) {
+       dlink_node *nchptr;
+       struct Channel * chptr;
+	ilog(L_ALL,"Added %s to %s nokick",cptr->name,chan);
+       chptr = hash_find_channel(chan);
+       if (!chptr) return;
+       if ((nchptr = dlinkFind(&cptr->user->nokick, chptr)) == NULL)
+		dlinkAddAlloc(chptr, &cptr->user->nokick);
+
+}
+
+void del_nokick_chan(struct Client * cptr, char * chan) {
+       dlink_node *nchptr;
+       struct Channel * chptr;
+	ilog(L_ALL,"Deleted %s to %s nokick",cptr->name,chan);
+       chptr = hash_find_channel(chan);
+       if (!chptr) return;
+       if (nchptr = dlinkFind(&cptr->user->nokick, chptr))
+	    dlinkDestroy(nchptr, &cptr->user->nokick);
+
+}
+
+void clear_nokick_list(struct Client * cptr)  {
+       dlink_node *nchptr;
+       struct Channel * chptr;
+	
+		DLINK_FOREACH(nchptr,cptr->user->nokick.head)
+	    {
+			dlinkDestroy(nchptr, &cptr->user->nokick);
+		}
+		ilog(L_DEBUG,"Nokick list for %s cleared!",cptr->name);
+}
+#endif
diff -uNrd ircd-ratbox-1.3-1/src/messages.tab ircd-1.4-FreedomBG/src/messages.tab
--- ircd-ratbox-1.3-1/src/messages.tab	Thu Nov 20 14:44:39 2003
+++ ircd-1.4-FreedomBG/src/messages.tab	Fri May 14 06:35:51 2004
@@ -21,11 +21,15 @@
 
 static  const char *  replies[] = {
 /* 000 */       NULL,
-/* 001  RPL_WELCOME, */ ":%s 001 %s :Welcome to the %s Internet Relay Chat Network %s",
+/* 001  RPL_WELCOME, */ ":%s 001 %s :Welcome to the %s IRC Network %s",
 /* 002  RPL_YOURHOST,*/ ":%s 002 %s :Your host is %s, running version %s",
-/* 003  RPL_CREATED, */ ":%s 003 %s :This server was created %s",
+/* 003  RPL_CREATED, */ ":%s 003 %s :This IRC server was created %s",
+#ifdef FreedomBG
+/* 004  RPL_MYINFO, */ ":%s 004 %s %s %s oiwszcerkfydnxbauglSTYZ biklmnopstveIqzACHMO bkloveI",
+#else
 /* 004  RPL_MYINFO, */ ":%s 004 %s %s %s oiwszcerkfydnxbauglZ biklmnopstveI bkloveI",
-/* 005  RPL_ISUPPORT, */ ":%s 005 %s %s :are supported by this server",
+#endif
+/* 005  RPL_ISUPPORT, */ ":%s 005 %s %s :are supported by this FreedomBG IRC Server",
 /* 006 */       NULL,
 /* 007 */       NULL,
 /* 008 */       NULL,
@@ -275,11 +279,11 @@
                 ":%s 250 %s :Highest connection count: %d (%d clients) (%d connections received)",
 /* 251 RPL_LUSERCLIENT, */
                 ":%s 251 %s :There are %d users and %d invisible on %d servers",
-/* 252 RPL_LUSEROP, */          ":%s 252 %s %d :IRC Operators online",
+/* 252 RPL_LUSEROP, */          ":%s 252 %s %d :IRC Operators and Helpers online",
 /* 253 RPL_LUSERUNKNOWN, */     ":%s 253 %s %d :unknown connection(s)",
 /* 254 RPL_LUSERCHANNELS, */    ":%s 254 %s %d :channels formed",
 /* 255 RPL_LUSERME, */          ":%s 255 %s :I have %d clients and %d servers",
-/* 256 RPL_ADMINME, */          ":%s 256 %s :Administrative info about %s",
+/* 256 RPL_ADMINME, */          ":%s 256 %s :Administrative INFO about %s",
 /* 257 RPL_ADMINLOC1, */        ":%s 257 %s :%s",
 /* 258 RPL_ADMINLOC2, */        ":%s 258 %s :%s",
 /* 259 RPL_ADMINEMAIL, */       ":%s 259 %s :%s",
@@ -287,13 +291,19 @@
 /* 261 RPL_TRACELOG, */         ":%s 261 %s File %s %d",
 /* 262 RPL_ENDOFTRACE, */       ":%s 262 %s %s :End of TRACE",
 /* 263 RPL_LOAD2HI, */          
-":%s 263 %s %s :Server load is temporarily too heavy. Please wait a while and try again.",
+":%s 263 %s %s :Please wait a while and try again ! Thanks ! /FreedomBG Team/",
 /* 264 */       NULL,
-/* 265 RPL_LOCALUSERS, */       ":%s 265 %s :Current local  users: %d  Max: %d",
-/* 266 RPL_GLOBALUSERS, */      ":%s 266 %s :Current global users: %d  Max: %d",
+/* 265 RPL_LOCALUSERS, */       ":%s 265 %s :Current Local  users: %d  Max: %d",
+/* 266 RPL_GLOBALUSERS, */      ":%s 266 %s :Current Global users: %d  Max: %d",
+#ifdef FreedomBG
+/* 267 RPL_IDENTUSERS, */       ":%s 267 %s :Current identified in NS users: %d  Max: %d",
+/* 268 RPL_OSIDUSERS, */        ":%s 268 %s :Current Services and Network Administrators: %d  Max: %d",
+/* 269 RPL_GLIDUSERS, */        ":%s 269 %s :Current NetKeepers and IRCd Developers: %d  Max: %d",
+#else
 /* 267 */       NULL,
 /* 268 */       NULL,
 /* 269 */       NULL,
+#endif
 /* 270 */       NULL,
 /* 271 */       NULL,
 /* 272 */       NULL,
@@ -349,9 +359,15 @@
 /* 322 RPL_LIST, */             ":%s 322 %s %s %d :%s",
 /* 323 RPL_LISTEND, */          ":%s 323 %s :End of /LIST",
 /* 324 RPL_CHANNELMODEIS, */    ":%s 324 %s %s %s %s",
+#ifdef FreedomBG
+/* 325 RPL_SILENCE */           ":%s 325 %s %s :is spam and abuse protected",
+/* 326 RPL_WHOISSVSHINT, */     ":%s 326 %s %s :has identified for: this nick",
+/* 327 RPL_OS_ID, */            ":%s 327 %s %s :is Services and Network Administrator",
+#else
 /* 325 */       NULL,
 /* 326 */       NULL,
 /* 327 */       NULL,
+#endif
 /* 328 */       NULL,
 /* 329 RPL_CREATIONTIME, */      ":%s 329 %s %s %lu", 
 /* 330 */       NULL,
@@ -405,7 +421,7 @@
 /* 378 */       NULL,
 /* 379 */       NULL,
 /* 380 */       NULL,
-/* 381 RPL_YOUREOPER, */        ":%s 381 %s :You have entered... the Vanity Zone!.",
+/* 381 RPL_YOUREOPER, */        ":%s 381 %s :You have entered...the FreedomBGs Dark Zone!",
 /* 382 RPL_REHASHING, */        ":%s 382 %s %s :Rehashing",
 /* 383 */       NULL,
 /* 384 RPL_MYPORTIS, */         ":%s 384 %s %d :Port to local server is",
@@ -439,7 +455,11 @@
 /* 412 ERR_NOTEXTTOSEND, */     ":%s 412 %s :No text to send",
 /* 413 ERR_NOTOPLEVEL, */       ":%s 413 %s %s :No toplevel domain specified",
 /* 414 ERR_WILDTOPLEVEL, */     ":%s 414 %s %s :Wildcard in toplevel Domain",
+#ifdef FreedomBG
+/* 415 ERR_SERV_NICK, */        ":%s 415 %s %s :- You can not kick(deop) Services!",
+#else
 /* 415 */       NULL,
+#endif
 /* 416 ERR_TOOMANYMATCHES */    ":%s 416 %s %s :output too large, truncated",
 /* 417 */       NULL,
 /* 418 */       NULL,
@@ -477,7 +497,11 @@
 /* 449 */       NULL,
 /* 450 */       NULL,
 /* 451 ERR_NOTREGISTERED, */    ":%s 451 %s :You have not registered",
+#ifdef FreedomBG
+/* 452 ERR_NOREPEATING, */      ":%s 452 %s %s :No repeating allowed (+z)",
+#else
 /* 452 */       NULL,
+#endif
 /* 453 */       NULL,
 /* 454 */       NULL,
 /* 455 */       NULL,
@@ -494,8 +518,13 @@
 /* 466 ERR_YOUWILLBEBANNED, */  NULL,
 /* 467 ERR_KEYSET, */           ":%s 467 %s %s :Channel key already set",
 /* 468 */       NULL,
+#ifdef FreedomBG
+/* 469 */			":%s 469 %s %s :This channel is ONLY for Server and Network Administrators!",
+/* 470 */       		":%s 470 %s %s :This channel is ONLY for IRC Operators ane Helpers!",
+#else
 /* 469 */       NULL,
 /* 470 */       NULL,
+#endif
 /* 471 ERR_CHANNELISFULL, */    ":%s 471 %s %s :Cannot join channel (+l)",
 /* 472 ERR_UNKNOWNMODE  , */    ":%s 472 %s %c :is unknown mode char to me",
 /* 473 ERR_INVITEONLYCHAN, */   ":%s 473 %s %s :Cannot join channel (+i)",
@@ -507,7 +536,7 @@
 /* 479 ERR_BADCHANNAME */       ":%s 479 %s %s :Illegal channel name",
 /* 480 */       NULL,
 /* 481 ERR_NOPRIVILEGES, */
-                ":%s 481 %s :Permission Denied - You're not an IRC operator",
+                ":%s 481 %s :Access Denied ! Go home and relax ! /FreedomBG Team/",
 /* 482 ERR_CHANOPRIVSNEEDED, */ ":%s 482 %s %s :You're not channel operator",
 /* 483 ERR_CANTKILLSERVER, */   ":%s 483 %s :You can't kill a server!",
 /* 484 ERR_RESTRICTED, */       ":%s 484 %s :You are restricted",
@@ -516,12 +545,23 @@
 /* 486 */       NULL,
 /* 487 */       NULL,
 /* 488 */       NULL,
+#ifdef FreedomBG
+/* 489 ERR_NOCOLOR, */ ":%s 489 %s %s :Colors are forbidden on this channel!",
+/* 490 ERR_JOINF, */   ":%s 490 %s %s :Can't join the channel, because your nick is either not regged or too young!",
+#else
 /* 489 */       NULL,
 /* 490 */       NULL,
-/* 491 ERR_NOOPERHOST, */       ":%s 491 %s :Only few of mere mortals may try to enter the twilight zone",
+#endif
+/* 491 ERR_NOOPERHOST, */       ":%s 491 %s :Only few of mere mortals may try to enter the Twilight Zone",
+#ifdef FreedomBG
+/* 492 ERR_NOCTCP, */           ":%s 492 %s %s :CTCP messages from non +v/+o/+h are forbidden!",
+/* 493 ERR_NOTALK, */           ":%s 493 %s %s :You can't talk on this channel, while your nickname is not regged ot regged too recently!",
+/* 494 ERR_NOSPAM, */           ":%s 494 %s %s :You can't send this to the channel, while it contains a spam phrase, if you think it's not contact the admin (/ADMIN)",
+#else
 /* 492 */       NULL,
 /* 493 */       NULL,
 /* 494 */       NULL,
+#endif
 /* 495 */       NULL,
 /* 496 */       NULL,
 /* 497 */       NULL,
@@ -743,7 +783,7 @@
 /* 713 ERR_CHANOPEN */		":%s 713 %s %s :Channel is open.",
 /* 714 ERR_KNOCKONCHAN */	":%s 714 %s %s :You are already on that channel.",
 /* 715 ERR_KNOCKDISABLED */	":%s 715 %s :KNOCKs are disabled.",
-/* 716 RPL_TARGUMODEG */	":%s 716 %s %s :is in +g mode (server-side ignore.)",
+/* 716 RPL_TARGUMODEG */	":%s 716 %s %s :is in (+g) mode (server-side ignore.)",
 /* 717 RPL_TARGNOTIFY */	":%s 717 %s %s :has been informed that you messaged them.",
 /* 718 RPL_UMODEGMSG */		":%s 718 %s %s %s@%s :is messaging you, and you have umode +g.",
 /* 719 */	NULL,
diff -uNrd ircd-ratbox-1.3-1/src/modules.c ircd-1.4-FreedomBG/src/modules.c
--- ircd-ratbox-1.3-1/src/modules.c	Thu Jun 26 10:03:16 2003
+++ ircd-1.4-FreedomBG/src/modules.c	Thu May 13 20:30:28 2004
@@ -590,6 +590,9 @@
 	mod_add_cmd(&squit_msgtab);
 	mod_add_cmd(&stats_msgtab);
 	mod_add_cmd(&svinfo_msgtab);
+#ifdef FreedomBG
+	mod_add_cmd(&svshint_msgtab);
+#endif
 	mod_add_cmd(&testline_msgtab);
 	mod_add_cmd(&time_msgtab);
 	mod_add_cmd(&topic_msgtab);
diff -uNrd ircd-ratbox-1.3-1/src/newconf.c ircd-1.4-FreedomBG/src/newconf.c
--- ircd-ratbox-1.3-1/src/newconf.c	Fri Dec 19 12:33:03 2003
+++ ircd-1.4-FreedomBG/src/newconf.c	Thu May 13 20:32:14 2004
@@ -3069,6 +3069,11 @@
 	add_top_conf("exempt", conf_begin_exempt, conf_end_exempt);
 	add_conf_item("exempt", "ip", CF_QSTRING, conf_set_exempt_ip);
 
+#ifdef FreedomBG
+	add_top_conf("spamcheck", NULL, NULL);
+	add_conf_item("spamcheck", "adv_text", CF_QSTRING, add_adv_text);
+#endif
+
 	add_top_conf("gecos", conf_begin_gecos, conf_end_gecos);
 	add_conf_item("gecos", "name", CF_QSTRING, conf_set_gecos_name);
 	add_conf_item("gecos", "reason", CF_QSTRING, conf_set_gecos_reason);
diff -uNrd ircd-ratbox-1.3-1/src/s_conf.c ircd-1.4-FreedomBG/src/s_conf.c
--- ircd-ratbox-1.3-1/src/s_conf.c	Fri Dec 19 12:33:03 2003
+++ ircd-1.4-FreedomBG/src/s_conf.c	Fri May 14 06:30:55 2004
@@ -117,6 +117,17 @@
 /* conf uline link list root */
 struct ConfItem *u_conf = ((struct ConfItem *) NULL);
 
+#ifdef FreedomBG
+struct DCCForb {
+  char *fileext;
+  struct DCCForb *next;
+};
+
+// static struct DCCForb *dccforb = NULL;
+
+static struct DCCForb *quitcheck = NULL;
+#endif
+
 /*
  * conf_dns_callback
  * inputs	- pointer to struct ConfItem
@@ -1279,8 +1290,8 @@
 	DupString(ConfigFileEntry.servlink_path, SLPATH);
 	ConfigFileEntry.egdpool_path = NULL;
 	ConfigFileEntry.use_whois_actually = YES;
-	strlcpy(ConfigFileEntry.default_operstring, "is an IRC Operator",sizeof(ConfigFileEntry.default_operstring));
-	strlcpy(ConfigFileEntry.default_adminstring, "is a Server Administrator", sizeof(ConfigFileEntry.default_adminstring));
+	strlcpy(ConfigFileEntry.default_operstring, "is an IRC Operator and Helper",sizeof(ConfigFileEntry.default_operstring));
+	strlcpy(ConfigFileEntry.default_adminstring, "is a Server and System Administrator", sizeof(ConfigFileEntry.default_adminstring));
 
 	ConfigFileEntry.reject_after_count = 5;
 	ConfigFileEntry.reject_ban_time = 300;
@@ -2575,3 +2586,27 @@
 	return (0);
 }
 
+#ifdef FreedomBG
+void add_adv_text(void *data)
+{
+  struct DCCForb *fileextf;
+  char * param = data;
+  if (!param[0]) return;
+
+  fileextf = (struct DCCForb*) MyMalloc(sizeof(struct DCCForb));
+  DupString(fileextf->fileext, param);
+  fileextf->next = quitcheck;
+  quitcheck = fileextf;
+}
+
+int IsAdvQuit(char *file)
+{
+  struct DCCForb *fileextf;
+
+  for (fileextf = quitcheck; fileextf; fileextf = fileextf->next)
+    if (match(fileextf->fileext, file))
+	  return 1;
+
+  return 0;
+}
+#endif
diff -uNrd ircd-ratbox-1.3-1/src/s_misc.c ircd-1.4-FreedomBG/src/s_misc.c
--- ircd-ratbox-1.3-1/src/s_misc.c	Sat Jun 28 07:39:49 2003
+++ ircd-1.4-FreedomBG/src/s_misc.c	Thu May 13 20:32:35 2004
@@ -21,7 +21,7 @@
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
  *
- *  $Id: s_misc.c,v 7.32.2.1 2003/06/28 11:39:49 leeh Exp $
+ *  $Id: s_misc.c,v 8.1 2005/05/22 03:33:00 castello Exp $
  */
 
 #include "stdinc.h"
@@ -52,6 +52,115 @@
 	"Sunday", "Monday", "Tuesday", "Wednesday",
 	"Thursday", "Friday", "Saturday"
 };
+
+#ifdef FreedomBG
+
+
+char* servnicks[] = {
+		 "NS",
+		 "MS",
+                 "CS",
+                 "OS",
+		 "HS",
+		 "AS",
+		 "SS",
+		 "TS",
+	       "INFO",
+           "HOSTSERV",
+	    "NETSERV",
+	    "NETLINK",
+	   "ROOTSERV",
+	        "TCM",
+	        "USR",
+                "BSH",
+           "STATSERV",
+               "SEEN",
+           "SEENSERV",
+          "ADMINSERV",
+          "SPLITSERV",
+	     "GLINER",
+	  "SOCKCLEAN",
+	    "MONITOR",
+	     "GLOBAL",
+	       "SEEN",
+	  	 "X",
+		 "Y"
+};
+#define ARR_SIZE 17 /* number of services' nicks.Increase or decrease as needed */
+
+/* s_check ()
+ * will scan for service-possible nick
+ *               
+ */
+
+long s_check( char * szName )
+{
+    int i = 0;
+    for( i=0;i<ARR_SIZE;i++)
+        if( !strcasecmp(szName, servnicks[i]))
+            return 1;
+    return 0;
+}
+
+/* end of s_check() */
+
+char *strip_color(const char *p, int b)
+{
+  static char buf[512];
+  char *r, *q = buf;
+  int m, n;
+
+  do switch (*p) {
+
+  case '\003':
+    p++; if (isdigit(*p)) {
+      p++; m = *p>='0' && *p<='6';
+      n = *(p-1)=='1' || *(p-1)=='0';
+      if (m && n) {
+        p++; if (*p == ',') {
+          p++; if (isdigit(*p)) {
+            p++; m = *p>='0' && *p<='6';
+            n = *(p-1)=='1' || *(p-1)=='0';
+            if (m && n) {
+              p++;
+            }
+          }
+        }
+      } else if (*p == ',') {
+        p++; if (isdigit(*p)) {
+          p++; m = *p>='0' && *p<='6';
+          n = *(p-1)=='1' || *(p-1)=='0';
+          if (m && n) {
+            p++;
+          }
+        }
+      }
+    }
+    break;
+
+  case '\033':
+    p++; if (*p == '[') {
+      p++; r = strchr(p, 'm');
+      if (r) p = r + 1;
+    }
+    break;
+
+  case '\002':
+  case '\037':
+    if (b) {
+      p++; break;
+    }
+
+  default:
+    *q++ = *p++;
+    break;
+
+  } while (*p);
+
+  *q = 0;
+  return buf;
+}
+#endif /* FreedomBG */
 
 char *
 date(time_t lclock)
diff -uNrd ircd-ratbox-1.3-1/src/s_serv.c ircd-1.4-FreedomBG/src/s_serv.c
--- ircd-ratbox-1.3-1/src/s_serv.c	Mon Dec  1 16:00:09 2003
+++ ircd-1.4-FreedomBG/src/s_serv.c	Thu May 13 20:32:59 2004
@@ -73,6 +73,15 @@
 int MaxClientCount = 1;
 int refresh_user_links = 0;
 
+#ifdef FreedomBG
+int CurrentIdentUsers  = 0;
+int MaxIdentUsers  = 0;
+int CurrentOSidUsers = 0;
+int MaxOSidUsers = 0;
+int CurrentGlinerUsers = 0;
+int MaxGlinerUsers = 0;
+#endif
+
 static void start_io(struct Client *server);
 
 static SlinkRplHnd slink_error;
@@ -781,6 +790,10 @@
 sendnick_TS(struct Client *client_p, struct Client *target_p)
 {
 	static char ubuf[12];
+#ifdef FreedomBG
+    dlink_node *nchptr;
+    struct Channel * chptr;
+#endif
 
 	if(!IsPerson(target_p))
 		return;
@@ -799,6 +812,22 @@
 			   ubuf,
 			   target_p->username, target_p->host,
 			   target_p->user->server, target_p->info);
+#ifdef FreedomBG
+		if (IsNSId(target_p))
+			sendto_one(client_p, "SVSHINT NSID %s 1", target_p->name);
+
+        if (IsOSId(target_p))
+	        sendto_one(client_p, "SVSHINT OSID %s 1", target_p->name);
+
+        if (IsGLId(target_p))
+		    sendto_one(client_p, "SVSHINT NK %s 1", target_p->name);
+
+		DLINK_FOREACH(nchptr,target_p->user->nokick.head)
+	    {
+			chptr = nchptr->data;
+			sendto_one(client_p,"SVSHINT NOKICK %s %s 1",target_p->name,chptr->chname);
+	    }
+#endif
 }
 
 /*
diff -uNrd ircd-ratbox-1.3-1/src/s_user.c ircd-1.4-FreedomBG/src/s_user.c
--- ircd-ratbox-1.3-1/src/s_user.c	Thu Dec  4 15:30:38 2003
+++ ircd-1.4-FreedomBG/src/s_user.c	Fri May 14 07:32:58 2004
@@ -92,6 +92,11 @@
 	{UMODE_EXTERNAL, 'x'},
 	{UMODE_SPY, 'y'},
 	{UMODE_OPERWALL, 'z'},
+#ifdef FreedomBG
+	{FLAGS_SILENCE, 'S'},
+    {FLAGS_TRANSWIN, 'T'},
+	{FLAGS_TRANSISO, 'Y'},
+#endif
 	{UMODE_OPERSPY, 'Z'},
 	{0, 0}
 };
@@ -122,13 +127,22 @@
 	0,			/* P */
 	0,			/* Q */
 	0,			/* R */
+#ifdef FreedomBG
+    FLAGS_SILENCE,		/* S */
+	FLAGS_TRANSWIN,		/* T */
+#else
 	0,			/* S */
 	0,			/* T */
+#endif
 	0,			/* U */
 	0,			/* V */
 	0,			/* W */
 	0,			/* X */
+#ifdef FreedomBG
+    FLAGS_TRANSISO, 	/* Y */
+#else
 	0,			/* Y */
+#endif
 	UMODE_OPERSPY,		/* Z 0x5A */
 	0, 0, 0, 0, 0,		/* 0x5F */
 	/* 0x60 */ 0,
@@ -214,6 +228,16 @@
 
 	sendto_one(source_p, form_str(RPL_GLOBALUSERS), me.name, source_p->name,
 		   Count.total, Count.max_tot);
+#ifdef FreedomBG
+    sendto_one(source_p, form_str(RPL_IDENTUSERS), me.name, source_p->name,
+             CurrentIdentUsers, MaxIdentUsers);
+
+    sendto_one(source_p, form_str(RPL_OSIDUSERS), me.name, source_p->name,
+             CurrentOSidUsers, MaxOSidUsers);
+
+    sendto_one(source_p, form_str(RPL_GLIDUSERS), me.name, source_p->name,
+             CurrentGlinerUsers, MaxGlinerUsers);
+#endif
 
 	if(!ConfigServerHide.hide_servers || IsOper(source_p))
 		sendto_one(source_p, form_str(RPL_STATSCONN), me.name, source_p->name,
@@ -1026,6 +1050,14 @@
 				break;
 			}
 
+#ifdef FreedomBG
+	if (MyConnect(source_p) && !(setflags & FLAGS_SILENCE) && (HasSilence(source_p)))
+	{
+	    sendto_one(source_p,":%s NOTICE %s :You have put Silence mode on your nickname (+S). You will NOT receive any private messages, ctcps, notices from unregistered (too recently registered) nicknames",
+				   me.name, parv[0]);
+	}
+#endif
+
 	if(badflag)
 		sendto_one(source_p, form_str(ERR_UMODEUNKNOWNFLAG), me.name, parv[0]);
 
@@ -1152,6 +1184,9 @@
 void
 user_welcome(struct Client *source_p)
 {
+#ifdef FreedomBG
+	struct Client * cptr;
+#endif
 	sendto_one(source_p, form_str(RPL_WELCOME), me.name, source_p->name,
 		   ServerInfo.network_name, source_p->name);
 	sendto_one(source_p, form_str(RPL_YOURHOST), me.name, source_p->name,
@@ -1183,6 +1218,53 @@
 	}
 	else
 		SendMessageFile(source_p, &ConfigFileEntry.motd);
+
+#ifdef FreedomBG
+	if (!(cptr = find_client("NS")) || !(cptr = find_client("CS"))) {
+		sendto_one(source_p, "NOTICE %s :*** Notice -- IRC Services [CS,NS,OS] are currently down!",
+		           source_p->name);
+                sendto_one(source_p, "NOTICE %s :*** Notice -- Do not try to identify your nick!",
+                           source_p->name);
+                sendto_one(source_p, "NOTICE %s :*** Notice -- Do not try to register a new channel or nick!",
+                           source_p->name);
+	}
+#endif
+
+#ifdef FreedomBG
+        if (!(cptr = find_client("NetServ")) || !(cptr = find_client("SplitServ"))) {
+                sendto_one(source_p, "NOTICE %s :*** Notice -- Statistics Services are currently down!",
+                           source_p->name);
+        }
+#endif
+
+#ifdef FreedomBG
+        if (!(cptr = find_client("SeenServ"))) {
+                sendto_one(source_p, "NOTICE %s :*** Notice -- SeenServ is currently down!",
+                           source_p->name);
+        }
+#endif
+
+#ifdef FreedomBG
+        if (!(cptr = find_client("Gliner"))) {
+                sendto_one(source_p, "NOTICE %s :*** Notice -- Gliner is currently down!",
+                           source_p->name);
+        }
+#endif
+
+#ifdef FreedomBG
+        if ((cptr = find_client("castello"))) {
+                sendto_one(source_p, "NOTICE %s :*** WARNING -- castello [The IRCd® Developer] is currently online!",
+                           source_p->name);
+        }
+#endif
+
+#ifdef FreedomBG
+        if ((cptr = find_client("php|aL"))) {
+                sendto_one(source_p, "NOTICE %s :*** WARNING -- php|aL [The Service® Developer] is currently online!",
+                           source_p->name);
+        }
+#endif
+
 
 	if(IsRestricted(source_p))
 	{
