mirror of
https://github.com/unrealircd/unrealircd.git
synced 2026-06-27 12:46:38 +02:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5f49057d01 | |||
| 7c8ad67b28 |
@@ -1,20 +0,0 @@
|
||||
|
||||
_ _ _ ___________ _____ _
|
||||
| | | | | |_ _| ___ \/ __ \ | |
|
||||
| | | |_ __ _ __ ___ __ _| | | | | |_/ /| / \/ __| |
|
||||
| | | | '_ \| '__/ _ \/ _ | | | | | / | | / _ |
|
||||
| |_| | | | | | | __/ (_| | |_| |_| |\ \ | \__/\ (_| |
|
||||
\___/|_| |_|_| \___|\__,_|_|\___/\_| \_| \____/\__,_|
|
||||
|
||||
Configuration Program
|
||||
for Unreal3.2
|
||||
|
||||
This program will help you to compile your IRC server, and ask you
|
||||
questions regarding the compile-time settings of it during the process.
|
||||
regarding the setup of it, during the process.
|
||||
|
||||
If you have problems regarding the setup & compile, read Unreal.nfo to get
|
||||
more information on where to get help. Please, before running this setup,
|
||||
read the documentation in the "doc" folder. Docs are also avail online @
|
||||
http://www.unrealircd.com/unreal32docs.html
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
|
||||
Configuration rant, by Stskeeps
|
||||
--------------------------------
|
||||
|
||||
Right.. so you think you are done now, you can boot your IRCd and be happy,
|
||||
and it just works. No, you still got a lot to do. You need to read all of
|
||||
the documentation through. Would you even have made it this far without
|
||||
makeconf?.
|
||||
|
||||
Well, today, people think they can be 3 months on IRC, and be ready to run
|
||||
an IRC daemon. I hate to say this, but I don't think so.
|
||||
|
||||
If you cannot read an IRC help file, or understand what stuff like "desynch",
|
||||
"masskill", "k-line", or what "mode # +l 5" means - or you got no experince
|
||||
in the UNIX field at all, like, you MUST know how to invoke a editor in a
|
||||
shell, or to unzip a file. If you don't know/can do these things, I suggest
|
||||
you stop trying to set this up, and go read on some UNIX tutorials, and IRC
|
||||
tutorials. It takes a LOT of work to run a IRC server good.
|
||||
|
||||
I mean. I sit on the #unreal-support support channel each day, and I see
|
||||
countless questions about stuff that IS IN the documentation. Numerous
|
||||
people don't even bother to look at the config files (CONFIG_FILE_STOP
|
||||
problem).
|
||||
|
||||
You need to look at the documentation now. You need to see how to "include"
|
||||
other configuration files. You need to know how to work out how to use
|
||||
doc/example.settings. I can only tell you, if you ask for support, and it
|
||||
is for errors that you could solve by reading the first lines of a document,
|
||||
then you'll be firmly ignored. I'm sorry, we cannot help your laziness.
|
||||
|
||||
Anyhow, good luck with setting this up. Hope you understand what I am saying
|
||||
here. You will learn a lot more reading, than just ignoring what we are
|
||||
saying.
|
||||
|
||||
--Stskeeps
|
||||
@@ -1,50 +0,0 @@
|
||||
|
||||
Unreal3.2 Release Notes
|
||||
========================
|
||||
|
||||
==[ GENERAL INFORMATION ]==
|
||||
* If you are upgrading, make sure you run make clean and ./Config before doing make
|
||||
* The official UnrealIRCd documentation is doc/unreal32docs.html
|
||||
online version at: http://www.vulnscan.org/UnrealIrcd/unreal32docs.html
|
||||
FAQ: http://www.vulnscan.org/UnrealIrcd/faq/
|
||||
Read them before asking for help.
|
||||
* Report bugs at http://bugs.unrealircd.org/
|
||||
|
||||
== [ NEW ]==
|
||||
- Added german docs (doc/unreal32docs.de.html)
|
||||
- In a spamfilter reason field '_' gets converted to a space (' '),
|
||||
now also added '__' which gets converted to underscore itself ('_').
|
||||
|
||||
==[ MAJOR BUGS FIXED ]==
|
||||
- '/spamfiltere remove' was often removing the wrong entry (RC2 bug)
|
||||
- The TRE regex library was sometimes matching too much if [range].+
|
||||
was used multiple times.
|
||||
- Fixed a remote include issue and added timeouts in case a connection/transfer fails
|
||||
|
||||
==[ MINOR BUGS FIXED ]==
|
||||
- Sometimes hosts were not resolved on Windows due to a resolver bug
|
||||
- spamfilter and sqline: memory leak on /rehash (a few kb)
|
||||
- spamfilter: protect against insane long reason/regex fields in configfile
|
||||
- set::modes-on-join now accepts extended channelmodes
|
||||
- Opteron: various crashbugs fixed, should work ok now.
|
||||
- Win32 GUI "rehash all" option did not reload motd/rules.
|
||||
- Same for ./unreal rehash on *NIX
|
||||
- Usermode 'r' (registered) was unset if you changed the case of your
|
||||
nick (eg: 'blah'->'Blah'), this affected at least ircservices.
|
||||
- vhost::swhois wasn't shown if you did a remote /whois.
|
||||
- Made './curlinstall' work with new c-ares-1.0.0.
|
||||
- Fixed compile problem on some machines related to TRE / libintl.
|
||||
- /who +m was incorrectly hiding +H users even for opers.
|
||||
- Fixed /rehash bug if an .so or remote include didn't load properly
|
||||
|
||||
==[ CHANGED ]==
|
||||
- spamfilter.conf: fixed fyle sig, added sigs for: soex, Nkie, LOI, Gaggle,
|
||||
changed a lot of sigs from block to gline.
|
||||
- Windows: now using new Inno Setup which made the installer 300k smaller
|
||||
- Docs, help.conf and other text updates.
|
||||
|
||||
==[ COMMING UP ]==
|
||||
- You can expect module support on windows in a nearby release.
|
||||
|
||||
==[ ADDITIONAL INFO ]==
|
||||
* See Changelog
|
||||
@@ -1,15 +0,0 @@
|
||||
|-------------------------------------------------------------------------|
|
||||
| Congratulations on your new SSL self-signed certificate for your IRCd. |
|
||||
| However, wouldn't it be better that you get your certifcate signed by |
|
||||
| some kind of Certification Authority (CA), so your users can check that |
|
||||
| they are really connected to the real server, so they feel secure? |
|
||||
| |
|
||||
| There is an initiative at CACert.org - They offer SSL Certificates |
|
||||
| for use with your IRCd for free, so your users can be sure that they |
|
||||
| can trust you and your server. |
|
||||
| |
|
||||
| To get a free signed certificate please visit http://www.CACert.org |
|
||||
| _________________________|
|
||||
| | Press enter to continue |
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
|
||||
_ _ _ ___________ _____ _
|
||||
| | | | | |_ _| ___ \/ __ \ | |
|
||||
| | | |_ __ _ __ ___ __ _| | | | | |_/ /| / \/ __| |
|
||||
| | | | '_ \| '__/ _ \/ _` | | | | | / | | / _` |
|
||||
| |_| | | | | | | __/ (_| | |_| |_| |\ \ | \__/\ (_| |
|
||||
\___/|_| |_|_| \___|\__,_|_|\___/\_| \_| \____/\__,_|
|
||||
|
||||
Update Script v2.0
|
||||
|
||||
What download program do you want to use?
|
||||
-----------------------------------------
|
||||
|
||||
Type "wget" for wget
|
||||
Type "lynx" for lynx
|
||||
|
||||
>
|
||||
@@ -1,77 +0,0 @@
|
||||
#
|
||||
# UnrealIRCd Bug Reporting Script
|
||||
# Copyright (c) 2001, The UnrealIRCd Team
|
||||
# All rights reserved
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||
# provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||
# and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
|
||||
# and the following disclaimer in the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# * Neither the name of the The UnrealIRCd Team nor the names of its contributors may be used
|
||||
# to endorse or promote products derived from this software without specific prior written permission.
|
||||
# * The source code may not be redistributed for a fee or in closed source
|
||||
# programs, without expressed oral consent by the UnrealIRCd Team, however
|
||||
# for operating systems where binary distribution is required, if URL
|
||||
# is passed with the package to get the full source
|
||||
# * No warranty is given unless stated so by the The UnrealIRCd Team
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'' AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
# First we define some nice settings and some nice functions
|
||||
set print pretty on
|
||||
|
||||
# dumplist <linked list> <structure format>
|
||||
define dumplist
|
||||
echo Dumping linked list $arg0 in format $arg1\n
|
||||
set $p = $arg0
|
||||
while $p
|
||||
print *($arg1 *) $p
|
||||
set $p = $p->next
|
||||
end
|
||||
end
|
||||
|
||||
# dumparray <name> <size>
|
||||
define dumparray
|
||||
echo Dumping array $arg0 size $arg1\n
|
||||
set $p = 0
|
||||
while $p < $arg1
|
||||
if $arg0[$p]
|
||||
print *$arg0[$p]
|
||||
end
|
||||
set $p = $p + 1
|
||||
end
|
||||
end
|
||||
|
||||
echo Full backtrace:\n
|
||||
echo ---------------\n
|
||||
echo \n
|
||||
bt full
|
||||
echo \n
|
||||
echo Backup parse() buffer:\n
|
||||
echo ----------------------\n
|
||||
echo \n
|
||||
print backupbuf
|
||||
echo \n
|
||||
echo me output:\n
|
||||
echo ----------------------\n
|
||||
print me
|
||||
echo \n
|
||||
echo IRCstats:\n
|
||||
echo ----------------------\n
|
||||
print IRCstats
|
||||
echo \n
|
||||
echo Modules:\n
|
||||
echo ----------------------\n
|
||||
dumparray Modules 50
|
||||
quit
|
||||
@@ -1,6 +0,0 @@
|
||||
ircdcron/ircd.cron
|
||||
ircdcron/ircdchk
|
||||
src/modules/Makefile
|
||||
src/ssl.rnd
|
||||
src/win32/devel/StackTrace.lib
|
||||
src/win32/gnu_regex.lib
|
||||
Vendored
-52
@@ -1,52 +0,0 @@
|
||||
--leave-preprocessor-space
|
||||
--dont-break-procedure-type
|
||||
--no-space-after-function-call-names
|
||||
--brace-indent0
|
||||
--indent-level8
|
||||
-ip8
|
||||
--dont-line-up-parentheses
|
||||
--continuation-indentation4
|
||||
--case-indentation2
|
||||
--no-space-after-casts
|
||||
--blank-lines-after-procedures
|
||||
--no-blank-lines-after-declarations
|
||||
--braces-on-struct-decl-line
|
||||
--paren-indentation0
|
||||
--case-brace-indentation0
|
||||
--line-length80
|
||||
--declaration-indentation5
|
||||
-T size_t
|
||||
-T aClass
|
||||
-T TS
|
||||
-T aClient
|
||||
-T aServer
|
||||
-T anUser
|
||||
-T aChannel
|
||||
-T Mode
|
||||
-T aConfItem
|
||||
-T aMessage
|
||||
-T aMessageTree
|
||||
-T aGline
|
||||
-T aListingArgs
|
||||
-T snomask_t
|
||||
-T n_short
|
||||
-T n_long
|
||||
-T n_time
|
||||
-T u_char
|
||||
-T u_short
|
||||
-T u_long
|
||||
-T u_int
|
||||
-T dbuf
|
||||
-T dbufbuf
|
||||
-T aHashEntry
|
||||
-T Link
|
||||
-T Dlink
|
||||
-T VOIDSIG
|
||||
-T aHostent
|
||||
-T ResRQ
|
||||
-T aCache
|
||||
-T CacheTable
|
||||
-T cainfo
|
||||
-T reinfo
|
||||
-T RETSIGTYPE
|
||||
-T OPT_TYPE
|
||||
-1751
File diff suppressed because it is too large
Load Diff
@@ -1,647 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Config script for UnrealIRCd
|
||||
# (C) 2001 The UnrealIRCd Team
|
||||
#
|
||||
# This configure script is free software; the UnrealIRCd Team gives
|
||||
# unlimited permission to copy, distribute and modify as long as the
|
||||
# copyright headers stay intact
|
||||
#
|
||||
#
|
||||
# Rewritten completely to be an interface to autoconf by codemastr
|
||||
# This was inspired by the config by Michael Graff (explorer@flame.org)
|
||||
# but was written from scratch
|
||||
|
||||
# In order to be faster than the old Config, this assumes that all information
|
||||
# in the cache file is valid and therefore doesn't check it, so if you messed with
|
||||
# default values thats your problem :P
|
||||
|
||||
# some bits edited by baafie on March 17 2004, every change marked.
|
||||
|
||||
|
||||
RUN_CONFIGURE () {
|
||||
ARG=""
|
||||
if [ "$NOSPOOF" = "1" ] ; then
|
||||
ARG="$ARG--enable-nospoof "
|
||||
fi
|
||||
if [ -n "$HUB" ] ; then
|
||||
ARG="$ARG--enable-hub "
|
||||
fi
|
||||
if [ "$CRYPTOIRCD" = "1" ] ; then
|
||||
if test x"$SSLDIR" = "x" ; then
|
||||
ARG="$ARG--enable-ssl "
|
||||
else
|
||||
ARG="$ARG--enable-ssl=$SSLDIR "
|
||||
fi
|
||||
fi
|
||||
if [ "$ZIPLINKS" = "1" ] ; then
|
||||
if test x"$ZIPLINKSDIR" = "x" ; then
|
||||
ARG="$ARG--enable-ziplinks "
|
||||
else
|
||||
ARG="$ARG--enable-ziplinks=$ZIPLINKSDIR "
|
||||
fi
|
||||
fi
|
||||
if [ "$REMOTEINC" = "1" ] ; then
|
||||
ARG="$ARG--enable-libcurl=$CURLDIR "
|
||||
fi
|
||||
if [ "$INET6" = "1" ] ; then
|
||||
ARG="$ARG--enable-inet6 "
|
||||
fi
|
||||
if [ "$PREFIXAQ" = "1" ]; then
|
||||
ARG="$ARG--enable-prefixaq "
|
||||
fi
|
||||
ARG="$ARG--with-listen=$LISTEN_SIZE "
|
||||
ARG="$ARG--with-dpath=$DPATH "
|
||||
ARG="$ARG--with-spath=$SPATH "
|
||||
ARG="$ARG--with-nick-history=$NICKNAMEHISTORYLENGTH "
|
||||
ARG="$ARG--with-sendq=$MAXSENDQLENGTH "
|
||||
ARG="$ARG--with-bufferpool=$BUFFERPOOL "
|
||||
ARG="$ARG--with-hostname=$DOMAINNAME "
|
||||
ARG="$ARG--with-permissions=$DEFPERM "
|
||||
ARG="$ARG--with-fd-setsize=$MAXCONNECTIONS "
|
||||
ARG="$ARG--enable-dynamic-linking "
|
||||
ARG="$ARG $EXTRAPARA "
|
||||
CONF="./configure $ARG"
|
||||
echo $CONF
|
||||
$CONF
|
||||
if [ "$CRYPTOIRCD" = "1" ] ; then
|
||||
if [ ! -f server.req.pem ]; then
|
||||
export OPENSSLPATH
|
||||
make pem
|
||||
cat .SICI
|
||||
read cc
|
||||
else
|
||||
echo "SSL certificate already existing, no need to regenerate"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
c=""
|
||||
n=""
|
||||
NOSPOOF=""
|
||||
DPATH="`pwd`"
|
||||
SPATH="`pwd`/src/ircd"
|
||||
HUB="1"
|
||||
DOMAINNAME=`hostname`
|
||||
DEFPERM="0600"
|
||||
CRYPTOIRCD=""
|
||||
SSLDIR=""
|
||||
ZIPLINKS=""
|
||||
ZIPLINKSDIR=""
|
||||
LISTEN_SIZE="5"
|
||||
NICKNAMEHISTORYLENGTH="2000"
|
||||
MAXSENDQLENGTH="3000000"
|
||||
BUFFERPOOL="18"
|
||||
MAXCONNECTIONS="1024"
|
||||
INET6=""
|
||||
REMOTEINC=""
|
||||
CURLDIR=""
|
||||
PREFIXAQ=""
|
||||
EXTRAPARA=""
|
||||
if [ "`eval echo -n 'a'`" = "-n a" ] ; then
|
||||
c="\c"
|
||||
else
|
||||
n="-n"
|
||||
fi
|
||||
|
||||
|
||||
#parse arguments
|
||||
NOCACHE=""
|
||||
NOINTRO=""
|
||||
if [ "$1" = "--help" ] ; then
|
||||
echo "Config utility for UnrealIRCd"
|
||||
echo "-----------------------------"
|
||||
echo "Syntax: ./Config [options]"
|
||||
echo "-nocache Ignore settings saved in config.settings"
|
||||
echo "-nointro Skip intro (release notes, etc)"
|
||||
echo "-quick Skip questions, go straight to configure"
|
||||
echo "-C Clean ./configure cache"
|
||||
exit 0
|
||||
fi
|
||||
if [ "$1" = "-nocache" -o "$2" = "-nocache" ] ; then
|
||||
NOCACHE="1"
|
||||
fi
|
||||
if [ "$1" = "-nointro" -o "$2" = "-nointro" ] ; then
|
||||
NOINTRO="1"
|
||||
fi
|
||||
|
||||
if [ -f "config.settings" -a -z "$NOCACHE" ] ; then
|
||||
. config.settings
|
||||
fi
|
||||
|
||||
if [ "$1" = "-C" -o "$2" = "-C" ] ; then
|
||||
rm -f config.cache
|
||||
fi
|
||||
|
||||
if [ "$1" = "-quick" -o "$1" = "-q" -o "$2" = "-quick" ] ; then
|
||||
echo "running quick config"
|
||||
RUN_CONFIGURE
|
||||
exit 0
|
||||
fi
|
||||
|
||||
clear
|
||||
|
||||
if [ -f ".CHANGES.NEW" -a -z "$NOINTRO" ] ; then
|
||||
more .CHANGES.NEW
|
||||
echo $n "[Enter to continue]"
|
||||
read cc
|
||||
clear
|
||||
fi
|
||||
if [ -f ".RELEASE.NOTES" -a -z "$NOINTRO" ] ; then
|
||||
more .RELEASE.NOTES
|
||||
echo $n "[Enter to continue]"
|
||||
read cc
|
||||
clear
|
||||
fi
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
if [ "$NOSPOOF" = "1" ] ; then
|
||||
TEST="Yes"
|
||||
else
|
||||
TEST="No"
|
||||
fi
|
||||
echo ""
|
||||
echo "Many older operating systems have an insecure TCP/IP stack"
|
||||
echo "which may be vulnerable to IP spoofing attacks, if you run"
|
||||
echo "an operating system that is vulnerable to such attacks"
|
||||
echo "enable this option. This option can also be useful to prevent"
|
||||
echo "blind proxies from connecting (eg: HTTP POST proxies)."
|
||||
echo ""
|
||||
echo "Do you want to enable the server anti-spoof protection?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
fi
|
||||
case "$cc" in
|
||||
[Yy]*)
|
||||
NOSPOOF="1"
|
||||
;;
|
||||
[Nn]*)
|
||||
NOSPOOF=""
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Yes or No"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
TEST="$DPATH"
|
||||
echo ""
|
||||
echo "What directory are all the server configuration files in?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
DPATH=$TEST
|
||||
else
|
||||
DPATH=`eval echo $cc` # modified
|
||||
fi
|
||||
|
||||
TEST="$SPATH"
|
||||
echo ""
|
||||
echo "What is the path to the ircd binary including the name of the binary?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
SPATH=$TEST
|
||||
else
|
||||
SPATH=`eval echo $cc` # modified
|
||||
fi
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
if [ "$HUB" = "1" ] ; then
|
||||
TEST="Hub"
|
||||
else
|
||||
TEST="Leaf"
|
||||
fi
|
||||
echo ""
|
||||
echo "Would you like to compile as a hub or as a leaf?"
|
||||
echo "Type Hub to select hub and Leaf to select leaf."
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
fi
|
||||
case "$cc" in
|
||||
[Hh]*)
|
||||
HUB="1"
|
||||
;;
|
||||
[Ll]*)
|
||||
HUB=""
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Hub or Leaf"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
TEST="$DOMAINNAME"
|
||||
echo ""
|
||||
echo "What is the hostname of the server running your IRCd?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
DOMAINNAME=$TEST
|
||||
else
|
||||
DOMAINNAME=`eval echo $cc` # modified
|
||||
fi
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="$DEFPERM"
|
||||
echo ""
|
||||
echo "What should the default permissions for your configuration files be? (Set this to 0 to disable)"
|
||||
echo "It is strongly recommended that you use 0600 to prevent unwanted reading of the file"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
DEFPERM=$TEST
|
||||
break
|
||||
fi
|
||||
case "$cc" in
|
||||
[0-9]*)
|
||||
DEFPERM="$cc"
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter a number"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
|
||||
done
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
if [ "$CRYPTOIRCD" = "1" ] ; then
|
||||
TEST="Yes"
|
||||
else
|
||||
TEST="No"
|
||||
fi
|
||||
echo ""
|
||||
echo "Do you want to support SSL (Secure Sockets Layer) connections?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
fi
|
||||
case "$cc" in
|
||||
[Yy]*)
|
||||
CRYPTOIRCD="1"
|
||||
;;
|
||||
[Nn]*)
|
||||
CRYPTOIRCD=""
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Yes or No"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "$CRYPTOIRCD" = "1" ] ; then
|
||||
TEST=""
|
||||
echo ""
|
||||
echo "If you know the path to OpenSSL on your system, enter it here. If not"
|
||||
echo "leave this blank"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
SSLDIR=""
|
||||
else
|
||||
SSLDIR=`eval echo $cc` # modified
|
||||
fi
|
||||
fi
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
if [ "$INET6" = "1" ] ; then
|
||||
TEST="Yes"
|
||||
else
|
||||
TEST="No"
|
||||
fi
|
||||
echo ""
|
||||
echo "Do you want to enable IPv6 support?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
fi
|
||||
case "$cc" in
|
||||
[Yy]*)
|
||||
INET6="1"
|
||||
;;
|
||||
[Nn]*)
|
||||
INET6=""
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Yes or No"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
if [ "$ZIPLINKS" = "1" ] ; then
|
||||
TEST="Yes"
|
||||
else
|
||||
TEST="No"
|
||||
fi
|
||||
echo ""
|
||||
echo "Do you want to enable ziplinks support?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
fi
|
||||
case "$cc" in
|
||||
[Yy]*)
|
||||
ZIPLINKS="1"
|
||||
;;
|
||||
[Nn]*)
|
||||
ZIPLINKS=""
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Yes or No"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "$ZIPLINKS" = "1" ] ; then
|
||||
TEST=""
|
||||
echo ""
|
||||
echo "If you know the path to zlib on your system, enter it here. If not"
|
||||
echo "leave this blank"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
ZIPLINKSDIR=""
|
||||
else
|
||||
ZIPLINKSDIR=`eval echo $cc` # modified
|
||||
fi
|
||||
fi
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
if [ "$REMOTEINC" = "1" ] ; then
|
||||
TEST="Yes"
|
||||
else
|
||||
TEST="No"
|
||||
fi
|
||||
echo ""
|
||||
echo "Do you want to enable remote includes?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
fi
|
||||
case "$cc" in
|
||||
[Yy]*)
|
||||
REMOTEINC="1"
|
||||
;;
|
||||
[Nn]*)
|
||||
REMOTEINC=""
|
||||
CURLDIR=""
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Yes or No"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "$REMOTEINC" = "1" ] ; then
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="$CURLDIR"
|
||||
echo ""
|
||||
echo "Specify the directory you installed libcurl to"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
else
|
||||
TEST=$cc
|
||||
CURLDIR=`eval echo $cc` # modified
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
if [ "$PREFIXAQ" = "1" ] ; then
|
||||
TEST="Yes"
|
||||
else
|
||||
TEST="No"
|
||||
fi
|
||||
echo ""
|
||||
echo "Do you want to enable prefixes for chanadmin and chanowner?"
|
||||
echo "This will give +a the & prefix and ~ for +q (just like +o is @)"
|
||||
echo "Supported by the major clients (mIRC, xchat, epic, eggdrop, Klient, PJIRC, etc.)"
|
||||
echo "with the notable exceptions of irssi, KVIrc and CGI:IRC."
|
||||
echo "This feature should be enabled/disabled network-wide."
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
fi
|
||||
case "$cc" in
|
||||
[Yy]*)
|
||||
PREFIXAQ="1"
|
||||
;;
|
||||
[Nn]*)
|
||||
PREFIXAQ=""
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Yes or No"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="$LISTEN_SIZE"
|
||||
echo ""
|
||||
echo "What listen() backlog value do you wish to use? Some older servers"
|
||||
echo "have problems with more than 5, others work fine with many more."
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
LISTEN_SIZE=$TEST
|
||||
break
|
||||
fi
|
||||
case "$cc" in
|
||||
[1-9]*)
|
||||
LISTEN_SIZE="$cc"
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter a number"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="$NICKNAMEHISTORYLENGTH"
|
||||
echo ""
|
||||
echo "How far back do you want to keep the nickname history?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
NICKNAMEHISTORYLENGTH=$TEST
|
||||
break
|
||||
fi
|
||||
case "$cc" in
|
||||
[1-9]*)
|
||||
NICKNAMEHISTORYLENGTH="$cc"
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter a number"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="$MAXSENDQLENGTH"
|
||||
echo ""
|
||||
echo "What is the maximum sendq length you wish to have?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
MAXSENDQLENGTH=$TEST
|
||||
break
|
||||
fi
|
||||
case "$cc" in
|
||||
[1-9][0-9][0-9][0-9]*)
|
||||
MAXSENDQLENGTH="$cc"
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter a number greater than or equal to 1000"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="$BUFFERPOOL"
|
||||
echo ""
|
||||
echo "How many buffer pools would you like?"
|
||||
echo "This number will be multiplied by MAXSENDQLENGTH."
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
BUFFERPOOL=$TEST
|
||||
break
|
||||
fi
|
||||
case "$cc" in
|
||||
[1-9]*)
|
||||
BUFFERPOOL="$cc"
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter a number"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
|
||||
done
|
||||
|
||||
echo ""
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="$MAXCONNECTIONS"
|
||||
echo ""
|
||||
echo "How many file descriptors (or sockets) can the IRCd use?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
MAXCONNECTIONS=$TEST
|
||||
break
|
||||
fi
|
||||
case "$cc" in
|
||||
[1-9][0-9][0-9]*)
|
||||
MAXCONNECTIONS="$cc"
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must to enter a number greater than or equal to 100"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Would you like any more parameters to configure?"
|
||||
echo "Write them here:"
|
||||
echo $n "[]-> $c"
|
||||
read EXTRAPARA
|
||||
|
||||
rm -f config.settings
|
||||
cat > config.settings << __EOF__
|
||||
#
|
||||
NOSPOOF="$NOSPOOF"
|
||||
DPATH="$DPATH"
|
||||
SPATH="$SPATH"
|
||||
INET6="$INET6"
|
||||
PREFIXAQ="$PREFIXAQ"
|
||||
LISTEN_SIZE="$LISTEN_SIZE"
|
||||
MAXSENDQLENGTH="$MAXSENDQLENGTH"
|
||||
BUFFERPOOL="$BUFFERPOOL"
|
||||
MAXCONNECTIONS="$MAXCONNECTIONS"
|
||||
NICKNAMEHISTORYLENGTH="$NICKNAMEHISTORYLENGTH"
|
||||
HUB="$HUB"
|
||||
DOMAINNAME="$DOMAINNAME"
|
||||
DEFPERM="$DEFPERM"
|
||||
CRYPTOIRCD="$CRYPTOIRCD"
|
||||
SSLDIR="$SSLDIR"
|
||||
ZIPLINKS="$ZIPLINKS"
|
||||
ZIPLINKSDIR="$ZIPLINKSDIR"
|
||||
REMOTEINC="$REMOTEINC"
|
||||
CURLDIR="$CURLDIR"
|
||||
EXTRAPARA="$EXTRAPARA"
|
||||
__EOF__
|
||||
RUN_CONFIGURE
|
||||
cat << __EOF__
|
||||
|
||||
_______________________________________________________________________
|
||||
| |
|
||||
| UnrealIRCd Compile-Time Config |
|
||||
|_______________________________________________________________________|
|
||||
|_______________________________________________________________________|
|
||||
| |
|
||||
| Now all you have to do is type 'make' and let it compile. When that's |
|
||||
| done, you will receive other instructions on what to do next. |
|
||||
| |
|
||||
|_______________________________________________________________________|
|
||||
|_______________________________________________________________________|
|
||||
| - The UnrealIRCd Team - |
|
||||
| |
|
||||
| * Stskeeps stskeeps@unrealircd.com |
|
||||
| * codemastr codemastr@unrealircd.com |
|
||||
| * Syzop syzop@unrealircd.com |
|
||||
|_______________________________________________________________________|
|
||||
__EOF__
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
UnrealIRCd is a free program, but we do put a lot of time, effort, and money
|
||||
into creating and maintaining Unreal. To make it easier for user's to show their
|
||||
appreciation, the Unreal team has decided to accept donations through PayPal. If
|
||||
you like Unreal, and you'd like to see it continue to exist, please consider making
|
||||
a donation. We're not asking for anything huge, whatever you can afford is fine.
|
||||
|
||||
PayPal Donation Link:
|
||||
<https://www.paypal.com/xclick/business=donation%40unrealircd.com&
|
||||
item_name=UnrealIRCd+Donation&no_shipping=1&cn=Comments&tax=0¤cy_code=USD>
|
||||
|
||||
Or simply send a payment through PayPal to:
|
||||
donation@unrealircd.com
|
||||
|
||||
If you don't want to use PayPal, or you want to donate something other than money
|
||||
(old computer hardware, etc.), contact Stskeeps (stskeeps@unrealircd.com) and send
|
||||
your donation to:
|
||||
|
||||
UnrealIRCd Project
|
||||
C/O Carsten Munk
|
||||
P.O.Box 52
|
||||
7400 Herning
|
||||
Denmark
|
||||
|
||||
All those who donate at least $10 USD will have their name and/or company listed in /credits.
|
||||
Additionally, all donators will be listed on the website (regardless of the amount). To make
|
||||
this possible, please include along with your donation the name (or nickname) you want to
|
||||
appear in the list as well as the company name (or IRC server) to list.
|
||||
|
||||
Thank you for your support,
|
||||
The UnrealIRCd Team
|
||||
|
||||
[ $Id$ ]
|
||||
@@ -1,23 +0,0 @@
|
||||
**** Remote Includes ****
|
||||
|
||||
Setting up UnrealIRCd to work with remote includes is not very difficult. The first step is to
|
||||
download c-ares. C-ares can be downloaded from <http://daniel.haxx.se/projects/c-ares/>
|
||||
download the latest version of c-ares and extract the .tar.gz somewhere.
|
||||
|
||||
Now, download the latest version of curl, available at <http://curl.haxx.se/download.html>
|
||||
again, extract the tar.gz somewhere.
|
||||
|
||||
Next, go to the Unreal3.2 directory and run the curlinstall script. You run the script
|
||||
as follows:
|
||||
|
||||
./curlinstall ares_path curl_path
|
||||
|
||||
Paths should be complete pathnames. If you extracted c-ares to /home/username/c-ares-1.0.0
|
||||
and curl to /home/username/curl-7.11.0 then you would run:
|
||||
|
||||
./curlinstall /home/username/c-ares-1.0.0 /home/username/curl-7.11.0
|
||||
|
||||
Lastly, run ./Config. When asked whether to enable remote includes say "yes" and when asked
|
||||
for the path curl was installed to include the path that is printed out after ./curlinstall
|
||||
completes. Then simply run make to compile Unreal as usual and remote includes should work
|
||||
fine.
|
||||
@@ -1,340 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
||||
-246
@@ -1,246 +0,0 @@
|
||||
#/************************************************************************
|
||||
#* IRC - Internet Relay Chat, Makefile
|
||||
#* Copyright (C) 1990, Jarkko Oikarinen
|
||||
#*
|
||||
#* 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$
|
||||
#*/
|
||||
|
||||
CC=@CC@
|
||||
INCLUDEDIR=../include
|
||||
NETWORKSDIR=
|
||||
FROMDOS=/home/cmunk/bin/4dos
|
||||
|
||||
# [CHANGEME]
|
||||
# Default flags:
|
||||
# Change XCFLAGS if you don't like what Config puts there. Same with
|
||||
# IRCDLIBS.
|
||||
#
|
||||
# If you are configuring by hand, try "-O -g" for XCFLAGS, and leave
|
||||
# IRCDLIBS blank. If that fails, try recomendations below.
|
||||
#
|
||||
|
||||
#XCFLAGS=-O -g -export-dynamic
|
||||
IRCDLIBS=@IRCDLIBS@ @TRELIBS@
|
||||
CRYPTOLIB=@CRYPTOLIB@
|
||||
OPENSSLINCLUDES=
|
||||
|
||||
XCFLAGS=-I@TREINCDIR@ @CFLAGS@
|
||||
#
|
||||
# use the following on MIPS:
|
||||
#CFLAGS= -systype bsd43 -DSYSTYPE_BSD43 -I$(INCLUDEDIR)
|
||||
# For Irix 4.x (SGI), use the following:
|
||||
#CFLAGS= -g -cckr -I$(INCLUDEDIR)
|
||||
#
|
||||
# on NEXT use:
|
||||
#CFLAGS=-bsd -I$(INCLUDEDIR)
|
||||
#on NeXT other than 2.0:
|
||||
#IRCDLIBS=-lsys_s
|
||||
#
|
||||
# AIX 370 flags
|
||||
#CFLAGS=-D_BSD -Hxa -I$(INCLUDEDIR)
|
||||
#IRCDLIBS=-lbsd
|
||||
#
|
||||
# Dynix/ptx V2.0.x
|
||||
#CFLAGS= -I$(INCLUDEDIR) -O -Xo
|
||||
#IRCDLIBS= -lsocket -linet -lnsl -lseq
|
||||
#
|
||||
# Dynix/ptx V1.x.x
|
||||
#IRCDLIBS= -lsocket -linet -lnsl -lseq
|
||||
#
|
||||
#use the following on SUN OS without nameserver libraries inside libc
|
||||
#IRCDLIBS=-lresolv
|
||||
#
|
||||
# Solaris 2
|
||||
#IRCDLIBS=-lsocket -lnsl -lresolv -L/usr/ucblib -R/usr/ucblib -lgen
|
||||
#
|
||||
# ESIX
|
||||
#CFLAGS=-O -I$(INCLUDEDIR) -I/usr/ucbinclude
|
||||
#IRCDLIBS=-L/usr/ucblib -L/usr/lib -lsocket -lucb -lns -lnsl
|
||||
#
|
||||
# LDFLAGS - flags to send the loader (ld). SunOS users may want to add
|
||||
# -Bstatic here.
|
||||
#
|
||||
#LDFLAGS=-Bstatic
|
||||
#
|
||||
#Dell SVR4
|
||||
#CC=gcc
|
||||
#CFLAGS= -I$(INCLUDEDIR) -O2
|
||||
#IRCDLIBS=-lsocket -lnsl -lucb
|
||||
|
||||
# [CHANGEME]
|
||||
# IRCDMODE is the mode you want the binary to be.
|
||||
# The 4 at the front is important (allows for setuidness)
|
||||
#
|
||||
# WARNING: if you are making ircd SUID or SGID, check config.h to make sure
|
||||
# you are not defining CMDLINE_CONFIG
|
||||
IRCDMODE = 711
|
||||
|
||||
# [CHANGEME]
|
||||
# IRCDDIR must be the same as DPATH in include/config.h
|
||||
#
|
||||
IRCDDIR=@IRCDDIR@
|
||||
|
||||
|
||||
URL=@URL@
|
||||
|
||||
# [CHANGEME]
|
||||
# If you get a link-time error dealing with strtoul, comment out
|
||||
# this line.
|
||||
# STRTOUL= strtoul.o
|
||||
STRTOUL=@STRTOUL@
|
||||
|
||||
# [CHANGEME]
|
||||
# If you get crashes around a specific number of clients, and that client
|
||||
# load comes close or a little over the system-defined value of FD_SETSIZE,
|
||||
# override it here and see what happens.
|
||||
FD_SETSIZE=@FD_SETSIZE@
|
||||
|
||||
# Where is your openssl binary
|
||||
OPENSSLPATH=@OPENSSLPATH@
|
||||
|
||||
CFLAGS=-I$(INCLUDEDIR) $(XCFLAGS) @LDFLAGS@ $(FD_SETSIZE)
|
||||
|
||||
SHELL=/bin/sh
|
||||
SUBDIRS=src
|
||||
BINDIR=@BINDIR@
|
||||
INSTALL=@INSTALL@
|
||||
RM=@RM@
|
||||
CP=@CP@
|
||||
TOUCH=@TOUCH@
|
||||
RES=
|
||||
all: build
|
||||
|
||||
MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'IRCDLIBS=${IRCDLIBS}' \
|
||||
'LDFLAGS=${LDFLAGS}' 'IRCDMODE=${IRCDMODE}' \
|
||||
'RES=${RES}' 'BINDIR=${BINDIR}' 'INSTALL=${INSTALL}' \
|
||||
'INCLUDEDIR=${INCLUDEDIR}' 'IRCDDIR=${IRCDDIR}' \
|
||||
'RM=${RM}' 'CP=${CP}' 'TOUCH=${TOUCH}' \
|
||||
'SHELL=${SHELL}' 'STRTOUL=${STRTOUL}' \
|
||||
'CRYPTOLIB=${CRYPTOLIB}' \
|
||||
'CRYPTOINCLUDES=${CRYPTOINCLUDES}' 'URL=${URL}'
|
||||
|
||||
custommodule:
|
||||
cd src; ${MAKE} ${MAKEARGS} MODULEFILE=${MODULEFILE} 'EXLIBS=${EXLIBS}' custommodule
|
||||
|
||||
server:
|
||||
build:
|
||||
-@if [ ! -f include/setup.h ] ; then \
|
||||
echo "Hmm...doesn't look like you've run Config..."; \
|
||||
echo "Doing so now."; \
|
||||
sh Config; \
|
||||
fi
|
||||
@for i in $(SUBDIRS); do \
|
||||
echo "Building $$i";\
|
||||
( cd $$i; ${MAKE} ${MAKEARGS} build; ) \
|
||||
done
|
||||
@echo ' __________________________________________________ '
|
||||
@echo '| Compile is now complete. |'
|
||||
@echo '| You should now read the documentation and learn |'
|
||||
@echo '| how to configure your IRCd. |'
|
||||
@echo '| |'
|
||||
@echo '| If you really like UnrealIRCd, and would like to |'
|
||||
@echo '| make a donation, please read the Donation file in|'
|
||||
@echo '| this archive. :) |'
|
||||
@echo '| |'
|
||||
@echo '| Thanks for using Unreal IRCd! If you are in need |'
|
||||
@echo '| for any kind of help regarding the IRCd please |'
|
||||
@echo '| read the Unreal.nfo file. |'
|
||||
@echo '|__________________________________________________|'
|
||||
|
||||
clean:
|
||||
$(RM) -f *~ \#* core *.orig include/*.orig
|
||||
@for i in $(SUBDIRS); do \
|
||||
echo "Cleaning $$i";\
|
||||
( cd $$i; ${MAKE} ${MAKEARGS} clean; ) \
|
||||
done
|
||||
-@if [ -f include/setup.h ] ; then \
|
||||
echo "To really restart installation, remove include/setup.h" ; \
|
||||
fi
|
||||
|
||||
cleandir: clean
|
||||
rm -rf include/networks.h include/setup.h Makefile Settings
|
||||
|
||||
makex:
|
||||
chmod +x Config newnet ircd ircdcron/ircdchk killircd
|
||||
chmod +x rehash ircdreg
|
||||
|
||||
fromdos: cleandir
|
||||
$(FROMDOS) -dv *
|
||||
$(FROMDOS) -dv src/*
|
||||
$(FROMDOS) -dv include/*
|
||||
$(FROMDOS) -dv doc/*
|
||||
$(FROMDOS) -dv crypt/*
|
||||
$(FROMDOS) -dv ircdcron/*
|
||||
makedist: makex
|
||||
echo "Stamping.."
|
||||
|
||||
stamp: makedist
|
||||
echo "/* Auto created release stamping */" > include/stamp.h
|
||||
echo "#define RELEASEID2 \"`date +%s`\"" >> include/stamp.h
|
||||
echo "#define RELEASESTUFF \"`hostname`\"" >> include/stamp.h
|
||||
echo "" >> include/stamp.h
|
||||
|
||||
depend:
|
||||
@for i in $(SUBDIRS); do \
|
||||
echo "Making dependencies in $$i";\
|
||||
( cd $$i; ${MAKE} ${MAKEARGS} depend; ) \
|
||||
done
|
||||
|
||||
install: all
|
||||
$(INSTALL) -m 0700 -d $(IRCDDIR)
|
||||
$(INSTALL) -m 0700 src/ircd $(BINDIR)
|
||||
$(INSTALL) -m 0700 -d $(IRCDDIR)/networks
|
||||
$(INSTALL) -m 0600 networks/*.network $(IRCDDIR)/networks
|
||||
$(INSTALL) -m 0700 networks/makenet $(IRCDDIR)/networks
|
||||
$(INSTALL) -m 0600 networks/networks.ndx $(IRCDDIR)/networks
|
||||
$(INSTALL) -m 0700 -d $(IRCDDIR)/doc
|
||||
$(INSTALL) -m 0600 doc/Authors doc/example.conf doc/example.settings doc/coding-guidelines doc/tao.of.irc doc/unreal32docs.html $(IRCDDIR)/doc
|
||||
$(INSTALL) -m 0700 -d $(IRCDDIR)/aliases
|
||||
$(INSTALL) -m 0600 aliases/*.conf $(IRCDDIR)/aliases
|
||||
$(TOUCH) $(IRCDDIR)/unrealircd.conf
|
||||
chmod 0600 $(IRCDDIR)/unrealircd.conf
|
||||
$(INSTALL) -m 0600 badwords.*.conf help.conf LICENSE Donation $(IRCDDIR)
|
||||
$(INSTALL) -m 0700 unreal $(IRCDDIR)
|
||||
$(INSTALL) -m 0700 -d $(IRCDDIR)/modules
|
||||
$(INSTALL) -m 0700 src/modules/*.so $(IRCDDIR)/modules
|
||||
|
||||
pem: src/ssl.cnf
|
||||
@echo "Generating certificate request .. "
|
||||
$(OPENSSLPATH) req -new \
|
||||
-config src/ssl.cnf -out server.req.pem \
|
||||
-keyout server.key.pem -nodes
|
||||
@echo "Generating self-signed certificate .. "
|
||||
$(OPENSSLPATH) req -x509 -days 365 -in server.req.pem \
|
||||
-key server.key.pem -out server.cert.pem
|
||||
@echo "Generating fingerprint .."
|
||||
$(OPENSSLPATH) x509 -subject -dates -fingerprint -noout \
|
||||
-in server.cert.pem
|
||||
@echo "Setting o-rwx & g-rwx for files... "
|
||||
chmod o-rwx server.req.pem server.key.pem server.cert.pem
|
||||
chmod g-rwx server.req.pem server.key.pem server.cert.pem
|
||||
@echo "Done!. If you want to encrypt the private key, run"
|
||||
@echo "make encpem"
|
||||
|
||||
encpem: server.key.pem
|
||||
@echo "Encrypting server key .."
|
||||
$(OPENSSLPATH) rsa -in server.key.pem -out server.key.c.pem -des3
|
||||
-@if [ -f server.key.c.pem ] ; then \
|
||||
echo "Replacing unencrypted with encrypted .." ; \
|
||||
cp server.key.c.pem server.key.pem ; \
|
||||
rm -f server.key.c.pem ; \
|
||||
fi
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
==[ COMPILING ]==
|
||||
To build the ircd, run:
|
||||
./Config
|
||||
make
|
||||
|
||||
If you specified an alternative location during ./Config you also need
|
||||
to run "make install".
|
||||
|
||||
==[ MAKING A CONFIG FILE ]==
|
||||
If you are new, then you need to create your own configfile:
|
||||
|
||||
copy doc/example.conf to your main UnrealIRCd directory and call
|
||||
it unrealircd.conf .
|
||||
Then open it in an editor and carefully modify it, consult the docs
|
||||
(doc/unreal32docs.html, or online: www.unrealircd.com/unreal32docs.html)
|
||||
for more information about every block/setting.
|
||||
Common problems are explained in the FAQ, which is located at:
|
||||
http://www.vulnscan.org/UnrealIrcd/faq/ .
|
||||
|
||||
==[ BOOTING YOUR IRCD ]==
|
||||
Just type: ./unreal start
|
||||
Note that after booting the errors are usually logged to ircd.log,
|
||||
so check that file if you have any problems.
|
||||
Again, check the FAQ (and docs) if you have any boot problems.
|
||||
-70
@@ -1,70 +0,0 @@
|
||||
===============================================
|
||||
= UnrealIRCd v3.2 =
|
||||
===============================================
|
||||
Was brought to you by:
|
||||
|
||||
The core team:
|
||||
==============
|
||||
* Stskeeps <stskeeps@tspre.org>
|
||||
* codemastr <codemastr@unrealircd.com>
|
||||
* Syzop <syzop@unrealircd.org>
|
||||
* Luke <luke@unrealircd.com>
|
||||
|
||||
Contributors
|
||||
============
|
||||
* McSkaf <mcskaf@unrealircd.org>
|
||||
* Zogg <zogg@unrealircd.org>
|
||||
* NiQuiL <niquil@unrealircd.org>
|
||||
* assyrian <assyrian@unrealircd.org>
|
||||
* nighthawk <nighthawk@unrealircd.com>
|
||||
* DrBin <drbin@unrealircd.com>
|
||||
* llthangel <llthangel@unrealircd.org>
|
||||
* Griever <griever@unrealircd.com>
|
||||
|
||||
Documentation:
|
||||
==============
|
||||
* CKnight^ <cknight@unrealircd.com>
|
||||
|
||||
Precenses on the Internet:
|
||||
* http://www.unrealircd.com
|
||||
|
||||
CVS
|
||||
====
|
||||
To get anonymous access: (read only)
|
||||
"cvs -d :pserver:anonymous@cvs.ircsystems.net:/home/cmunk/ircsystems/cvsroot login"
|
||||
|
||||
press enter when asked for password
|
||||
Then, choose the appropiate branch you want:
|
||||
|
||||
latest 3.2 release ("stable"):
|
||||
"cvs -d :pserver:anonymous@cvs.ircsystems.net:/home/cmunk/ircsystems/cvsroot checkout -r stable -d Unreal-stable unreal"
|
||||
|
||||
latest 3.2 fixes / development ("unreal3_2_fixes"):
|
||||
"cvs -d :pserver:anonymous@cvs.ircsystems.net:/home/cmunk/ircsystems/cvsroot checkout -r unreal3_2_fixes -d Unreal-stable unreal"
|
||||
|
||||
To get support
|
||||
================
|
||||
Before asking others for help you MUST:
|
||||
* read the docs (doc/unreal32docs.html or online: www.unrealircd.com/unreal32docs.html)
|
||||
* check the FAQ (www.vulnscan.org/UnrealIrcd/faq/)
|
||||
|
||||
Means of support:
|
||||
* IRC: /server irc.ircsystems.net 6667 - /join #unreal-support
|
||||
[Note: Follow the bots instructions in order to get voice.
|
||||
Please be patient after asking questions, we may do other stuff
|
||||
or we're away. Don't repeat questions, we heard you first time,
|
||||
READ THE TOPIC before you ask anything. We do this on a free
|
||||
base so we are volunteeringly helping you, but we are humans
|
||||
like you, and we got to have peace at times as well.]
|
||||
* Forum: http://forums.unrealircd.com/
|
||||
* Mailing list: unreal-users@lists.sourceforge.net
|
||||
(http://lists.sourceforge.net/lists/listinfo/unreal-users also
|
||||
has links to the archive).
|
||||
|
||||
UnrealIRCd Bugtracker (Where to report bugs or make suggestions)
|
||||
==================================================================
|
||||
http://bugs.unrealircd.org
|
||||
|
||||
Want to discuss, chat, etc?
|
||||
=============================
|
||||
* IRC: /server irc.ircsystems.net 6667 - /join #UnrealIRCd
|
||||
@@ -1,43 +0,0 @@
|
||||
/* Standard Aliases */
|
||||
|
||||
alias identify {
|
||||
format "^#" {
|
||||
nick chanserv;
|
||||
type services;
|
||||
parameters "IDENTIFY %1-";
|
||||
};
|
||||
format "^[^#]" {
|
||||
nick nickserv;
|
||||
type services;
|
||||
parameters "IDENTIFY %1-";
|
||||
};
|
||||
type command;
|
||||
};
|
||||
|
||||
alias services {
|
||||
format "^#" {
|
||||
nick chanserv;
|
||||
type services;
|
||||
parameters "%1-";
|
||||
};
|
||||
format "^[^#]" {
|
||||
nick nickserv;
|
||||
type services;
|
||||
parameters "%1-";
|
||||
};
|
||||
type command;
|
||||
};
|
||||
|
||||
alias register {
|
||||
format "^#" {
|
||||
nick chanserv;
|
||||
type services;
|
||||
parameters "REGISTER %1-";
|
||||
};
|
||||
format "^[^#]" {
|
||||
nick nickserv;
|
||||
type services;
|
||||
parameters "REGISTER %1-";
|
||||
};
|
||||
type command;
|
||||
};
|
||||
@@ -1,19 +0,0 @@
|
||||
/* Anope Aliases */
|
||||
|
||||
alias nickserv { type services; };
|
||||
alias ns { nick nickserv; type services; };
|
||||
alias chanserv { type services; };
|
||||
alias cs { nick chanserv; type services; };
|
||||
alias memoserv { type services; };
|
||||
alias ms { nick memoserv; type services; };
|
||||
alias operserv { type services; };
|
||||
alias os { nick operserv; type services; };
|
||||
alias helpserv { type services; };
|
||||
alias hs { nick helpserv; type services; };
|
||||
alias botserv { type services; };
|
||||
alias bs { nick botserv; type services; };
|
||||
alias hostserv { type services; };
|
||||
alias hs { nick hostserv; type services; };
|
||||
|
||||
include "aliases/aliases.conf";
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
/* Auspice Aliases */
|
||||
|
||||
alias nickserv { type services; };
|
||||
alias ns { nick nickserv; type services; };
|
||||
alias chanserv { type services; };
|
||||
alias cs { nick chanserv; type services; };
|
||||
alias memoserv { type services; };
|
||||
alias ms { nick memoserv; type services; };
|
||||
alias helpserv { type services; };
|
||||
alias hs { nick helpserv; type services; };
|
||||
alias operserv { type services; };
|
||||
alias os { nick operserv; type services; };
|
||||
alias rootserv { type services; };
|
||||
alias rs { nick rootserv; type services; };
|
||||
|
||||
include "aliases/aliases.conf";
|
||||
@@ -1,12 +0,0 @@
|
||||
/* Cygnus Aliases */
|
||||
|
||||
alias nickserv { type services; };
|
||||
alias ns { nick nickserv; type services; };
|
||||
alias chanserv { type services; };
|
||||
alias cs { nick chanserv; type services; };
|
||||
alias memoserv { type services; };
|
||||
alias ms { nick memoserv; type services; };
|
||||
alias rootserv { type services; };
|
||||
alias rs { nick rootserv; type services; };
|
||||
|
||||
include "aliases/aliases.conf";
|
||||
@@ -1,16 +0,0 @@
|
||||
/* Epona Aliases */
|
||||
|
||||
alias nickserv { type services; };
|
||||
alias ns { nick nickserv; type services; };
|
||||
alias chanserv { type services; };
|
||||
alias cs { nick chanserv; type services; };
|
||||
alias memoserv { type services; };
|
||||
alias ms { nick memoserv; type services; };
|
||||
alias operserv { type services; };
|
||||
alias os { nick operserv; type services; };
|
||||
alias helpserv { type services; };
|
||||
alias hs { nick helpserv; type services; };
|
||||
alias botserv { type services; };
|
||||
alias bs { nick botserv; type services; };
|
||||
|
||||
include "aliases/aliases.conf";
|
||||
@@ -1,14 +0,0 @@
|
||||
/* Generic Aliases */
|
||||
|
||||
alias nickserv { type services; };
|
||||
alias ns { nick nickserv; type services; };
|
||||
alias chanserv { type services; };
|
||||
alias cs { nick chanserv; type services; };
|
||||
alias memoserv { type services; };
|
||||
alias ms { nick memoserv; type services; };
|
||||
alias operserv { type services; };
|
||||
alias os { nick operserv; type services; };
|
||||
alias helpserv { type services; };
|
||||
alias hs { nick helpserv; type services; };
|
||||
|
||||
include "aliases/aliases.conf";
|
||||
@@ -1,4 +0,0 @@
|
||||
/* Generic StatServ Aliases */
|
||||
|
||||
alias statserv { type stats; };
|
||||
alias ss { nick statserv; type stats; };
|
||||
@@ -1,17 +0,0 @@
|
||||
/* IRCServices Aliases */
|
||||
|
||||
alias nickserv { type services; };
|
||||
alias ns { nick nickserv; type services; };
|
||||
alias chanserv { type services; };
|
||||
alias cs { nick chanserv; type services; };
|
||||
alias memoserv { type services; };
|
||||
alias ms { nick memoserv; type services; };
|
||||
alias operserv { type services; };
|
||||
alias os { nick operserv; type services; };
|
||||
alias helpserv { type services; };
|
||||
alias hs { nick helpserv; type services; };
|
||||
alias irciihelp { type services; };
|
||||
alias statserv { type services; };
|
||||
alias ss { nick statserv; type services; };
|
||||
|
||||
include "aliases/aliases.conf";
|
||||
@@ -1,6 +0,0 @@
|
||||
/* OperStats Aliases */
|
||||
|
||||
alias operserv { type stats; };
|
||||
alias os { nick operserv; type stats; };
|
||||
alias statserv { type stats; };
|
||||
alias ss { nick statserv; type stats; };
|
||||
@@ -1,3 +0,0 @@
|
||||
all:
|
||||
@autoconf
|
||||
cp configure ..
|
||||
Vendored
-141
@@ -1,141 +0,0 @@
|
||||
dnl aclocal.m4 generated automatically by aclocal 1.4-p4
|
||||
|
||||
dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
dnl with or without modifications, as long as this notice is preserved.
|
||||
|
||||
dnl This program is distributed in the hope that it will be useful,
|
||||
dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
dnl PARTICULAR PURPOSE.
|
||||
|
||||
dnl Macro: unet_CHECK_TYPE_SIZES
|
||||
dnl
|
||||
dnl Check the size of several types and define a valid int16_t and int32_t.
|
||||
dnl
|
||||
AC_DEFUN(unreal_CHECK_TYPE_SIZES,
|
||||
[dnl Check type sizes
|
||||
AC_CHECK_SIZEOF(short)
|
||||
AC_CHECK_SIZEOF(int)
|
||||
AC_CHECK_SIZEOF(long)
|
||||
if test "$ac_cv_sizeof_int" = 2 ; then
|
||||
AC_CHECK_TYPE(int16_t, int)
|
||||
AC_CHECK_TYPE(u_int16_t, unsigned int)
|
||||
elif test "$ac_cv_sizeof_short" = 2 ; then
|
||||
AC_CHECK_TYPE(int16_t, short)
|
||||
AC_CHECK_TYPE(u_int16_t, unsigned short)
|
||||
else
|
||||
AC_MSG_ERROR([Cannot find a type with size of 16 bits])
|
||||
fi
|
||||
if test "$ac_cv_sizeof_int" = 4 ; then
|
||||
AC_CHECK_TYPE(int32_t, int)
|
||||
AC_CHECK_TYPE(u_int32_t, unsigned int)
|
||||
elif test "$ac_cv_sizeof_short" = 4 ; then
|
||||
AC_CHECK_TYPE(int32_t, short)
|
||||
AC_CHECK_TYPE(u_int32_t, unsigned short)
|
||||
elif test "$ac_cv_sizeof_long" = 4 ; then
|
||||
AC_CHECK_TYPE(int32_t, long)
|
||||
AC_CHECK_TYPE(u_int32_t, unsigned long)
|
||||
else
|
||||
AC_MSG_ERROR([Cannot find a type with size of 32 bits])
|
||||
fi
|
||||
AC_CHECK_SIZEOF(rlim_t)
|
||||
if test "$ac_cv_sizeof_rlim_t" = 8 ; then
|
||||
AC_DEFINE(LONG_LONG_RLIM_T)
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN(CHECK_LIBCURL,
|
||||
[
|
||||
AC_ARG_ENABLE(libcurl,
|
||||
[AC_HELP_STRING([--enable-libcurl=DIR],[enable libcurl (remote include) support])],
|
||||
[
|
||||
CURLCFLAG=`$enableval/bin/curl-config --cflags`
|
||||
CFLAGS="$CFLAGS $CURLCFLAG -DUSE_LIBCURL"
|
||||
CURLLIBS=`$enableval/bin/curl-config --libs`
|
||||
|
||||
dnl curl-7.11.0 and up will include the ares info, older versions do not
|
||||
if test "x`echo $CURLLIBS |grep .*ares.*`" = x ; then
|
||||
CURLLIBS="$CURLLIBS -lares"
|
||||
fi
|
||||
IRCDLIBS="$IRCDLIBS $CURLLIBS"
|
||||
URL="url.o"
|
||||
AC_SUBST(URL)
|
||||
])
|
||||
])
|
||||
|
||||
dnl the following 2 macros are based on CHECK_SSL by Mark Ethan Trostler <trostler@juniper.net>
|
||||
|
||||
AC_DEFUN([CHECK_SSL],
|
||||
[
|
||||
AC_ARG_ENABLE(ssl,
|
||||
[AC_HELP_STRING([--enable-ssl=],[enable ssl will check /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr])],
|
||||
[
|
||||
AC_MSG_CHECKING(for openssl)
|
||||
for dir in $enableval /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr; do
|
||||
ssldir="$dir"
|
||||
if test -f "$dir/include/openssl/ssl.h"; then
|
||||
AC_MSG_RESULT(found in $ssldir/include/openssl)
|
||||
found_ssl="yes";
|
||||
if test ! "$ssldir" = "/usr" ; then
|
||||
CFLAGS="$CFLAGS -I$ssldir/include";
|
||||
fi
|
||||
break;
|
||||
fi
|
||||
if test -f "$dir/include/ssl.h"; then
|
||||
AC_MSG_RESULT(found in $ssldir/include)
|
||||
found_ssl="yes";
|
||||
if test ! "$ssldir" = "/usr" ; then
|
||||
CFLAGS="$CFLAGS -I$ssldir/include";
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test x_$found_ssl != x_yes; then
|
||||
AC_MSG_RESULT(not found)
|
||||
AC_WARN(disabling ssl support)
|
||||
else
|
||||
CRYPTOLIB="-lssl -lcrypto";
|
||||
if test ! "$ssldir" = "/usr" ; then
|
||||
LDFLAGS="$LDFLAGS -L$ssldir/lib";
|
||||
fi
|
||||
AC_DEFINE(USE_SSL)
|
||||
fi
|
||||
],
|
||||
)
|
||||
])
|
||||
|
||||
AC_DEFUN([CHECK_ZLIB],
|
||||
[
|
||||
AC_ARG_ENABLE(ziplinks,
|
||||
[AC_HELP_STRING([--enable-ziplinks],[enable ziplinks will check /usr/local /usr /usr/pkg])],
|
||||
[
|
||||
AC_MSG_CHECKING(for zlib)
|
||||
for dir in $enableval /usr/local /usr /usr/pkg; do
|
||||
zlibdir="$dir"
|
||||
if test -f "$dir/include/zlib.h"; then
|
||||
AC_MSG_RESULT(found in $zlibdir)
|
||||
found_zlib="yes";
|
||||
if test "$zlibdir" = "/usr" ; then
|
||||
CFLAGS="$CFLAGS -DZIP_LINKS";
|
||||
else
|
||||
CFLAGS="$CFLAGS -I$zlibdir/include -DZIP_LINKS";
|
||||
fi
|
||||
break;
|
||||
fi
|
||||
done
|
||||
if test x_$found_zlib != x_yes; then
|
||||
AC_MSG_RESULT(not found)
|
||||
AC_WARN(disabling ziplink support)
|
||||
else
|
||||
IRCDLIBS="$IRCDLIBS -lz";
|
||||
if test "$zlibdir" != "/usr" ; then
|
||||
LDFLAGS="$LDFLAGS -L$zlibdir/lib";
|
||||
fi
|
||||
HAVE_ZLIB=yes
|
||||
fi
|
||||
AC_SUBST(HAVE_ZLIB)
|
||||
],
|
||||
)
|
||||
])
|
||||
@@ -1,400 +0,0 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(src/ircd.c)
|
||||
if test $# = 0; then
|
||||
echo "You might want to run ./Config or provide some parameters to this script."
|
||||
echo "./configure --help for information about this script"
|
||||
exit 0
|
||||
fi
|
||||
AC_CONFIG_HEADER(include/setup.h)
|
||||
AC_PROG_CC
|
||||
if test "$ac_cv_prog_gcc" = "yes"; then
|
||||
CFLAGS="$CFLAGS -funsigned-char"
|
||||
AC_CACHE_CHECK(if gcc has a working -pipe, ac_cv_pipe, [
|
||||
save_cflags="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -pipe"
|
||||
AC_TRY_COMPILE(,, ac_cv_pipe="yes", ac_cv_pipe="no")
|
||||
CFLAGS="$save_cflags"
|
||||
])
|
||||
if test "$ac_cv_pipe" = "yes"; then
|
||||
CFLAGS="-pipe $CFLAGS"
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_PATH_PROG(RM,rm)
|
||||
AC_PATH_PROG(CP,cp)
|
||||
AC_PATH_PROG(TOUCH,touch)
|
||||
AC_PATH_PROG(OPENSSLPATH,openssl)
|
||||
AC_PATH_PROG(INSTALL,install)
|
||||
AC_CHECK_PROG(MAKER, gmake, gmake, make)
|
||||
AC_PATH_PROG(GMAKE,gmake)
|
||||
AC_PATH_PROG(GUNZIP, gunzip)
|
||||
AC_PATH_PROG(PKGCONFIG, pkg-config)
|
||||
|
||||
dnl Checks for libraries.
|
||||
AC_CHECK_LIB(descrypt, crypt, [AC_DEFINE(HAVE_CRYPT) IRCDLIBS="$IRCDLIBS-ldescrypt " MKPASSWDLIBS="-ldescrypt"],
|
||||
AC_CHECK_LIB(crypt, crypt,[ AC_DEFINE(HAVE_CRYPT) IRCDLIBS="$IRCDLIBS-lcrypt " MKPASSWDLIBS="-lcrypt"]))
|
||||
AC_CHECK_LIB(socket, socket,IRCDLIBS="$IRCDLIBS-lsocket " SOCKLIB="-lsocket")
|
||||
AC_CHECK_LIB(nsl, inet_ntoa,IRCDLIBS="$IRCDLIBS-lnsl " INETLIB="-lnsl")
|
||||
|
||||
AC_SUBST(IRCDLIBS)
|
||||
AC_SUBST(MKPASSWDLIBS)
|
||||
|
||||
dnl module checking based on Hyb7's module checking code
|
||||
AC_DEFUN(AC_ENABLE_DYN,
|
||||
[
|
||||
AC_CHECK_FUNC(dlopen,, AC_CHECK_LIB(dl, dlopen,IRCDLIBS="$IRCDLIBS -ldl",
|
||||
[
|
||||
AC_MSG_WARN(Dynamic linking is not enabled because dlopen was not found)
|
||||
AC_DEFINE(STATIC_LINKING)
|
||||
]))
|
||||
|
||||
hold_cflags=$CFLAGS
|
||||
CFLAGS="$CFLAGS -export-dynamic"
|
||||
AC_CACHE_CHECK(if we need the -export-dynamic flag, ac_cv_export_dynamic, [
|
||||
AC_TRY_LINK(, [int i];, ac_cv_export_dynamic=yes, ac_cv_export_dynamic=no)])
|
||||
if test "$ac_cv_export_dynamic" = "no"; then
|
||||
CFLAGS=$hold_cflags
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK(for compiler option to produce PIC,ac_cv_pic,[
|
||||
if test "$ac_cv_prog_gcc" = "yes"; then
|
||||
ac_cv_pic="-fPIC -DPIC -shared"
|
||||
case `uname -s` in
|
||||
Darwin*[)]
|
||||
ac_cv_pic="-bundle -flat_namespace -undefined suppress"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
case `uname -s` in
|
||||
SunOS*[)]
|
||||
ac_cv_pic="-KPIC -DPIC -G"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
])
|
||||
AC_CACHE_CHECK(if your system prepends an underscore on symbols,ac_cv_underscore,[
|
||||
cat >uscore.c << __EOF__
|
||||
int main() {
|
||||
return 0;
|
||||
}
|
||||
__EOF__
|
||||
$CC -o uscore $CFLAGS uscore.c 1>&5
|
||||
if test -z "`strings -a uscore |grep '^_main$'`"; then
|
||||
ac_cv_underscore=no
|
||||
else
|
||||
ac_cv_underscore=yes
|
||||
fi
|
||||
rm -f uscore uscore.c
|
||||
])
|
||||
if test "$ac_cv_underscore" = "yes"; then
|
||||
AC_DEFINE(UNDERSCORE)
|
||||
fi
|
||||
|
||||
MODULEFLAGS=$ac_cv_pic
|
||||
AC_DEFINE(DYNAMIC_LINKING)
|
||||
])
|
||||
AC_DEFUN(AC_ENABLE_INET6,[
|
||||
AC_CACHE_CHECK(if your system has IPv6 support, ac_cv_ip6, [
|
||||
save_libs="$LIBS"
|
||||
LIBS="$LIBS $SOCKLIB"
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
int main() {
|
||||
if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
|
||||
exit(1);
|
||||
exit(0);
|
||||
}
|
||||
], ac_cv_ip6=yes, ac_cv_ip6=no)
|
||||
])
|
||||
if test "$ac_cv_ip6" = "no"; then
|
||||
AC_MSG_WARN(Your system does not support IPv6 so it will not be enabled)
|
||||
else
|
||||
AC_DEFINE(INET6)
|
||||
fi
|
||||
LIBS="$save_libs"
|
||||
])
|
||||
AC_CHECK_HEADER(sys/param.h,AC_DEFINE(PARAMH))
|
||||
AC_CHECK_HEADER(stdlib.h,AC_DEFINE(STDLIBH))
|
||||
AC_CHECK_HEADER(stddef.h,AC_DEFINE(STDDEFH))
|
||||
AC_CHECK_HEADER(sys/syslog.h,AC_DEFINE(SYSSYSLOGH))
|
||||
AC_CHECK_HEADER(unistd.h,AC_DEFINE(UNISTDH))
|
||||
AC_CHECK_HEADER(string.h,AC_DEFINE(STRINGH))
|
||||
AC_CHECK_HEADER(strings.h,AC_DEFINE(STRINGSH))
|
||||
AC_CHECK_HEADER(malloc.h,AC_DEFINE(MALLOCH,<malloc.h>))
|
||||
AC_CHECK_HEADER(sys/rusage.h,AC_DEFINE(RUSAGEH))
|
||||
AC_CHECK_HEADER(glob.h,AC_DEFINE(GLOBH))
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
AC_C_INLINE
|
||||
AC_TYPE_SIZE_T
|
||||
AC_HEADER_TIME
|
||||
AC_STRUCT_TM
|
||||
AC_TYPE_UID_T
|
||||
unreal_CHECK_TYPE_SIZES
|
||||
|
||||
AC_CACHE_CHECK(what kind of nonblocking sockets you have, ac_cv_nonblocking,[
|
||||
save_libs="$LIBS"
|
||||
LIBS="$LIBS $SOCKLIB"
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
#include <signal.h>
|
||||
alarmed() {
|
||||
exit(1);
|
||||
}
|
||||
int main() {
|
||||
#ifdef O_NONBLOCK
|
||||
char b[12], x[32];
|
||||
int f, l = sizeof(x);
|
||||
f = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (f >= 0 && !(fcntl(f, F_SETFL, O_NONBLOCK))) {
|
||||
signal(SIGALRM, alarmed);
|
||||
alarm(3);
|
||||
recvfrom(f, b, 12, 0, (struct sockaddr *)x, &l);
|
||||
alarm(0);
|
||||
exit(0);
|
||||
}
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
],ac_cv_nonblocking=O_NONBLOCK,[
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
#include <signal.h>
|
||||
alarmed() {
|
||||
exit(0);
|
||||
}
|
||||
int main() {
|
||||
#ifdef O_NDELAY
|
||||
char b[12], x[32];
|
||||
int f, l = sizeof(x);
|
||||
f = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (f >= 0 && !(fcntl(f, F_SETFL, O_NDELAY))) {
|
||||
signal(SIGALRM, alarmed);
|
||||
alarm(3);
|
||||
recvfrom(f, b, 12, 0, (struct sockaddr *)x, &l);
|
||||
alarm(0);
|
||||
exit(0);
|
||||
}
|
||||
#endif
|
||||
exit(1);
|
||||
}],ac_cv_nonblocking=O_NDELAY,[
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
#include <signal.h>
|
||||
alarmed() {
|
||||
exit(1);
|
||||
}
|
||||
int main() {
|
||||
#ifdef FIONBIO
|
||||
char b[12], x[32];
|
||||
int f, l = sizeof(x);
|
||||
f = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (f >= 0 && !(fcntl(f, F_SETFL, FIONBIO))) {
|
||||
signal(SIGALRM, alarmed);
|
||||
alarm(3);
|
||||
recvfrom(f, b, 12, 0, (struct sockaddr *)x, &l);
|
||||
alarm(0);
|
||||
exit(0);
|
||||
}
|
||||
#endif
|
||||
exit(1);
|
||||
], ac_cv_nonblocking=FIONBIO,ac_cv_nonblocking=none)])])])
|
||||
if test "$ac_cv_nonblocking" = "O_NONBLOCK"; then
|
||||
AC_DEFINE(NBLOCK_POSIX)
|
||||
elif test "$ac_cv_nonblocking" = "O_NDELAY"; then
|
||||
AC_DEFINE(NBLOCK_BSD)
|
||||
elif test "$ac_cv_nonblocking" = "FIONBIO"; then
|
||||
AC_DEFINE(NBLOCK_SYSV)
|
||||
fi
|
||||
LIBS="$save_libs"
|
||||
dnl Checks for library functions.
|
||||
AC_PROG_GCC_TRADITIONAL
|
||||
AC_FUNC_SETPGRP
|
||||
AC_FUNC_SETVBUF_REVERSED
|
||||
AC_CHECK_FUNCS(snprintf,AC_DEFINE(HAVE_SNPRINTF))
|
||||
AC_CHECK_FUNCS(vsnprintf,AC_DEFINE(HAVE_VSNPRINTF))
|
||||
AC_CHECK_FUNCS(strlcpy, AC_DEFINE(HAVE_STRLCPY))
|
||||
AC_CHECK_FUNCS(strlcat, AC_DEFINE(HAVE_STRLCAT))
|
||||
AC_CHECK_FUNCS(strlncat, AC_DEFINE(HAVE_STRLNCAT))
|
||||
|
||||
AC_CACHE_CHECK(if we can set the core size to unlimited, ac_cv_force_core,[
|
||||
AC_TRY_RUN([
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#include <unistd.h>
|
||||
int main() {
|
||||
struct rlimit corelim;
|
||||
corelim.rlim_cur = corelim.rlim_max = RLIM_INFINITY;
|
||||
if (setrlimit(RLIMIT_CORE, &corelim))
|
||||
exit(1);
|
||||
exit(0);
|
||||
}
|
||||
],ac_cv_force_core=yes,ac_cv_force_core=no)
|
||||
])
|
||||
if test "$ac_cv_force_core" = "yes"; then
|
||||
AC_DEFINE(FORCE_CORE)
|
||||
fi
|
||||
AC_FUNC_VPRINTF
|
||||
AC_CHECK_FUNCS(gettimeofday,AC_DEFINE(GETTIMEOFDAY),[AC_CHECK_FUNCS(lrand48,AC_DEFINE(LRADN48))])
|
||||
AC_CHECK_FUNCS(getrusage,AC_DEFINE(GETRUSAGE_2),[AC_CHECK_FUNCS(times,AC_DEFINE(TIMES_2))])
|
||||
AC_CHECK_FUNCS(setproctitle,AC_DEFINE(HAVE_SETPROCTITLE),[
|
||||
AC_CHECK_LIB(util,setproctitle,AC_DEFINE(HAVE_SETPROCTITLE) IRCDLIBS="$IRCDLIBS-lutil",[
|
||||
AC_EGREP_HEADER([#define.*PS_STRINGS.*],sys/exec.h,AC_DEFINE(HAVE_PSSTRINGS),[
|
||||
AC_CHECK_FUNCS(pstat,AC_DEFINE(HAVE_PSTAT))
|
||||
])
|
||||
])
|
||||
])
|
||||
AC_CACHE_CHECK(what type of signals you have, ac_cv_sigtype, [
|
||||
AC_TRY_RUN([
|
||||
#include <signal.h>
|
||||
int main() {
|
||||
sigaction(SIGTERM, (struct sigaction *)0L, (struct sigaction *)0L);
|
||||
}
|
||||
], ac_cv_sigtype=POSIX, [
|
||||
AC_TRY_RUN([
|
||||
#include <signal.h>
|
||||
int calls = 0;
|
||||
void handler()
|
||||
{
|
||||
if (calls)
|
||||
return;
|
||||
calls++;
|
||||
kill(getpid(), SIGTERM);
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
int main() {
|
||||
signal(SIGTERM, handler);
|
||||
kill(getpid(), SIGTERM);
|
||||
exit(0);
|
||||
}
|
||||
], ac_cv_sigtype=BSD,ac_cv_sigtype=SYSV)])])
|
||||
|
||||
if test "$ac_cv_sigtype" = "POSIX"; then
|
||||
AC_DEFINE(POSIX_SIGNALS)
|
||||
elif test "$ac_cv_sigtype" = "BSD"; then
|
||||
AC_DEFINE(BSD_RELIABLE_SIGNALS)
|
||||
else
|
||||
AC_DEFINE(SYSV_UNRELIABLE_SIGNALS)
|
||||
fi
|
||||
AC_CHECK_FUNCS(strtoken,,AC_DEFINE(NEED_STRTOKEN))
|
||||
AC_CHECK_FUNCS(strtok,,AC_DEFINE(NEED_STRTOK))
|
||||
AC_CHECK_FUNCS(strerror,,AC_DEFINE(NEED_STRERROR))
|
||||
AC_CHECK_FUNCS(index,,AC_DEFINE(NOINDEX))
|
||||
AC_CHECK_FUNCS(strtoul,,STRTOUL="strtoul.o")
|
||||
AC_CHECK_FUNCS(bcopy,,AC_DEFINE(NEED_BCOPY))
|
||||
AC_CHECK_FUNCS(bcmp,,AC_DEFINE(NEED_BCMP))
|
||||
AC_CHECK_FUNCS(bzero,,AC_DEFINE(NEED_BZERO))
|
||||
AC_CHECK_FUNCS(strcasecmp,AC_DEFINE(GOT_STRCASECMP))
|
||||
save_libs="$LIBS"
|
||||
LIBS="$LIBS $SOCKLIB $INETLIB"
|
||||
AC_CHECK_FUNCS(inet_addr,,AC_DEFINE(NEED_INET_ADDR))
|
||||
AC_CHECK_FUNCS(inet_ntoa,,AC_DEFINE(NEED_INET_NTOA))
|
||||
AC_CHECK_FUNCS(inet_netof,,AC_DEFINE(NEED_INET_NETOF))
|
||||
LIBS="$save_libs"
|
||||
AC_CHECK_FUNCS(syslog,AC_DEFINE(HAVE_SYSLOG))
|
||||
AC_CHECK_FUNCS(vsyslog,AC_DEFINE(HAVE_VSYSLOG))
|
||||
AC_SUBST(STRTOUL)
|
||||
AC_SUBST(CRYPTOLIB)
|
||||
AC_SUBST(MODULEFLAGS)
|
||||
AC_ARG_WITH(listen, [AC_HELP_STRING([--with-listen=backlog],[Specify the listen backlog value])],
|
||||
AC_DEFINE_UNQUOTED(LISTEN_SIZE,$withval),AC_DEFINE(LISTEN_SIZE,5))
|
||||
AC_ARG_WITH(nick-history, [AC_HELP_STRING([--with-nick-history=length],[Specify the length of the nickname history])],
|
||||
AC_DEFINE_UNQUOTED(NICKNAMEHISTORYLENGTH,$withval), AC_DEFINE(NICKNAMEHISTORYLENGTH,2000))
|
||||
AC_ARG_WITH(sendq, [AC_HELP_STRING([--with-sendq=maxsendq],[Specify the max sendq for the server])],
|
||||
AC_DEFINE_UNQUOTED(MAXSENDQLENGTH,$withval),AC_DEFINE(MAXSENDQLENGTH,3000000))
|
||||
AC_ARG_WITH(bufferpool, [AC_HELP_STRING([--with-bufferpool=size],[Specify the size of the buffer pool])],
|
||||
AC_DEFINE_UNQUOTED(BUFFERPOOL,[($withval * MAXSENDQLENGTH)]),AC_DEFINE(BUFFERPOOL,[(18 * MAXSENDQLENGTH)]))
|
||||
AC_ARG_WITH(hostname, [AC_HELP_STRING([--with-hostname=host],[Specify the local hostname of the server])], AC_DEFINE_UNQUOTED(DOMAINNAME,"$withval"),AC_DEFINE_UNQUOTED(DOMAINNAME,"`hostname`"))
|
||||
AC_DEFINE_UNQUOTED(MYOSNAME,"`uname -a`")
|
||||
AC_ARG_WITH(permissions, [AC_HELP_STRING([--with-permissions=permissions],[Specify the default permissions for
|
||||
configuration files])], AC_DEFINE_UNQUOTED(DEFAULT_PERMISSIONS,$withval), AC_DEFINE(DEFAULT_PERMISSIONS, 0600))
|
||||
AC_ARG_WITH(dpath, [AC_HELP_STRING([--with-dpath=path],[Specify the path where configuration files are stored])],
|
||||
AC_DEFINE_UNQUOTED(DPATH, "$withval") IRCDDIR="$withval"; mkdir $withval/tmp, AC_DEFINE_UNQUOTED(DPATH,"`pwd`") IRCDDIR="`pwd`" mkdir `pwd`/tmp)
|
||||
AC_ARG_WITH(fd-setsize, [AC_HELP_STRING([--with-fd-setsize=size],[Specify the max file descriptors to use])],
|
||||
ac_fd=$withval, ac_fd=1024)
|
||||
AC_DEFINE_UNQUOTED(MAXCONNECTIONS, $ac_fd)
|
||||
AC_ARG_WITH(spath, [AC_HELP_STRING([--with-spath],[Specify the location of the executable])],
|
||||
AC_DEFINE_UNQUOTED(SPATH,"$withval") BINDIR="$withval",AC_DEFINE_UNQUOTED(SPATH,"`pwd`/src/ircd") BINDIR="`pwd`/src/ircd")
|
||||
AC_ARG_ENABLE(nospoof, [AC_HELP_STRING([--enable-nospoof],[Enable spoofing protection])], AC_DEFINE(NOSPOOF))
|
||||
AC_ARG_ENABLE(prefixaq, [AC_HELP_STRING([--enable-prefixaq],[Enable chanadmin and chanowner prefixes])], AC_DEFINE(PREFIX_AQ))
|
||||
AC_ARG_ENABLE(hub, [AC_HELP_STRING([--enable-hub],[Compile as a hub server])], AC_DEFINE(HUB))
|
||||
CHECK_SSL
|
||||
CHECK_ZLIB
|
||||
CHECK_LIBCURL
|
||||
AC_ARG_ENABLE(dynamic-linking, [AC_HELP_STRING([--enable-dynamic-linking],[Make the IRCd dynamically link shared objects rather than statically])], AC_ENABLE_DYN, AC_DEFINE(STATIC_LINKING))
|
||||
AC_ARG_ENABLE(inet6, [AC_HELP_STRING([--enable-inet6],[Make the IRCd support IPv6])], AC_ENABLE_INET6)
|
||||
AC_SUBST(IRCDDIR)
|
||||
AC_SUBST(BINDIR)
|
||||
AC_MSG_CHECKING(if FD_SETSIZE is large enough to allow $ac_fd file descriptors)
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
int main() {
|
||||
if (FD_SETSIZE >= $ac_fd)
|
||||
exit(0);
|
||||
exit(1);
|
||||
}
|
||||
], AC_MSG_RESULT(yes), [
|
||||
FD_SETSIZE="-DFD_SETSIZE=$ac_fd"
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
AC_SUBST(FD_SETSIZE)
|
||||
case `uname -s` in
|
||||
*SunOS*)
|
||||
CFLAGS="$CFLAGS -D_SOLARIS"
|
||||
IRCDLIBS="$IRCDLIBS -lresolv "
|
||||
;;
|
||||
*solaris*)
|
||||
CFLAGS="$CFLAGS -D_SOLARIS"
|
||||
IRCDLIBS="$IRCDLIBS -lresolv "
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl REMEMBER TO CHANGE WITH A NEW RELEASE!
|
||||
tre_version="0.6.6"
|
||||
AC_MSG_RESULT(extracting TRE regex library)
|
||||
cur_dir=`pwd`
|
||||
cd extras
|
||||
dnl remove old tre directory to force a recompile...
|
||||
rm -rf tre-$tre_version
|
||||
if test "x$ac_cv_path_GUNZIP" = "x" ; then
|
||||
tar xfz tre.tar.gz
|
||||
else
|
||||
cp tre.tar.gz tre.tar.gz.bak
|
||||
gunzip -f tre.tar.gz
|
||||
cp tre.tar.gz.bak tre.tar.gz
|
||||
tar xf tre.tar
|
||||
fi
|
||||
AC_MSG_RESULT(configuring TRE regex library)
|
||||
cd tre-$tre_version
|
||||
./configure --disable-agrep --disable-shared --disable-system-abi --disable-wchar --disable-multibyte --prefix=$cur_dir/extras/regexp
|
||||
AC_MSG_RESULT(compiling TRE regex library)
|
||||
$ac_cv_prog_MAKER
|
||||
AC_MSG_RESULT(installing TRE regex library)
|
||||
$ac_cv_prog_MAKER install
|
||||
TREINCDIR="$cur_dir/extras/regexp/include"
|
||||
AC_SUBST(TREINCDIR)
|
||||
if test "x$ac_cv_path_PKGCONFIG" = "x" ; then
|
||||
TRELIBS="-L../extras/regexp/lib -ltre"
|
||||
else
|
||||
TRELIBS=`$ac_cv_path_PKGCONFIG --libs tre.pc`
|
||||
fi
|
||||
AC_SUBST(TRELIBS)
|
||||
cd $cur_dir
|
||||
AC_OUTPUT(Makefile src/modules/Makefile unreal ircdcron/ircdchk)
|
||||
chmod 0700 unreal
|
||||
chmod 0700 ircdcron/ircdchk
|
||||
@@ -1,52 +0,0 @@
|
||||
/*
|
||||
Unreal Internet Relay Chat Daemon
|
||||
Copyright (C) Carsten V. Munk 2000
|
||||
|
||||
NOTE: Those words are not meant to insult you (the user)
|
||||
but is meant to be a list of words so that the +G channel/user mode
|
||||
will work properly. You can easily modify this file at your will.
|
||||
If you got words to add to this file, please mail badwords@tspre.org
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
This is some filling space, scroll down to see the words
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
badword channel { word "pussy"; };
|
||||
badword channel { word "fuck"; };
|
||||
badword channel { word "whore"; };
|
||||
badword channel { word "slut"; };
|
||||
badword channel { word "shit"; };
|
||||
badword channel { word "asshole"; };
|
||||
badword channel { word "bitch"; };
|
||||
badword channel { word "cunt"; };
|
||||
badword channel { word "vagina"; };
|
||||
badword channel { word "penis"; };
|
||||
badword channel { word "jackass"; };
|
||||
badword channel { word "*fucker*"; };
|
||||
badword channel { word "faggot"; };
|
||||
badword channel { word "fag"; };
|
||||
badword channel { word "horny"; };
|
||||
badword channel { word "gay"; };
|
||||
badword channel { word "dickhead"; };
|
||||
badword channel { word "sonuvabitch"; };
|
||||
badword channel { word "*fuck*"; };
|
||||
badword channel { word "tits"; };
|
||||
@@ -1,52 +0,0 @@
|
||||
/*
|
||||
Unreal Internet Relay Chat Daemon
|
||||
Copyright (C) Carsten V. Munk 2000
|
||||
|
||||
NOTE: Those words are not meant to insult you (the user)
|
||||
but is meant to be a list of words so that the +G channel/user mode
|
||||
will work properly. You can easily modify this file at your will.
|
||||
If you got words to add to this file, please mail badword messages@tspre.org
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
This is some filling space, scroll down to see the words
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
badword message { word "pussy"; };
|
||||
badword message { word "fuck"; };
|
||||
badword message { word "whore"; };
|
||||
badword message { word "slut"; };
|
||||
badword message { word "shit"; };
|
||||
badword message { word "asshole"; };
|
||||
badword message { word "bitch"; };
|
||||
badword message { word "cunt"; };
|
||||
badword message { word "vagina"; };
|
||||
badword message { word "penis"; };
|
||||
badword message { word "jackass"; };
|
||||
badword message { word "*fucker*"; };
|
||||
badword message { word "faggot"; };
|
||||
badword message { word "fag"; };
|
||||
badword message { word "horny"; };
|
||||
badword message { word "gay"; };
|
||||
badword message { word "dickhead"; };
|
||||
badword message { word "sonuvabitch"; };
|
||||
badword message { word "*fuck*"; };
|
||||
badword message { word "tits"; };
|
||||
@@ -1,52 +0,0 @@
|
||||
/*
|
||||
Unreal Internet Relay Chat Daemon
|
||||
Copyright (C) Carsten V. Munk 2000
|
||||
|
||||
NOTE: Those words are not meant to insult you (the user)
|
||||
but is meant to be a list of words so that quit message censoring
|
||||
will work properly. You can easily modify this file at your will.
|
||||
If you got words to add to this file, please mail badword badwords@tspre.org
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
This is some filling space, scroll down to see the words
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
badword quit { word "pussy"; };
|
||||
badword quit { word "fuck"; };
|
||||
badword quit { word "whore"; };
|
||||
badword quit { word "slut"; };
|
||||
badword quit { word "shit"; };
|
||||
badword quit { word "asshole"; };
|
||||
badword quit { word "bitch"; };
|
||||
badword quit { word "cunt"; };
|
||||
badword quit { word "vagina"; };
|
||||
badword quit { word "penis"; };
|
||||
badword quit { word "jackass"; };
|
||||
badword quit { word "*fucker*"; };
|
||||
badword quit { word "faggot"; };
|
||||
badword quit { word "fag"; };
|
||||
badword quit { word "horny"; };
|
||||
badword quit { word "gay"; };
|
||||
badword quit { word "dickhead"; };
|
||||
badword quit { word "sonuvabitch"; };
|
||||
badword quit { word "*fuck*"; };
|
||||
badword quit { word "tits"; };
|
||||
Vendored
-1360
File diff suppressed because it is too large
Load Diff
Vendored
-1375
File diff suppressed because it is too large
Load Diff
-66
@@ -1,66 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if test "x$1" = x -o "x$2" = x ; then
|
||||
echo "Syntax:"
|
||||
echo "curlinstall ares_path libcurl_path"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "`eval echo -n 'a'`" = "-n a" ] ; then
|
||||
c="\c"
|
||||
else
|
||||
n="-n"
|
||||
fi
|
||||
|
||||
save_PWD=`pwd`
|
||||
echo "Installing ares"
|
||||
cd $1
|
||||
./configure --prefix=$HOME/ares && make && make install
|
||||
|
||||
SSLFLAG=""
|
||||
while [ -z "$SSLFLAG" ] ; do
|
||||
echo ""
|
||||
echo "Should libcurl be built with SSL support?"
|
||||
echo $n "-> " $c
|
||||
read cc
|
||||
case "$cc" in
|
||||
[Yy]*)
|
||||
SSLFLAG="--with-ssl"
|
||||
;;
|
||||
[Nn]*)
|
||||
SSLFLAG="--without-ssl"
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Yes or No"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
if [ -f $HOME/ares/lib/libcares.a ] ; then
|
||||
if [ -f $HOME/ares/lib/libares.a ] ; then
|
||||
rm -f $HOME/ares/lib/libares.a
|
||||
fi
|
||||
cp $HOME/ares/lib/libcares.a $HOME/ares/lib/libares.a
|
||||
fi
|
||||
|
||||
echo "Installing libcurl"
|
||||
cd $2
|
||||
CPPFLAGS="-I$HOME/ares/include" ./configure --prefix=$HOME/curl --disable-shared \
|
||||
--disable-thread --enable-ares=$HOME/ares --disable-ipv6 $SSLFLAG
|
||||
cp -R $HOME/ares/lib ares
|
||||
make && make install
|
||||
|
||||
if [ -f $HOME/curl/lib/libares.a ] ; then
|
||||
rm -f $HOME/curl/lib/libares.a
|
||||
fi
|
||||
cp $HOME/ares/lib/libares.a $HOME/curl/lib
|
||||
|
||||
cd $save_PWD
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo "libcurl has been installed. When running ./Config specify:"
|
||||
echo "$HOME/curl"
|
||||
echo "for the directory you installed libcurl to."
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
# $Id$
|
||||
|
||||
on ^367 * if ([$4] != []) {echo *** $1 \($3 - $stime($4)) $2} {echo *** $1-}
|
||||
on ^333 * echo *** Topic for $1 set by $2 on $stime($3)
|
||||
on ^317 * if (index(012345679 $3) != -1) {echo *** $1 has been idle for $2 seconds. Signon at $stime($3)} {echo *** $1 has been idle for $2 seconds.}
|
||||
On ^329 "*" echo *** $1 : created $stime($2)
|
||||
on ^
|
||||
alias silence quote silence
|
||||
alias sile quote silence
|
||||
on ^raw_irc "% SILENCE %" echo *** $*
|
||||
|
||||
@ hideit = 0
|
||||
on ^server_notice "% % NOTICE -- CLIENT*" if (hideit != 1) {echo *** $2-}
|
||||
alias show @ hideit = 0;echo *** You can now see clients connecting/exiting
|
||||
alias hide @ hideit = 1;echo *** You will no longer see clients connecting/exiting
|
||||
|
||||
|
||||
# ctime and sendq written by bry
|
||||
# modified by Mmmm
|
||||
|
||||
alias ctime {
|
||||
^on 211 -
|
||||
if ( [$0] )
|
||||
{ ^assign SS $0- }
|
||||
{ ^assign SS $S }
|
||||
|
||||
^on ^211 * {
|
||||
eval ^assign hrs2 ${ ([$7]/60)/60}
|
||||
eval ^assign min2 ${[$7]/60}
|
||||
|
||||
eval ^assign dys ${[$HRS2]/24}
|
||||
eval ^assign hrs ${[$HRS2]-([$DYS]*24)}
|
||||
eval ^assign min ${[$MIN2] - ( ([$HRS]+([$DYS]*24) )*60)}
|
||||
eval ^assign sec ${[$7]-([$MIN2]*60)}
|
||||
@ a = index(\[ $1) - 1
|
||||
@ b = left($a $1)
|
||||
if (index(. $b) == -1)
|
||||
{eval echo *** $1 $[2]DYS days, $[2]HRS hrs, $[2]MIN min, $[2]SEC s}
|
||||
{eval echo *** $1 $[2]DYS days, $[2]HRS hrs, $[2]MIN min, $[2]SEC s}
|
||||
}
|
||||
^stats l $SS
|
||||
}
|
||||
|
||||
alias sendq {
|
||||
eval ^on ^211 "$SRV *" {
|
||||
@ a = index(\[ $1) - 1
|
||||
@ b = left($a $1)
|
||||
if (index(. $b) == -1)
|
||||
{eval echo *** $[11]2 sendq $1}
|
||||
{eval echo *** $[11]2 sendq $1}
|
||||
}
|
||||
if ( [$0] )
|
||||
{ ^assign SRV $0- }
|
||||
{ ^assign SRV $S }
|
||||
stats l $SRV
|
||||
wait -cmd eval ^on ^211 -"$SRV *"
|
||||
}
|
||||
|
||||
# If you use Daveman's toolbox or any auto rejoin line, remove the old
|
||||
# on raw_irc for KICK, and use the foll. one instead: (Run)
|
||||
#
|
||||
#ON ^RAW_IRC "% KICK % % *" {
|
||||
# IF ([$3]==[$N])
|
||||
# {
|
||||
# //QUOTE JOIN $2
|
||||
# ECHO $MID(11 5 $STIME($TIME())) * You have been kicked off channel $2 by $LEFT($INDEX(! $0) $0) \($MID(1 256 $4-)\)
|
||||
# }
|
||||
# {
|
||||
# ECHO $MID(11 5 $STIME($TIME())) * $3 has been kicked off channel $2 by $LEFT($INDEX(! $0) $0) \($MID(1 256 $4-)\)
|
||||
# }
|
||||
# }
|
||||
|
||||
+2
-6
@@ -118,12 +118,8 @@ Tom Hopkins <hoppie@buengf.bu.edu> / September, October 1990:
|
||||
always works on code, so he has to have done alot more than three
|
||||
lines worth. :)
|
||||
|
||||
UnrealIRCd Coders
|
||||
Carsten Munk <stskeeps@unrealircd.com> / May 1999, date
|
||||
Dominick Meglio <codemastr@unrealircd.com> / June 1999, date
|
||||
David Flynn / March 2000, June 2000
|
||||
McSkaf / June 2001, September 2001
|
||||
Finny Merrill <griever@unrealircd.com> / November 2001, date
|
||||
Carsten Munk <stskeeps@mp3fans.co.uk> / May and futher 1999:
|
||||
* Made many features based on Elite.. :/
|
||||
|
||||
Thanks go to those persons not mentioned here who have added their advice,
|
||||
opinions, and code to IRC.
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
SmartRoute
|
||||
Rule based connects
|
||||
Draft 4 - Aug 19, 1994
|
||||
by Tony Vencill
|
||||
|
||||
Rule based connects allow an admin to specify under what conditions
|
||||
a connect should not be allowed. If no rules are specified for a
|
||||
given C and/or N line it will be allowed under any condition.
|
||||
|
||||
A rule may consist of any legal combination of the following functions
|
||||
and operators.
|
||||
|
||||
Functions
|
||||
---------
|
||||
connected(targetmask) - true if a server other than that processing
|
||||
the rule is connected that matches the
|
||||
target mask
|
||||
directcon(targetmask) - true if a server other than that processing
|
||||
the rule is directly connected that matches
|
||||
the target mask
|
||||
via(viamask, targetmask) - true if a server other than that processing
|
||||
the rule matches the target mask and is
|
||||
connected via a directly connected server
|
||||
that matches the via mask
|
||||
directop() - true if an oper is directly connected
|
||||
|
||||
Unary operators
|
||||
---------------
|
||||
! eg: !argument - true if the argument is false
|
||||
|
||||
Binary operartors
|
||||
-----------------
|
||||
&& eg: arg1&&arg2 - true if arg1 and arg2 are both true
|
||||
|| eg: arg1||arg2 - true if arg1, arg2, or both are true
|
||||
|
||||
Parenthesis () are allowed for grouping arguments, but if no parenthesis
|
||||
are included, && will take precedence over ||, ! will take precedence
|
||||
over both && and ||, and the function will be evaluated from left to
|
||||
right. White space in a rule is ignored. Invalid characters in a rule
|
||||
will lead to the rule being ignored.
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
A simple example of a connect rule might be:
|
||||
|
||||
connected(*eu.under*)
|
||||
|
||||
This might be used in a US undernet server for a Europe CN pair to
|
||||
insure that a second Europe link is not allowed if one US-EU link
|
||||
already exists. Note that on the undernet, US server names are
|
||||
city.state.us.undernet.org and Europe server names are
|
||||
city.country.eu.undernet.org.
|
||||
|
||||
A more interesting example might be:
|
||||
|
||||
connected(*eu.under*) &&
|
||||
( !direct(*eu.under*) || via(manhat*, *eu.under*) )
|
||||
|
||||
Imagine the Boston undernet server uses this rule on its Europe CN
|
||||
pairs. This says that if a Europe server is already connected, a
|
||||
Boston-Europe connect will not be allowed. It also says that if a
|
||||
Europe server does already exist and Boston is not directly connected
|
||||
to one or more Europe servers or Manhattan is, the Boston-Europe
|
||||
connect will not be allowed. This has the effect of allowing multiple
|
||||
US-EU links but attempting to limit these links to one server (ie:
|
||||
Boston will not initiate its first Europe link if another server is
|
||||
already linking Europe). This rule will also prefer to let Manhattan
|
||||
handle the US-EU link by disallowing Boston-Europe links if a Europe
|
||||
server is already linked to Manhattan.
|
||||
|
||||
A example of the remaining function, directop(), is:
|
||||
|
||||
connected(*eu.under*) || directop()
|
||||
|
||||
If this line is used on Boston for the Paderborn CN pair, it will allow
|
||||
connects to Paderborn only if another Europe server is not already
|
||||
connected and there is not an oper on Boston. If this rule is
|
||||
overrideable (ie: is applied only to autoconnects as described below),
|
||||
then it will disallow Boston autoconnects to Paderborn while a Boston
|
||||
oper is online, but allow oper-initiated connects to Paderborn under any
|
||||
circumstance. This directop() function could be used to invoke less
|
||||
prefered routes only when an oper is not present to handle routing, or
|
||||
conversly to allow use of less preferable routes only when an oper is
|
||||
present to monitor their performance.
|
||||
|
||||
ircd.conf entries
|
||||
-----------------
|
||||
|
||||
A rule is listed in the ircd.conf file using a D or d line (which can
|
||||
be thought of as a "disallow" line). D lines will apply to all oper
|
||||
and server originated connects, while d lines will apply only to
|
||||
autoconnects (ie: they are overrideable by opers). The formats are:
|
||||
|
||||
D:targetmask::rule
|
||||
d:targetmask::rule
|
||||
|
||||
Remember that newlines are not allowed in conf lines. Two examples
|
||||
(from above) are:
|
||||
|
||||
D:*eu.under*::connected(*eu.under*)
|
||||
d:*eu.under*::connected(*eu.under*) || directop()
|
||||
|
||||
Connects originating from other servers will be checked against and
|
||||
matching D lines, while matching d lines will be ignored as it will not
|
||||
be clear whether or not the connection attempt is oper initiated.
|
||||
|
||||
Checking and viewing rules
|
||||
--------------------------
|
||||
|
||||
The chkconf program that comes with the servers has been modified to
|
||||
also check your connect rules. If running in debug mode, parsing errors
|
||||
will show up at debug level 8. To view rules online, "/stats d" can be
|
||||
used to see all rules and "/stats D" can be used to view those rules
|
||||
which affect oper initiated connects and accepts.
|
||||
|
||||
Processing and storage
|
||||
----------------------
|
||||
|
||||
The rules are parsed when the conf file is read and transformed into a
|
||||
more efficiently computed form, then all applicable rules are
|
||||
evaluated each time a connect command is given or an autoconnect is
|
||||
due. If more than one applicable rule is given, only one need
|
||||
evaluate to true for the connect to be allowed (ie: the rules are ored
|
||||
together). Note that conditions that exist when the connect is
|
||||
initiated might differ from conditions when the link is established.
|
||||
|
||||
[ $Id$ ]
|
||||
@@ -0,0 +1,16 @@
|
||||
The foll. patches are NEW in 19.mu1 (besides the old patches of stats-w,
|
||||
ban, topic, client connect, signon time, trace times in previous .mu
|
||||
versions):
|
||||
|
||||
* All the modifications contained in U3.2, namely - TSpre8, silence, bquiet
|
||||
|
||||
* The K line comments patch.
|
||||
|
||||
* The operfail notification patch
|
||||
|
||||
* The mixed case userid reject patch
|
||||
|
||||
For info on these check the file README.patches
|
||||
|
||||
- Mmmm
|
||||
[ $Id$ ]
|
||||
@@ -0,0 +1,34 @@
|
||||
|
||||
For starters, not a lot is new. What is ?
|
||||
|
||||
* STATS o and STATS h added;
|
||||
|
||||
* most STATS options are no longer oper-only;
|
||||
|
||||
* privacy fixes to all of WHO, WHOIS, TRACE and STATS;
|
||||
|
||||
* more options in the ircd.conf file;
|
||||
|
||||
* non-debilitating DNS/ident use (DNS routines written specifically
|
||||
for ircd which indludes small local cache);
|
||||
|
||||
* less bugs;
|
||||
|
||||
* easier to compile;
|
||||
|
||||
* heaps and heaps of new numerics;
|
||||
|
||||
* more problems for old clients that do stupid things;
|
||||
|
||||
* more numeric replies which replace old NOTICE's;
|
||||
|
||||
* compulsory ident checks and optional result usage;
|
||||
|
||||
* sendQ can now be class dependant;
|
||||
|
||||
* server handles client flooding better;
|
||||
|
||||
* for more information on changes, bug fixes during development, see
|
||||
ircd/ChangeLog and common/ChangeLog
|
||||
|
||||
[ $Id$ ]
|
||||
@@ -0,0 +1,41 @@
|
||||
The Internet Relay Chat Program - IRC
|
||||
|
||||
Author: Jeff Trim, April '89
|
||||
Revised: Greg Lindahl, Oct '90 (gl8f@virginia.edu)
|
||||
Re-Revised: Helen Rose, March '94 (hrose@kei.com)
|
||||
|
||||
Have you ever wanted to talk with other computer users in other parts of
|
||||
the world? Well guess what? You can! The program is called IRC and it
|
||||
is networked much over North America, Europe, and Asia, Oceania, and parts
|
||||
of Africa. This program is a substitution for talk(1), ytalk(1) and many
|
||||
other multiple talk programs you might have read about. When you are
|
||||
talking in IRC, everything you type will instantly be transmitted around
|
||||
the world to other users that might be watching their terminals at the
|
||||
time - they can then type something and RESPOND to your messages - and
|
||||
vise versa. I should warn you that the program can be very addictive once
|
||||
you begin to make friends and contacts on IRC ;-) especially when you
|
||||
learn how to cuss in 14 languages.
|
||||
|
||||
Topics of discussion on IRC are varied, just like the topics of Usenet
|
||||
newsgroups are varied. Technical and political discussions are
|
||||
popular, especially when world events are in progress. IRC is also a
|
||||
way to expand your horizons, as people from many countries and
|
||||
cultures are on, 24 hours a day. Most conversations are in English,
|
||||
but there are always channels in German, Japanese, and Finnish, and
|
||||
occasionally other languages.
|
||||
|
||||
How To Get IRC (technical)
|
||||
|
||||
IRC is a fully-distributed client-server system, much like
|
||||
NNTP-Usenet, with several clients availble in C and elisp. You may ftp
|
||||
documentation and clients from any of the following sites:
|
||||
|
||||
many kinds of clients (C, elisp, X11, VMS, REXX for VM, MSDOS, Macintosh):
|
||||
cs.bu.edu:/irc/clients
|
||||
ftp.acsu.buffalo.edu:/pub/irc
|
||||
ftp.funet.fi:/pub/unix/irc
|
||||
coombs.anu.edu.au:/pub/irc
|
||||
|
||||
If you have any questions about IRC installation, write to hrose@kei.com.
|
||||
|
||||
[ $Id$ ]
|
||||
@@ -0,0 +1,86 @@
|
||||
/************************************************************************
|
||||
* IRC - Internet Relay Chat, doc/etiquette
|
||||
* Copyright (C) 1990, Lea Viljanen and Ari Husa
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
HOW TO BEHAVE ON IRC
|
||||
|
||||
Authors: Lea Viljanen (LadyBug) viljanen@kreeta.helsinki.fi
|
||||
Ari Husa (luru) so-luru@tolsun.oulu.fi
|
||||
|
||||
|
||||
1) Language
|
||||
|
||||
The most widely understood and spoken language on IRC is English.
|
||||
However! As IRC is used in many different countries, English is by
|
||||
no means the only language. If you want to speak some other language
|
||||
than English (for example with your friends), go to a separate channel
|
||||
and set the topic (with /topic) to indicate that. For example
|
||||
/topic Finnish only!
|
||||
would mean that this channel would be reserved for Finnish discussion.
|
||||
On the other hand, you should check the topic (with /list command)
|
||||
before you move to a channel to see if there are any restrictions about
|
||||
language.
|
||||
On a channel not restricted by /topic, please speak a language
|
||||
everybody can understand. If you want to do otherwise, change channels
|
||||
and set the topic accordingly.
|
||||
|
||||
|
||||
2) Hello/Goodbye
|
||||
|
||||
It's not necessary to greet everybody on a channel personally.
|
||||
Usually one "Hello" or equivalent is enough. And don't expect everybody
|
||||
to greet you back. On a channel with 20 people that would mean one
|
||||
screenful of hellos. It's sensible not to greet, in order not to be rude
|
||||
to the rest of the channel. If you must say hello, do it with a private /msg.
|
||||
The same applies to goodbyes.
|
||||
|
||||
|
||||
3) Discussion
|
||||
|
||||
When you come to a new channel it's advised you to listen
|
||||
for a while to get an impression of what's discussed. Please feel free
|
||||
to join in, but do not try to force your topic into the discussion
|
||||
if that doesn't come naturally.
|
||||
|
||||
|
||||
4) {}|[]\
|
||||
|
||||
IRC has quite a lot of people from Scandinavian countries,
|
||||
the above characters are letters in their alphabet. This
|
||||
has been explained on IRC about a thousand and one times, so
|
||||
read the following, do not ask it on IRC:
|
||||
|
||||
{ is an A with 2 dots over it
|
||||
} is an A with a small circle above it
|
||||
| is either an O with 2 dots over it or an O with a dash (/) through it
|
||||
[, ], and \ are the preceding three letters in upper case.
|
||||
|
||||
There are a lot of people from Japan as well, who use Kanji characters
|
||||
which may look quite exotic as well. As I don't know Kanji I don't
|
||||
even try to explain any of the characters.
|
||||
|
||||
5) ATTENTION!
|
||||
|
||||
Remember, people on IRC form their opinions about you only by
|
||||
your actions, writings and comments on IRC. So think before you type.
|
||||
Do not "dump" to a channel or user (send large amounts of unwanted
|
||||
information). This is likely to get you /kicked off the channel or
|
||||
/killed off from irc. Dumping causes network 'burbs', connections going
|
||||
down because servers cannot handle the large amount of traffic any more.
|
||||
File diff suppressed because it is too large
Load Diff
+963
@@ -0,0 +1,963 @@
|
||||
/************************************************************************
|
||||
* IRC - Internet Relay Chat, doc/INSTALL
|
||||
* Copyright (C) 1990,1991,1992, Jeff Trim, Mike Bolotski,
|
||||
* Jarkko Oikarinen and Darren Reed.
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
Installing IRC - The Internet Relay Chat Program
|
||||
|
||||
|
||||
Overview of this document:
|
||||
|
||||
1) The config.h file
|
||||
2) Editing the Makefile
|
||||
3) Compiling IRC
|
||||
4) The ircd.conf file
|
||||
|
||||
|
||||
1) Edit the "config.h" file and make changes to the various #DEFINE's:
|
||||
|
||||
a) Copy the config.h.dist file to config.h before editing.
|
||||
|
||||
b) Define what type of UNIX your machine uses.
|
||||
|
||||
Pick the machine type which best describes your machine and change
|
||||
the #undef to #define (if needed). Some flavours of Unix require no
|
||||
#define and in such cases all others should be #undef'd.
|
||||
|
||||
c) DEBUGMODE
|
||||
|
||||
Define DEBUGMODE if you want to see the ircd debugging information
|
||||
as the daemon is running. Normally this function will be undefined
|
||||
as ircd produces a considerable amount of output. DEBUGMODE must be
|
||||
defined for either of -t or -x command line options to work.
|
||||
|
||||
d) DPATH, SPATH, CPATH, MPATH, LPATH, PPATH
|
||||
|
||||
DPATH is provided so that the other pathnames (SPATH, CPATH, etc)
|
||||
may be provided in just filename form. When the server starts, it
|
||||
chdir's to DPATH before chroot or any other file operation, making
|
||||
it the "current directory" for the server. This is where core files
|
||||
will go if it core dumps.
|
||||
|
||||
Define SPATH to be the directory path to ircd. This is usually
|
||||
/usr/local/bin/ircd, unless you don't have installation permission
|
||||
there.
|
||||
|
||||
Define CPATH to be the directory path to the "irc.conf" file.
|
||||
This path is usually /usr/local/lib/irc.conf. The format of this file
|
||||
will be discussed later.
|
||||
|
||||
The LPATH #define should be set to "/dev/null" unless you plan to
|
||||
debug the program. Note that the logfile grows very quickly.
|
||||
|
||||
Define MPATH to be the path to the 'motd' (message of the day) file
|
||||
for the server. Keep in mind this is displayed whenever anyone
|
||||
signs on to your server.
|
||||
|
||||
The PPATH is optional, but if defined, should point to a file which
|
||||
either doesn't exist (but is creatable) or a previously used PPATH
|
||||
file. It is used for storing the server's PID so a ps(1) isn't
|
||||
necessary.
|
||||
|
||||
e) CHROOTDIR
|
||||
|
||||
To use the CHROOTDIR feature, make sure it is #define'd and that
|
||||
the server is being run as root. The server will chroot to the
|
||||
directory name provded by DPATH.
|
||||
|
||||
f) ENABLE_SUMMON, ENABLE_USERS
|
||||
|
||||
For security conscious server admins, they may wish to leave
|
||||
ENABLE_USERS undefined, disabling the USERS command which can be used
|
||||
to glean information the same as finger can. ENABLE_SUMMON toggles
|
||||
whether the server will attempt to summon local users to irc by
|
||||
writing a message similar to that from talk(1) to a user's tty.
|
||||
|
||||
g) SHOW_INVISIBLE_LUSERS, NO_DEFAULT_INVISIBLE
|
||||
|
||||
On large IRC networks, the number of invisible users is likely to
|
||||
be large and reporting that number cause no pain. To aid and effect
|
||||
this, SHOW_INVISIBLE_LUSERS is provided to cause the LUSERS command
|
||||
to report the number of invisible users to all people and not just
|
||||
operators. The NO_DEFAULT_INVISIBLE define is used to toggle whether
|
||||
clients are automatically made invisible when they register.
|
||||
|
||||
h) OPER_KILL, OPER_REHASH, OPER_RESTART, LOCAL_KILL_ONLY
|
||||
|
||||
The three operator only commands, KILL, REHASH and RESTART, may all
|
||||
be disabled to ensure that an operator who does not have the correct
|
||||
privilidges does not have the power to cause untoward things to occur.
|
||||
To further curb the actions of guest operators, LOCAL_KILL_ONLY can
|
||||
be defined to only allow locally connected clients to be KILLed.
|
||||
|
||||
i) The rest of the user changable #define's should be pretty much self
|
||||
explanatory in the config.h file. It is *NOT* recommended that any
|
||||
of the file undef the line with "STOP STOP" in it be changed.
|
||||
|
||||
3) Configure and compile the code.
|
||||
|
||||
Edit the root Makefile for the server, uncomment/comment the correct
|
||||
CFLAGS/IRCDLIBS lines as appropriate for your system.
|
||||
Change DESTDIR to be the same as the path for DPATH in config.h.
|
||||
Type "make". This will compile the server, the client, and the services.
|
||||
At the end of this step, the server directory will contain 'ircd',
|
||||
and the client directory will contain 'irc'. To get the server installed,
|
||||
type "make install" which will build a default m4 file for preprocessing,
|
||||
copy example.conf and put the server all in DESTDIR. The irc client and
|
||||
a copy of the server will also be placed in BINDIR and the modes set
|
||||
accordingly.
|
||||
|
||||
4) The ircd.conf file.
|
||||
|
||||
After installing the ircd and irc programs, edit the irc.conf file
|
||||
as per the instructions in this section and install it in the
|
||||
location you specified in the config.h file. There is a sample
|
||||
conf file called example.conf in the /doc directory.
|
||||
|
||||
Appendix A describes the differences between IP addresses and host
|
||||
names. If you are unfamiliar with this, you should probably scan
|
||||
through it before proceeding.
|
||||
|
||||
The irc.conf file contains various records that specify configuration
|
||||
options. The record types are as follows:
|
||||
|
||||
1. Server connections (C,N)
|
||||
2. Machine information (M)
|
||||
3. Client connections (I)
|
||||
4. Default local server (U)
|
||||
5. Operator priviliges (O)
|
||||
6. Administrative info (A)
|
||||
7. Excluded accounts (K)
|
||||
8. Excluded machines (Q)
|
||||
9. Connection Classes (Y)
|
||||
10. Leaf connections (L)
|
||||
11. Service connections (S)
|
||||
12. Port connections (P)
|
||||
13. Hub connections (H)
|
||||
|
||||
|
||||
1. SERVER CONNECTIONS: How to connect to other servers
|
||||
How other servers can connect to you
|
||||
|
||||
WARNING:
|
||||
The hostnames used as examples are really only examples and
|
||||
not meant to be used (simply because they don't work) in real life.
|
||||
|
||||
Now you must decide WHICH hosts you want to connect to and WHAT ORDER you
|
||||
want to connect to them in. For my example let us assume I am on the
|
||||
machine "rieska.oulu.fi" and I want to connect to irc daemons on 3 other
|
||||
machines:
|
||||
|
||||
"garfield.mit.edu" - Tertiary Connection
|
||||
"irc.nada.kth.se" - Secondary Connection
|
||||
"nic.funet.fi" - Primary Connection
|
||||
|
||||
And I prefer to connect to them in that order, meaning I first want to
|
||||
try connecting to "nic.funet.fi", then to "irc.nada.kth.edu", and
|
||||
finally to "garfield.mit.edu". So if "nic.funet.fi" is down or
|
||||
unreachable, the program will try to connect to "irc.nada.kth.se".
|
||||
If irc.nada.kth.se is down it will try to connect to garfield and so forth.
|
||||
PLEASE limit the number of hosts you will attempt to connect to down to 3.
|
||||
This is because of two main reasons:
|
||||
a) to save your server from causing extra load and delays
|
||||
to users
|
||||
b) to save internet from extra network traffic
|
||||
(remember the old rwho program with traffic problems when
|
||||
the number of machines increased).
|
||||
|
||||
The format for the CONNECT entry in the "irc.conf" is:
|
||||
|
||||
C:<TARGET Host Addr>:<Password>:<TARGET Host NAME>:<TARGET Host PORT>
|
||||
Field: 1 2 3 4 5
|
||||
|
||||
for example:
|
||||
|
||||
C:nic.funet.fi:passwd:nic.funet.fi:6667
|
||||
|
||||
- or -
|
||||
|
||||
C:128.214.6.100:passwd:nic.funet.fi:6667
|
||||
|
||||
- or -
|
||||
|
||||
C:root@nic.funet.fi:passwd:nic.funet.fi:6667
|
||||
|
||||
|
||||
Explanation:
|
||||
|
||||
Each field is separated with a ":" charcter:
|
||||
|
||||
Field 1: Field 1 tells the IRC program which option is being configured.
|
||||
"C" corresponds to a server Connect option.
|
||||
|
||||
Field 2: Specifies the host name or IP address of the machine to connect
|
||||
to. If "user@" prefixes the actual hostname or IP address
|
||||
the server will require that the remote username returned by
|
||||
the ident server be the same as the one given before the "@".
|
||||
|
||||
Field 3: The password of the other host. A password must always be
|
||||
present for the line to be recognized.
|
||||
|
||||
Field 4: The full hostname of the target machine. This is the name that
|
||||
the TARGET server will identify itself with when you connect
|
||||
to it. If you were connecting to nic.funet.fi you would receive
|
||||
"nic.funet.fi" and that is what you should place in
|
||||
this field.
|
||||
|
||||
Field 5: The INTERNET Port that you want to connect to on the TARGET
|
||||
machine. Most of the time this will be set to "6667".
|
||||
If this field is left blank, then no connections will
|
||||
be attempted to the TARGET host, and your host will accept
|
||||
connections FROM the TARGET host instead.
|
||||
|
||||
Some examples:
|
||||
|
||||
C:nic.funet.fi::nic.funet.fi:6667
|
||||
|
||||
This reads: Connect to host "nic.funet.fi", with no password
|
||||
and expect this server to identify itself to you as
|
||||
"nic.funet.fi". Your machine will connect to this host to
|
||||
PORT 6667.
|
||||
|
||||
C:18.72.0.252:Jeff:garfield.mit.edu:6667
|
||||
|
||||
This reads: Connect to a host at address "18.72.0.252", using a
|
||||
password of "Jeff". The TARGET server should identify
|
||||
itself as "garfield.mit.edu". You will connect to Internet
|
||||
Port 6667 on this host.
|
||||
|
||||
C:irc.nada.kth.se::irc.nada.kth.se
|
||||
|
||||
This reads: do not attempt to connect to "irc.nada.kth.se",
|
||||
but if "irc.nada.kth.se" requests a connection,
|
||||
allow it to connect.
|
||||
|
||||
Now back to our original problem, we wanted OUR server CONNECT to 3
|
||||
hosts, "nic.funet.fi", "irc.nada.kth.se" and "garfield.mit.edu" in
|
||||
that order. So as we enter these entries into the file they must be
|
||||
done in REVERSE order of how we could want to connect to them.
|
||||
|
||||
Here's how it would look if we connected "nic.funet.fi" first:
|
||||
|
||||
C:garfield.mit.edu::garfield.mit.edu:6667
|
||||
C:irc.nada.kth.se::irc.nada.kth.se:6667
|
||||
C:nic.funet.fi::nic.funet.fi:6667
|
||||
|
||||
Ircd will attempt to connect to nic.funet.fi first, then to irc.nada
|
||||
and finally to garfield.
|
||||
|
||||
Reciprocal entries:
|
||||
|
||||
Each "C" entry requires a corresponding 'N' entry that specifies
|
||||
connection priviliges to other hosts. The 'N' entry contains
|
||||
the password, if any, that you require other hosts to have before
|
||||
they can connect to you. These entries are of the same format as
|
||||
the "C" entries.
|
||||
|
||||
Let us assume that "garfield.mit.edu" connects to your server
|
||||
and you want to place password authorization authorization on garfield.
|
||||
The "N" entry would be:
|
||||
|
||||
N:garfield.mit.edu:golden:garfield.mit.edu
|
||||
|
||||
This line says: expect a connection from host "garfield.mit.edu",
|
||||
and expect a login password of "golden"
|
||||
and expect the host to identify itself as "garfield.mit.edu".
|
||||
|
||||
N:18.72.0.252::garfield.mit.edu
|
||||
|
||||
This line says: expect a Connection from host "18.72.0.252", and
|
||||
don't expect login password. The connecting host should identify itself
|
||||
as "garfield.mit.edu".
|
||||
|
||||
|
||||
Wildcards domains:
|
||||
To reduce the great amount of servers in IRCnet wildcard
|
||||
DOMAINS were introduced in 2.6. To explain the usage of
|
||||
wildcard domains we take an example of such:
|
||||
*.de - a domain name matching all machines
|
||||
in Germany.
|
||||
Wildcard domains are useful in that ALL SERVERS in Germany
|
||||
(or any other domain area) can be shown as one to the
|
||||
rest of the world. Imagine 100 servers in Germany, it
|
||||
would be incredible waste of netwotk bandwidth to broadcast
|
||||
all of them to all servers around the world.
|
||||
|
||||
So wildcard domains are a great help, but how to use them ?
|
||||
They can be defined in the N-line for a given connection,
|
||||
in place of port number you write a magic number called
|
||||
wildcard count.
|
||||
|
||||
Wildcard count tells you HOW MANY PARTS of your server's name
|
||||
should be replaced by a wildcard. For example, your server's
|
||||
name is "tolsun.oulu.fi" and you want to represent it as
|
||||
"*.oulu.fi" to "nic.funet.fi". In this case the wildcard count
|
||||
is 1, because only one word (tolsun) is replaced by a wildcard.
|
||||
If the wildcard count would be 2, then the wildcard domain would
|
||||
be "*.fi". Note that with wildcard name "*.fi" you could NOT
|
||||
connect to "nic.funet.fi", because that would result in a server
|
||||
name COLLISION (*.fi matches nic.funet.fi).
|
||||
|
||||
I advice you to not to use wildcard servers before you know
|
||||
for sure how they are used, they are mostly beneficial for
|
||||
backbones of countries and other large areas with common domain.
|
||||
|
||||
|
||||
2. MACHINE INFORMATION
|
||||
|
||||
IRC needs to know a few things about your UNIX site, and the "M" command
|
||||
specifies this information for IRC. The fomat of this command is:
|
||||
|
||||
M:<YOUR Host NAME>:xxx:<Geographic Location>:<Internet Port>
|
||||
Field: 1 2 3 4 5
|
||||
|
||||
Explanation:
|
||||
|
||||
Field 1: "M" specifies a Machine description line
|
||||
|
||||
Field 2: The name of YOUR host adding any Internet DOMAINNAME that
|
||||
might also be present.
|
||||
|
||||
Field 3: -- NOT USED --: Set to Value NULL (No spaces at ALL!).
|
||||
|
||||
Field 4: Geographic Location is used to say WHERE YOUR SEVRER is,
|
||||
and gives people in other parts of the world a good
|
||||
idea of where you are! If your server is in the USA, it is
|
||||
usually best to say: <CITY> <STATE>, USA. Like for Denver
|
||||
I say: "Denver Colorado, USA". Finnish sites (like
|
||||
tolsun.oulu.fi generally say something like "Oulu, Finland".
|
||||
|
||||
Field 5: The Internet port your server will use. Should be set to
|
||||
the same value as in the config.h file.
|
||||
|
||||
|
||||
Example:
|
||||
M:tolsun.oulu.fi::Oulu, Finland:6667
|
||||
|
||||
This line reads: My Host's name is "tolsun.oulu.fi" and
|
||||
my site is located in "Oulu, Finland". My ircd will use
|
||||
Internet Port 6667.
|
||||
|
||||
|
||||
M:orion.cair.du.edu::Denver Colorado, USA:6667
|
||||
|
||||
This line reads: My Hosts name is "orion.cair.du.edu"
|
||||
and my site is located in "Denver Colorado, USA".
|
||||
I have defined Internet Port number "6667" to be used
|
||||
as my IRCD Socket Port.
|
||||
|
||||
|
||||
3. CLIENT CONNECTIONS - How to let clients connect to your IRCD.
|
||||
|
||||
A client is a program that connects to the ircd daemon (ircd). Currently
|
||||
there are clients written in C and in GNU Emacs Lisp. The "irc"
|
||||
program is the C client. Each person that talks via IRC is running
|
||||
their own client.
|
||||
|
||||
The irc.conf files contains entries that specify which clients are allowed
|
||||
to connect to your irc daemon. Obviously you want to allow your cwn
|
||||
machine's clients to connect. You may want to allow clients from
|
||||
other sites to connect. These remote clients will use your server
|
||||
as a connection point. All messages sent by these clients will pass
|
||||
through your machine.
|
||||
|
||||
The format of this entry in the conf file is:
|
||||
|
||||
I:<TARGET Host Addr>:<Password>:<TARGET Hosts NAME>:<Internet Port>
|
||||
Field:1 2 3 4 5
|
||||
|
||||
|
||||
For example, if you were installing IRC on tolsun.oulu.fi and you wanted
|
||||
to allow examples sake let us assume you were making this file for
|
||||
tolsun and you wanted to let your own clients to connect to your
|
||||
server, you would add this entry to the file:
|
||||
|
||||
I:128.214.5.6::tolsun.oulu.fi
|
||||
or
|
||||
I:tolsun.oulu.fi::tolsun.oulu.fi
|
||||
|
||||
If you wanted to let remote clients connect, you could add the
|
||||
following lines:
|
||||
|
||||
I:*.du.edu::*.du.edu
|
||||
|
||||
Allow any clients from machines whose names end in "du.edu" to connect
|
||||
with no password.
|
||||
|
||||
I:128.214.6.100::nic.funet.fi
|
||||
|
||||
Allow clients from a machine with that IP number and the name
|
||||
nic.funet.fi to connect.
|
||||
|
||||
I:*.tut.fi:secret:*.tut.fi
|
||||
|
||||
Allow clients from machines matching *.tut.fi to connect
|
||||
with the password 'secret'.
|
||||
|
||||
I:*::*
|
||||
|
||||
Allow anyone from anywhere to connect your server.
|
||||
This is the easiest way, but it also allows people to for example
|
||||
dump files to your server, or connect 1000 (or how many open
|
||||
sockets per process your OS allows) clients to your machine
|
||||
and take your network ports. Of course the same things can be
|
||||
done by simply telnetting to your machine's SMTP port (for example).
|
||||
|
||||
NEW!!!
|
||||
As of the 2.7.2d version of the server, the server is able to accept
|
||||
connections on multiple ports. I-lines are required for each P-line
|
||||
to allow connections to be accepted. For unix sockets, this means
|
||||
either adding I:/path/port::/path/port or some variation (wildcards
|
||||
are recognised here). For internet ports, there must be an I-line
|
||||
which allows the host access as normal, but the port field of the
|
||||
I-line must match that of the port of the socket accepting the
|
||||
connectiion. A port number of 0 is a wildcard (matches all ports).
|
||||
|
||||
4. DEFAULT HOSTS (for local clients)
|
||||
|
||||
This defines the default connection for the irc client. If you are
|
||||
running an ircd server on the same machine, you will want to define
|
||||
this command to connect to your own host. If your site is not running
|
||||
a server then this command should contain the TARGET host's connection
|
||||
information and password (if any). The format for this command is:
|
||||
|
||||
U:<TARGET Host addr>:<Password>:<TARGET Host NAME>:<Internet Port>
|
||||
Field: 1 2 3 4 5
|
||||
|
||||
|
||||
For example:
|
||||
|
||||
U:tolsun.oulu.fi::tolsun.oulu.fi:6667
|
||||
U:128.214.5.6::tolsun.oulu.fi:6667
|
||||
U:tolsun.oulu.fi::tolsun.oulu.fi
|
||||
|
||||
If the port number is omitted, irc will default to using 6667.
|
||||
|
||||
5. OPERATOR Privileges: How to become the IRC administrator on your site
|
||||
|
||||
To become an IRC Administrator, IRC must know who is authorized to become
|
||||
an operator and what their "Nickname" and "Password" is. To add this
|
||||
information, EDIT your "irc.conf" file and add the following command
|
||||
line to it:
|
||||
|
||||
O:<TARGET Host NAME>:<password>:<nickname>:<port>:<class>
|
||||
Field: 1 2 3 4 5 6
|
||||
|
||||
Explanation:
|
||||
|
||||
Field 1: Speficies Operator record. If you use capital letter ('O')
|
||||
in it, it specifies a global operator. Small letter ('o')
|
||||
specifies a local operator. Local operator has basically the
|
||||
same rights except global operator with some restrictions.
|
||||
|
||||
Field 2: Tells IRC which host you have the privileges FROM. This
|
||||
means that you should be logged into this host when you
|
||||
ask for the priviliges. If you specify "tolsun.oulu.fi"
|
||||
then IRC will expect your CLIENT to be connected at
|
||||
"tolsun.oulu.fi" - when you ask for OPERATOR privileges
|
||||
from "tolsun.oulu.fi". You cannot be logged in at any
|
||||
other host and be able to use your OPERATOR privileges
|
||||
at tolsun, only when you are connected at TOLSUN will this
|
||||
work - this is a safeguard against unauthorized sites.
|
||||
|
||||
|
||||
Field 3: If your AUTHORIZATION Password - this is the password that
|
||||
let's IRC know you are who you say you are! Never tell anyone
|
||||
your password and always keep the "irc.conf" file protected
|
||||
from all of the other users.
|
||||
|
||||
Field 4: The Nickname you usually go by - but you can make this what
|
||||
you want. It is better to make this a NICKNAME that no one
|
||||
else knows, but anything will do. I usually use my own
|
||||
loginname.
|
||||
|
||||
Field 5: Unused.
|
||||
|
||||
Field 6: The class field should refer to an existing class (preferably
|
||||
having a lower number than that for the relevant I-line) and
|
||||
determines the maximum number of simultaneous uses of the
|
||||
O-line allowable through the max. links field in the Y-line.
|
||||
|
||||
Example:
|
||||
O:orion.cair.du.edu:pyunxc:Jeff
|
||||
|
||||
There is an OPERATOR at "orion.cair.du.edu" that can get
|
||||
Operator priviliges if he specifies a password of "pyunxc"
|
||||
and uses a NICKNAME of "Jeff".
|
||||
|
||||
|
||||
|
||||
6. ADMINISTRATIVE INFORMATION
|
||||
|
||||
The "A" command is used for administrative information about a site.
|
||||
The e-mail address of the person running the server should be included
|
||||
here in case problems arise.
|
||||
|
||||
|
||||
A:<Your Name/Location>:<Your Electronic Mailing Addr>:<other>
|
||||
Field: 1 2 3 4
|
||||
|
||||
Explanation:
|
||||
|
||||
Field 1: "A" specifies an Admin record.
|
||||
|
||||
|
||||
Field 2: Use this field to say tell your FULL NAME and where in the
|
||||
world your machine is. Be sure to add your City,
|
||||
State/Province and Country.
|
||||
|
||||
|
||||
Field 3: Use this field to specify your Electronic Mailing Address
|
||||
preferably your Internet Mailing Address. If you have
|
||||
a UUCP or ARAPnet address - please add that as well. Be
|
||||
sure to add any extra DOMAIN information that is needed,
|
||||
for example "mail jtrim@orion" probably won't work as a
|
||||
mail address to me if you happen to be in Alaska. But
|
||||
"mail jtrim@orion.cair.du.edu" would work because you
|
||||
know that "orion" is part of the DOMAIN "cair.du.edu".
|
||||
So be sure to add your DOMAINNAMES to your mailing addresses.
|
||||
|
||||
Field 4: Is really an OTHER field - you can add what you want here,
|
||||
|
||||
|
||||
Examples (the line is just one line in the confuration file, here it
|
||||
is cut into two lines to make it clearer to read):
|
||||
|
||||
A:Jeff Trim - Denver Colorado, USA:INET jtrim@orion.cair.du.edu UUCP {hao,
|
||||
isis}!udenva!jtrim:Terve! Heippa! Have you said hello in Finnish today?;)
|
||||
|
||||
Would look like this when printed out with the /admin command:
|
||||
|
||||
Jeff Trim - Denver Colorado, USA
|
||||
INET jtrim@orion.cair.du.edu UUCP {hao,isis}!udenva!jtrim
|
||||
Terve! Hei! Heippa! Have you said hello in Finnish today? ;)
|
||||
|
||||
|
||||
Note that the A record cannot be split across multiple lines; it will
|
||||
typically be longer than 80 characters and will therefore wrap around
|
||||
the screen.
|
||||
|
||||
|
||||
7. REMOVING A USER FROM IRC Remove an errant user from IRC on your site.
|
||||
|
||||
Obviously it is hoped that you wouldn't have to use this command.
|
||||
Unfortunately sometimes a user can become unmanageable and this is your
|
||||
only recourse - the KILL USER command. THIS COMMAND ONLY AFFECTS YOUR
|
||||
SERVER - If this user can connect to another SERVER somewhere else in
|
||||
the IRC-Network then you would have to talk to the administrator on that
|
||||
site to disable his access from that IRCD Server as well.
|
||||
|
||||
The format of this command is:
|
||||
|
||||
K:<Host Name>:<time interval(s)>:<User>
|
||||
Field: 1 2 3 4
|
||||
|
||||
Explanation:
|
||||
|
||||
Field 1: "K" tells the IRCD that you are making a KILL USER command
|
||||
entry.
|
||||
|
||||
Field 2: In this field you specify the Hostname that the user is
|
||||
connecting from. If you wanted to REMOVE connects
|
||||
to IRC from "orion.cair.du.edu" then you would want to enter
|
||||
"orion.cair.du.edu". If you want to REMOVE ALL HOSTS
|
||||
access you can use '*' (Wild Card notation) and no matter
|
||||
what host the USERNAME (specified in Field 4) connects from
|
||||
s/he will be denied access. Removing all hosts isn't
|
||||
very smart thing to do though, why would you run an ircd
|
||||
if you allow nobody to connect to it anyways ?
|
||||
|
||||
Field 3: Either leave this field empty (no spaces), then then lines
|
||||
is active continuously for the specified user/host machine.
|
||||
You may also specify intervals during the line should be
|
||||
active, see examples above.
|
||||
|
||||
Field 4: The USERNAME of the user you want removed from IRC. For
|
||||
example 'root'.
|
||||
|
||||
|
||||
Some Examples:
|
||||
K:orion.cair.du.edu::jtrim
|
||||
|
||||
If user 'jtrim' connects to IRC from host "orion.cair.du.edu"
|
||||
then IMMEDIATELY REMOVE HIM from my IRCD.
|
||||
|
||||
K:*.cair.du.edu::root
|
||||
|
||||
If user 'root' connects to IRC from any host that has the
|
||||
suffix "cair.du.edu" - then IMMEDIATELY REMOVE THEM from
|
||||
my IRCD.
|
||||
|
||||
K:*::vijay
|
||||
|
||||
This line reads "I don't care WHAT HOST user 'vijay' is on,
|
||||
I will NEVER allow username 'vijay' to login to my IRCD.
|
||||
|
||||
K:*.oulu.fi:0800-1200,1400-1900:*
|
||||
|
||||
This disallows all users from hosts with enddomain 'oulu.fi'
|
||||
access to your server between 8 and 12am, 2 and 7pm.
|
||||
Users get kicked off if they're already signed on when the
|
||||
line becomes active (they'll get a warning 5 minutes ago).
|
||||
|
||||
8. Disallowing SERVERS in your irc net.
|
||||
|
||||
In some cases people run into difficulties in net administration.
|
||||
For one reason or another you do not want a certain server to be
|
||||
in your net (for example because of the security holes it opens
|
||||
for every server if it's not secured carefully). In that case
|
||||
you should use Q-lines in your server. When you specify a server
|
||||
name in Q-line, everytime some server link tries to introduce you
|
||||
a server (remember, all server names are broadcast around the net),
|
||||
that name is checked if it matches the Q-lines in your server.
|
||||
If it matches, then your server disconnects the link. Note that
|
||||
just placing Q-lines to your server probably results in your server
|
||||
being left alone, unless other servers have agreed to have the
|
||||
same Q-line in their ircd configuration files as well.
|
||||
|
||||
Example:
|
||||
Q::of the security holes:foo.bar.baz
|
||||
|
||||
This command excludes a server named "foo.bar.baz", the reason
|
||||
is given to be security holes (you should give a reason, it is
|
||||
polite). The first field is unused, so leave it empty.
|
||||
|
||||
9. Connection Classes.
|
||||
|
||||
To enable more efficient use of MAXIMUM_LINKS, connection classes
|
||||
were implemented. To give a connection a class, add another field
|
||||
(a sixth) to the C/N lines for a particular server.
|
||||
Each line for a server should have the same number as the sixth
|
||||
field. If it is absent, the server deaults it to 0, using the
|
||||
defaults from the config.h file. To define a connection class,
|
||||
you need to include a Y: line in the irc.conf file. This enables
|
||||
you to define the ping frequency, connection frequency and maximum
|
||||
number of links that class should have. Currently, the Y: line MUST
|
||||
appear in the irc.conf file BEFORE it is used in any other way.
|
||||
|
||||
The format for the line is:
|
||||
|
||||
Y:<CLASS>:<PING FREQUENCY>:<CONNECT FREQUENCY>:<MAX LINKS>:<SENDQ>
|
||||
Field: 1 2 3 4 5 6
|
||||
|
||||
Field 2: This is the class number which gains the following attributes
|
||||
and should match that which is on the end of the C/N line.
|
||||
|
||||
Field 3: This field defines how long the server will let the connection
|
||||
remain "silent" before sending a PING message to make sure it is still
|
||||
alive. Unless you are sure of what you are doing, use the default value
|
||||
which is in your config.h file.
|
||||
|
||||
Field 4: By changing this number, you change how often your server
|
||||
checks to see if it can connect to this server. If you want to check
|
||||
very occasionally, use a large value, but if it is an important
|
||||
connection, you might want a smaller value so that you connect to it
|
||||
as soon as possible.
|
||||
|
||||
Field 5: This field defines the maximum number of links this class
|
||||
will allow from automatic connections. Using /CONNECT overrides this
|
||||
feature.
|
||||
|
||||
Field 6: This field defines the 'sendq' value for this class. If this
|
||||
field is not present, the default (from config.h) is assigned.
|
||||
|
||||
NOTE: leaving any of the fields out means their value is 0 (ZERO)!!
|
||||
|
||||
example:
|
||||
|
||||
Y:23:120:300:5
|
||||
|
||||
define class 23 to allow 5 auto-connections, which are checked every
|
||||
300 seconds. The connection is allowed to remain silent for 120
|
||||
seconds before a PING is sent. NOTE: fields 3 & 4 are in seconds.
|
||||
|
||||
You may also give I lines a class (again the sixth field to define
|
||||
which class). This is only usefull (currently) for redefining the
|
||||
ping frequency. It can also be useful as a diagnostic to see how
|
||||
much each I line is used when combined with the TRACE output.
|
||||
|
||||
Another feature of connection class is the ability to do automatic
|
||||
routing by using the class as a 'priority'. If you are connected
|
||||
to a server which has a class lower than one of the servers that is
|
||||
'behind' it, the server will disconnect the lower class one and
|
||||
schedule a 'new' connection for the higher class server.
|
||||
|
||||
10. Leaf Connections.
|
||||
|
||||
To stop servers which should only act as leaves from hubs becoming
|
||||
hubs accidently, the L line was introduced so that hubs can be aware
|
||||
of which servers should and shouldnt be treated as leaves. A leaf
|
||||
server is supposed to remain a node for the entirity of its life
|
||||
whilst connected to the IRC server network. It is quite easy, however
|
||||
for a leaf server to be incorrectly setup and create problems by
|
||||
becoming a node of 2 or more servers, ending its life as a leaf. The
|
||||
L line enables the administrator of an IRC 'Hub server' to 'stop' a
|
||||
server which is meant to act as a leaf trying to make itself a hub.
|
||||
If, for example, the leaf server connects to another server which doesnt
|
||||
have an L-line for it, the one which does will drop the connection, once
|
||||
again making the server a leaf.
|
||||
|
||||
L:<SERVER MASK>:*:<SERVER NAME>:<MAX DEPTH>
|
||||
Field: 1 2 3 4 5
|
||||
|
||||
Field 2 is a mask of which servers the leaf-like attributes are used on
|
||||
when the server receives SERVER messages. The wildcards * and ? may be
|
||||
used within this field for matching purposes. If this field is empty,
|
||||
it acts the same as if it were a single * (ie matches everything).
|
||||
|
||||
Field 4 is the the server connectted to you that for which you want to
|
||||
enforce leaf-like attributes upon.
|
||||
|
||||
Field 5 is the maximum depth allowed on that leaf and if not specified,
|
||||
a value of 1 is assumed. The depth is checked each time a SERVER message
|
||||
is received by the server, the hops to the server being the field checked
|
||||
against this max depth and if greater, the connection to the server that
|
||||
made its leaf too deep has its connection dropped.
|
||||
For the L-line to come into effect, both fields, 2 and 4, must match up
|
||||
with the new server being introduced and the server which is responsible
|
||||
for introducing this new server.
|
||||
|
||||
11. Service Connections (Not yet implemented)
|
||||
|
||||
Introduction.
|
||||
The Service is a special kind of IRC client. It does not have the full
|
||||
abilities of a normal user but can behave in a more active manner than
|
||||
a normal client. Services as they stand now are not fully implemented.
|
||||
The following line can be added to your ircd.conf file to enable a
|
||||
service:
|
||||
|
||||
S:<TARGET Host Mask>:<password>:<service_name>
|
||||
Field: 1 2 3 4
|
||||
|
||||
Explanation:
|
||||
|
||||
Field 2:
|
||||
The host mask should be set to match the hosts(s) from which the
|
||||
service will be connecting from. This may be either an IP# or full
|
||||
name (prefered).
|
||||
|
||||
Field 3:
|
||||
This is the password which must be passed in the SERVICE command.
|
||||
|
||||
Field 4:
|
||||
The 'service name' is only used for the purpose of finding the
|
||||
right S-line from the ircd.conf file for password matching. The
|
||||
actual service name used is that set by NICK commands prior to
|
||||
SERVICE being sent.
|
||||
|
||||
To connect a service to your server, you must first create an S-line
|
||||
entry in your ircd.conf file and get your server to read this in (ie
|
||||
rehash or reboot). Once your server has updated itself, you can then
|
||||
attempt to register your connection as a service.
|
||||
Registering as a service is similar to registering as a normal user
|
||||
except that you must send NICK first and then SERVICE. The service
|
||||
command should look something like this:
|
||||
|
||||
SERVICE secretpassword referencename :Service information
|
||||
|
||||
A successfull registering of a service at the server will result in
|
||||
a RPL_YOURESERVICE (383) being sent back to you. Any other reply as
|
||||
a result of sending service indicates an error has occured.
|
||||
|
||||
A service is not a very useful sort of client, it cannot join channels
|
||||
or issue certain commands although most are available to it. Services,
|
||||
however, are not affected by flood control. It is therefore wise to
|
||||
oversee the use of S-lines with some care.
|
||||
|
||||
12. Port Connections
|
||||
|
||||
Introduction.
|
||||
The port line adds flexibility to the server's ability to accept
|
||||
connections. By use of this line in the ircd.conf file, it is easy
|
||||
to setup both Unix Domain ports for the server to accept connections
|
||||
on as well as extra internet ports.
|
||||
|
||||
P:<Internet IP# Mask>:<*>:<*>:<PORT>
|
||||
Field: 1 2 3 4 5
|
||||
|
||||
or
|
||||
|
||||
P:<Directory>:<*>:<*>:<PORT>
|
||||
Field: 1 2 3 4 5
|
||||
|
||||
Explanation
|
||||
Internet Ports
|
||||
Field 1
|
||||
The internet IP mask defines where connections may come from and
|
||||
be accepted. The IP mask uses either *'s or 0's as wildcards. The
|
||||
following two lines are the same:
|
||||
|
||||
P:128.2.*:::6664
|
||||
P:128.2.0.0:::6664
|
||||
|
||||
The incoming isnt matched against the mask, rather the ip# string
|
||||
is decoded and compared segment by segment. Thus
|
||||
P:128.2*.1.2:::6664
|
||||
will not match 128.20.1.2.
|
||||
|
||||
Field 5
|
||||
The port number field tells the server which port number it should
|
||||
listen on for incoming connections.
|
||||
|
||||
Unix Socket Ports.
|
||||
Field 1
|
||||
The path set in field 1 should be the directory name in which to
|
||||
create the unix socket for later listening to. The server will
|
||||
attempt to create the directory before creating the unix socket.
|
||||
|
||||
Field 5
|
||||
The port field when used in combination with a pathname in a P-line
|
||||
is the filename created in the directory set in Field 1.
|
||||
|
||||
Example:
|
||||
P:/tmp/.ircd:::6667
|
||||
|
||||
Creates a unix socket in the /tmp/.ircd directory called "6667".
|
||||
The unix socket (file) must be a numerical.
|
||||
|
||||
13. Hub Connections
|
||||
|
||||
In direct contrast to L-lines, the server also implements H-lines to
|
||||
determine which servers may act as a hub and what they may 'hub for'.
|
||||
If a server is only going to supply its own name (ie act as a solitary
|
||||
leaf) then no H-line is required for, else a H-line must be added as
|
||||
follows:
|
||||
|
||||
H:<SERVER MASK>:*:<SERVER NAME>
|
||||
Field: 1 2 3 4
|
||||
|
||||
Explanation:
|
||||
Field 2
|
||||
All servers that are allowed via this H-line must match the mask
|
||||
given in this field.
|
||||
|
||||
Field 4
|
||||
This field is used to match exactly against a server name, wildcards
|
||||
being treated as literal characters.
|
||||
|
||||
Examples:
|
||||
|
||||
H:*.edu:*:*.bu.edu
|
||||
|
||||
Allows a server named "*.bu.edu" to introduce only servers that
|
||||
match the "*.edu" name mask.
|
||||
|
||||
H:*:*:eff.org
|
||||
|
||||
Allow "eff.org" to introduce (and act as a hub for) any server.
|
||||
|
||||
Note: It is possible to have and use multiple H-lines (or L-lines) for
|
||||
the one server. eg:
|
||||
|
||||
H:*.edu:*:*.bu.edu
|
||||
H:*.au:*:*.bu.edu
|
||||
|
||||
is allowed as is
|
||||
|
||||
L:*.edu:*:*.au
|
||||
L:*.com:*:*.au
|
||||
|
||||
|
||||
Appendix A: Difference between IP addresses and hostnames
|
||||
|
||||
|
||||
There are 2 different types of INTERNET addresses, NAME addresses and
|
||||
NUMERIC addresses. NAME addresses look like ENGLISH words (and indeed
|
||||
they are ENGLISH words that refer to a given host). A NAME address looks
|
||||
like "tolsun.oulu.fi" - and that particular address refers to the machine
|
||||
named TOLSUN in Finland. It is a UNIQUE address because no other machine
|
||||
in the world has its NAME address the same as "tolsun.oulu.fi". Anytime
|
||||
you say "telnet tolsun.oulu.fi" - you would always connect to TOLSUN in
|
||||
Finland. NUMERIC addresses refer to those addresses that are made up of
|
||||
NUMBERS for example "128.214.5.6" is the NUMERIC address for TOLSUN. This
|
||||
address is also UNIQUE in that no other machine in the world will be use
|
||||
those NUMERIC numbers. The NUMERIC address is usually more reliable than
|
||||
the NAME address because not all sites can recognize and translate the
|
||||
NAME address into it's numeric counterpart. NUMERIC always seems to work
|
||||
best, but use a NAME address when you can because it is easier to tell
|
||||
what host you are connected to.
|
||||
|
||||
|
||||
Every Unix machine has a file called "/etc/hosts" on it. This file
|
||||
contains NAME and NUMERIC addresses. When you supply IRC with a NAME
|
||||
address it will at first try to find it in /etc/hosts, and then (if it's
|
||||
really smart), use the local Domain Name Server (DNS) to find the NUMERIC
|
||||
address for the host you want to connect to. Thus if you plan to use NAME
|
||||
addresses keep in mind that on SOME sites the entry for the TARGET machine
|
||||
must be found in /etc/hosts or the NAME address will fail. A typical
|
||||
entry in /etc/hosts looks like this:
|
||||
|
||||
130.253.1.15 orion.cair.du.edu orion.du.edu orion # BSD 4.3
|
||||
|
||||
This particular example is the Host ORION at the University of Denver.
|
||||
Notice that on the far left is the NUMERIC Address for orion. The
|
||||
next few ENGLISH words are the NAME addresses that can be used for orion,
|
||||
"orion.cair.du.edu", "orion.du.edu", "orion". ALL of these NAME addresses
|
||||
will return the NUMERIC address "130.253.1.15" which IRC will use to
|
||||
connect to the TARGET UNIX. (when I say TARGET UNIX I am refering to the
|
||||
UNIX you want to connect to for IRC). Any futher questions about
|
||||
/etc/hosts should be directed to "man hosts".
|
||||
|
||||
|
||||
Appendix B: Enabling Summon Messages
|
||||
|
||||
+-----------------------------------------------------------------------+
|
||||
| E N A B L I N G / S U M M O N M E S S A G E S |
|
||||
+-----------------------------------------------------------------------+
|
||||
|
||||
*NOTE* You must have ROOT or special access to the GROUP tty ('/dev')
|
||||
to do this. If you want to allow users around the world to summon
|
||||
users at your site to irc, then you should make sure that summon works.
|
||||
|
||||
The "IRCD" program needs access to the GROUP of '/dev'. This
|
||||
directory is where user TTY's are stored (as UNIX treats each Terminal
|
||||
as a FILE!) IRCD needs GROUP ACCESS to /dev so that users can be
|
||||
SUMMONED to the program by others users that are *in* the program.
|
||||
This allows people from other Universities around the world to SUMMON
|
||||
your users to IRC so that they can chat with them. Berkeley, SUN, HP-UX
|
||||
and most of the newer versions of UNIX check to see if a USER is
|
||||
accepting MESSAGES via the GROUP access rights on their TTY listing
|
||||
in the /dev directory. For example an entry in '/dev' looks like this:
|
||||
|
||||
(Unix Path on BSD 4.3 UNIX is: /dev/ttyp0)
|
||||
|
||||
crw------- 1 jtrim 20, 0 Apr 29 10:35 ttyp0
|
||||
|
||||
You will note that 'jtrim' OWNS this terminal and can READ/WRITE to this
|
||||
terminal as well (which makes sense because I am ENTERING DATA and
|
||||
RECEIVEING DATA back from the UNIX). I logged into this particular
|
||||
UNIX on "April 29th" at "10:35am" and my TTY is "ttyp0". But further
|
||||
of *note* is that I do not have my MESSAGES ON! (mesg n) -- This is
|
||||
how my terminal would look with MESSAGES ON (mesg y):
|
||||
|
||||
crw--w---- 1 jtrim 20, 0 Apr 29 10:35 ttyp0
|
||||
|
||||
With my MESSAGES ON (mesg y) I can receive TALK(1) requests, use the
|
||||
UNIX WRITE(1) command and other commands that allow users to talk
|
||||
to one another. In IRC this would also allow me to get IRC /SUMMON
|
||||
messages. To set up the "IRCD" program to work with /SUMMON type
|
||||
the following: (using ROOT or an account that has access to '/dev').
|
||||
|
||||
% chgrp tty ircd
|
||||
% chmod 6111 ircd
|
||||
|
||||
The above commands read: "Give IRCD access to GROUP tty (which is /dev)
|
||||
and then when ANYONE runs the IRCD allow SETUID and SETGID priviliges
|
||||
so that they can use the /SUMMON command.
|
||||
+382
@@ -0,0 +1,382 @@
|
||||
/************************************************************************
|
||||
* IRC - Internet Relay Chat, doc/MANUAL
|
||||
* Copyright (C) 1990, Karl Kleinpaste
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
Date: 04 Apr 1989
|
||||
Author: Karl Kleinpaste
|
||||
karl@cis.ohio-state.edu
|
||||
|
||||
Last modification: 15 May 1992
|
||||
by Mauri Haikola
|
||||
mjh@stekt.oulu.fi
|
||||
|
||||
|
||||
INTERNET RELAY CHAT
|
||||
a real-time conversational system
|
||||
|
||||
|
||||
* 1: Irc - replacement for talk(1)
|
||||
|
||||
Irc is a functional replacement for and improvement to talk(1). Talk
|
||||
is an old, primitive, atrocious, minimalist sort of keyboard/screen
|
||||
conversation tool, using a grotesque, machine-dependent protocol.
|
||||
Irc does everything talk does, but with a better protocol, allowing
|
||||
more than 2 users to talk at once, with access across the aggregate
|
||||
Internet, and providing a whole raft of other useful features.
|
||||
|
||||
* 2: Entering Internet Relay Chat
|
||||
|
||||
There are two ways to enter Internet Relay Chat. If you are using the
|
||||
emacs lisp client, you need to load the client into your Emacs session
|
||||
and then M-x irc. If you are using the C client (easier for beginners)
|
||||
then type (usually) irc. If you wish to be known by a nickname which
|
||||
is not one's login name, type `irc chosen-nickname' instead.
|
||||
|
||||
* 3: How much can be seen from here
|
||||
|
||||
The universe - seriously.
|
||||
|
||||
This is most formally called Internet Relay Chat. Server hosts are
|
||||
connected via a tree structure. The various servers relay control and
|
||||
message data among themselves to advertise the existence of other
|
||||
servers, users, and the channels and other resources being occupied by
|
||||
those users.
|
||||
|
||||
* 4: Structure
|
||||
|
||||
There is quite a lot of structure to the operation of irc, as
|
||||
compared to crufty old talk(1). Since so little could be done with
|
||||
talk(1), it needed little structure. But to keep track of people
|
||||
spread literally around the world (the system was written by Jarkko
|
||||
Oikarinen of Finland, usually seen on the system as `Wiz'), the
|
||||
structure is useful so that one can speak to exactly those people with
|
||||
whom one wishes to speak.
|
||||
|
||||
** 4.1: Nicknames
|
||||
|
||||
All users of irc are known to the system by a `nickname.' By
|
||||
default, one's nickname is one's login name. Nickname clashes are not
|
||||
allowed; this is enforced by the servers. If one's intended nickname
|
||||
clashes with someone else as one enters chat, one will not be able to
|
||||
complete entry to irc until one changes one's nickname to something
|
||||
else.
|
||||
|
||||
** 4.2: Presence on a channel
|
||||
|
||||
Fundamental to the operation of irc is the concept of a channel. All
|
||||
users are `on a channel' while inside irc. One enters the `null
|
||||
channel' first. One cannot send any messages while not in any
|
||||
chatting channel unless one has set up a private conversation in some
|
||||
way. The number of channels is essentially unlimited - whatever will
|
||||
fit in a string of some ungodly length, that must start with a # sign.
|
||||
|
||||
** 4.3: Main modes of channels
|
||||
|
||||
Public
|
||||
|
||||
This is the default mode for a channel. When one is on a public
|
||||
channel, one can be seen by all other users (if one's own user mode
|
||||
permits this). Anyone can notice users on a public channel and join
|
||||
such a channel's conversation.
|
||||
|
||||
Private
|
||||
|
||||
This means that, although anyone can see that one is using chat, no
|
||||
one can tell what channel one is using unless one is already on that
|
||||
channel with oneself. Since the number of potential channels is in
|
||||
the billions, this is quite some security - all one gives away is the
|
||||
acknowledgement that one is using chat.
|
||||
|
||||
Secret
|
||||
|
||||
While one is on a secret channel, no one who is not on one's channel
|
||||
with oneself can even see that one is there. One's name does not show
|
||||
up in a list of active users. The only indication of one's presence
|
||||
is that, when entering chat, all new users are told that there are "N
|
||||
users on P servers." If one checks on all users and finds less than N
|
||||
of them, one knows that others are hiding on secret channels. But a
|
||||
secret channel user still cannot be found except by brute-force
|
||||
checking through all channels, a hopeless proposition in the face of
|
||||
the huge number of possible channel names. Security through obscurity
|
||||
finally means something.
|
||||
|
||||
Changing the mode
|
||||
|
||||
The mode of a channel (private, secret, invite-only, moderated,
|
||||
topic-limited, person-number-limited, no-messages-to-channel, ban
|
||||
someone from channel) is set by the channel operator, who is the
|
||||
first person to join a channel, or someone who has had channel
|
||||
operatorship bestowed on them by another channel operator.
|
||||
|
||||
|
||||
*** 4.4: Conversations not using channels
|
||||
|
||||
It is possible to conduct conversations with others without using the
|
||||
formalized channel structure. Doing so requires that two people set
|
||||
themselves up for private conversation using special commands; see
|
||||
User Commands below.
|
||||
|
||||
* 5: Screen/keyboard structure
|
||||
|
||||
Chat is a full-screen utility. It takes over the screen, with the
|
||||
bulk of activity happening in the top N-2 lines, a modeline (vaguely
|
||||
emacs-like) on the next to last line, and one's input being entered on
|
||||
the last line. A very good version of client is the IRC-II client,
|
||||
avaliable on anonymous ftp from various sites around the world.
|
||||
|
||||
** 5.1: Keyboard input
|
||||
|
||||
When typing commands at irc, one has a minimalist line-editing
|
||||
facility in an emacs style. That is, ^A moves the cursor to the
|
||||
beginning of the line, ^E goes to the end, ^D deletes the character
|
||||
under the cursor, ^K kills from the cursor to the end, and so on.
|
||||
|
||||
** 5.2: Screen activity
|
||||
|
||||
Almost everything happens in the upper bulk of the screen. This
|
||||
includes both messages from other users, as well as the output of the
|
||||
control commands.
|
||||
|
||||
Normal messages from other users appear with the originating nickname
|
||||
in <angle brackets>. Private messages arrive with the originating
|
||||
nickname in *asterisks*. Messages which one sends to everyone appear
|
||||
with a preceding "> " whereas messages which one sends privately to
|
||||
one other user appear with "-> *nickname*."
|
||||
|
||||
Other output (e.g., /who commands, invitations from other users to
|
||||
join channels, and so forth) appears interspersed with other activity
|
||||
on the screen.
|
||||
|
||||
* 6: Command structure
|
||||
|
||||
Ordinary text typed at irc is sent as one's messages to everyone else
|
||||
on the same channel, modulo personal choices for private messages and
|
||||
the like. Commands to irc itself all begin with a command character,
|
||||
which is initially `/' but may be changed to any other character
|
||||
desired.
|
||||
|
||||
Commands may in general be abbreviated to a unique prefix.
|
||||
|
||||
** 6.1: Leaving irc
|
||||
|
||||
The way to get out of irc is to enter the /signoff command. "/si" is
|
||||
sufficient. Also equivalent are "/exit," "/bye," and "/quit." A
|
||||
signoff command may include a comment which will be seen by everyone
|
||||
on the current channel of the person who left.
|
||||
|
||||
** 6.2: Getting help
|
||||
|
||||
Type "/help." Follow the instructions.
|
||||
|
||||
** 6.3: User commands
|
||||
|
||||
The most important commands supported by irc are:
|
||||
|
||||
help signoff who whois
|
||||
list topic join channel
|
||||
links msg invite ignore
|
||||
users stats nick away
|
||||
info clear query cmdch
|
||||
date mode
|
||||
|
||||
*** 6.3.1: help
|
||||
|
||||
Information on how to use the rest of the system is available via
|
||||
/help. The modeline says so as well.
|
||||
|
||||
*** 6.3.2: signoff {comment}
|
||||
|
||||
/signoff exits chat. Optional comment may be included; see above.
|
||||
|
||||
*** 6.3.3: who
|
||||
|
||||
/who returns information on who is using chat. /who without arguments
|
||||
prints info on all users that can be seen. Users of public channels
|
||||
show up with their channel identified. Users of private channels
|
||||
appear, but they are specified as being on a private, unspecified
|
||||
channel. Users of secret channels and users whose user mode is +i
|
||||
(invisible) do not appear at all.
|
||||
|
||||
Giving a channel name as an argument to /who returns only those users of the
|
||||
specified channel. This still doesn't show users of secret channel or
|
||||
invisible users one is actually on the same channel with them. Users
|
||||
of private channels are shown, if an exact channel name is given.
|
||||
|
||||
*** 6.3.4: whois
|
||||
|
||||
This returns information about individual users. Say "/whois
|
||||
nickname" to get information on the login name and host from which the
|
||||
nicknamed user comes.
|
||||
|
||||
*** 6.3.5: topic
|
||||
|
||||
Channels can be given off-the-cuff "topics." Saying "/topic some
|
||||
string of text" will associate that topic with the current channel.
|
||||
|
||||
*** 6.3.6: list
|
||||
|
||||
/list will give lists of active channels, the number of users of each,
|
||||
and the topics therewith associated. Again, secret channels do not
|
||||
appear and private channels only appear as Prv.
|
||||
|
||||
*** 6.3.7: join & channel
|
||||
|
||||
/join or /channel are the means to enter a channel. Give the channel
|
||||
name as an argument. If this is a secret or hidden channel, /who
|
||||
commands will show oneself and any other users of one's channel.
|
||||
|
||||
One's arrival on a channel is announced to the rest of the users
|
||||
already on that channel. Silent, anonymous "lurking" is not
|
||||
supported.
|
||||
|
||||
*** 6.3.8: links
|
||||
|
||||
/links lists the currently-active set of chat servers. Beware: this
|
||||
list can be quite long, and will undoubtedly get longer as chat gains
|
||||
wider use. As of 15 May, 1992, about 130 servers is typical.
|
||||
|
||||
*** 6.3.9: msg
|
||||
|
||||
A single message can be sent privately to a certain user with /msg.
|
||||
Type /msg nickname and the text to be sent. It will be sent privately
|
||||
to the indicated nickname.
|
||||
|
||||
*** 6.3.10: invite
|
||||
|
||||
If there is a user online to whom one wishes to speak, one may invite
|
||||
that user to join oneself on a certain channel. One types "/invite
|
||||
nickname" with an optional channel number. The receiving user gets a
|
||||
one-line message indicating the sender and the invitation. The
|
||||
receiving user is free to ignore the invitation, of course.
|
||||
|
||||
*** 6.3.11: ignore
|
||||
|
||||
If one wants to ignore messages sent by some other user or users, it
|
||||
may be done with /ignore command. One can ignore someone by their
|
||||
nickname, or by their user@host data. Wildcards may be used.
|
||||
|
||||
*** 6.3.12: users
|
||||
|
||||
/users will return a list of the users logged into one's system. With
|
||||
an optional hostname identifying a chat server host, the users logged
|
||||
into that system will be listed.
|
||||
|
||||
*** 6.3.13: stats
|
||||
|
||||
This command returns counts of various protocol operations of one's
|
||||
chat server. It is neither particularly useful nor interesting to
|
||||
users other than operators.
|
||||
|
||||
*** 6.3.14: nick
|
||||
|
||||
One can change nicknames by issuing "/nick new-nickname." All users
|
||||
on one's channel will be advised of the change. NOTE: If one enters
|
||||
chat with a nickname clash (e.g., one's login name is the same as
|
||||
someone else's, and the other user got there first), the system will
|
||||
not let one enter until one issues a /nick command with a unique
|
||||
nickname.
|
||||
|
||||
*** 6.3.15: away
|
||||
|
||||
Sometimes, one wishes to remain connected to the chat system, but one
|
||||
must be elsewhere for a while. One can issue an /away command with
|
||||
arbitrary text as argument, which will mark oneself as being away. If
|
||||
someone sends an away'd user a private message (via /msg or in a
|
||||
private session set up via /query; see below), the sender will get a
|
||||
message back from the server indicating the away-ness and the message
|
||||
which was set.
|
||||
|
||||
*** 6.3.16: info
|
||||
|
||||
/info returns information regarding the author and copyright of the
|
||||
chat system.
|
||||
|
||||
*** 6.3.17: clear
|
||||
|
||||
At times, one wishes that one's screen weren't so cluttered. /clear
|
||||
makes it so.
|
||||
|
||||
*** 6.3.18: query
|
||||
|
||||
This command is used to set up private communications `outside' the
|
||||
normal channel system.
|
||||
|
||||
When one enters "/query nickname," the indicated nickname is set up as
|
||||
the sole recipient of anything which one types thereafter. Thus, if
|
||||
user A executes "/query B" and user B executes "/query A," they have
|
||||
set up a private communication between themselves. Significantly, it
|
||||
remains possible for them to stay on their respective channels, which
|
||||
need not be the same, and listen to whatever conversation is going on
|
||||
around them as well, though they cannot respond to that ambient
|
||||
conversation without leaving the private conversation they have set up.
|
||||
|
||||
One leaves this private mode by issuing /query without arguments.
|
||||
|
||||
*** 6.3.19: cmdch
|
||||
|
||||
The `/' character may not be best for some people to use as their
|
||||
command character. It can be changed with "/cmdch <character>."
|
||||
|
||||
*** 6.3.20: mode
|
||||
|
||||
This command can be used for altering the various modes of a channel
|
||||
(see the explanation of channel modes above). /mode command can only
|
||||
be issued by channel operators.
|
||||
|
||||
** 6.4: Operator commands
|
||||
|
||||
The chat system administrators on each host have additional
|
||||
responsibilities and power over the configuration and operation of the
|
||||
servers. The commands to do so are delineated below.
|
||||
|
||||
*** 6.4.1: oper
|
||||
|
||||
Users who have the potential for operator privileges initially invoke
|
||||
those privileges by "/oper nickname password," where nickname is the
|
||||
nickname under which operation is intended, and password is the
|
||||
password known to the chat system for that nickname.
|
||||
|
||||
*** 6.4.2: kill
|
||||
|
||||
Obnoxious users had best beware the operator who's fast on the /kill
|
||||
command. "/kill nickname" blows any given nickname completely out of
|
||||
the chat system.
|
||||
|
||||
Obnoxiousness is not to be tolerated. But operators should not use
|
||||
/kill lightly.
|
||||
|
||||
*** 6.4.3: quote
|
||||
|
||||
Raw access to the underlying server protocol is possible through the
|
||||
user of the /quote command. "/quote any text at all" is used to send
|
||||
direct, unmodified commands to the servers. This has a wide variety
|
||||
of uses, such as deliberately killing a local or remote chat daemon,
|
||||
invoking operator privileges for otherwise-operator-priv-forbidden
|
||||
users, and related tasks. It is, again, a very powerful operation,
|
||||
and not to be used lightly.
|
||||
|
||||
* 7: Questions, problems, troubles?
|
||||
|
||||
If you have problems, please contact Christopher Davis (ckd@eff.org) or
|
||||
Helen Rose (hrose@eff.org). Known as "ckd" and "Trillian" on irc,
|
||||
respectively. You can also ask for help on some of the operator
|
||||
channels on irc, for example #twilight_zone and #eu-opers. They will
|
||||
be able to assist you in whatever problems you are having with IRC.
|
||||
|
||||
+241
@@ -0,0 +1,241 @@
|
||||
Internet Relay Chat Operator Etiquette Guide (May, 1992)
|
||||
[ $Id$ ]
|
||||
|
||||
Welcome! You've either been selected to be an IRC Operator or you have set
|
||||
up your server and thus have taken on the dual task of IRC Server
|
||||
Administrator and IRC Operator. Your future days will be filled with hours
|
||||
of fun chatting on IRC, and then wondering why everyone you talked to went
|
||||
away, because the links had apparently broken.
|
||||
|
||||
Linking:
|
||||
========
|
||||
|
||||
You will be assigned links from the IRC Routing Coordinators. Please
|
||||
use these links and these links ONLY. The links have been designed to
|
||||
maximize efficiency and make delays in chatting minimal. You will
|
||||
usually be given two links, one to each regional backbone site.
|
||||
Connect to the primary site first and then to the secondary site. You
|
||||
should not need to connect to any other sites. You will be informed if
|
||||
this policy changes.
|
||||
|
||||
Kills
|
||||
=====
|
||||
|
||||
/kill is a special operator command. You should use it with
|
||||
care, and only if absolutely needed. The format is as follows:
|
||||
/kill NICKNAME comment. Comment can be a phrase of almost any length
|
||||
(within reason) and should be used for specifying the reason of the kill.
|
||||
Example: /kill Trillian She's a Ghost
|
||||
IRC Ghosts are created after a net split has occured and the net has yet to
|
||||
relink.
|
||||
|
||||
/wallops PHRASE This is used to talk to those users who have their
|
||||
user mode set to +w. /wallops used to be a way for operators to talk
|
||||
about important matters in linking etc., but it has little use
|
||||
nowadays.
|
||||
|
||||
/TRACE command /TRACE is useful to know what servers are connected to
|
||||
what. Sometimes /trace can be confusing, especially if you are using
|
||||
it for the first time. Here is an example of a trace from
|
||||
stekt1.oulu.fi to cdc835.cdc.polimi.it.
|
||||
|
||||
/TRACE cdc835.cdc.polimi.it
|
||||
|
||||
*** Link stekt1.oulu.fi<2.7.2> ==> cdc835.cdc.polimi.it
|
||||
*** Link rieska.oulu.fi<2.7.1>e ==> cdc835.cdc.polimi.it
|
||||
*** Link nic.funet.fi<2.7.1>e ==> cdc835.cdc.polimi.it
|
||||
*** Link ircserver.et.tudelft.nl<2.7.1>e ==> cdc835.cdc.polimi.it
|
||||
*** Link vesuv.unisg.ch<2.7.1>e ==> cdc835.cdc.polimi.it
|
||||
*** Link apollo.di.unipi.it<2.7.1>e ==> cdc835.cdc.polimi.it
|
||||
*** Oper Class[10] ==> Allanon[cdc835.cdc.polimi.it]
|
||||
*** User Class[11] ==> Lupandy[plus2.usr.dsi.unimi.it]
|
||||
*** Serv Class[3] ==> apollo.di.unipi.it[131.114.4.36] 132S 445C
|
||||
*** User Class[11] ==> Punk[pluto.sm.dsi.unimi.it]
|
||||
*** User Class[11] ==> TheEdge[pluto.sm.dsi.unimi.it]
|
||||
*** User Class[10] ==> Mork[cdc835.cdc.polimi.it]
|
||||
*** User Class[11] ==> Lollo[c700-2.sm.dsi.unimi.it]
|
||||
*** User Class[11] ==> Attila[hp2.sm.dsi.unimi.it]
|
||||
*** Class 0 Entries linked 1
|
||||
*** Class 11 Entries linked 5
|
||||
*** Class 10 Entries linked 2
|
||||
*** Class 3 Entries linked 1
|
||||
|
||||
From this output you can see that the route goes first to
|
||||
rieska.oulu.fi (running version 2.7.1e), then nic.funet.fi,
|
||||
ircserver.et.tudelft.nl, vesuv.unisg.ch, and apollo.di.unipi.it, after
|
||||
which cdc835 is the next server. Then we see the connections on
|
||||
cdc835: One operator (Allanon) and 6 users are on line. The class of
|
||||
each connection is given. There is only one server connected to cdc835
|
||||
at the moment, and that server is apollo.di.unipi.it (cdc835 is said
|
||||
to be a "leaf" server at the moment). The numbers 132S 445C in the end
|
||||
of line tell us, that there are 132 servers and 445 clients connected
|
||||
to the servers from apollo onwards. Finally we see a grand total of
|
||||
connections in each connection class.
|
||||
|
||||
|
||||
/SQUIT server {comment}
|
||||
/squit isolates a specified server from the next closest server, when
|
||||
you look at it along the trace path starting from your server.
|
||||
This is usually used in conjunction with CONNECT (explained later) to
|
||||
reroute traffic. This will be described in detail in the section
|
||||
"routing", preceding CONNECT.
|
||||
|
||||
Usage (and examples):
|
||||
|
||||
/squit E
|
||||
|
||||
If the network looks like this initially (and you are on server A)
|
||||
|
||||
|
||||
A <---> B <---> C <---> D
|
||||
^
|
||||
|
|
||||
v
|
||||
G <---> E <---> F <---> ... (rest of the net)
|
||||
|
||||
|
||||
Then after issuing the previous /squit the network would look like this:
|
||||
|
||||
A <---> B <---> C <---> D
|
||||
|
||||
|
||||
G <---> E <---> F <---> ...
|
||||
|
||||
|
||||
/squit E {comment}
|
||||
|
||||
It usually helps to give a reason why you are sending a
|
||||
SQUIT for a server. This can be accomplished by sending
|
||||
the command "/squit server This link is making the US route
|
||||
through Finland". The SQUIT will then be sent out, and the
|
||||
server sending the squit will WALLOP sending the comment
|
||||
so all operators can see it.
|
||||
|
||||
/CONNECT server {portnum server2}
|
||||
/connect is used to establish a link between two servers. These
|
||||
connections must be authorized by each server's ircd.conf file, but
|
||||
any operator can issue a CONNECT between authorized servers. This
|
||||
command is most often used in conjunction with SQUIT to reroute
|
||||
traffic.
|
||||
If only one argument is given, this command causes the server you
|
||||
are on to attempt to connect to the server specified. For example,
|
||||
"/connect B" (in the previous example) would cause your server (A) to
|
||||
connect to B.
|
||||
Suppose you wanted to reconnect server F to server E? You cannot
|
||||
contact server F since it is no longer part of your network. However,
|
||||
you can tell server E to connect to it. A remote CONNECT can be issued
|
||||
to server E.
|
||||
|
||||
Examples (assume you are on server A):
|
||||
|
||||
/connect B
|
||||
|
||||
If the network initially looks like this:
|
||||
|
||||
A B <---> ... (rest of network)
|
||||
|
||||
Then afterwards (if the connection succeeds) the network will look
|
||||
like this:
|
||||
|
||||
A <---> B <---> ...
|
||||
|
||||
|
||||
In the example where you wanted to reconnect server E to F, the
|
||||
following syntax would be appropriate (note: we are assuming that
|
||||
F's irc socket port is 6667, which is the default)
|
||||
|
||||
/connect F 6667 E
|
||||
|
||||
If the network initially looks like this:
|
||||
|
||||
A <---> B <---> C <---> D
|
||||
^
|
||||
|
|
||||
v
|
||||
G <---> E F <---> ...
|
||||
|
||||
Then after your CONNECT request the network topology will look like this:
|
||||
|
||||
A <---> B <---> C <---> D
|
||||
^
|
||||
|
|
||||
v
|
||||
G <---> E <---> F <---> ...
|
||||
|
||||
Be careful when connecting servers that you know which command to
|
||||
use! If you simply issued "/connect F" from your server, the
|
||||
network would look like this:
|
||||
|
||||
|
||||
... <---> F <---> A <---> B <---> C <---> D
|
||||
^
|
||||
|
|
||||
v
|
||||
G <---> E
|
||||
|
||||
which for various reasons (discussed below) might be very
|
||||
undesirable.
|
||||
|
||||
Routing
|
||||
=======
|
||||
|
||||
When and how should you do rerouting? This depends on where your
|
||||
server is topologically located and whether you route traffic. If you
|
||||
are a leaf node (i.e. only connect to one server at a time) then
|
||||
chances are you won't need to do any routing at all. Your ircd.conf
|
||||
file should be written to connect to the best possible servers first
|
||||
before trying alternates. At the most, you may decide to squit an
|
||||
alternate server and connect to your primary if/when it goes back up.
|
||||
This only involves local squits, however.
|
||||
|
||||
If you are operating a backbone site, you may find yourself
|
||||
rerouting things quite often. If the servers badger.ugcs.caltech.edu
|
||||
(Pasadena, CA), irc.mit.edu (Boston, MA), minnie.cc.utexas.edu
|
||||
(Austin, TX) and ucsu.colorado.edu (Boulder, CO) were routing traffic
|
||||
in the following way:
|
||||
|
||||
... <---> minnie <---> badger <---> bucsd <---> ucsu <---> ...
|
||||
|
||||
It would make sense to either squit ucsu and reconnect it to minnie,
|
||||
or disconnect minnie from badger and connect to ucsu, because
|
||||
topologically (and geographically) ucsu and minnie are rather close.
|
||||
There are occasions when US traffic for some reasons winds up being
|
||||
routed through Australia. This is another case where traffic should
|
||||
definitely be rerouted. However, there are sometimes occasions when
|
||||
routing is going through "backdoor" methods. If you see something
|
||||
totally outrageous (like the east coast and the west coast being
|
||||
connected by eff.org) please ask for example on channel #twilight_zone
|
||||
before you send any squits, because chances are, it's like that for a
|
||||
reason.
|
||||
|
||||
Of course, any operator can remotely squit or connect servers, so
|
||||
if you see a problem and you're sure you know how to fix it, it's a
|
||||
good idea to do so. If the operator of a server which is is being
|
||||
routed poorly is online, it's probably best to contact him/her first,
|
||||
though.
|
||||
|
||||
Chances are that hub operators will be more familiar with the
|
||||
general topology of the network and which servers connect to which
|
||||
(which is why most of the manual routing is left to them), so if you
|
||||
have any problems, talk to the other operators on operator channels
|
||||
(#twilight_zone, #eu-opers etc.) That's what they are there for!
|
||||
Also, be aware that servers will notify all the operators online of
|
||||
remote SQUITs and CONNECTs via WALLOPS.
|
||||
|
||||
Please let us know if there should be any additions to this guide. Again,
|
||||
this is not MANDATORY, this is just a GUIDE. Please conduct yourself as
|
||||
an IRC Operator would...you are looked upon for assistance, both emotional
|
||||
and mental.
|
||||
|
||||
Helen Rose Christopher Davis Noah Friedman
|
||||
<hrose@cs.bu.edu> <ckd@cs.bu.edu> <friedman@ai.mit.edu>
|
||||
|
||||
January, 1991
|
||||
|
||||
|
||||
Updated by
|
||||
|
||||
Mauri Haikola
|
||||
<mjh@stekt.oulu.fi>
|
||||
|
||||
May, 1992
|
||||
@@ -1,195 +0,0 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>UnrealIRCd - 3.2 - Offical Documentation</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<p> <font size="-1">I M P O R T A N T R E A D I N G</font></p>
|
||||
<p><font size="-1">(YES, YOU WILL NEED TO READ ALL OF THIS)</font></p>
|
||||
<p><font size="-1">* Unreal3.2 is a lot different than Unreal3.1.1. Forget
|
||||
all you have learned about setting up Unreal3.1.1 - this is a lot different.
|
||||
We have got a new configuration format that integrates all the former config
|
||||
files,ircd.conf, vhost.conf, chrestrict.conf, unrealircd.conf, into to one newunrealircd.conf
|
||||
(what the ircd.conf is called now). See doc/ for more information on the configuration
|
||||
format</font></p>
|
||||
<p><font size="-1">* THIS IS A BETA VERSION, REPORT BUGS ON http://bugs.unrealircd.org</font></p>
|
||||
<p><font size="-1">* We have introduced a new cloaking algorithm (+x), which makes
|
||||
it incompatible with Unreal3.1.1 - these can however still link, but the hostname
|
||||
will look different. This is made of three big numbers, configured in the config
|
||||
file - and these MUST be the same on all servers on the network. Keep these
|
||||
numbers secret, and the cloaking algorithm is uncrackable (within 55 years,
|
||||
that is). The +x algorithm was changed slightly to fix a method of cracking
|
||||
that was found. #define COMPAT_BETA4_KEYS to use the beta4 system for compatibility
|
||||
with older betas.</font></p>
|
||||
<p><font size="-1">* If you use Linux and have problems where the IRCd complains
|
||||
that MAXCONNECTIONS is larger than FD_SETSIZE, you need to get your root to
|
||||
edit /usr/include/bits/types.h - #define __FD_SETSIZE 1024 to be somenumber
|
||||
that is equal or higher than MAXCONNECTIONS. This is a problem with Linux that
|
||||
it is hard coded and non override able in some distributions. We recommend you
|
||||
use FreeBSD or the variants of this if you need to run high load IRC servers.</font></p>
|
||||
<p><font size="-1">* We use autoconf to help with compilation, and this should
|
||||
make us able to a lot more platform (we have even ported to BeOS).</font></p>
|
||||
<p><font size="-1">* We require a pthreads library for the SOCKS scan now - and
|
||||
this is now done in the background (no more waiting!).</font></p>
|
||||
<p><font size="-1">* The IRCd is now modularized, and you load modules with the
|
||||
loadmodule command. You will most likely want to add these lines:<br>
|
||||
loadmodule "src/modules/commands.so";<br>
|
||||
loadmodule "src/modules/scan.so";<br>
|
||||
loadmodule "src/modules/scan_socks.so";<br>
|
||||
loadmodule "src/modules/scan_http.so";</font></p>
|
||||
<p><font size="-1"> If you would like to code a module, doc/ will contain a module
|
||||
guide,and we got an example module in src/modules/m_dummy.c.</font></p>
|
||||
<p><font size="-1">* We have some IPv6 support, and there are some minor bugs
|
||||
in it.</font></p>
|
||||
<p><font size="-1">* The documentation is NOT yet 100% complete</font></p>
|
||||
<p><font size="-1">* We have added snomask (similar to ircu), basically this allowed
|
||||
us to remove several modes. Modes +cfFkje are gone, but don't worry, you can
|
||||
still use them. They are now added like this:</font></p>
|
||||
<p><font size="-1"> /mode yournick +s +cF</font></p>
|
||||
<p><font size="-1"> You set the flags in the second parameter of the mode command
|
||||
for a mode change +s, setting -s with no parameters removes all your snomask.
|
||||
You can remove a specific snomask by doing:</font></p>
|
||||
<p><font size="-1"> /mode yournick -s -c</font></p>
|
||||
<p><font size="-1">The current snomasks are:</font></p>
|
||||
<p><font size="-1"> c - local connects<br>
|
||||
F - far connects<br>
|
||||
f - flood notices<br>
|
||||
k - kill notices<br>
|
||||
e - 'eyes' notices<br>
|
||||
j - 'junk' notices<br>
|
||||
v - vhost notices<br>
|
||||
G - gline/shun notices<br>
|
||||
n - nick change notices<br>
|
||||
q - deny nick (Q:line) rejection notices</font></p>
|
||||
<p><font size="-1"> It shouldn't be too hard to figure out, just play around with
|
||||
it a bit :)</font></p>
|
||||
<p><font size="-1">* /who needs testing it was recorded and may contain bugs</font></p>
|
||||
<p><font size="-1">* We have added alias {} which allows you to dynamically create
|
||||
commands such as /nickserv Read example.conf for more information on how to
|
||||
create your own. To use standard ones include one of the following files</font></p>
|
||||
<p><font size="-1"> aliases/ircservices.conf (IRCServices, Daylight)<br>
|
||||
aliases/epona.conf (Epona)<br>
|
||||
aliases/auspice.conf (Auspice)<br>
|
||||
aliases/generic.conf (Magick, Sirius, Wrecked)<br>
|
||||
aliases/operstats.conf (OperStats)<br>
|
||||
aliases/genericstats.conf (GeoStats, NeoStats)</font></p>
|
||||
<p><font size="-1">* You can now use an IP in the oper::from and vhost::from fields
|
||||
even if the host resolves</font></p>
|
||||
<p><font size="-1">* Added an http proxy scanner (scan_http.so)</font></p>
|
||||
<p><font size="-1">* Added oper::snomask to specify default oper snomask modes</font></p>
|
||||
<p><font size="-1">* /helpop text has been moved to a config directive, help {}.
|
||||
To keep the standard help text you need to include help.conf so add include
|
||||
"help.conf"; to your config file.</font></p>
|
||||
<p><font size="-1">* To be able to use G:lines you must now have the can_gkline
|
||||
flag (or t if old style flags)</font></p>
|
||||
<p><font size="-1">* Usermode +T (Tech Admin) has been removed, since it is 100%
|
||||
useless</font></p>
|
||||
<p><font size="-1">* Added a make install to copy files to the installation location</font></p>
|
||||
<p><font size="-1">* Removed ./ircd, ./killircd, crypt/mkpasswd, ./rehash and
|
||||
merged them into a new ./unreal [start|stop|rehash|mkpasswd] for mkpasswd the
|
||||
format is</font></p>
|
||||
<p><font size="-1"> ./unreal mkpasswd [method] [password]</font></p>
|
||||
<p><font size="-1">* Added a new system for crypting passwords. You now do for
|
||||
example password "my password" { crypt; }; This allows you to have
|
||||
some crypted passwords and others not. If you have SSL enabled you may also
|
||||
use the md5 and sha1 methods.</font></p>
|
||||
<p><font size="-1">* The old blackhole is now set::scan::endpoint and specifies
|
||||
an IP and port to tell proxies to connect to.</font></p>
|
||||
<p><font size="-1">* You can now specify a cipher list for SSL links (read doc/conf.doc
|
||||
for more info)</font></p>
|
||||
<p><font size="-1">* +I is now in invisibility.so so it is easily disabled</font></p>
|
||||
<p><font size="-1">* set::socks has been replaced by set::scan (read doc/conf.doc
|
||||
for more info)</font></p>
|
||||
<p><font size="-1">* If you experience problems with the scanners, perhaps check
|
||||
out BOPM (http://www.blitzed.org/bopm)</font></p>
|
||||
<p><font size="-1">* log {} syslog support added (read doc/unreal32docs.html for
|
||||
more info)</font></p>
|
||||
<p><font size="-1">* Added ripemd-160 password encryption support</font></p>
|
||||
<p><font size="-1">* Enabled sha1 and md5 password encryption on Win32 regardless
|
||||
of whether SSL is used.</font></p>
|
||||
<p><font size="-1">* Added WinNT/2k/XP service support (experimental) To use this
|
||||
you use the unreal.exe utility: unreal install -installs the service<br>
|
||||
unreal uninstall -uninstalls the service <br>
|
||||
unreal start -starts the service <br>
|
||||
unreal stop -stops the service<br>
|
||||
unreal restart -restarts the service<br>
|
||||
unreal rehash -rehashes the config file</font></p>
|
||||
<p><font size="-1"> Config errors and crashes are now logged to service.log when
|
||||
in service mode.</font></p>
|
||||
<p><font size="-1">* Implemented a new win32 debugger to make fixing bugs much
|
||||
easier.</font></p>
|
||||
<p><font size="-1">* Added a win32 installer to simplify installing under Windows.</font></p>
|
||||
<p><font size="-1">* AKILL/RAKILL is deprecated. Server command still works but
|
||||
will be removed eventually (aliases to TKL G). For normal opers it notices that
|
||||
the commands are deprecated.</font></p>
|
||||
<p><font size="-1">Made the config parser smarter when it comes to time values
|
||||
and size values. Entries are no longer limited to 1d2h1m. You can now enter
|
||||
"1day 2 hours 1 minute" for example. See doc/conf.doc for more information.</font></p>
|
||||
<p><font size="-1">* The oper override code has been rewritten to be less intrusive.
|
||||
You can now no longer automatically join a channel for which you must override
|
||||
a mode. You must /invite yourself to the channel. The idea behind this is it
|
||||
prevents the accidental "rejoin on kick" ban override and joining
|
||||
a +s channel without realizing it is +s and therefore you shouldn't know it
|
||||
exists.</font></p>
|
||||
<p><font size="-1">* If you use the SSL features of Unreal, you should use OpenSSL
|
||||
0.9.6e or later. This is important as the older versions may make the program
|
||||
exploitable. See http://www.openssl.org for more information</font></p>
|
||||
<p><font size="-1">* We have made a lot of changes to deal with SSL, and if you
|
||||
find any flaws or problems, please contact the coder team. We however think
|
||||
that the changes will make SSL more transparent and make it work more efficiently.</font></p>
|
||||
<p><font size="-1">* Added technical documentation in doc/technical. This directory
|
||||
will contain information about the protocol used by Unreal.</font></p>
|
||||
<p><font size="-1">* Added EGD support for SSL. EGD allows entropy to be gathered
|
||||
on systems that do not have a random device (/dev/random or /dev/urandom) or
|
||||
have an unreliable random device. Unreal has been tested using EGADS (http://www.securesoftware.com/egads.php)
|
||||
[With EGD support enabled], PRNGD (http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/prngd.html),
|
||||
and EGD (http://egd.sourceforge.net). Other EGD compatible programs should work
|
||||
as well.</font></p>
|
||||
<p><font size="-1">* We have created a new complete set of docs! doc/unreal32docs.html
|
||||
is now a complete<br>
|
||||
set of docs! It is still not finished, however it contains atleast what was
|
||||
already<br>
|
||||
avail. in the other doc files. <br>
|
||||
It can also be view online @ http://www.unrealircd.com/unreal32docs.html</font></p>
|
||||
<p><font size="-1">* We have removed ./Setup - Please read the new docs for information
|
||||
on configuring &<br>
|
||||
setting up Unreal3.2</font></p>
|
||||
<p><font size="-1">* Removed makeconf - Read the docs to make a config file</font></p>
|
||||
<p><font size="-1">* Added set::ssl::options with the following options:<br>
|
||||
fail-if-no-clientcert - If SSL client connects and doesn't provide a client<br>
|
||||
certificate, abort connection immediately<br>
|
||||
verify-certificate - Check the certificate's validity using X509 methods, check if<br>
|
||||
we trust CA's, etc. <br>
|
||||
It however does slip self signed certificates through UNLESS<br>
|
||||
no-self-signed - Don't allow self-signed certificates through (requires<br>
|
||||
verify-certificate)</font></p>
|
||||
|
||||
<p><font size="-1">* Added the ability specify which CA's are trusted using set::ssl::trusted-ca-file</font></p>
|
||||
|
||||
<p><font size="-1">* A new configuration system has been added. The system is a bit more strict (meaning it
|
||||
will complain more often) but it will never crash due to configuration errors, just
|
||||
display a message saying errors exist.</font></p>
|
||||
|
||||
<p><font size="-1">* SVSLUSERS was added to all U:lines to change local and global max user counts (this is
|
||||
NOT meant so you can make the max count higher than it really should be.)</font></p>
|
||||
|
||||
<p><font size="-1">* A new oper flag, can_override/v has been added. This is an attempt to stop oper abuse.
|
||||
All opers can no longer use oper-override, this oflag MUST be in place for oper-override
|
||||
to be allowed. Can_override is NOT assumed to be present no matter what your flags,
|
||||
meaning you could be +N but still not be allowed to use oper-override.</font></p>
|
||||
|
||||
<p><font size="-1">* UNKLINE and UNZLINE have been removed in favor of a system like G:lines, to remove you
|
||||
now /kline -user@host or /zline -user@host</font></p>
|
||||
<p><font size="-1">* MAKE SURE YOU RERUN ./Config AND RUN make clean BEFORE USING
|
||||
THIS VERSION!!!</font></p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p><font size="+2"><strong>Notes on compatibility</strong><a name="notesoncompatibility" id="notesoncompatibility"></a></font><br>
|
||||
</p>
|
||||
<p>Unreal 3.2 is ONLY compatible with Unreal3.1.4 and Unreal3.2 servers. DO NOT
|
||||
ATTEMPT to link to servers that it is NOT compatible with.</p>
|
||||
<p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,41 +0,0 @@
|
||||
|
||||
Some minor rules about patches & modifications to UnrealIRCd
|
||||
|
||||
1. When making a change, always add a small description in Changes, in the
|
||||
BOTTOM
|
||||
|
||||
2. If new files are made, it must contain proper copyright headers,
|
||||
and a $Id$ somewhere.
|
||||
|
||||
3. /*
|
||||
* These kind of comments
|
||||
*/
|
||||
|
||||
NOT
|
||||
|
||||
// These kind of comments
|
||||
|
||||
4. if (something == 1)
|
||||
{
|
||||
moo; /* comment */
|
||||
/* This does what what what */
|
||||
cow(go(moo));
|
||||
}
|
||||
|
||||
NOT
|
||||
|
||||
if (something == 1) {
|
||||
}
|
||||
|
||||
5. Do not touch version.c.SH or version.h, unless you are a head coder
|
||||
if you need a credit in, contact us
|
||||
|
||||
6. Patches are submitted to coders@lists.unrealircd.org,
|
||||
using "cvs diff -u > patchname". A submision must contain description of
|
||||
what it does, etc.
|
||||
|
||||
7. Protocol changes must be discussed before making patches for it.
|
||||
|
||||
8. We do NOT rip people off. If we use other people's code, it MUST be
|
||||
properly credited.
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
==[ IMPORTANT MESSAGE ABOUT DISABLING NOSPOOF ]==
|
||||
Disabling NOSPOOF at windows (w9x, nt, w2k, xp) is NOT recommended since this
|
||||
will allow users to use "spoofed hosts" (like the IP of someone you trust).
|
||||
|
||||
If you got problems with NOSPOOF fix your client (bot?) instead (you should
|
||||
PONG back to the initial PING at connect).
|
||||
|
||||
==[ HOW TO COMPILE UNREALIRCD WITHOUT SSL AT WINDOWS ]==
|
||||
First of all you need Microsoft Visual C++, compiling with cygwin
|
||||
is not supported.
|
||||
|
||||
== "old" VC++ 6.0 ==
|
||||
1. You need the Platform SDK (PSDK)
|
||||
Grab it at: http://www.microsoft.com/msdownload/platformsdk/sdkupdate/ ->
|
||||
core sdk -> install this sdk.
|
||||
Note that this can take some time to download because it's >200Mb
|
||||
(450mb installed) [!].
|
||||
2. To compile:
|
||||
start -> programs -> platform sdk blabla -> open build env. -> (choose os) ->
|
||||
set blabla build env (debug). This will launch a DOS window.
|
||||
3. Go to your UnrealIrcd dir (like: cd \dev\unreal3.2) and then compile with:
|
||||
nmake -f makefile.win32
|
||||
This will generate a wircd.exe and unreal.exe
|
||||
4. Copy the src\win32\tre.dll to your UnrealIrcd main dir.
|
||||
5. Done!
|
||||
|
||||
== VC++ 7.x (.NET) ==
|
||||
1. Start the Visual Studio .NET Command Prompt
|
||||
2. Go to your UnrealIrcd dir (like: cd \dev\unreal3.2) and then compile with:
|
||||
nmake -f makefile.win32
|
||||
This will generate a wircd.exe and unreal.exe
|
||||
3. Copy the src\win32\tre.dll to your UnrealIrcd main dir.
|
||||
4. Done!
|
||||
|
||||
==[ HOW TO COMPILE UNREALIRCD WITH SSL AT WINDOWS ]==
|
||||
Ouch, that's much work ;).
|
||||
You need to compile openssl yourself.
|
||||
Then have a look at makefile.win32 for instruction on how
|
||||
to enable / specify path / etc...
|
||||
DO NOT ask us for help with compiling openssl!
|
||||
|
||||
==[ AND ZIP LINKS SUPPORT? ]==
|
||||
See makefile.win32 for instructions.
|
||||
+1762
File diff suppressed because it is too large
Load Diff
+478
-781
File diff suppressed because it is too large
Load Diff
@@ -1,53 +0,0 @@
|
||||
/*
|
||||
* Example set {} block
|
||||
*/
|
||||
|
||||
set {
|
||||
/*
|
||||
* This is the mail users will get shown when k-lined
|
||||
*/
|
||||
kline-address "mail.to.mail.to";
|
||||
/*
|
||||
* What modes will users get when connecting to this server
|
||||
*/
|
||||
modes-on-connect "+ix";
|
||||
/* What channels users will autojoin */
|
||||
auto-join "0";
|
||||
/* What channels opers will autojoin on connect*/
|
||||
oper-auto-join "0";
|
||||
dns {
|
||||
/* What IP has our DNS server got? */
|
||||
nameserver 127.0.0.1;
|
||||
/* How long time will we wait for each attempt? */
|
||||
timeout 2s;
|
||||
/* How many attempts will we do */
|
||||
retries 2s;
|
||||
};
|
||||
options {
|
||||
enable-opermotd;
|
||||
enable-chatops;
|
||||
hide-ulines;
|
||||
// webtv-support;
|
||||
identd-check;
|
||||
};
|
||||
|
||||
/*
|
||||
* How many channels each user can join
|
||||
*/
|
||||
maxchannelsperuser 10;
|
||||
/*
|
||||
* This is a new thing in Unreal3.2.
|
||||
* You _need_ to make three numbers up, bigger than 100000
|
||||
* These MUST be the SAME on EVERY server in your NETWORK
|
||||
* If people discover these keys, it is easier for them to crack
|
||||
* the +x algoritm.
|
||||
*/
|
||||
cloak-keys
|
||||
{
|
||||
0;
|
||||
0;
|
||||
0;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
@@ -0,0 +1,193 @@
|
||||
[ $Id$ ]
|
||||
|
||||
UnrealIRCd FAQ
|
||||
Made by Stskeeps
|
||||
|
||||
This file will contain frequently asked questions about
|
||||
Unreal IRCd. If you need more help email stskeeps@tspre.org
|
||||
|
||||
1) * I compile and everything seems fine during the compiling, but when it
|
||||
comes time for the program to link, I get errors complaining about dns and
|
||||
res things. What causes this?
|
||||
|
||||
A: You need to make sure -lresolv is included in the "extra libraries"
|
||||
option of ./Config (or IRCDLIBS in top-level makefile)
|
||||
|
||||
2) * When I start up the IRCd it complains about something with chdir()?
|
||||
|
||||
A: You need to make sure the right directory is specified when you was
|
||||
asked about "What directory are all the server configuration files in?"
|
||||
./Config question
|
||||
|
||||
3) The server says like:
|
||||
*** Link server1 -> server2 is now synced [secs: 30 recv: 130.4 sent: 120.0]
|
||||
when I link two servers together, what does that mean?
|
||||
|
||||
A: That means the link is "synced" (all infodata transfered about the server).
|
||||
The "secs" (30 in this example) means it took 30 seconds to do the sync
|
||||
"recv: 130.4" means there was recieved 130 KiloBytes and 4 bytes.
|
||||
"sent: 120.0" means there was sent 120 kilobytes from my side.
|
||||
|
||||
4) What is a negative TS split?
|
||||
|
||||
A: Every computer/server has got a time (so they can do TimeStamps) ..
|
||||
When the clock on the computer is set wrong and the computer it links
|
||||
upto is wrong it creates a Negative TS split (means time is lower it
|
||||
actually is. How to fix this is contacting the root of the machine
|
||||
and ask him to fix the time (when you made sure it's YOUR server that's
|
||||
wrong)
|
||||
|
||||
5) What is an uProtocol ?
|
||||
|
||||
A: UnrealIRCd uses numbers to check if a link is compatible with itself
|
||||
F.x Unreal v2.1.3 has got number 2103 while version 2.1 only has got
|
||||
2100 - This means .. if the number is lower/higher than the uProtocol
|
||||
the server uses, it's an incompatible link (of some reasons)
|
||||
|
||||
6) How does T:Lines work and what are they?
|
||||
|
||||
A: T:Lines is a new Unreal feature that makes it able to show different
|
||||
MOTDs and RULES to people who matches a certain hostmask . Lemme show you some examples:
|
||||
|
||||
T:*.dk:motds/danish.motd:rules/danish.rules
|
||||
T:*.fr:motds/french.motd:rules/french.rules
|
||||
|
||||
This will get people from Denmark to see the "Danish" MOTD and the "Dandish" RULLES
|
||||
and people from France to see the French ones:)
|
||||
|
||||
NOTE: T:Lines are read up side down so if you have a T:*:ircd.motd:ircd.rules in the bottom
|
||||
it should be at the top so the other motd lines can work as well
|
||||
|
||||
7) Where can i download updates to Unreal?
|
||||
|
||||
A: Mostly you can download the newest version at
|
||||
http://unreal.tspre.org
|
||||
|
||||
Versions may be spewed out regulary due to new features and bugs..
|
||||
|
||||
8) Why does it say "unlimit core failed" or something when I boot the IRCd?
|
||||
A: It's just a warning, mainly just ignore it.
|
||||
|
||||
9) I use Linux Mandrake and ./Config always hangs! What can I do??
|
||||
A: Go edit the Config script and remove those lines:
|
||||
-SNIP START-
|
||||
cat > $TMP <<__EOF__
|
||||
#$STRINGH STRINGH
|
||||
#$STRINGSH STRINGSH
|
||||
#ifdef STRINGH
|
||||
#include <string.h>
|
||||
#endif
|
||||
#ifdef STRINGSH
|
||||
#include <strings.h>
|
||||
#endif
|
||||
main()
|
||||
{
|
||||
char *t = "a", *s = strtok(t, ",");
|
||||
if (!strcmp(t, s))
|
||||
exit(0);
|
||||
exit(1);
|
||||
}
|
||||
__EOF__
|
||||
$COMP >/dev/null 2>&1
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo $n " strtok$c"
|
||||
NSTRTOK=define
|
||||
else
|
||||
$EXEC
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo $n " strtok$c"
|
||||
NSTRTOK=define
|
||||
fi
|
||||
fi
|
||||
$RM -f $EXEC $TMP
|
||||
--- SNIP END---
|
||||
And replace it by
|
||||
NSTRTOK=undef
|
||||
|
||||
This should get it to work=) (thanks to Joe Whipple for reporting this bug)
|
||||
---END----
|
||||
|
||||
10) Hosts show up as (null).network.net !!
|
||||
A: This is because you have forgotten to include the network file.
|
||||
The correct form is (in unrealircd.conf)
|
||||
Include ..........: <network file>
|
||||
|
||||
If this doesn't work .. seek me at irc.global-irc.net #unrealircd
|
||||
|
||||
11) The IRCd uses like 66.7% CPU !!!?
|
||||
A: Try run it with nice :
|
||||
/usr/bin/nice -n 19 src/ircd
|
||||
|
||||
if services go this way too just place ./<name> instead of src/ircd
|
||||
Any more support seek me at the default place:P
|
||||
|
||||
12) My IRCd which runs on a FreeBSD says something about FDs and
|
||||
Max: 0 What shall I do??
|
||||
A: Well it's somekinda bug but you can workaround it by removing those
|
||||
lines in src/s_bsd.c: (init_sys())
|
||||
|
||||
<- snippet 1 ->
|
||||
#ifdef RLIMIT_FD_MAX
|
||||
struct rlimit limit;
|
||||
int pid;
|
||||
|
||||
if (!getrlimit(RLIMIT_FD_MAX, &limit))
|
||||
{
|
||||
# ifdef pyr
|
||||
if (limit.rlim_cur < MAXCONNECTIONS)
|
||||
#else
|
||||
if (limit.rlim_max < MAXCONNECTIONS)
|
||||
# endif
|
||||
{
|
||||
(void)fprintf(stderr,"ircd fd table too big\n");
|
||||
(void)fprintf(stderr,"Hard Limit: %d IRC max: %d\n",
|
||||
limit.rlim_max, MAXCONNECTIONS);
|
||||
(void)fprintf(stderr,"Fix MAXCONNECTIONS\n");
|
||||
exit(-1);
|
||||
}
|
||||
# ifndef pyr
|
||||
limit.rlim_cur = limit.rlim_max; /* make soft limit the max */
|
||||
if (setrlimit(RLIMIT_FD_MAX, &limit) == -1)
|
||||
{
|
||||
(void)fprintf(stderr,"error setting max fd's to %d\n",
|
||||
limit.rlim_cur);
|
||||
exit(-1);
|
||||
}
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
<-snippet 2->
|
||||
#ifdef sequent
|
||||
# ifndef DYNIXPTX
|
||||
int fd_limit;
|
||||
|
||||
fd_limit = setdtablesize(MAXCONNECTIONS + 1);
|
||||
if (fd_limit < MAXCONNECTIONS)
|
||||
{
|
||||
(void)fprintf(stderr,"ircd fd table too big\n");
|
||||
(void)fprintf(stderr,"Hard Limit: %d IRC max: %d\n",
|
||||
fd_limit, MAXCONNECTIONS);
|
||||
(void)fprintf(stderr,"Fix MAXCONNECTIONS\n");
|
||||
exit(-1);
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
13) I run debian-sparc and i get errors when compiling in match.c
|
||||
What should I do?
|
||||
A: If it says like this
|
||||
<-snippet->
|
||||
match.c: In function 'myncmp':
|
||||
match.c:247: argument 'str1' doesn't match prototype
|
||||
/usr/include/string.h:255: prototype declaration
|
||||
match.c:247: argument 'str2' doesn't match prototype
|
||||
/usr/include/string.h:255: prototype declaration
|
||||
match.c:247: argument 'n' doesn't match prototype
|
||||
/usr/include/string.h:255: prototype declaration
|
||||
<-end of snippet>
|
||||
|
||||
Then go into include/setup.h and add this line:
|
||||
#define GOT_STRCASECMP
|
||||
|
||||
(C) Carsten Munk 1999
|
||||
@@ -0,0 +1,82 @@
|
||||
.\" $Id$
|
||||
.TH IRC 1 "7 October 1990"
|
||||
.SH NAME
|
||||
irc \- User Interface to Internet Relay Chat Protocol
|
||||
.SH SYNOPSIS
|
||||
\fBirc\fP [\fB-p\fP \fIportnum\fP] [\fB-c\fP \fIchannel\fP] [ \fInickname\fP [ \fIserver\fP ]]
|
||||
.SH DESCRIPTION
|
||||
.LP
|
||||
\fBIrc\fP is a user interface to the Internet Relay Chat, a CB-like
|
||||
interactive discussion environment. It is structured into \fIchannels\fP,
|
||||
which are public discussion forums, and also allows for private intercommunication.
|
||||
Each participant has a \fInickname\fP, which is the one specified in the command
|
||||
line or else his login name.
|
||||
.LP
|
||||
Once invoked, \fBirc\fP connects as a client to the specified server,
|
||||
\fIserver\fP or to the default one (see below). The screen splits into a dialogue
|
||||
window (the major part
|
||||
of the screen) and a command line, from which messages can be sent and
|
||||
commands given to control irc.
|
||||
.SH COMMAND SYNTAX
|
||||
The syntax of irc commands is of the form \fB/COMMAND\fP. The most notable
|
||||
ones are listed below. For an uptodate list, use the \fBHELP\fP command
|
||||
of \fBirc\fP. Case is ignored.
|
||||
.IP "\fB/ADMIN\fR [\fIserver\fP]"
|
||||
Prints administrative information about an IRC \fIserver\fP.
|
||||
.IP "\fB/AWAY\fP [\fImessage\fP]"
|
||||
Mark yourself as being away (with an automatic reply \fImessage\fP
|
||||
if specified)
|
||||
.IP "\fB/BYE\fR, \fB/EXIT\fR, \fB/QUIT\fR"
|
||||
Terminate the session
|
||||
.IP "\fB/CHANNEL\fR [\fIchannel\fP]"
|
||||
Join another \fIchannel\fP
|
||||
.IP "\fB/CLEAR\fR"
|
||||
Clear the screen
|
||||
.IP "\fB/HELP\fR [\fIcommand\fP]"
|
||||
Display a brief description of the \fIcommand\fP (or list all commands, if none
|
||||
specified).
|
||||
.IP "\fB/SUMMON\fR \fIuser\fP"
|
||||
Allows to summon a \fIuser\fP specified as a full Internet address, i.e.,
|
||||
\fIlogin@host.domain\fP, to an IRC dialogue session (in much the same
|
||||
way as the talk(1) command). It is usable ONLY if the irc daemon runs on
|
||||
the target machine (host.domain).
|
||||
.IP "\fB/TOPIC\fR \fItopic\fP"
|
||||
Sets the \fItopic\fP for the current channel
|
||||
.IP "\fB/WHO\fR [\fIchannel\fP|*]"
|
||||
Lists all users of IRC if no argument, of the specified \fIchannel\fP or of the
|
||||
current channel (*).
|
||||
.SH ARGUMENTS
|
||||
.IP "\fB-p\fP \fIportnum\fP"
|
||||
TCP/IP "port number. Default is 6667 and this option should seldom if ever"
|
||||
be used.
|
||||
.IP "\fB-c\fP \fIchannel\fP"
|
||||
\fIChannel\fP number to join upon beginning of the session. Default is no channel.
|
||||
.IP "\fInickname\fP"
|
||||
\fINickname\fP used in the session (can be changed with the \fB/NICK\fP command).
|
||||
Default is user login name.
|
||||
.IP "\fIserver\fP"
|
||||
\fIServer\fP to connect to. Default is specified in the irc system configuration
|
||||
file, and can be superseded with the environment variable IRCSERVER.
|
||||
.SH EXAMPLE
|
||||
.RS
|
||||
.nf
|
||||
tolmoon% \fBirc -p6667 Wizard tolsun\fP
|
||||
.fi
|
||||
.RE
|
||||
.LP
|
||||
connects you to irc server in host tolsun (port 6667) with nickname Wizard
|
||||
.SH COPYRIGHT
|
||||
Copyright (c) 1988 University of Oulu, Computing Center, Finland.
|
||||
.nf
|
||||
Copyright (c) 1988,1989,1990 Jarkko Oikarinen
|
||||
.nf
|
||||
All rights reserved.
|
||||
For full COPYRIGHT see LICENSE file with IRC package.
|
||||
.SH "SEE ALSO"
|
||||
ircd(8)
|
||||
.SH BUGS
|
||||
What bugs ?
|
||||
.SH AUTHOR
|
||||
Jarkko Oikarinen <jto@tolsun.oulu.fi>
|
||||
.nf
|
||||
Manual page updated by Michel Fingerhut <Michel.Fingerhut@ircam.fr>
|
||||
+140
@@ -0,0 +1,140 @@
|
||||
.\" $Id$
|
||||
.TH IRCD 8 "29 March 1989"
|
||||
.SH NAME
|
||||
ircd \- The Internet Relay Chat Program Server
|
||||
.SH SYNOPSIS
|
||||
.hy 0
|
||||
.IP \fBircd\fP
|
||||
[-a] [-c] [-i] [-o] [-q] [-t] [-d directory]
|
||||
[-f configfile] [-x debuglevel] [-h hostname] [-p portnum]
|
||||
.SH DESCRIPTION
|
||||
.LP
|
||||
\fIircd\fP is the server (daemon) program for the Internet Relay Chat
|
||||
Program. The \fIircd\fP is a server in that its function is to "serve"
|
||||
the client program \fIirc(1)\fP with messages and commands. All commands
|
||||
and user messages are passed directly to the \fIircd\fP for processing
|
||||
and relaying to other ircd sites. The \fIirc(1)\fP program depends upon
|
||||
there being an \fIircd\fP server running somewhere (either on your local
|
||||
UNIX site or a remote ircd site) so that it will have somewhere to connect
|
||||
to and thus allow the user to begin talking to other users.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.B \-d directory
|
||||
This option tells the server to change to that directory and use
|
||||
that as a reference point when opening \fIircd.conf\fP and other startup
|
||||
files.
|
||||
.TP
|
||||
.B \-o
|
||||
Starts up a local ircdaemon. Standard input can be used to send IRC
|
||||
commands to the daemon. The user logging in from standard input will
|
||||
be given operator privileges on this local ircd. If ircd is a setuid program,
|
||||
it will call setuid(getuid()) before going to local mode. This option
|
||||
can be used in inetd.conf to allow users to open their own irc clients
|
||||
by simply connecting their clients to the correct ports. For example:
|
||||
.TP
|
||||
.B
|
||||
irc stream tcp nowait irc /etc/ircd ircd \\-f/etc/ircd.conf \\-o
|
||||
|
||||
allows users connecting to irc port (specified in /etc/services) to start
|
||||
up their own ircdaemon. The configuration file should be used to check from
|
||||
which hosts these connections are allowed from. This option also turns
|
||||
on the autodie option -a.
|
||||
.TP
|
||||
.B \-a
|
||||
Instructs the server to automatically die off if it loses all it's clients.
|
||||
.TP
|
||||
.B \-t
|
||||
Instructs the server to direct debugging output to standard output.
|
||||
.TP
|
||||
.B \-x#
|
||||
Defines the debuglevel for ircd. The higher the debuglevel, the more stuff
|
||||
gets directed to debugging file (or standard output if -t option was used
|
||||
as well).
|
||||
.TP
|
||||
.B \-i
|
||||
The server was started by inetd and it should start accepting connections
|
||||
from standard input. The following inetd.conf-line could be used to start
|
||||
up ircd automatically when needed:
|
||||
.TP
|
||||
.B
|
||||
ircd stream tcp wait irc /etc/ircd ircd \-i
|
||||
|
||||
allows inetd to start up ircd on request.
|
||||
.TP
|
||||
.B \-f filename
|
||||
Specifies the ircd.conf file to be used for this ircdaemon. The option
|
||||
is used to override the default ircd.conf given at compile time.
|
||||
.TP
|
||||
.B \-c
|
||||
This flag must be given if you are running ircd from \fI/dev/console\fP or
|
||||
any other situation where fd 0 isnt a tty and you want the server to fork
|
||||
off and run in the background. This needs to be given if you are starting
|
||||
\fIircd\fP from an \fIrc\fP (such as \fI/etc/rc.local\fP) file.
|
||||
.TP
|
||||
.B \-q
|
||||
Using the -q option stops the server from doing DNS lookups on all the
|
||||
servers in your \fIircd.conf\fP file when it boots. This can take a lengthy
|
||||
amount of time if you have a large number of servers and they are not all
|
||||
close by.
|
||||
.TP
|
||||
.B \-h hostname
|
||||
Allows the user to manually set the server name at startup. The default
|
||||
name is hostname.domainname.
|
||||
.B \-p portname
|
||||
Specifies the port where the daemon should start waiting for connections.
|
||||
This overrides the default which is given at compile time.
|
||||
.TP
|
||||
.SH
|
||||
If you plan to connect your \fIircd\fP server to an existing Irc-Network,
|
||||
you will need to alter your local IRC CONFIGURATION FILE (typically named
|
||||
"ircd.conf") so that it will accept and make connections to other \fIircd\fP
|
||||
servers. This file contains the hostnames, Network Addresses, and sometimes
|
||||
passwords for connections to other ircds around the world. Because
|
||||
description of the actual file format of the "ircs.conf" file is beyond the
|
||||
scope of this document, please refer to the file INSTALL in the IRC source
|
||||
files documentation directory.
|
||||
.LP
|
||||
BOOTING THE SERVER: The \fIircd\fP server can be started as part of the
|
||||
UNIX boot procedure or just by placing the server into Unix Background.
|
||||
Keep in mind that if it is *not* part of your UNIXES Boot-up procedure
|
||||
then you will have to manually start the \fIircd\fP server each time your
|
||||
UNIX is rebooted. This means if your UNIX is prone to crashing
|
||||
or going for for repairs a lot it would make sense to start the \fIircd\fP
|
||||
server as part of your UNIX bootup procedure. In some cases the \fIirc(1)\fP
|
||||
will automatically attempt to boot the \fIircd\fP server if the user is
|
||||
on the SAME UNIX that the \fIircd\fP is supposed to be running on. If the
|
||||
\fIirc(1)\fP cannot connect to the \fIircd\fP server it will try to start
|
||||
the server on it's own and will then try to reconnect to the newly booted
|
||||
\fIircd\fP server.
|
||||
.SH EXAMPLE
|
||||
.RS
|
||||
.nf
|
||||
tolsun% \fBircd\fP
|
||||
.fi
|
||||
.RE
|
||||
.LP
|
||||
Places \fIircd\fP into UNIX Background and starts up the server for use.
|
||||
Note: You do not have to add the "&" to this command, the program will
|
||||
automatically detach itself from tty.
|
||||
.SH COPYRIGHT
|
||||
(c) 1988,1989 University of Oulu, Computing Center, Finland,
|
||||
.LP
|
||||
(c) 1988,1989 Department of Information Processing Science,
|
||||
University of Oulu, Finland
|
||||
.LP
|
||||
(c) 1988,1989,1990,1991 Jarkko Oikarinen
|
||||
.LP
|
||||
For full COPYRIGHT see LICENSE file with IRC package.
|
||||
.LP
|
||||
.RE
|
||||
.SH FILES
|
||||
/etc/utmp
|
||||
"irc.conf"
|
||||
.SH "SEE ALSO"
|
||||
irc(1)
|
||||
.SH BUGS
|
||||
None... ;-) if somebody finds one, please inform author
|
||||
.SH AUTHOR
|
||||
Jarkko Oikarinen, currently jto@tolsun.oulu.fi,
|
||||
manual page written by Jeff Trim, jtrim@orion.cair.du.edu,
|
||||
later modified by jto@tolsun.oulu.fi.
|
||||
@@ -0,0 +1,47 @@
|
||||
[ $Id$ ]
|
||||
The following macros are included in "ircd.m4" for use with the m4 text
|
||||
preprocessor. "ircd.m4" is parsed before the IRC server conf file so they
|
||||
are all available for use with that.
|
||||
|
||||
NOTE: The "ircd.m4" file is *ONLY* created by a "make install".
|
||||
|
||||
VERSION - current version string as in patchlevel.h
|
||||
DEBUGMODE - if DEBUGMODE is define in config.h, is also defined for m4.
|
||||
HOSTNAME - taken from hostname(1)
|
||||
USER - username of person doing the "make install"
|
||||
PORT - default port number as in config.h
|
||||
PFREQ - default ping frequency as in config.h
|
||||
CFREQ - default connect frequency as in config.h
|
||||
MAXSENDQ - default max sendq as in config.h
|
||||
CL - use this to wrap a class number
|
||||
HOST - use this to wrap a hostname
|
||||
HOSTM - use this to wrap the hostmask number in N-lines
|
||||
ID - when wrapping the host field in an I-line, causes ident string return
|
||||
to be used instead of user supplised username.
|
||||
PASS - use this to wrap passwords in C/N/I/O lines
|
||||
PING - use this to wrap the ping value in Y-lines
|
||||
APORT - use this to wrap the port number in I-lines
|
||||
CPORT - use this to wrap the port number in C-lines
|
||||
SERV - use this to wrap server names
|
||||
|
||||
You might use some of these as
|
||||
C:foo.bar.edu:PASS(boo):foo.bar.edu:APORT(6667)
|
||||
I:ID(128.250.*)::ID(*.mu.oz.au):CPORT(6667)
|
||||
|
||||
In addition to these (rather weak macros), some more complete ones are
|
||||
defined which already perform the above.
|
||||
|
||||
ADMIN - provide fields to it as you would an A-line
|
||||
ALLOW - provide fields to it as you would an N-line
|
||||
BAN - provide fields to it as you would an K-line
|
||||
CLASS - provide fields to it as you would an Y-line
|
||||
CLIENT - provide fields to it as you would an I-line
|
||||
CONNECT - provide fields to it as you would an C-line
|
||||
ME - provide fields to it as you would an M-line
|
||||
HUB - first parameter is server you want to hub, second is optional and is
|
||||
a mask against which other servers introduced must match against.
|
||||
LEAF - works like HUB, except that the mask is matched against server names
|
||||
to check if the link should be dropped.
|
||||
SERVER - uses 6 fields, the first 4 as are found in an N-line, the last two
|
||||
should be as you would use in a C-line. It expands out to provide
|
||||
both a C and N line.
|
||||
@@ -0,0 +1,294 @@
|
||||
[ $Id$ ]
|
||||
From: Carlo Kid - Runaway <carlo@sg.tn.tudelft.nl>
|
||||
Subject: GUIDE for compiling your server
|
||||
To: wastelanders@rush.cc.edu (New Wastelanders MailingList)
|
||||
Date: Thu, 26 May 94 13:44:10 METDST
|
||||
Cc: carlo@sg.tn.tudelft.nl
|
||||
Mailer: Elm [revision: 66.33]
|
||||
Status: RO
|
||||
|
||||
GUIDE for compiling your server, by Runaway
|
||||
===============================================
|
||||
|
||||
First of all you must get all the files you need, as an example
|
||||
I will explain how to compile irc2.8.19.U3.2.
|
||||
The files you'll need in general are:
|
||||
|
||||
- irc2.8.19.U3.2.tar.gz
|
||||
|
||||
Or, when you already have an older version -say irc2.8.19.U3.1- a patch:
|
||||
|
||||
- irc2.8.19.U3.1-2.patch
|
||||
|
||||
It is possible you need more then one patch, especially when you already
|
||||
upgraded more often. But in that case you already have those old patches.
|
||||
Of course, in that case, you also already have the old directory tree:
|
||||
|
||||
/home..../yourname/....ircd/irc2.8.19.U3.1/
|
||||
|
||||
Scripts, patches and directory trees
|
||||
====================================
|
||||
|
||||
It is good practise to:
|
||||
1) Call the directory tree after the version
|
||||
2) Let this directory ONLY contain what comes with the .tar.gz file!
|
||||
Thus: Do NOT put ircd.conf, or any patches etc in it!!!
|
||||
In general, you must be able to delete this whole directory tree
|
||||
when you still have the original .tar.gz file and patches applied to it.
|
||||
3) Put it in a directory ending on /ircd, THIS directory will contain
|
||||
your ircd.motd, ircd.pid, ircd.conf and patches...
|
||||
|
||||
So, you end up with:
|
||||
|
||||
...ircd/irc2.8.19.U3.1-2.patch
|
||||
...ircd/irc2.8.19.U3.1.tar.gz
|
||||
|
||||
or just:
|
||||
|
||||
...ircd/irc2.8.19.U3.2.tar.gz
|
||||
|
||||
at once.
|
||||
|
||||
Before you can delete the old directory tree, you must be SURE to save
|
||||
everything thats in it. This is thus the .tar.gz file, all patches but
|
||||
ALSO the following files:
|
||||
|
||||
Makefile
|
||||
include/config.h
|
||||
include/setup.h
|
||||
|
||||
You should always keep a copy of those files OUTSIDE the irc2.8.19.U3.2/
|
||||
directory tree. For instance:
|
||||
|
||||
...ircd/irc.personal/Makefile
|
||||
...ircd/irc.personal/include/config.h
|
||||
...ircd/irc.personal/include/setup.h
|
||||
|
||||
To make these backups easy, you should make a script, called backup.personal
|
||||
containing:
|
||||
|
||||
cp Makefile ../irc.personal/Makefile
|
||||
cp include/config.h ../irc.personal/include/config.h
|
||||
cp include/setup.h ../irc.personal/include/setup.h
|
||||
|
||||
If you also change anything in the other Makefiles (ircd/Makefile and
|
||||
common/Makefile) you can add those too. Be sure to make the directories
|
||||
by hand first.
|
||||
|
||||
Make the script 'backup.personal' executable with:
|
||||
chmod 700 backup.personal
|
||||
You must be able to run it from any directory, so put it in your ..bin/
|
||||
|
||||
Ok... so now you have a backup of everything. If you wanted to start
|
||||
ALL over you could delete the directory tree, unzip and untar the archive
|
||||
again, apply all patches to it, change the Makefile and config.h again,
|
||||
put setup.h back, recompile and reinstall.
|
||||
In some cases it is easy to do this with an other script, I call it 'repatch',
|
||||
it provides you with an easy-to-change overview of the patched you have used.
|
||||
Here is how my 'repatch' looks now (it is located in .../ircd/repatch).
|
||||
|
||||
cd ~/irc/ircd
|
||||
rm -rf irc2.8.19 irc2.8.19.U3.2
|
||||
zcat irc2.8.19.tar.gz | tar xf -
|
||||
mv irc2.8.19 irc2.8.19.U3.2
|
||||
cd irc2.8.19.U3.2
|
||||
#patch -p1 < ../Makefile.config.h.patch 2> ../patch.out
|
||||
#cp ../setup.h include/setup.h
|
||||
patch -p1 < ../irc2.8.19-TSpre8.2.patch 2>> ../patch.out
|
||||
patch -p1 < ../irc2.8.19.TSpre8-note.patch 2>> ../patch.out
|
||||
patch -p1 < ../irc2.8.19.TSpre8-wallops.patch 2>> ../patch.out
|
||||
patch -p1 < ../irc2.8.19.TSpre8-bquiet.patch 2>> ../patch.out
|
||||
patch -p1 < ../irc2.8.19.TSpre8-silence.2.patch 2>> ../patch.out
|
||||
#patch -p1 < ../irc2.8.19.U3-ban.patch 2>> ../patch.out
|
||||
make clean
|
||||
vi include/patchlevel.h
|
||||
grep -e '\.rej' -e '[Ff]ail' -e fuzz ../patch.out
|
||||
|
||||
As you can see I commented out the patches Makefile.config.h.patch and
|
||||
irc2.8.19.U3-ban.patch, and don't copy setup.h here. This is because
|
||||
I wanted to make a virgin .U3.2.tar.gz for distribution via ftp-sites.
|
||||
If I change the name of the directory, I have to change it in three
|
||||
places :/
|
||||
This script forces me to edit the patchlevel.h :) :)
|
||||
The last grep warns me if anything went wrong with the patches.
|
||||
|
||||
Moreover, as you can see, I have a 'Makefile.config.h.patch'.
|
||||
You should make your own as soon as you completely installed
|
||||
and tested your server. It is very handy for re-installing a new
|
||||
version.
|
||||
|
||||
To make this patch, edit the Makefile's and and config.h and type:
|
||||
|
||||
backup.personal
|
||||
cd ..
|
||||
rm -rf irc2.8.19
|
||||
zcat irc2.8.19.tar.gz | tar xf -
|
||||
diff -rc irc2.8.19 irc.personal > Makefile.config.h.patch
|
||||
|
||||
Check it with an editor if it looks ok. In the above, 'irc2.8.19.tar.gz'
|
||||
is the virgin 'Avalon' version, I change the Makefiles in the .U3
|
||||
however also, so you might wanna use the virgin .U3.2.tar.gz.
|
||||
|
||||
Starting ALL over (or begining for the first time)
|
||||
==================================================
|
||||
|
||||
This is about EDITTING the Makefile(s) and config.h, and creating the
|
||||
setup.h for the first time.
|
||||
|
||||
2.8.19 is different from 2.8.16 and before. You will have to EDIT the
|
||||
Makefile and config.h that comes with the distribution. You can NOT
|
||||
use the old Makefile and config.h you had !
|
||||
|
||||
First write down the path you want to use where you are going to put
|
||||
the ircd.conf etc...
|
||||
|
||||
Edit the Makefile. Comments are in it. You should simply define that
|
||||
what is needed for your Operating System.
|
||||
|
||||
Then edit the config.h
|
||||
|
||||
Then run ./Config to create setup.h ... at first simply hit return all the
|
||||
time. If you insist on using gcc instead of cc, you must edit that in your
|
||||
Makefile BEFORE running setup.h. You can't change that running Config,
|
||||
although it asks for it. If you have more then one cc, you can add the
|
||||
right path to in the Makefile (if it uses the wrong one).
|
||||
|
||||
Since U3.2, I changed the Makefile and config.h a little. The changes are:
|
||||
- I added note.o to the dependency
|
||||
- I added *.orig files to the 'make clean' (otherwise the *.orig generated
|
||||
by some 'patch' programs will be left).
|
||||
If you want this too, and you have .U3.1, you can get the patch from
|
||||
sg.tn.tudelft.nl (file: Makefile.conf.U3.patch).
|
||||
|
||||
As soon as you are done, run backup.personal. To stay up to date with your
|
||||
backup.
|
||||
|
||||
Then make the Makefile.conf.patch as described above. (or wait with that
|
||||
till you are sure it works... otherwise it might be done more then once
|
||||
which is a waste of time).
|
||||
|
||||
Special remarks
|
||||
---------------
|
||||
|
||||
Makefile:
|
||||
First occurance of
|
||||
CC=cc
|
||||
Change this NOT if you want another compiler, add another CC= later, close
|
||||
to your OS specific #defines...
|
||||
|
||||
# IRCDDIR must be the same as DPATH in include/config.h
|
||||
#
|
||||
IRCDDIR=/sb/users/carlo/irc/ircd
|
||||
Make sure you use the same path in the config.h :)
|
||||
|
||||
SUBDIRS=common ircd
|
||||
By removing the 'irc' from this line, you stop 'make' from making the client
|
||||
as well.
|
||||
|
||||
config.h:
|
||||
/*
|
||||
* NOTE: On some systems, valloc() causes many problems.
|
||||
*/
|
||||
#undef VALLOC /* Define this if you have valloc(3) */
|
||||
I never try it, even if I have it.
|
||||
|
||||
#define USE_VARARGS
|
||||
For defines like this, you best check the online manual if you have them
|
||||
(man vprintf in this case)... I didn't have man page for vscanf() but it
|
||||
still worked... (I DO have them for vprintf and vsprinf).
|
||||
|
||||
#undef DEBUGMODE /* define DEBUGMODE to enable debugging mode.*/
|
||||
Debug mode uses a lot more memory and is a lot slower. ONLY define
|
||||
when your server gives problems like crashing/coredumping, or other
|
||||
things like not wanting to startup etc. In other words: when you are really
|
||||
*USING* this feature to do DEBUGing !
|
||||
|
||||
#define NPATH "/sb/users/carlo/irc/server/Undernet/.ircdnote"
|
||||
The '#ifdef notdef' '#endif' around NPATH mean: notdef = NOT DEFINED.
|
||||
You should *never* #define notdef... It is used to "comment out" *examples*.
|
||||
By defining it, you enable all examples (like making your server SUI :/)
|
||||
Simply *remove* the lines '#ifdef notdef' and '#endif' around the NPATH.
|
||||
|
||||
#define DPATH "/sb/users/carlo/irc/ircd"
|
||||
Must be the same as in the Makefile!
|
||||
#define SPATH "/sb/users/carlo/bin/ircd" /* path to server executeable */
|
||||
This is used when you do a /RESTART. For fast restarting a NEW version (upgrade)you can let this point to a symbolic link, and then change this link to the
|
||||
new executable. Do a 'restart' and voila...
|
||||
For instance:
|
||||
.../bin/ircd.U3.2*
|
||||
.../bin/ircd -> ircd.U3.2
|
||||
The last made with:
|
||||
ln -s ircd.U3.2 ircd
|
||||
Then when you upgrade:
|
||||
rm ircd
|
||||
ln -s ircd.U3.3 ircd
|
||||
and a /RESTART
|
||||
|
||||
#undef CRYPT_LINK_PASSWORD
|
||||
Make sure your ircd.conf isn't world readable like on pasadena :/
|
||||
(and on ircserver.et.tudelft.nl once - we DID have to change all passwords
|
||||
then)
|
||||
|
||||
Compiling the server
|
||||
====================
|
||||
|
||||
*** FIRST edit your include/patchlevel.h ***
|
||||
|
||||
If you don't want to compile the client, you can change the Makefile
|
||||
as mentioned above, or type:
|
||||
make server
|
||||
|
||||
After a succesfull compilation (ignore warning ;), you can type
|
||||
make install
|
||||
or just
|
||||
cp ircd/ircd ~/bin/ircd.U3.2
|
||||
cd ~/bin
|
||||
chmod 700 ircd.U3.2
|
||||
rm ircd
|
||||
ln -s ircd.U3.2 ircd
|
||||
|
||||
I changed my Makefile to do the latter thing when I type 'make install'
|
||||
|
||||
Then run the server by typing 'ircd'. Don't do this on the
|
||||
...ircd/irc2.8.19.U3.2/ircd/ directory, because when in your PATH the
|
||||
'.' comes before your '~/bin' you start up THAT exucutable, disallowing
|
||||
you to recompile later (text file busy).
|
||||
|
||||
Compile errors
|
||||
==============
|
||||
|
||||
If anything goes wrong with note, it most likely is because you
|
||||
1) Didn't define NPATH correctly
|
||||
2) Didn't add the note.o to the dependencies.. remove note.o and recompile.
|
||||
|
||||
[ For a non-undernet version: irc2.8.19.tar.gz is bugged, get the -note.patch
|
||||
from ftp.undernet.org. ]
|
||||
|
||||
If you get problems while linking saying it has undefined _something
|
||||
and something is something with 'res', you must add -lresolv to your
|
||||
IRCDLIBS in the Makefile.
|
||||
|
||||
If you get problems with any function beging defines twice are giving
|
||||
errors like not compatible with previous definition (likely atol() in
|
||||
note.c), just remove that whole function from the .c file (put #ifdef notdef
|
||||
around it). You have it already in your system libraries.
|
||||
|
||||
Last remarks
|
||||
============
|
||||
|
||||
Add those U: lines!!!
|
||||
And change your ircd.motd to reflect the new commands/features :)
|
||||
( /MOTD uxb* -- Nice motd RedRum! :)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
|
||||
Run
|
||||
|
||||
--
|
||||
-------------------------------------------------------------------------------
|
||||
| carlo@sg.tn.tudelft.nl | Run @ IRC |
|
||||
| | Admin of Delft.NL.EU.undernet.org |
|
||||
| * Don't expect anything of live, | and Ircserver.et.tudelft.nl |
|
||||
| or you'll miss all the rest of it.| |
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
-271
@@ -1,271 +0,0 @@
|
||||
|
||||
The Tao of Internet Relay Chat
|
||||
Copyright (C) Ove Ruben R Olsen 1994
|
||||
Version of 940110
|
||||
Contributing masters: Master ScottM
|
||||
|
||||
-----
|
||||
Something is formed by the electrons, born in the silent cable. Shaping
|
||||
and growing and ungrowing. It is there yet not there. It is the source of
|
||||
Internet Relay Chat. I do not know the name, thus I will call it the Tao
|
||||
of Internet Relay Chat.
|
||||
|
||||
If the Tao is great, then the IRC is running ceaselessly. If the IRC is
|
||||
great then the server is running without ever stoping. If the server is
|
||||
great then the client will always be the server. The luser is then pleased
|
||||
and there is Chat in the world.
|
||||
|
||||
The Tao of IRC squits far away and connects on returning.
|
||||
|
||||
|
||||
-----
|
||||
The genetic potential of birth, a lot to know, yet unknown.
|
||||
|
||||
In the begining there was nothing.
|
||||
|
||||
Out of nothing the Tao gave birth to tolsun.oulu.fi. tolsun gave birth to
|
||||
OuluBox.
|
||||
|
||||
OuluBox gave birth to rmsg.
|
||||
|
||||
rmsg was not Tao, so MUT gave birth to IRC.
|
||||
|
||||
No one knows when IRC came into existance, the mighty master WiZ have it
|
||||
to be at the end of the eight month in the year of the Dragon.
|
||||
|
||||
|
||||
-----
|
||||
Each channel has its purpose, however humble. Each channel is the Yin and
|
||||
Yang of IRC. Each channels has it's place within the IRC.
|
||||
|
||||
In the beginning there was only channel 0, thus channel 0 is the soil of
|
||||
IRC.
|
||||
|
||||
Channel 1 to channel 10 then was open as the sea. Channel 11 to 999 was the
|
||||
trees and forests of IRC. Channels above 999 should not be mentioned, and
|
||||
channels below 0 were unborn and contained many secrets.
|
||||
|
||||
This was not the right Tao, so IRC gave birth to +channels.
|
||||
|
||||
+channels had the yin and yang. Mode does not.
|
||||
|
||||
This was not the right Tao still, so IRC gave birth to #channels.
|
||||
|
||||
#channels have the yin and yang.
|
||||
|
||||
Only channel 0 is the right path to Tao, but avoid speaking on channel 0.
|
||||
|
||||
|
||||
-----
|
||||
There was a great dispute among the Broom-Walkers of the Relay. Some of them
|
||||
wanted neither yin nor yang. Out of this Eris came into existance. Some of the
|
||||
Broom-Walkers then created Eris Free-net.
|
||||
|
||||
This was the right Tao.
|
||||
|
||||
Kind Gentle and Boring Net was another wrong path to the Tao of Internet Relay
|
||||
Chat.
|
||||
|
||||
Some time later there was a quantity of some lusers who wanted to be
|
||||
Broom-Walkers also. The Eris Free Broom-Walkers did not agree with them,
|
||||
thus a new IRC was born. This IRC is called the Undernet.
|
||||
|
||||
But this is not the right Tao, either.
|
||||
|
||||
|
||||
-----
|
||||
There will always be disputes among the Broom-Walkers of Internet Relay Chat.
|
||||
|
||||
This is the very nature of the IRC.
|
||||
|
||||
|
||||
-----
|
||||
Lusers that do not understand the Tao is always using the yang of Mode on
|
||||
their channels. Lusers that do understand the Tao are always using Ignore
|
||||
on their channels.
|
||||
|
||||
How could this not be so ?
|
||||
|
||||
|
||||
-----
|
||||
The wise sage luser is told about the Chat and uses it. The luser is told
|
||||
about the IRC and is looking for it. The flock are told about the Tao and
|
||||
make a fool of the IRC.
|
||||
|
||||
If there was no laughter, there would be no Tao.
|
||||
|
||||
|
||||
-----
|
||||
The master says:
|
||||
"Without the Tao of Internet Relay Chat, life becomes meaningless."
|
||||
|
||||
The Relay of the old time was mysterious and sacred. We can neither imagine
|
||||
its thoughts nor path; we are left but to describe.
|
||||
|
||||
|
||||
-----
|
||||
The sage luser must be aware like a frog crossing the highway.
|
||||
|
||||
|
||||
-----
|
||||
The great master Wumpus once dreamed that he was an automaton. When he awoke
|
||||
he exclaimed:
|
||||
"I don't know whether I am Wumpus dreaming that I am a client,
|
||||
or a client dreaming that I am Wumpus!"
|
||||
|
||||
So was the first Automata born.
|
||||
|
||||
The master Nap then said:
|
||||
"Any automata should not speak unless spoken to.
|
||||
Any automata shall only whisper when spoken to."
|
||||
|
||||
Thus replied the master Gnarfer:
|
||||
"The lusers shall keep in mind that a automata can be either good or
|
||||
bad. Create good automata, and the IRC will hail you and you will
|
||||
gain fame and fortune. Create bad automata and people will start to
|
||||
hate you, and finaly you will be /KILLed to ethernal damnation"
|
||||
|
||||
Many lusers have fallen into the clutches of ethernal damnation. They where
|
||||
not following the Tao.
|
||||
|
||||
|
||||
-----
|
||||
There once was a luser who went to #BotSex. Each day he saw the automatons.
|
||||
The luser decided that he also would have such a automata.
|
||||
He asked another luser for his automata. The other luser gave his automata
|
||||
away.
|
||||
|
||||
The luser was not within the Tao, so he just started the automata. The automata
|
||||
had only Yang inside so all the lusers files where deleted.
|
||||
|
||||
Some moons laither the same luser then had become a sage luser, and did create
|
||||
his automata from the very grounds with materials found inside the IRC.
|
||||
The luser was now within the Tao and his automata lived happily ever after.
|
||||
|
||||
|
||||
-----
|
||||
There once was a master who wrote automatons without the help of master Phone.
|
||||
A novice luser, seeking to imitate him, began with the help of master Phone.
|
||||
When the novice luser asked the master to evaluate his automata the master
|
||||
replied: "What is a working automata for the master is not for the luser.
|
||||
You must must BE the IRC before automating."
|
||||
|
||||
|
||||
-----
|
||||
Master BigCheese gave birth to master Troy; his duty clear. Master Troy gave
|
||||
birth to master Phone, for the Tao of Irc must be eternal and must flow as the
|
||||
ceaseless river of Time itself.
|
||||
|
||||
|
||||
-----
|
||||
Master Phone once said about the ircII client:
|
||||
"public_msg is for a message from someone NOT on the channel
|
||||
public_other is for a message on a channel that doesn't belong to
|
||||
a window. public is for a message on a channel that belongs to a
|
||||
window!"
|
||||
|
||||
Out of this raised the mighty chaos.
|
||||
|
||||
|
||||
-----
|
||||
The sage luser came to the master who wrote automata without the help of
|
||||
master Phone. The sage luser asked the master who wrote automata: "Which is
|
||||
easiest to make. A automata with the help of master Phone or an automata
|
||||
made with the help of a language ?"
|
||||
|
||||
The master who wrote automata then replied:
|
||||
"With the help of a language."
|
||||
|
||||
The sage luser was disapointed and exclaimed: "But, with master Phone you
|
||||
do not need to know anything about the soil of IRC. Is not that the easiet
|
||||
way ?"
|
||||
|
||||
"Not really" said the master who wrote automata, "when using master Phone
|
||||
you are closed inside a box. For sure, it is a great box for the lusers,
|
||||
but the master will need more power, thus a language is the only path to go.
|
||||
With the language the master will never have to limit himself. When using
|
||||
such a language the master will seek the best between the need and the
|
||||
availibility."
|
||||
|
||||
"I see", said the sage luser.
|
||||
|
||||
This is the essence of Tao of IRC automatas.
|
||||
|
||||
|
||||
-----
|
||||
A client should be light and be used for communication. The spirit of a good
|
||||
client is that it should be very convinient for the luser to use, but hard
|
||||
for the luser who want to create automata.
|
||||
There should never ever be too many functions or too few functions.
|
||||
|
||||
There should always be a ignore.
|
||||
|
||||
Without ignore the client is not within the Tao of Chating.
|
||||
|
||||
The client should always respond the luser with messages that will not
|
||||
astnonish him too much. The server likewise. If the server does not, then it
|
||||
is the clients job to explain what the server says.
|
||||
|
||||
A client which fails this, will be useless and cause confusion for the lusers.
|
||||
The only way to correct this is to use another client or to write a new one.
|
||||
|
||||
|
||||
-----
|
||||
A luser asked the masters on #IrcHelp: "My client does not work".
|
||||
The masters replied: "Upgrade your client".
|
||||
The luser then wondered why the master knew. The master then told him about
|
||||
the Protocol.
|
||||
|
||||
"Your client does not work beaucse it does not understand the server. Why
|
||||
should it always work ? Only a fool would expect such. But, clients are made
|
||||
by humans, and humans are not perfect. Only Tao is.
|
||||
|
||||
The IRC is solid. The IRC is floating, and will always be dynamic. Live with
|
||||
that or /quit."
|
||||
|
||||
|
||||
-----
|
||||
The luser came to the masters of #IrcHelp, asking about the Tao of IRC within
|
||||
the client.
|
||||
The masters then said that the Tao of IRC always lies inside the client
|
||||
regardless of how the client connects to the server.
|
||||
|
||||
"Is the Tao in irc ?" asked the luser.
|
||||
"It so is" replied the masters of #IrcHelp.
|
||||
"Is the Tao in the ircII, Kiwi, rxirc, vms, rockers and msa ?" asked the
|
||||
luser.
|
||||
"In all of them and in the TPC, irchat, zenirc, zircon X11-irc and even the
|
||||
dos irc has the Tao" said the master quietly.
|
||||
"Is the Tao in a telnet connection directly to the server ?"
|
||||
|
||||
The master then was quiet for a long time and said. "Please leave, such
|
||||
questions are not within the Tao of IRC".
|
||||
|
||||
|
||||
-----
|
||||
The master says: "Without the Protocol of TCP the messages will not travel.
|
||||
Without the client, the server is useless."
|
||||
|
||||
|
||||
-----
|
||||
There once was a luser who used the ircII client. "ircII can do anything I
|
||||
ever need for using IRC" said the emacs client user, "I have /ON's, I have
|
||||
assignments, I have aliasing. Why don't you use this instead of the huge
|
||||
emacs client, which also has a messy screen?"
|
||||
The emacs client user then replied by saying that "it is better to have a
|
||||
scripting language that is the client instead of have a client that has
|
||||
a scripting language." Upon hearing this, the ircII client luser fell silent.
|
||||
|
||||
|
||||
-----
|
||||
The master Wumpus said: "Time for you to leave. I did, now I'm happy."
|
||||
The master Gnarfer replied: "Use, but never overuse IRC, then you will also
|
||||
be happy within IRC"
|
||||
|
||||
|
||||
-----
|
||||
A luser came unto the masters of #EU-Opers and asked, "How can I be, yet not
|
||||
be, a user@host within the IRC?"
|
||||
The masters of #EU-Opers replied: "To be Tao is to be ones true self. To hide
|
||||
ones self is not Tao, and is not IRC, you have much to learn before you shall
|
||||
be at rest within the Flow of Irc. Please leave"
|
||||
@@ -1,102 +0,0 @@
|
||||
Numeric 005 Documentation (c) 2002 codemastr (Dominick Meglio) [codemastr@unrealircd.com]
|
||||
(As of Unreal3.2-beta11)
|
||||
|
||||
Numeric 005 allows the server to inform the client of any protocol specific features in the
|
||||
IRCd. The numeric is sent at connection time immediately after numeric 004. Additionally
|
||||
the numeric is sent when a /version request is made by a local user, for remote users
|
||||
numeric 105 is used but contains the same information.
|
||||
|
||||
Due to the limit imposed by RFC1459 on both the buffer size (512) and the amount of
|
||||
parameters that can be sent in a single command (15) a total of 13 parameters may be
|
||||
specified in each 005. Because of this, a client must be able to accept multiple 005s
|
||||
consecutively. The format for the 005 message is as follows:
|
||||
|
||||
":" <servername> "005" SPACE <nickname> SPACE <token[=value]> SPACE ... ":are supported
|
||||
by this server"
|
||||
|
||||
Currently UnrealIRCd supports several tokens that are included in numeric 005. A list of
|
||||
all tokens, their respective value and a brief description are listed below.
|
||||
|
||||
Token Value Default Value Description
|
||||
------------------------------------------------------------------------------------------------
|
||||
MAP none none Informs the client that the /map
|
||||
command is present.
|
||||
|
||||
KNOCK none none Informs the client that the /knock
|
||||
command is present.
|
||||
|
||||
SAFELIST none none The LIST command is sent in
|
||||
multiple iterations so that the
|
||||
client's queue does not get filled
|
||||
causing the user to be killed.
|
||||
|
||||
HCN none none The server supports the HCN
|
||||
(Hybrid Connect Notice) protocol.
|
||||
|
||||
MAXCHANNELS number 10 The maximum number of channels a
|
||||
user may join.
|
||||
|
||||
MAXBANS number 60 The maximum number of bans that
|
||||
may be placed for a channel.
|
||||
|
||||
NICKLEN number 30 Maximum length of a user's
|
||||
nickname.
|
||||
|
||||
TOPICLEN number 307 Maximum length of a channel's
|
||||
topic.
|
||||
|
||||
KICKLEN number 307 Maximum length of a kick reason.
|
||||
|
||||
MAXTARGETS number 20 Maximum targets for the PRIVMSG
|
||||
command.
|
||||
|
||||
AWAYLEN number 307 Maximum length of an away message.
|
||||
|
||||
WALLCHOPS none none Indicates that you may use
|
||||
NOTICE/PRIVMSG to send to +ohv by
|
||||
using PRIVMSG/NOTICE [@|%|+]#channel.
|
||||
|
||||
WATCH number 128 Indicates the presence of the
|
||||
WATCH command and specifies the
|
||||
maximum number of watch entries.
|
||||
|
||||
SILENCE number 15 Indicates the maximum number of
|
||||
entries on the silence list.
|
||||
|
||||
MODES number 13 Indicates the number of channel
|
||||
modes with parameters that may be
|
||||
sent at one time.
|
||||
|
||||
CHANTYPES chars # Indicates the prefixes available
|
||||
for channels.
|
||||
|
||||
PREFIX (modes)prefixes (qaohv)~&@%+ Indicates the modes on a channel
|
||||
that corespond to the given
|
||||
nickname prefixes.
|
||||
|
||||
CHANMODES A,B,C,D be,k,lfL, Specifies how each channel mode is
|
||||
psmntirRcOAQKVHGCuzN set/unset. The A section specifies
|
||||
modes that add a nick/mask to a
|
||||
list. The B section specifies
|
||||
modes that require a parameter
|
||||
to be both set and unset. The C
|
||||
section specifies modes that
|
||||
only require a parameter to be
|
||||
set, and the D section
|
||||
specifies modes that require no
|
||||
parameters.
|
||||
|
||||
NETWORK string no default value Specifies the name of the
|
||||
network that the server is
|
||||
connected to.
|
||||
|
||||
CASEMAPPING string ascii Specifies what definition the
|
||||
server uses when determining if
|
||||
characters are upper/lowercase
|
||||
of eachother.
|
||||
|
||||
EXTBAN prefix,types ~,cqr Specifies what extbans are
|
||||
supported by the server. The prefix
|
||||
defines which character indicates
|
||||
an extban and the types defines
|
||||
which extbans the server supports.
|
||||
@@ -1,11 +0,0 @@
|
||||
base64 Documentation (c) 2002 codemastr (Dominick Meglio) [codemastr@unrealircd.com]
|
||||
(As of Unreal3.2-beta11)
|
||||
|
||||
The base64 system used by Unreal is defined as follows:
|
||||
|
||||
0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T
|
||||
U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x
|
||||
y z { }
|
||||
|
||||
These numbers are translated to and from their decimal equivilents of 0-64 in order to
|
||||
provide a shorter way of expressing a number.
|
||||
@@ -1,130 +0,0 @@
|
||||
PROTOCTL Documentation (c) 2002 codemastr (Dominick Meglio) [codemastr@unrealircd.com]
|
||||
(As of Unreal3.2-beta11)
|
||||
|
||||
The PROTOCTL command allows servers to negotiate protocol specific features when a link
|
||||
occurs. The PROTOCTL command is sent during a link before the SERVER and PASS commands. The
|
||||
command contains tokens that list what protocols the server supports.
|
||||
|
||||
PROTOCTL SPACE <token> SPACE ...
|
||||
|
||||
UnrealIRCd supports several tokens that add additional protocol support to the server. A
|
||||
list of all supported tokens and their function listed below.
|
||||
|
||||
Token Description
|
||||
------------------------------------------------------------------------------------------------
|
||||
NOQUIT Informs the server it need not send out a QUIT for each user on the server
|
||||
when an SQUIT occurs. Instead an SQUIT is sent out for each server that has
|
||||
been disconnected from the network and the server can then assume all users
|
||||
that were on those servers have left as well.
|
||||
|
||||
TOKEN Informs the server that it may send "tokenized commands", that is a shortened
|
||||
name for the commands. This allows the server to save bandwidth by sending
|
||||
less information to other servers. See doc/technical/token.txt for a list of
|
||||
all commands and their respective token.
|
||||
|
||||
NICKv2 Notifies the server that it supports the extended NICK command (version 2),
|
||||
this command allows the server to specify more information in the NICK
|
||||
command rather than having to send out a NICK, MODE, and CHGHOST
|
||||
command. This token only affects a NICK command introducing a client, not one
|
||||
in which a client is changing his/her nickname. The format for a NICKv2 NICK
|
||||
command is:
|
||||
|
||||
:<sender> NICK <nickname> <hops> <TS> <username> <host> <server>
|
||||
<servicestamp> <umodes> <vhost> :<info>
|
||||
|
||||
If the user has no modes set the umodes parameter is a +, if the user has no
|
||||
vhost set the vhost parameter is an *.
|
||||
|
||||
SJOIN SJOIN is an obsolete token that is only supported for backwards
|
||||
compatibility. It should not be used.
|
||||
|
||||
SJOIN2 SJOIN2 is an obsolete token that is only supported for backwards
|
||||
compatibility. It should not be used.
|
||||
|
||||
UMODE2 Informs the server that support for the UMODE2 command exists. The UMODE2
|
||||
command is a shortened form of the MODE command but only applys to
|
||||
usermodes. In a normal MODE command, when applied to usermodes, the nickname
|
||||
is specified two times. Both as the sender prefix and as the first parameter,
|
||||
UMODE2 solves this problem in order to save bandwidth, the format for UMODE2
|
||||
is as follows:
|
||||
|
||||
:<sender> UMODE2 <modes>
|
||||
|
||||
VL Notifies the server that Vline information is included in the info field of
|
||||
the SERVER command. Vline information consists of the protocol number of the
|
||||
server and compiletime options supported. This allows denial of a server
|
||||
based on version and/or features supported. The VL information is passed only
|
||||
during connection, it is not filtered to other servers on the network, only
|
||||
the uplink. The syntax for a VL supporting SERVER command is:
|
||||
|
||||
SERVER <servername> <hops> :U<protocol>-<versionflags> <info>
|
||||
|
||||
If an * appears for either protocol and/or versionflags no Vline checking is
|
||||
done, this is often used by services programs where support for all versions
|
||||
is desired. See doc/technical/vl.txt for a list of version flags and protocol
|
||||
numbers.
|
||||
|
||||
SJ3 Notifies the server that the SJOIN command with SJ3 syntax is
|
||||
supported. SJOIN is used at link time to inform servers about the channels on
|
||||
the server. It is a combination of the JOIN commands, and MODE commands
|
||||
associated with distribution of channel information. The syntax for the SJOIN
|
||||
command with SJ3 syntax is:
|
||||
|
||||
:<sender> SJOIN <ts> <chname> [<modes>] [<mode para> ...] :<[[*~@%+]member] ...
|
||||
[&"ban/except] ...>
|
||||
|
||||
The ts parameter is the time at which the channel, chname, was created. The
|
||||
modes parameter is only included if modes are set, if not modes and mode para
|
||||
are excluded. If modes exists and modes requiring parameters (+klLf) are set,
|
||||
one mode para parameter is included for each value. The last parameter
|
||||
specifies a list of channel members and the channel ban and except list. The
|
||||
members are listed with the prefixes they have. * = +q, ~ = +a, @ = +o, % =
|
||||
+h, + = +v. If no prefix is specified for the member then the user is a
|
||||
normal user. The & prefix is used to denote a +b, and the " prefix denotes a
|
||||
+e. It is important that if a & or " is encountered that you do not continue
|
||||
to check that entry for other prefixes as a ban/except may contain *~@
|
||||
characters which will intefere with prefixes.
|
||||
|
||||
When synching, if ts lower than the local value, the information supplied by
|
||||
the remote server replaces the local (ie remove local +ohv that are not
|
||||
recorded on the remote server). The opposite is true when the ts is
|
||||
higher. Bans/excepts do not apply to the previous rule. If the ts is the
|
||||
same, information is merged therefore the modes from both servers are added
|
||||
together. If +l is set and both servers have different values, the highest is
|
||||
choosen, for +f the highest of each param, N:M is chosen, and if one server
|
||||
has * set, then it is included. For +k and +L the "highest" in a string
|
||||
comparison is used.
|
||||
|
||||
NS When specified informs the server that numeric server names are
|
||||
supported. Numeric server names are a base64 number that is associated with
|
||||
each server. This number is used as a shorthand name for the server. It is
|
||||
used in the server parameter of the NICK command and can also be used in the
|
||||
prefix for a message. In the event that the prefix is an NS, rather than
|
||||
using :<sender>, the format is @<ns> the ns should be translated into the
|
||||
server name so that the message can be processed. The format for a SERVER
|
||||
message (at sync time) that supports NS is:
|
||||
|
||||
SERVER <servername> <hops> :U<protocol>-<versionflags>-<numeric> <info>
|
||||
|
||||
The VL protocol must also be supported. The numeric is passed to all servers
|
||||
on the network through the SERVER command using the syntax:
|
||||
|
||||
:<sender> SERVER <servername> <hops> <numeric> :<info>
|
||||
|
||||
Note: anywhere a :<sender> is expected an @<ns> may be received if the source
|
||||
is a server. See doc/technical/base64.txt for information on the base64
|
||||
system used.
|
||||
|
||||
SJB64 This token allows timestamps to be specified in base64 notation to conserve
|
||||
bandwidth. When SJB64 is supported, anywhere a timestamp can appear may be in
|
||||
base64 notation. A base64 timestamp is preceeded by a ! to identify that it
|
||||
is an sjb64 rather than a regular timestamp, if this is the case the
|
||||
characters following the ! represent the timestamp in base64. See
|
||||
doc/technical/base64.txt for information on the base64 system used.
|
||||
|
||||
ZIP If both servers have this set then the link will be (zlib) compressed after
|
||||
the SERVER message. If one of the servers does not have ZIP in his PROTOCTL
|
||||
message then the link stays uncompressed.
|
||||
|
||||
TKLEXT This allows 10 instead of 8 parameters in TKL's for spamfilter, see s_kline.c
|
||||
function m_tkl for more info on this (added in 3.2RC2).
|
||||
@@ -1,122 +0,0 @@
|
||||
Token List (c) 2002 codemastr (Dominick Meglio) [codemastr@unrealircd.com]
|
||||
(As of Unreal3.2-beta11)
|
||||
|
||||
Command Token
|
||||
------------------------------------------------------------------------------------------------
|
||||
PRIVMSG !
|
||||
WHO \
|
||||
WHOIS #
|
||||
WHOWAS $
|
||||
USER %
|
||||
NICK &
|
||||
SERVER '
|
||||
LIST (
|
||||
TOPIC )
|
||||
INVITE *
|
||||
VERSION +
|
||||
QUIT ,
|
||||
SQUIT -
|
||||
KILL .
|
||||
INFO /
|
||||
LINKS 0
|
||||
SUMMON 1
|
||||
STATS 2
|
||||
USERS 3
|
||||
HELP 4
|
||||
HELPOP 4
|
||||
ERROR 5
|
||||
AWAY 6
|
||||
CONNECT 7
|
||||
PING 8
|
||||
PONG 9
|
||||
OPER ;
|
||||
PASS <
|
||||
WALLOPS =
|
||||
TIME >
|
||||
NAMES ?
|
||||
ADMIN @
|
||||
NOTICE B
|
||||
JOIN C
|
||||
PART D
|
||||
LUSERS E
|
||||
MOTD F
|
||||
MODE G
|
||||
KICK H
|
||||
USERHOST J
|
||||
ISON K
|
||||
REHASH O
|
||||
RESTART P
|
||||
CLOSE Q
|
||||
DIE R
|
||||
HASH S
|
||||
DNS T
|
||||
SILENCE U
|
||||
AKILL V
|
||||
KLINE W
|
||||
UNKLINE X
|
||||
RAKILL Y
|
||||
GNOTICE Z
|
||||
GOPER [
|
||||
GLOBOPS ]
|
||||
LOCOPS ^
|
||||
PROTOCTL _
|
||||
WATCH `
|
||||
TRACE b
|
||||
SQLINE c
|
||||
UNSQLINE d
|
||||
SVSNICK e
|
||||
SVSNOOP f
|
||||
SVSKILL h
|
||||
SVSMODE n
|
||||
SAMODE o
|
||||
CHATOPS p
|
||||
ZLINE q
|
||||
UNZLINE r
|
||||
RULES t
|
||||
MAP u
|
||||
SVS2MODE v
|
||||
DALINFO w
|
||||
ADCHAT x
|
||||
MKPASSWD y
|
||||
ADDLINE z
|
||||
GLINE }
|
||||
SETHOST AA
|
||||
NACHAT AC
|
||||
SETIDENT AD
|
||||
SETNAME AE
|
||||
LAG AF
|
||||
SDESC AG
|
||||
KNOCK AI
|
||||
CREDITS AJ
|
||||
LICENSE AK
|
||||
CHGHOST AL
|
||||
RPING AM
|
||||
RPONG AN
|
||||
NETINFO AO
|
||||
SENDUMODE AP
|
||||
ADDMODE AQ
|
||||
ADDOMODE AR
|
||||
SVSMODE AS
|
||||
SMO AU
|
||||
OPERMOTD AV
|
||||
TSCTL AW
|
||||
SAJOIN AX
|
||||
SAPART AY
|
||||
CHGIDENT AZ
|
||||
SWHOIS BA
|
||||
SVSO BB
|
||||
SVSFLINE BC
|
||||
TKL BD
|
||||
VHOST BE
|
||||
BOTMOTD BF
|
||||
HTM BH
|
||||
SHUN BL
|
||||
SVSJOIN BR
|
||||
SVSPART BT
|
||||
SJOIN ~
|
||||
UMODE2 |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
VL Information (c) 2002 codemastr (Dominick Meglio) [codemastr@unrealircd.com]
|
||||
(As of Unreal3.2-beta11)
|
||||
|
||||
Protocol Version
|
||||
------------------------------------------------------------------------------------------------
|
||||
2303 3.2-Selene
|
||||
2302 3.1.1-Darkshades, 3.1.2-Darkshades, 3.1.3-Komara, 3.1.4-Meadows
|
||||
2301 3.1-Silverheart
|
||||
2300 3.0-Morrigana
|
||||
|
||||
Flag Description
|
||||
------------------------------------------------------------------------------------------------
|
||||
c Server is chrooted
|
||||
C command line config enabled
|
||||
D Server is in debugmode
|
||||
F Using file descriptor lists
|
||||
h Compiled as a hub
|
||||
i Shows invisible users in /trace
|
||||
n NOSPOOF enabled
|
||||
V Uses valloc()
|
||||
W Windows version
|
||||
Y Syslog logging enabled
|
||||
K No ident checking (?)
|
||||
6 IPv6 supported
|
||||
X STRIPBADWORDS enabled (chmode/umode +G)
|
||||
P Uses poll()
|
||||
e SSL supported
|
||||
O OperOverride enabled
|
||||
o OperOverride without verify
|
||||
Z Zip links supported
|
||||
3 3rd party modules (were) loaded
|
||||
E Extended channel modes supported
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,407 @@
|
||||
****** UnrealIRCd v2.1.7 Documentation ******
|
||||
[ $Id$ ]
|
||||
|
||||
1) About UnrealIRCd
|
||||
|
||||
I started making UnrealIRCd about 1-2 months ago. (July 1999 now)
|
||||
First it was called mpx2.0b13.soundforge - as I was
|
||||
inspired of the 'forge' word. I quickly changed name
|
||||
after I realized the IRCd had more potential.
|
||||
Unreal is based off Elite2.0b13 and some of
|
||||
the minor bugfixes Potvin came up with. First lemme
|
||||
introduce myself. My nick is Techie/Stskeeps. I hang
|
||||
out at Global-IRC.net, DALnet, DragonWings.org and so on
|
||||
|
||||
Unreal is a hybrid of Elite (as I said) mixed with some
|
||||
Twilight IRCd, TerraIRCd, TS4 (channel mode +h & +e) features
|
||||
(IMHO TwilightIRCd is one of the best dreamforge hybrids I've seen!
|
||||
Unreal is not a rip-off of other IRCds - I added a lot of features myself!
|
||||
I really cannot mention some major features as I think a IRCd is a
|
||||
IRCd when it has got useful commands- and people actually say mine has!
|
||||
|
||||
Anyways I dunt demand donations or anything. I just do coding for fun
|
||||
I treat coding like playing with toys. It makes me happy(or is it just
|
||||
caffeine?;). An addy to send donations is at the Donation file in the IRCd dir
|
||||
And.. I don't sweat while making features unlike some Potvin coder so dunt
|
||||
send me towels;) I would be more happy if someone e-mailed me with ideas
|
||||
to the IRCd.. The whole IRCd is GNU so if you want to rip off any of my ideas
|
||||
You are generally welcome:) Just remember to do what's said in the Changes file!
|
||||
-- So.. Enjoy this IRCd:) It may become a dream to IRCd owners as its infact
|
||||
a sortof hybrid of EliteIRCd (Cite .man-pages/page1 in Elite:
|
||||
EliteIRCD has become a dream to many ircd owners</end cite>
|
||||
-- Carsten Munk / Techie .. =)
|
||||
|
||||
2) Commands (User Commands)
|
||||
|
||||
*** WATCH Command ***
|
||||
Watch is a new notify-type system in UnrealIRCd which is both faster
|
||||
and uses less network resources than any old-style notify
|
||||
system. You may add entries to your Watch list with the command
|
||||
/watch +nick1 [+nick2 +nick3 ..., and the server will send
|
||||
you a message when any nickname in your watch list logs on or off.
|
||||
Use /watch -nick to remove a nickname from the watch list, and
|
||||
just /watch to view your watch list.
|
||||
The watch list DOES NOT REMAIN BETWEEN SESSIONS - you (or your
|
||||
script or client) must add the nicknames to your watch list every
|
||||
time you connect to an IRC server. /Watch was made in DreamForge IRCd
|
||||
which UnrealIRCd in ground is based off
|
||||
|
||||
*** HELPOP Command ***
|
||||
HelpOp is a new system of getting IRC Server help. You type either
|
||||
/HelpOp ? <help system topic> or /HelpOp ! <question>
|
||||
The "?" in /HelpOp means query the help system and if you get no
|
||||
response you can choose '!' to send it to the Help Operators online
|
||||
------------oOo--------------
|
||||
|
||||
*** LIST Command ***
|
||||
New extended /list command options are supported. To use these
|
||||
features, you will likely need to prefix the LIST command with
|
||||
/quote to avoid your client interpreting the command.
|
||||
|
||||
Usage: /quote LIST options
|
||||
|
||||
If you don't include any options, the default is to send you the
|
||||
entire unfiltered list of channels. Below are the options you can
|
||||
use, and what channels LIST will return when you use them.
|
||||
>number List channels with more than <number> people.
|
||||
<number List channels with less than <number> people.
|
||||
C>number List channels created between now and <number> minutes ago.
|
||||
C<number List channels created earlier than <number> minutes ago.
|
||||
T>number List channels whose topics are older than <number> minutes
|
||||
(Ie., they have not changed in the last <number> minutes.
|
||||
T<number List channels whose topics are newer than <number> minutes.
|
||||
*mask* List channels that match *mask*
|
||||
!*mask* List channels that do not match *mask*
|
||||
LIST defaults to sending a list of channels with 2 or more members,
|
||||
so use the >0 option to get the full channel listing.
|
||||
|
||||
*** PRIVMSG Command ***
|
||||
PRIVMSG and NOTICE, which are used internally by the client for
|
||||
/msg and /notice, in UnrealIRCd support two additional formats:
|
||||
/msg @#channel <text> will send the text to channel-ops on the
|
||||
given channel only. /msg @+#channel <text> will send the text
|
||||
to both ops and voiced users on the channel. While some clients
|
||||
may support these as-is, on others (such as ircII), it's necessary
|
||||
to use /quote privmsg @#channel <text> instead. It's perhaps a
|
||||
good idea to add the/alias omsg /quote privmsg @$0 $1 into
|
||||
your script (.ircrc) file in that case.
|
||||
|
||||
**** KNOCK Command ****
|
||||
/Knock is a new UnrealIRCd command which enables you to
|
||||
'knock' on a channel if it is +i and these criteria is met
|
||||
- Channel is not +K (No knocks)
|
||||
- Channel is not +I (No invites!)
|
||||
- You're not banned!
|
||||
- And you are not already there:)
|
||||
|
||||
Syntax:
|
||||
/Knock #Channel :Reason
|
||||
|
||||
**** LICENSE Command ****
|
||||
This command shows the GNU License
|
||||
Which is hard-coded into the IRCd:)
|
||||
Syntax: /License [optional server]
|
||||
|
||||
*** SetName Command ***
|
||||
/SetName is a new feature in UnrealIRCd
|
||||
Which allows users to change their 'Real name'
|
||||
(GECOS) directly online at IRC without reconnecting
|
||||
|
||||
Syntax:
|
||||
/SetName :New Real Name
|
||||
|
||||
|
||||
*** MODE Command ***
|
||||
This is basically the /mode command as it has always
|
||||
been on IRC. Thou in Channel mode basis it has got an
|
||||
Extra feature (/mode #Channel ^ ) which reports channel
|
||||
modes represented in a bitstring (may be handy, maybe not)
|
||||
UnrealIRCd has got some new channel / usermodes I think you
|
||||
wish to take a look at
|
||||
Channel Modes Help: /HelpOp CHMODES
|
||||
User modes help: /HelpOp UMODES
|
||||
|
||||
*** STATSERV Command ***
|
||||
This is a alias for the /msg StatServ command,
|
||||
But is more secure. If the IRC network doesn't have StatServ
|
||||
It will report it is down.
|
||||
|
||||
Syntax:
|
||||
/StatServ <command>
|
||||
|
||||
*** /Credits Help ***
|
||||
This command will list the credits I've created
|
||||
to thank the people who has helped me with making
|
||||
UnrealIRCd. Anyone who I've forgotten all my kind
|
||||
thoughts go to -- Techie'99
|
||||
|
||||
Syntax:
|
||||
/Credits [optional server]
|
||||
|
||||
*** /DALINFO Help ***
|
||||
This command will list the credits that the
|
||||
Dreamforge IRCd team/the IRCd developers
|
||||
from the start when IRCd got developed
|
||||
|
||||
Syntax:
|
||||
/DALInfo [optional server]
|
||||
|
||||
3) Operator Commands
|
||||
|
||||
This section is the IRCOp's only commands
|
||||
area:) - These topics are available:
|
||||
Note: This doesnt include Dreamforge commands
|
||||
|
||||
SETHOST SETIDENT SDESC
|
||||
ADCHAT NACHAT TECHAT
|
||||
GLINE REMGLINE STATS
|
||||
MKPASSWD SNOTES SNOTE
|
||||
ADDLINE LAG RPING
|
||||
ADDMOTD ADDOMOTD OPERMOTD
|
||||
CHGHOST TSCTL SAJOIN
|
||||
|
||||
*** ADDMOTD Command Help ***");
|
||||
This will add the text you specify to the MOTD
|
||||
(the general motd - T:lines doesnt count ..)
|
||||
Server Admin & Co-Admin only
|
||||
|
||||
Syntax: /ADDMOTD :text
|
||||
|
||||
*** ADDOMOTD Command Help ***
|
||||
This will add the text you specify to the Operator MOTD
|
||||
Server Admin & Co-Admin only
|
||||
|
||||
Syntax: /ADDOMOTD :text
|
||||
|
||||
*** OPERMOTD Command Help ***
|
||||
This is a IRCop only command - shows the IRCd Operator MOTD
|
||||
Syntax: /OperMotd
|
||||
|
||||
*** SETHOST Command Help ***
|
||||
This command is so you can change your
|
||||
Virtual host (hiddenhost) to everything you want to
|
||||
Except special characters;).
|
||||
|
||||
Syntax:
|
||||
/SetHost <new hostname>)
|
||||
|
||||
Example:
|
||||
/Sethost ircaddicts.org
|
||||
|
||||
*** SETIDENT Command Help ***
|
||||
With this command you can change your
|
||||
ident (username).
|
||||
|
||||
Syntax:
|
||||
/SetIdent <new ident>
|
||||
|
||||
Example:
|
||||
/SetIdent root
|
||||
|
||||
*** SDesc Command help ***
|
||||
NOTE: This is a Server Admin/Co Admin only command
|
||||
With this command you can change your Server Info Line
|
||||
Without having to squit and reconnect.
|
||||
Syntax: /SDesc :New description
|
||||
Example: /SDesc :If you belong to me..
|
||||
|
||||
*** AdChat Command Help ***
|
||||
This command sends to all Admins online (IsAdmin)
|
||||
Only for Admins. This is a ChatOps style command
|
||||
Syntax: /AdChat :<text>
|
||||
Example: /AdChat :Hey guys!
|
||||
|
||||
*** NAChat Command Help ***
|
||||
This command sends to all NetAdmins & TechAdmins online
|
||||
Only for Net/Techadmins. This is a ChatOps style command
|
||||
Syntax: /NAChat :<text>
|
||||
Example: /NAChat :Hey guys!
|
||||
|
||||
*** Stats Command Help ***
|
||||
UnrealIRCd has got a extension called /Stats G
|
||||
Which will list the current G:Lines
|
||||
Syntax: /Stats G
|
||||
|
||||
*** TEChat Command Help ***
|
||||
This command sends to all TechAdmins online
|
||||
Only for Net/Techadmins. This is a ChatOps style command
|
||||
Syntax: /TEChat :<text>
|
||||
Example: /TEChat :Hey guys!
|
||||
|
||||
*** CHGHOST Command help ***
|
||||
This command makes you able to change other people's virtual hostname
|
||||
- IRCop only.
|
||||
Syntax: /CHGHOST <nick> <newhost>
|
||||
|
||||
*** TSCTL Command Help ***");
|
||||
This is a highly advanced command");
|
||||
Syntax:");
|
||||
/TSCTL OFFSET +|- <time> - Adjust internal IRC clock");
|
||||
/TSCTL TIME - Will give TS report");
|
||||
|
||||
*** SAJOIN Command help **");
|
||||
Makes <nick> join channel <channel>");
|
||||
Services Admin only..");
|
||||
Syntax: /SAJOIN nick channel");
|
||||
|
||||
|
||||
*** RemGline Command Help
|
||||
This command can remove G:Lines
|
||||
|
||||
Syntax:
|
||||
/RemGline <user@host mask>
|
||||
|
||||
Example:
|
||||
/RemGline *@*.flirt.org
|
||||
|
||||
*** G:line command Help ***
|
||||
This command provides timed G:Lines. If you match
|
||||
a G:Line you cannot connect to ANY server at the
|
||||
IRC network
|
||||
Syntax:
|
||||
/GLINE <user@host mask> <seconds to be banned> :<reason>
|
||||
Example:
|
||||
/GLINE *@*.dal.net 900 :Spammers
|
||||
this will ban all users matching *@*.dal.net for 15 minutes
|
||||
with reason 'Spammers'
|
||||
|
||||
*** MkPasswd Command help ***
|
||||
This command will encrypt the string it has been given
|
||||
So u can add it directly to the ircd.conf if you use
|
||||
Encrypted passwords. /MKPassWd is disabled in UnrealIRCd/32
|
||||
Syntax : /MkPasswd :string to be encrypted
|
||||
|
||||
*** SNOTE Command Help ***
|
||||
This will store the parameter of the command to a file
|
||||
Which then can be read by using /SNOTES LIST
|
||||
Syntax: /SNOTE :<message>
|
||||
|
||||
*** SNOTES Command Help ***
|
||||
This command is made to view notes
|
||||
Written to the SNOTE file by using /SNOTE
|
||||
Syntax: /SNOTES LIST
|
||||
or /SNOTES <number>
|
||||
|
||||
*** ADDLINE Command Help ***
|
||||
This command can be used to add lines to the ircd.conf file
|
||||
Only for Server Admins
|
||||
Syntax: /AddLine :<line>
|
||||
|
||||
*** LAG Command Help ***
|
||||
This command is like a sonar/traceroute for IRC servers
|
||||
You type in /lag server1.irc.net and it will
|
||||
reply from every server it passes with time and so on
|
||||
Useful for looking where lag is and optional TS future/past travels
|
||||
Syntax: /LAG <servername>
|
||||
|
||||
**** RPING Command help ***
|
||||
This will calculate the milliseconds (lag) between servers
|
||||
|
||||
Syntax: /RPING <servermask>
|
||||
|
||||
4) *** UnrealIRCd Usermodes ***
|
||||
o = Global IRCop
|
||||
O = Local IRCop
|
||||
i = Invisible (Not shown in /who searches)
|
||||
w = Can listen to wallop messages
|
||||
g = Can read & send to globops, and locops
|
||||
h = Available for help
|
||||
s = Can listen to server notices
|
||||
k = See's all the /KILL's which were executed
|
||||
S = For services only. (Protects them)
|
||||
a = Is a services admin
|
||||
A = Is a server admin
|
||||
N = Is a network admin
|
||||
T = Is a tech admin
|
||||
C = Is a co admin
|
||||
c = See's all connects/disconnects on local server
|
||||
f = Listen to flood alerts from server
|
||||
r = Identifies the nick as being registered
|
||||
x = Gives the user hidden hostname
|
||||
e = Can listen to server messages sent to +e users
|
||||
b = Can read & send to chatops
|
||||
W = (IRCops only) Lets you see when people does a /whois on you
|
||||
q = (Services Admins only) Gets you unable to be
|
||||
kicked unless by U:Lines
|
||||
B = (users) Marks you being a Bot
|
||||
F = (net|tech admin only) Lets you see far client connect/disconnects
|
||||
I = (net|tech admin only) Invisible Join/Part. Makes you
|
||||
being hidden at channels
|
||||
1 = (IRCops only) Marks you a Coder
|
||||
5) *** UnrealIRCd Channel Modes ***
|
||||
p = Private channel
|
||||
s = Secret channel
|
||||
i = Invite-only allowed
|
||||
m = Moderated channel, noone can speak except users with mode +voh
|
||||
n = No messages from outside channel
|
||||
t = Only channel operators may set the topic
|
||||
r = Channel is registered
|
||||
R = Requires a registered nickname to join the channel
|
||||
x = No ANSI color can be sent to the channel
|
||||
q = Channel owner (The big cheese)
|
||||
Q = No kicks able in channel unless by U:Lines
|
||||
O = IRCop only channel (setable by Opers)
|
||||
A = Server Admin | Network Admin | Tech Admin only channel (same as above)
|
||||
K = /Knock is not allowed
|
||||
I = /Invite is not allowed
|
||||
S = Strip all incoming colours away
|
||||
l <number of max users> = Channel may hold at most <number> of users
|
||||
b <nick!user@host> = Bans the nick!user@host from the channel
|
||||
k <key> = Needs the channel key to join the channel
|
||||
o <nickname> = Gives operator status to the user
|
||||
v <nickname> = Gives voice to the user (May talk if chan is +m)
|
||||
a <nickname> = Gives protection to the user (No kick/drop)
|
||||
e <exception ban> = Exception ban - If someone matches it
|
||||
they can join even if some else ban matches!
|
||||
h <nickname> = Gives halfop status to the user
|
||||
L <chan2> = If channel is full (+l) the next user
|
||||
will autojoin <chan2>
|
||||
You can get additional explanation on modes:
|
||||
Q h
|
||||
With /HELPOP mode-<x> where <x> is Q f.x. like mode-Q
|
||||
|
||||
*** Channel mode +Q ***
|
||||
This is the 'peace' mode. Noone can kick eachother
|
||||
except by U:Lines. Bans can be placed thou.
|
||||
|
||||
*** Channel halfops (+h) ***
|
||||
If you are marked as halfop (% in /names) you can do:
|
||||
- Set topic
|
||||
- Kick non-ops
|
||||
- Set modes +vmntibe
|
||||
|
||||
6) *** UnrealIRCd O:Line flags ***
|
||||
r = Access to /rehash server
|
||||
R = Access to /restart server
|
||||
D = Access to /die server
|
||||
h = Oper can send /help ops - gets +h on oper up
|
||||
g = Oper can send /globops
|
||||
w = Oper can send /wallops
|
||||
l = Oper can send /locops
|
||||
c = Access to do local /squits and /connects
|
||||
Y = Access to do remote /squits and /connects
|
||||
k = Access to do local /kills
|
||||
K = Access to do global /kills
|
||||
b = Oper can /kline users from server
|
||||
B = Oper can /unkline users from server
|
||||
n = Oper can send local server notices(/notice $servername message)
|
||||
N = Oper can send global notices(/notice $*.network.net message)
|
||||
u = Oper can set /umode +c
|
||||
f = Oper can set /umode +f
|
||||
o = Local oper, flags included: rhgwlckbBnuf
|
||||
O = Global oper, flags included: oRDCKN
|
||||
A = Gets +A on oper up. Is server admin
|
||||
a = Gets +a on oper up. Is services admin
|
||||
N = Gets +N on oper up. Is network admin
|
||||
T = Gets +T on oper up. Is tech admin
|
||||
C = Gets +C on oper up. Is co admin
|
||||
z = Can add /zlines
|
||||
H = Gets +x on oper up.
|
||||
W = Gets +W on oper up.
|
||||
^ = Allows to use umode +I
|
||||
|
||||
7) Last word
|
||||
|
||||
This documentation is based off src/help.c in Unreal2.1.7
|
||||
For version Unreal2.1.7 - $Date$
|
||||
Made by Carsten Munk 1999 (Stskeeps)
|
||||
-311
@@ -1,311 +0,0 @@
|
||||
/*
|
||||
** burst.c
|
||||
**
|
||||
** Nicolas Pioch, Dec 93
|
||||
** <Nicolas.Pioch@enst.fr>
|
||||
** Carsten V. Munk Nov 2000
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/signal.h>
|
||||
#include <netinet/in.h>
|
||||
#include <sys/un.h>
|
||||
#include <netdb.h>
|
||||
#include <errno.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef POSIX
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
|
||||
#define MYBUFSIZE 2048
|
||||
|
||||
char *jupedservername, *uplinkservername, *jupereason;
|
||||
int options;
|
||||
char *password;
|
||||
typedef struct aClient {
|
||||
int socket;
|
||||
char buffer[MYBUFSIZE+1];
|
||||
int read;
|
||||
int write;
|
||||
} aClient;
|
||||
|
||||
void fatalrestart(aClient *robotptr, const char *s);
|
||||
|
||||
void fatal(const char *s) {
|
||||
perror(s);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
typedef void (*signalhandler)(int);
|
||||
static void signal_catcher(int sig, int code, struct sigcontext *scp) {
|
||||
fprintf(stderr, "Caught signal %d with code %d\n", sig, code);
|
||||
|
||||
switch(sig) {
|
||||
case SIGFPE: /* Floating point exception */
|
||||
case SIGILL: /* Illegal instruction */
|
||||
case SIGSEGV: /* Segmentation violation */
|
||||
case SIGBUS: /* Bus error */
|
||||
case SIGSYS: /* Bad argument to system call */
|
||||
fatal("Fatal signal received, aborting...");
|
||||
break;
|
||||
|
||||
case SIGQUIT:
|
||||
case SIGINT:
|
||||
case SIGTERM: /* On se barre */
|
||||
fatal("AAAAAAAAArrrrrrrrgh!");
|
||||
break;
|
||||
}
|
||||
|
||||
signal(sig, (signalhandler)signal_catcher);
|
||||
}
|
||||
|
||||
|
||||
typedef union socket_address {
|
||||
struct sockaddr_un unixx;
|
||||
struct sockaddr_in inet;
|
||||
} socket_address;
|
||||
|
||||
void name_to_number(int address_family, const char *hostname, int port,
|
||||
socket_address *addr, int *len2) {
|
||||
u_long iaddr;
|
||||
int len;
|
||||
struct hostent *host;
|
||||
char *inaddr;
|
||||
bzero ((char *) addr, sizeof (socket_address) );
|
||||
|
||||
if ( address_family == AF_UNIX ) {
|
||||
strcpy(addr->unixx.sun_path,hostname);
|
||||
*len2=sizeof( struct sockaddr_un );
|
||||
} else {
|
||||
if ((hostname) && (hostname[0])) {
|
||||
if (hostname[0] >= '0' && hostname[0] <= '9') {
|
||||
iaddr = inet_addr(hostname);
|
||||
inaddr = (char *) &iaddr;
|
||||
len=sizeof(iaddr);
|
||||
} else {
|
||||
host=gethostbyname (hostname);
|
||||
if (!host)
|
||||
fatal("Unknown host");
|
||||
inaddr=host->h_addr_list[0];
|
||||
len=host->h_length;
|
||||
}
|
||||
bcopy(inaddr, (char *)&addr->inet.sin_addr, len);
|
||||
}
|
||||
addr->inet.sin_port=htons((u_short) port);
|
||||
*len2=sizeof(struct sockaddr_in);
|
||||
}
|
||||
addr->inet.sin_family = address_family;
|
||||
}
|
||||
|
||||
int read_data(aClient *robotptr) {
|
||||
int nbytes;
|
||||
|
||||
if ((nbytes=read(robotptr->socket, &(robotptr->buffer[robotptr->write]),
|
||||
(sizeof(robotptr->buffer) - robotptr->write - 1))) < 0)
|
||||
fatalrestart(robotptr, "read on socket");
|
||||
|
||||
if (nbytes == 0) {
|
||||
close(robotptr->socket);
|
||||
fatalrestart(robotptr, "Connection Closed");
|
||||
}
|
||||
|
||||
robotptr->write+=nbytes;
|
||||
robotptr->buffer[robotptr->write]=0;
|
||||
|
||||
return(nbytes);
|
||||
}
|
||||
|
||||
void send_data(int socketfd, const char *data, int length) {
|
||||
int length2;
|
||||
length2=write(socketfd, data, length);
|
||||
if (length2 != length)
|
||||
fprintf(stderr, "*** write truncated to %d chars...\n", length2);
|
||||
}
|
||||
|
||||
int create_client(const char *hostname, const int hostport) {
|
||||
int descript;
|
||||
socket_address hostaddr;
|
||||
int adlen;
|
||||
|
||||
/* winlocal
|
||||
if ((descript=socket(PF_INET, SOCK_STREAM, 0)) < 0)
|
||||
*/
|
||||
if ((descript=socket(PF_INET, SOCK_STREAM, 0)) == -1) // winlocal
|
||||
fatal("socket");
|
||||
|
||||
name_to_number(AF_INET, hostname, hostport, &hostaddr, &adlen);
|
||||
|
||||
if (connect(descript, &hostaddr.inet, adlen) < 0)
|
||||
fatal("connect");
|
||||
|
||||
return(descript);
|
||||
}
|
||||
|
||||
void parse_line(aClient *robotptr) {
|
||||
char *toparse;
|
||||
|
||||
toparse=(robotptr->buffer + robotptr->read);
|
||||
|
||||
printf("%s\n",toparse);
|
||||
/* Special handling for PING messages */
|
||||
if (!strncasecmp(toparse, "PING ", 5) || !strncasecmp(toparse, "8 ", 2)){
|
||||
toparse=strtok(toparse, "\r\n");
|
||||
toparse[1]='\0';
|
||||
send_data(robotptr->socket, toparse, strlen(toparse));
|
||||
return;
|
||||
}
|
||||
if (!strncasecmp(toparse, "AO", 2) || !strncasecmp(toparse, "NETINFO", 7))
|
||||
{
|
||||
if (!(options & 0x80))
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void parse_data(aClient *robotptr) {
|
||||
int next;
|
||||
|
||||
while((robotptr->read < robotptr->write)
|
||||
&& ((robotptr->buffer[robotptr->read] == '\r')
|
||||
|| (robotptr->buffer[robotptr->read] == '\n')))
|
||||
robotptr->read++;
|
||||
|
||||
for(next=robotptr->read; next<=robotptr->write; next++) {
|
||||
if ((robotptr->buffer[next] == '\r')
|
||||
|| (robotptr->buffer[next] == '\n'))
|
||||
break;
|
||||
}
|
||||
|
||||
if (next<robotptr->write) {
|
||||
robotptr->buffer[next]=0;
|
||||
next++;
|
||||
parse_line(robotptr);
|
||||
robotptr->read=next;
|
||||
parse_data(robotptr);
|
||||
}
|
||||
|
||||
if (robotptr->read == robotptr->write) {
|
||||
robotptr->read=robotptr->write=0;
|
||||
} else {
|
||||
bcopy((robotptr->buffer + robotptr->read),
|
||||
(robotptr->buffer), (robotptr->write-robotptr->read));
|
||||
robotptr->write-=robotptr->read;
|
||||
robotptr->read=0;
|
||||
}
|
||||
}
|
||||
|
||||
void run_client(aClient *robotptr) {
|
||||
fd_set mask, returnmask[3];
|
||||
int selectval;
|
||||
|
||||
FD_ZERO(&mask);
|
||||
FD_SET(robotptr->socket, &mask);
|
||||
|
||||
while (1) {
|
||||
bcopy((char *)&mask,(char *)returnmask,sizeof(fd_set));
|
||||
FD_ZERO(returnmask+1);
|
||||
bcopy((char *)&mask,(char *)(returnmask+2),sizeof(fd_set));
|
||||
|
||||
selectval=select(FD_SETSIZE,
|
||||
returnmask, returnmask+1, returnmask+2, NULL);
|
||||
|
||||
if (selectval) {
|
||||
read_data(robotptr);
|
||||
parse_data(robotptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void initialize(aClient *robotptr) {
|
||||
char passphrase[MYBUFSIZE];
|
||||
robotptr->socket=create_client(uplinkservername, atol(jupereason));
|
||||
sprintf(passphrase,
|
||||
"PROTOCTL %s %s %s %s %s %s %s %s %s\r\n",
|
||||
(options & 0x1) ? "NOQUIT" : "",
|
||||
(options & 0x2) ? "TOKEN" : "",
|
||||
(options & 0x4) ? "NICKv2" : "",
|
||||
(options & 0x8) ? "SJOIN" : "",
|
||||
(options & 0x10) ? "SJOIN2" : "",
|
||||
(options & 0x20) ? "UMODE2" : "",
|
||||
(options & 0x40) ? "NS" : "",
|
||||
(options & 0x100) ? "SJ3" : "",
|
||||
(options & 0x200) ? "SJB64" : "");
|
||||
write(robotptr->socket, passphrase, strlen(passphrase));
|
||||
sprintf(passphrase, "PASS %s\r\nSERVER %s 1 :[Burst analysis].\r\n",
|
||||
password,jupedservername);
|
||||
write(robotptr->socket, passphrase, strlen(passphrase));
|
||||
}
|
||||
|
||||
void fatalrestart(aClient *robotptr, const char *s) {
|
||||
perror(s);
|
||||
close(robotptr->socket);
|
||||
sleep(10);
|
||||
initialize(robotptr);
|
||||
run_client(robotptr);
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
aClient robot;
|
||||
char *p;
|
||||
|
||||
if (argc != 6) {
|
||||
fprintf(stderr, "IRCd burst generator, by Carsten V. Munk 2000, based off jupe.c by Nicolas Pioch\n");
|
||||
fprintf(stderr,
|
||||
"Usage: %s <burstservername> <uplink> <port> <options> <password>\n", argv[0]);
|
||||
fprintf(stderr, "Options can be a combination of these:\n");
|
||||
fprintf(stderr, "1 = Enable NOQUIT 2 = Enable TOKEN\n");
|
||||
fprintf(stderr, "3 = Enable NICKv2 4 = Enable SJOIN\n");
|
||||
fprintf(stderr, "5 = Enable SJOIN2 6 = Enable UMODE2\n");
|
||||
fprintf(stderr, "7 = Enable NS 8 = Ignore end of burst\n");
|
||||
fprintf(stderr, "9 = Enable SJ3 a = Enable SJB64\n");
|
||||
fatal("incorrect argument count");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
jupedservername=argv[1];
|
||||
uplinkservername=argv[2];
|
||||
jupereason=argv[3];
|
||||
password = argv[5];
|
||||
p = argv[4];
|
||||
for (; *p; p++)
|
||||
{
|
||||
if (*p == '1')
|
||||
options |= 0x1;
|
||||
if (*p == '2')
|
||||
options |= 0x2;
|
||||
if (*p == '3')
|
||||
options |= 0x4;
|
||||
if (*p == '4')
|
||||
options |= 0x8;
|
||||
if (*p == '5')
|
||||
options |= 0x10;
|
||||
if (*p == '6')
|
||||
options |= 0x20;
|
||||
if (*p == '7')
|
||||
options |= 0x40;
|
||||
if (*p == '8')
|
||||
options |= 0x80;
|
||||
if (*p == '9')
|
||||
options |= 0x100;
|
||||
if (*p == 'a')
|
||||
options |= 0x200;
|
||||
}
|
||||
/* installe le signal_catcher */
|
||||
signal(SIGTERM,(signalhandler)signal_catcher);
|
||||
|
||||
robot.read=robot.write=0;
|
||||
|
||||
initialize(&robot);
|
||||
run_client(&robot);
|
||||
|
||||
exit(0);
|
||||
}
|
||||
@@ -1,128 +0,0 @@
|
||||
/*
|
||||
* IRC - Internet Relay Chat, src/modules/channeldumper.c
|
||||
* (C) 2002 Carsten V. Munk <stskeeps@tspre.org>
|
||||
*
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#include "config.h"
|
||||
#include "struct.h"
|
||||
#include "common.h"
|
||||
#include "sys.h"
|
||||
#include "numeric.h"
|
||||
#include "msg.h"
|
||||
#include "channel.h"
|
||||
#include <time.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef _WIN32
|
||||
#include <io.h>
|
||||
#endif
|
||||
#include <fcntl.h>
|
||||
#include "h.h"
|
||||
#include "proto.h"
|
||||
#ifdef STRIPBADWORDS
|
||||
#include "badwords.h"
|
||||
#endif
|
||||
#ifdef _WIN32
|
||||
#include "version.h"
|
||||
#endif
|
||||
|
||||
#ifndef DYNAMIC_LINKING
|
||||
ModuleHeader channeldumper_Header
|
||||
#else
|
||||
#define channeldumper_Header Mod_Header
|
||||
ModuleHeader Mod_Header
|
||||
#endif
|
||||
= {
|
||||
"channeldumper",
|
||||
"$Id$",
|
||||
"Channel dump to text timed",
|
||||
"3.2-b8-1",
|
||||
NULL
|
||||
};
|
||||
|
||||
static ModuleInfo ChannelDumperModInfo;
|
||||
|
||||
#ifdef DYNAMIC_LINKING
|
||||
DLLFUNC int Mod_Init(ModuleInfo *modinfo)
|
||||
#else
|
||||
int channeldumper_Init(ModuleInfo *modinfo)
|
||||
#endif
|
||||
{
|
||||
tainted++;
|
||||
bcopy(modinfo,&ChannelDumperModInfo, modinfo->size);
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
EVENT(e_channeldump);
|
||||
static Event *ChannelDumpEvent = NULL;
|
||||
#ifdef DYNAMIC_LINKING
|
||||
DLLFUNC int Mod_Load(int module_load)
|
||||
#else
|
||||
int channeldumper_Load(int module_load)
|
||||
#endif
|
||||
{
|
||||
LockEventSystem();
|
||||
ChannelDumpEvent = EventAddEx(ChannelDumperModInfo.handle, "e_channeldump", 5, 0, e_channeldump, NULL);
|
||||
UnlockEventSystem();
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
#ifdef DYNAMIC_LINKING
|
||||
DLLFUNC int Mod_Unload(int module_unload)
|
||||
#else
|
||||
int channeldumper_Unload(int module_unload)
|
||||
#endif
|
||||
{
|
||||
tainted--;
|
||||
LockEventSystem();
|
||||
EventDel(ChannelDumpEvent);
|
||||
UnlockEventSystem();
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
EVENT(e_channeldump)
|
||||
{
|
||||
aChannel *chptr;
|
||||
unsigned int hashnum;
|
||||
Member *m;
|
||||
FILE *f;
|
||||
|
||||
f = fopen("ircd.channeldump", "w");
|
||||
if (!f)
|
||||
return;
|
||||
for (hashnum = 0; hashnum < CH_MAX; hashnum++)
|
||||
{
|
||||
for (chptr = (aChannel *)hash_get_chan_bucket(hashnum); chptr; chptr
|
||||
= chptr->hnextch)
|
||||
{
|
||||
if (SecretChannel(chptr))
|
||||
continue;
|
||||
fprintf(f, "C %s %s\r\n",
|
||||
chptr->chname, chptr->topic ? chptr->topic : "");
|
||||
for (m = chptr->members; m; m = m->next)
|
||||
fprintf(f, "M %s\r\n",
|
||||
m->cptr->name);
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
return;
|
||||
}
|
||||
@@ -1,151 +0,0 @@
|
||||
/*
|
||||
* Defizzer, 3rd party module for Unreal3.2-beta15 and up
|
||||
* (C) Carsten V. Munk 2003 <stskeeps@tspre.org>
|
||||
* You can do everything you desire with this module, under the condition that if you
|
||||
* meet the author, you must buy him a drink of his choice.
|
||||
* Copyright notice must ALWAYS stay in place.
|
||||
*
|
||||
* Removes unidented fizzer clients from the network pre-local-connect
|
||||
*/
|
||||
#include "config.h"
|
||||
#include "struct.h"
|
||||
#include "common.h"
|
||||
#include "sys.h"
|
||||
#include "numeric.h"
|
||||
#include "msg.h"
|
||||
#include "channel.h"
|
||||
#include <time.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef _WIN32
|
||||
#include <io.h>
|
||||
#endif
|
||||
#include <fcntl.h>
|
||||
#include "h.h"
|
||||
#ifdef STRIPBADWORDS
|
||||
#include "badwords.h"
|
||||
#endif
|
||||
#ifdef _WIN32
|
||||
#include "version.h"
|
||||
#endif
|
||||
DLLFUNC int h_defizzer_connect(aClient *sptr);
|
||||
|
||||
static Hook *LocConnect = NULL;
|
||||
ModuleInfo DefizzerModInfo;
|
||||
|
||||
#ifndef DYNAMIC_LINKING
|
||||
ModuleHeader defizzer_Header
|
||||
#else
|
||||
#define defizzer_Header Mod_Header
|
||||
ModuleHeader Mod_Header
|
||||
#endif
|
||||
= {
|
||||
"defizzer", /* Name of module */
|
||||
"$Id$", /* Version */
|
||||
"de-Fizzer", /* Short description of module */
|
||||
"3.2-b8-1",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
/* The purpose of these ifdefs, are that we can "static" link the ircd if we
|
||||
* want to
|
||||
*/
|
||||
|
||||
/* This is called on module init, before Server Ready */
|
||||
#ifdef DYNAMIC_LINKING
|
||||
DLLFUNC int Mod_Init(ModuleInfo *modinfo)
|
||||
#else
|
||||
int defizzer_Init(ModuleInfo *modinfo)
|
||||
#endif
|
||||
{
|
||||
bcopy(modinfo,&DefizzerModInfo,modinfo->size);
|
||||
LocConnect = HookAddEx(DefizzerModInfo.handle, HOOKTYPE_PRE_LOCAL_CONNECT, h_defizzer_connect);
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
/* Is first run when server is 100% ready */
|
||||
#ifdef DYNAMIC_LINKING
|
||||
DLLFUNC int Mod_Load(int module_load)
|
||||
#else
|
||||
int defizzer_Load(int module_load)
|
||||
#endif
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/* Called when module is unloaded */
|
||||
#ifdef DYNAMIC_LINKING
|
||||
DLLFUNC int Mod_Unload(int module_unload)
|
||||
#else
|
||||
int defizzer_Unload(int module_unload)
|
||||
#endif
|
||||
{
|
||||
HookDel(LocConnect);
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
static void ban_fizzer(aClient *cptr)
|
||||
{
|
||||
int i;
|
||||
aClient *acptr;
|
||||
char hostip[128], mo[100], mo2[100];
|
||||
char *tkllayer[9] = {
|
||||
me.name, /*0 server.name */
|
||||
"+", /*1 +|- */
|
||||
"z", /*2 G */
|
||||
"*", /*3 user */
|
||||
NULL, /*4 host */
|
||||
NULL,
|
||||
NULL, /*6 expire_at */
|
||||
NULL, /*7 set_at */
|
||||
NULL /*8 reason */
|
||||
};
|
||||
|
||||
strlcpy(hostip, Inet_ia2p(&cptr->ip), sizeof(hostip));
|
||||
|
||||
tkllayer[4] = hostip;
|
||||
tkllayer[5] = me.name;
|
||||
ircsprintf(mo, "%li", 86400 + TStime());
|
||||
ircsprintf(mo2, "%li", TStime());
|
||||
tkllayer[6] = mo;
|
||||
tkllayer[7] = mo2;
|
||||
tkllayer[8] = "Fizzer";
|
||||
m_tkl(&me, &me, 9, tkllayer);
|
||||
return;
|
||||
}
|
||||
|
||||
DLLFUNC int h_defizzer_connect(aClient *sptr)
|
||||
{
|
||||
char user[USERLEN + 1];
|
||||
char *infobackup;
|
||||
char *s1, *s2;
|
||||
|
||||
/*
|
||||
* Algorithm is basically like this, inspired by Zaphod:
|
||||
* Exchange first word with second in realname, prepend with
|
||||
* ~, then add in second word and first word upto limit of username.
|
||||
* sounds fun?
|
||||
*/
|
||||
infobackup = strdup(sptr->info);
|
||||
if (!(s1 = strtok(infobackup, " ")))
|
||||
{
|
||||
free(infobackup);
|
||||
return 0;
|
||||
}
|
||||
if (!(s2 = strtok(NULL, " ")))
|
||||
{
|
||||
free(infobackup);
|
||||
return 0;
|
||||
}
|
||||
snprintf(user, sizeof(user), "%s%s%s", (IDENT_CHECK ? "~" : ""), s2, s1);
|
||||
free(infobackup);
|
||||
if (!strcmp(user, sptr->user->username))
|
||||
{
|
||||
ircstp->is_ref++;
|
||||
ban_fizzer(sptr);
|
||||
return exit_client(sptr, sptr, &me, "Fizzer client");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
|
||||
These are 3rd party programs modules, or unsupported modules.
|
||||
|
||||
Custom modules are compiled by copying them to src/modules
|
||||
and running from the root directory
|
||||
|
||||
$ make custommodule MODULEFILE=modulename
|
||||
|
||||
This will produce a .so you can load. Upon load, this will show a "3" in the
|
||||
/version flags, as it contains third party modules (we do not support if it
|
||||
crashes because of the tainted module)
|
||||
|
||||
======================
|
||||
Name: burst.c
|
||||
Description:
|
||||
Little program to test out the different aspects of the unreal protocol and
|
||||
produce net.burst dumps
|
||||
|
||||
=======================
|
||||
Name: m_rawto.c
|
||||
Is a 3rd party module
|
||||
Description:
|
||||
|
||||
Implements the RAWTO command, will allow U:lines to send raw data to
|
||||
anywhere it pleases.
|
||||
|
||||
:uline.server RAWTO towho :what to send
|
||||
|
||||
=========================
|
||||
|
||||
Name: channeldumper.c
|
||||
Is a 3rd party module
|
||||
Description:
|
||||
|
||||
Dumps a list of non secret channels to ircd.channels or something every 5 seconds,
|
||||
|
||||
C #channel topic
|
||||
M member1
|
||||
M member2
|
||||
C #channel2 topic
|
||||
M member3
|
||||
|
||||
You can't rely on topic being there
|
||||
@@ -1,157 +0,0 @@
|
||||
/*
|
||||
* Unreal Internet Relay Chat Daemon, m_rawto.c
|
||||
* (C) 2002 Carsten V. Munk
|
||||
* RAWTO Module - 3rd party
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Use of this module will make it a 3rd party module, and will
|
||||
* add to your /version thing. We DO NOT SUPPORT THIS.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "struct.h"
|
||||
#include "common.h"
|
||||
#include "sys.h"
|
||||
#include "numeric.h"
|
||||
#include "msg.h"
|
||||
#include "channel.h"
|
||||
#include <time.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef _WIN32
|
||||
#include <io.h>
|
||||
#endif
|
||||
#include <fcntl.h>
|
||||
#include "h.h"
|
||||
#include "proto.h"
|
||||
#ifdef STRIPBADWORDS
|
||||
#include "badwords.h"
|
||||
#endif
|
||||
#ifdef _WIN32
|
||||
#include "version.h"
|
||||
#endif
|
||||
|
||||
DLLFUNC int m_rawto(aClient *cptr, aClient *sptr, int parc, char *parv[]);
|
||||
|
||||
/* Place includes here */
|
||||
#define MSG_RAWTO "RAWTO" /* */
|
||||
#define TOK_RAWTO "3A" /* 112 */
|
||||
|
||||
|
||||
#ifndef DYNAMIC_LINKING
|
||||
ModuleHeader m_rawto_Header
|
||||
#else
|
||||
#define m_rawto_Header Mod_Header
|
||||
ModuleHeader Mod_Header
|
||||
#endif
|
||||
= {
|
||||
"rawto", /* Name of module */
|
||||
"$Id$", /* Version */
|
||||
"command /rawto", /* Short description of module */
|
||||
"3.2-b5",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
/* The purpose of these ifdefs, are that we can "static" link the ircd if we
|
||||
* want to
|
||||
*/
|
||||
|
||||
/* This is called on module init, before Server Ready */
|
||||
#ifdef DYNAMIC_LINKING
|
||||
DLLFUNC int Mod_Init(int module_load)
|
||||
#else
|
||||
int m_rawto_Init(int module_load)
|
||||
#endif
|
||||
{
|
||||
/*
|
||||
* We call our add_Command crap here
|
||||
*/
|
||||
add_Command(MSG_RAWTO, TOK_RAWTO, m_rawto, 2);
|
||||
tainted++;
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
/* Is first run when server is 100% ready */
|
||||
#ifdef DYNAMIC_LINKING
|
||||
DLLFUNC int Mod_Load(int module_load)
|
||||
#else
|
||||
int m_rawto_Load(int module_load)
|
||||
#endif
|
||||
{
|
||||
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Called when module is unloaded */
|
||||
#ifdef DYNAMIC_LINKING
|
||||
DLLFUNC int Mod_Unload(int module_unload)
|
||||
#else
|
||||
int m_rawto_Unload(int module_unload)
|
||||
#endif
|
||||
{
|
||||
if (del_Command(MSG_RAWTO, TOK_RAWTO, m_rawto) < 0)
|
||||
{
|
||||
sendto_realops("Failed to delete commands when unloading %s",
|
||||
m_rawto_Header.name);
|
||||
}
|
||||
tainted--;
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* m_rawto Send a raw string to anywhere
|
||||
* if you are U:line
|
||||
* parv[0] = sender prefix
|
||||
* parv[1] = whoto
|
||||
* parv[2] = string
|
||||
*/
|
||||
|
||||
DLLFUNC int m_rawto(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
{
|
||||
aClient *acptr = NULL;
|
||||
if (!IsULine(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
|
||||
return -1;
|
||||
}
|
||||
if (parc < 3)
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
|
||||
me.name, parv[0], "RAWTO");
|
||||
return -1;
|
||||
}
|
||||
if ((acptr = find_client(parv[1], NULL)))
|
||||
{
|
||||
if (MyConnect(acptr))
|
||||
{
|
||||
sendto_one(acptr, "%s", parv[2]);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_one(acptr, ":%s %s %s :%s",
|
||||
parv[0], IsToken(acptr->from) ? TOK_RAWTO : MSG_RAWTO,
|
||||
parv[1], parv[2]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
-5563
File diff suppressed because it is too large
Load Diff
@@ -1,98 +0,0 @@
|
||||
# Makefile for regex.
|
||||
#
|
||||
# Copyright (C) 1992, 1993 Free Software Foundation, Inc.
|
||||
#
|
||||
# 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, 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.
|
||||
|
||||
version = 0.12
|
||||
|
||||
# You can define CPPFLAGS on the command line. Aside from system-specific
|
||||
# flags, you can define:
|
||||
# -DREGEX_MALLOC to use malloc/realloc/free instead of alloca.
|
||||
# -DDEBUG to enable the compiled pattern disassembler and execution
|
||||
# tracing; code runs substantially slower.
|
||||
# -DEXTRACT_MACROS to use the macros EXTRACT_* (as opposed to
|
||||
# the corresponding C procedures). If not -DDEBUG, the macros
|
||||
# are used.
|
||||
CPPFLAGS =
|
||||
|
||||
# Likewise, you can override CFLAGS to optimize, use -Wall, etc.
|
||||
CFLAGS = -g
|
||||
|
||||
# Ditto for LDFLAGS and LOADLIBES.
|
||||
LDFLAGS =
|
||||
LOADLIBES =
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
CC = @CC@
|
||||
DEFS = @DEFS@
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
subdirs = moo
|
||||
|
||||
default all:: regex.o
|
||||
.PHONY: default all
|
||||
|
||||
regex.o: regex.c regex.h
|
||||
$(CC) $(CFLAGS) $(CPPFLAGS) $(DEFS) -I. -I$(srcdir) -c $<
|
||||
|
||||
clean mostlyclean::
|
||||
rm -f *.o
|
||||
|
||||
distclean:: clean
|
||||
rm -f Makefile config.status
|
||||
|
||||
extraclean:: distclean
|
||||
rm -f patch* *~* *\#* *.orig *.rej *.bak core a.out
|
||||
|
||||
configure: configure.in
|
||||
autoconf
|
||||
|
||||
config.status: configure
|
||||
sh configure --no-create
|
||||
|
||||
Makefile: Makefile.in config.status
|
||||
sh config.status
|
||||
|
||||
makeargs = $(MFLAGS) CPPFLAGS='$(CPPFLAGS)' CFLAGS='$(CFLAGS)' CC='$(CC)' \
|
||||
DEFS='$(DEFS)' LDFLAGS='$(LDFLAGS)' LOADLIBES='$(LOADLIBES)'
|
||||
|
||||
default all install \
|
||||
mostlyclean clean distclean extraclean realclean \
|
||||
TAGS check::
|
||||
for d in $(subdirs); do (cd $$d; $(MAKE) $(makeargs) $@); done
|
||||
.PHONY: install mostlyclean clean distclean extraclean realclean TAGS check
|
||||
|
||||
# Prevent GNU make 3 from overflowing arg limit on system V.
|
||||
.NOEXPORT:
|
||||
|
||||
distfiles = AUTHORS ChangeLog COPYING INSTALL NEWS README \
|
||||
*.in configure regex.c regex.h
|
||||
distdir = regex-$(version)
|
||||
distargs = version=$(version) distdir=../$(distdir)/$$d
|
||||
dist: TAGS configure
|
||||
@echo "Version numbers in: Makefile.in, ChangeLog, NEWS,"
|
||||
@echo " regex.c, regex.h,"
|
||||
@echo " and doc/xregex.texi (if modified)."
|
||||
rm -rf $(distdir)
|
||||
mkdir $(distdir)
|
||||
ln $(distfiles) $(distdir)
|
||||
for d in $(subdirs); do (cd $$d; $(MAKE) $(distargs) dist); done
|
||||
tar czhf $(distdir).tar.Z $(distdir)
|
||||
rm -rf $(distdir)
|
||||
.PHONY: dist
|
||||
@@ -1,60 +0,0 @@
|
||||
This directory contains the GNU regex library. It is compliant with
|
||||
POSIX.2, except for internationalization features.
|
||||
|
||||
See the file NEWS for a list of major changes in the current release.
|
||||
|
||||
See the file INSTALL for compilation instructions. (The only thing
|
||||
installed is the documentation; regex.c is compiled into regex.o, but
|
||||
not installed anywhere.)
|
||||
|
||||
The subdirectory `doc' contains a (programmers') manual for the library.
|
||||
It's probably out-of-date. Improvements are welcome.
|
||||
|
||||
The subdirectory `test' contains the various tests we've written.
|
||||
|
||||
We know this code is not as fast as it might be. If you have specific
|
||||
suggestions, profiling results, or other such useful information to
|
||||
report, please do.
|
||||
|
||||
Emacs 18 is not going use this revised regex (but Emacs 19 will). If
|
||||
you want to try it with Emacs 18, apply the patch at the end of this
|
||||
file first.
|
||||
|
||||
Mail bug reports to bug-gnu-utils@prep.ai.mit.edu.
|
||||
|
||||
Please include an actual regular expression that fails (and the syntax
|
||||
used to compile it); without that, there's no way to reproduce the bug,
|
||||
so there's no way we can fix it. Even if you include a patch, also
|
||||
include the regular expression in error; otherwise, we can't know for
|
||||
sure what you're trying to fix.
|
||||
|
||||
Here is the patch to make this version of regex work with Emacs 18.
|
||||
|
||||
*** ORIG/search.c Tue Jan 8 13:04:55 1991
|
||||
--- search.c Sun Jan 5 10:57:00 1992
|
||||
***************
|
||||
*** 25,26 ****
|
||||
--- 25,28 ----
|
||||
#include "commands.h"
|
||||
+
|
||||
+ #include <sys/types.h>
|
||||
#include "regex.h"
|
||||
***************
|
||||
*** 477,479 ****
|
||||
/* really needed. */
|
||||
! && *(searchbuf.buffer) == (char) exactn /* first item is "exact match" */
|
||||
&& searchbuf.buffer[1] + 2 == searchbuf.used) /*first is ONLY item */
|
||||
--- 479,482 ----
|
||||
/* really needed. */
|
||||
! /* first item is "exact match" */
|
||||
! && *(searchbuf.buffer) == (char) RE_EXACTN_VALUE
|
||||
&& searchbuf.buffer[1] + 2 == searchbuf.used) /*first is ONLY item */
|
||||
***************
|
||||
*** 1273,1275 ****
|
||||
searchbuf.allocated = 100;
|
||||
! searchbuf.buffer = (char *) malloc (searchbuf.allocated);
|
||||
searchbuf.fastmap = search_fastmap;
|
||||
--- 1276,1278 ----
|
||||
searchbuf.allocated = 100;
|
||||
! searchbuf.buffer = (unsigned char *) malloc (searchbuf.allocated);
|
||||
searchbuf.fastmap = search_fastmap;
|
||||
Vendored
-462
@@ -1,462 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated automatically using autoconf.
|
||||
# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
|
||||
# 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, 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.
|
||||
|
||||
# Usage: configure [--srcdir=DIR] [--host=HOST] [--gas] [--nfp] [--no-create]
|
||||
# [--prefix=PREFIX] [--exec-prefix=PREFIX] [--with-PACKAGE] [TARGET]
|
||||
# Ignores all args except --srcdir, --prefix, --exec-prefix, --no-create, and
|
||||
# --with-PACKAGE unless this script has special code to handle it.
|
||||
|
||||
|
||||
for arg
|
||||
do
|
||||
# Handle --exec-prefix with a space before the argument.
|
||||
if test x$next_exec_prefix = xyes; then exec_prefix=$arg; next_exec_prefix=
|
||||
# Handle --host with a space before the argument.
|
||||
elif test x$next_host = xyes; then next_host=
|
||||
# Handle --prefix with a space before the argument.
|
||||
elif test x$next_prefix = xyes; then prefix=$arg; next_prefix=
|
||||
# Handle --srcdir with a space before the argument.
|
||||
elif test x$next_srcdir = xyes; then srcdir=$arg; next_srcdir=
|
||||
else
|
||||
case $arg in
|
||||
# For backward compatibility, also recognize exact --exec_prefix.
|
||||
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* | --exe=* | --ex=* | --e=*)
|
||||
exec_prefix=`echo $arg | sed 's/[-a-z_]*=//'` ;;
|
||||
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- | --exec | --exe | --ex | --e)
|
||||
next_exec_prefix=yes ;;
|
||||
|
||||
-gas | --gas | --ga | --g) ;;
|
||||
|
||||
-host=* | --host=* | --hos=* | --ho=* | --h=*) ;;
|
||||
-host | --host | --hos | --ho | --h)
|
||||
next_host=yes ;;
|
||||
|
||||
-nfp | --nfp | --nf) ;;
|
||||
|
||||
-no-create | --no-create | --no-creat | --no-crea | --no-cre | --no-cr | --no-c | --no- | --no)
|
||||
no_create=1 ;;
|
||||
|
||||
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
|
||||
prefix=`echo $arg | sed 's/[-a-z_]*=//'` ;;
|
||||
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
|
||||
next_prefix=yes ;;
|
||||
|
||||
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=* | --s=*)
|
||||
srcdir=`echo $arg | sed 's/[-a-z_]*=//'` ;;
|
||||
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr | --s)
|
||||
next_srcdir=yes ;;
|
||||
|
||||
-with-* | --with-*)
|
||||
package=`echo $arg|sed 's/-*with-//'`
|
||||
# Delete all the valid chars; see if any are left.
|
||||
if test -n "`echo $package|sed 's/[-a-zA-Z0-9_]*//g'`"; then
|
||||
echo "configure: $package: invalid package name" >&2; exit 1
|
||||
fi
|
||||
eval "with_`echo $package|sed s/-/_/g`=1" ;;
|
||||
|
||||
*) ;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
|
||||
trap 'rm -f conftest* core; exit 1' 1 3 15
|
||||
|
||||
rm -f conftest*
|
||||
compile='${CC-cc} $CFLAGS $DEFS conftest.c -o conftest $LIBS >/dev/null 2>&1'
|
||||
|
||||
# A filename unique to this package, relative to the directory that
|
||||
# configure is in, which we can look for to find out if srcdir is correct.
|
||||
unique_file=regex.c
|
||||
|
||||
# Find the source files, if location was not specified.
|
||||
if test -z "$srcdir"; then
|
||||
srcdirdefaulted=yes
|
||||
# Try the directory containing this script, then `..'.
|
||||
prog=$0
|
||||
confdir=`echo $prog|sed 's%/[^/][^/]*$%%'`
|
||||
test "X$confdir" = "X$prog" && confdir=.
|
||||
srcdir=$confdir
|
||||
if test ! -r $srcdir/$unique_file; then
|
||||
srcdir=..
|
||||
fi
|
||||
fi
|
||||
if test ! -r $srcdir/$unique_file; then
|
||||
if test x$srcdirdefaulted = xyes; then
|
||||
echo "configure: Can not find sources in \`${confdir}' or \`..'." 1>&2
|
||||
else
|
||||
echo "configure: Can not find sources in \`${srcdir}'." 1>&2
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
# Preserve a srcdir of `.' to avoid automounter screwups with pwd.
|
||||
# But we can't avoid them for `..', to make subdirectories work.
|
||||
case $srcdir in
|
||||
.|/*|~*) ;;
|
||||
*) srcdir=`cd $srcdir; pwd` ;; # Make relative path absolute.
|
||||
esac
|
||||
|
||||
|
||||
if test -z "$CC"; then
|
||||
echo checking for gcc
|
||||
saveifs="$IFS"; IFS="${IFS}:"
|
||||
for dir in $PATH; do
|
||||
test -z "$dir" && dir=.
|
||||
if test -f $dir/gcc; then
|
||||
CC="gcc"
|
||||
break
|
||||
fi
|
||||
done
|
||||
IFS="$saveifs"
|
||||
fi
|
||||
test -z "$CC" && CC="cc"
|
||||
|
||||
# Find out if we are using GNU C, under whatever name.
|
||||
cat > conftest.c <<EOF
|
||||
#ifdef __GNUC__
|
||||
yes
|
||||
#endif
|
||||
EOF
|
||||
${CC-cc} -E conftest.c > conftest.out 2>&1
|
||||
if egrep yes conftest.out >/dev/null 2>&1; then
|
||||
GCC=1 # For later tests.
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
# Make sure to not get the incompatible SysV /etc/install and
|
||||
# /usr/sbin/install, which might be in PATH before a BSD-like install,
|
||||
# or the SunOS /usr/etc/install directory, or the AIX /bin/install,
|
||||
# or the AFS install, which mishandles nonexistent args. (Sigh.)
|
||||
if test -z "$INSTALL"; then
|
||||
echo checking for install
|
||||
saveifs="$IFS"; IFS="${IFS}:"
|
||||
for dir in $PATH; do
|
||||
test -z "$dir" && dir=.
|
||||
case $dir in
|
||||
/etc|/usr/sbin|/usr/etc|/usr/afsws/bin) ;;
|
||||
*)
|
||||
if test -f $dir/install; then
|
||||
if grep dspmsg $dir/install >/dev/null 2>&1; then
|
||||
: # AIX
|
||||
else
|
||||
INSTALL="$dir/install -c"
|
||||
INSTALL_PROGRAM='$(INSTALL)'
|
||||
INSTALL_DATA='$(INSTALL) -m 644'
|
||||
break
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
IFS="$saveifs"
|
||||
fi
|
||||
INSTALL=${INSTALL-cp}
|
||||
INSTALL_PROGRAM=${INSTALL_PROGRAM-'$(INSTALL)'}
|
||||
INSTALL_DATA=${INSTALL_DATA-'$(INSTALL)'}
|
||||
|
||||
|
||||
echo checking for AIX
|
||||
echo checking how to run the C preprocessor
|
||||
if test -z "$CPP"; then
|
||||
CPP='${CC-cc} -E'
|
||||
cat > conftest.c <<EOF
|
||||
#include <stdio.h>
|
||||
EOF
|
||||
err=`eval "$CPP $DEFS conftest.c 2>&1 >/dev/null"`
|
||||
if test -z "$err"; then
|
||||
:
|
||||
else
|
||||
CPP=/lib/cpp
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
|
||||
cat > conftest.c <<EOF
|
||||
#ifdef _AIX
|
||||
yes
|
||||
#endif
|
||||
|
||||
EOF
|
||||
eval "$CPP $DEFS conftest.c > conftest.out 2>&1"
|
||||
if egrep "yes" conftest.out >/dev/null 2>&1; then
|
||||
DEFS="$DEFS -D_ALL_SOURCE=1"
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
|
||||
echo checking for DYNIX/ptx libseq
|
||||
cat > conftest.c <<EOF
|
||||
#if defined(_SEQUENT_)
|
||||
yes
|
||||
#endif
|
||||
|
||||
EOF
|
||||
eval "$CPP $DEFS conftest.c > conftest.out 2>&1"
|
||||
if egrep "yes" conftest.out >/dev/null 2>&1; then
|
||||
SEQUENT=1
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
test -n "$SEQUENT" && test -f /usr/lib/libseq.a &&
|
||||
LIBS="$LIBS -lseq"
|
||||
|
||||
echo checking for POSIXized ISC
|
||||
if test -d /etc/conf/kconfig.d &&
|
||||
grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
|
||||
then
|
||||
ISC=1 # If later tests want to check for ISC.
|
||||
DEFS="$DEFS -D_POSIX_SOURCE=1"
|
||||
if test -n "$GCC"; then
|
||||
CC="$CC -posix"
|
||||
else
|
||||
CC="$CC -Xp"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo checking for minix/config.h
|
||||
cat > conftest.c <<EOF
|
||||
#include <minix/config.h>
|
||||
EOF
|
||||
err=`eval "$CPP $DEFS conftest.c 2>&1 >/dev/null"`
|
||||
if test -z "$err"; then
|
||||
MINIX=1
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
# The Minix shell can't assign to the same variable on the same line!
|
||||
if test -n "$MINIX"; then
|
||||
DEFS="$DEFS -D_POSIX_SOURCE=1"
|
||||
DEFS="$DEFS -D_POSIX_1_SOURCE=2"
|
||||
DEFS="$DEFS -D_MINIX=1"
|
||||
fi
|
||||
|
||||
|
||||
echo checking for ANSI C header files
|
||||
cat > conftest.c <<EOF
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <float.h>
|
||||
EOF
|
||||
err=`eval "$CPP $DEFS conftest.c 2>&1 >/dev/null"`
|
||||
if test -z "$err"; then
|
||||
# SunOS string.h does not declare mem*, contrary to ANSI.
|
||||
echo '#include <string.h>' > conftest.c
|
||||
eval "$CPP $DEFS conftest.c > conftest.out 2>&1"
|
||||
if egrep "memchr" conftest.out >/dev/null 2>&1; then
|
||||
# SGI's /bin/cc from Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
|
||||
cat > conftest.c <<EOF
|
||||
#include <ctype.h>
|
||||
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
|
||||
#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
|
||||
#define XOR(e,f) (((e) && !(f)) || (!(e) && (f)))
|
||||
int main () { int i; for (i = 0; i < 256; i++)
|
||||
if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
|
||||
exit (0); }
|
||||
|
||||
EOF
|
||||
eval $compile
|
||||
if test -s conftest && (./conftest; exit) 2>/dev/null; then
|
||||
DEFS="$DEFS -DSTDC_HEADERS=1"
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
for hdr in string.h
|
||||
do
|
||||
trhdr=HAVE_`echo $hdr | tr '[a-z]./' '[A-Z]__'`
|
||||
echo checking for ${hdr}
|
||||
cat > conftest.c <<EOF
|
||||
#include <${hdr}>
|
||||
EOF
|
||||
err=`eval "$CPP $DEFS conftest.c 2>&1 >/dev/null"`
|
||||
if test -z "$err"; then
|
||||
DEFS="$DEFS -D${trhdr}=1"
|
||||
fi
|
||||
rm -f conftest*
|
||||
done
|
||||
|
||||
|
||||
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
|
||||
# for constant arguments. Useless!
|
||||
echo checking for working alloca.h
|
||||
cat > conftest.c <<EOF
|
||||
#include <alloca.h>
|
||||
main() { exit(0); }
|
||||
t() { char *p = alloca(2 * sizeof(int)); }
|
||||
EOF
|
||||
if eval $compile; then
|
||||
DEFS="$DEFS -DHAVE_ALLOCA_H=1"
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
decl="#ifdef __GNUC__
|
||||
#define alloca __builtin_alloca
|
||||
#else
|
||||
#if HAVE_ALLOCA_H
|
||||
#include <alloca.h>
|
||||
#else
|
||||
#ifdef _AIX
|
||||
#pragma alloca
|
||||
#else
|
||||
char *alloca ();
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
"
|
||||
echo checking for alloca
|
||||
cat > conftest.c <<EOF
|
||||
$decl
|
||||
main() { exit(0); }
|
||||
t() { char *p = (char *) alloca(1); }
|
||||
EOF
|
||||
if eval $compile; then
|
||||
:
|
||||
else
|
||||
alloca_missing=1
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
if test -n "$alloca_missing"; then
|
||||
# The SVR3 libPW and SVR4 libucb both contain incompatible functions
|
||||
# that cause trouble. Some versions do not even contain alloca or
|
||||
# contain a buggy version. If you still want to use their alloca,
|
||||
# use ar to extract alloca.o from them instead of compiling alloca.c.
|
||||
ALLOCA=alloca.o
|
||||
fi
|
||||
|
||||
prog='/* Ultrix mips cc rejects this. */
|
||||
typedef int charset[2]; const charset x;
|
||||
/* SunOS 4.1.1 cc rejects this. */
|
||||
char const *const *p;
|
||||
char **p2;
|
||||
/* HPUX 7.0 cc rejects these. */
|
||||
++p;
|
||||
p2 = (char const* const*) p;'
|
||||
echo checking for working const
|
||||
cat > conftest.c <<EOF
|
||||
|
||||
main() { exit(0); }
|
||||
t() { $prog }
|
||||
EOF
|
||||
if eval $compile; then
|
||||
:
|
||||
else
|
||||
DEFS="$DEFS -Dconst="
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
|
||||
if test -z "$prefix"
|
||||
then
|
||||
echo checking for gcc to derive installation directory prefix
|
||||
saveifs="$IFS"; IFS="$IFS:"
|
||||
for dir in $PATH; do
|
||||
test -z "$dir" && dir=.
|
||||
if test $dir != . && test -f $dir/gcc; then
|
||||
# Not all systems have dirname.
|
||||
prefix=`echo $dir|sed 's%/[^/][^/]*$%%'`
|
||||
break
|
||||
fi
|
||||
done
|
||||
IFS="$saveifs"
|
||||
fi
|
||||
|
||||
|
||||
if test -n "$prefix"; then
|
||||
test -z "$exec_prefix" && exec_prefix='${prefix}'
|
||||
prsub="s%^prefix\\([ ]*\\)=\\([ ]*\\).*$%prefix\\1=\\2$prefix%"
|
||||
fi
|
||||
if test -n "$exec_prefix"; then
|
||||
prsub="$prsub
|
||||
s%^exec_prefix\\([ ]*\\)=\\([ ]*\\).*$%\
|
||||
exec_prefix\\1=\\2$exec_prefix%"
|
||||
fi
|
||||
|
||||
trap 'rm -f config.status; exit 1' 1 3 15
|
||||
echo creating config.status
|
||||
rm -f config.status
|
||||
cat > config.status <<EOF
|
||||
#!/bin/sh
|
||||
# Generated automatically by configure.
|
||||
# Run this file to recreate the current configuration.
|
||||
# This directory was configured as follows,
|
||||
# on host `(hostname || uname -n) 2>/dev/null`:
|
||||
#
|
||||
# $0 $*
|
||||
|
||||
for arg
|
||||
do
|
||||
case "\$arg" in
|
||||
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
|
||||
exec /bin/sh $0 $* ;;
|
||||
*) echo "Usage: config.status --recheck" 2>&1; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
trap 'rm -f Makefile; exit 1' 1 3 15
|
||||
CC='$CC'
|
||||
INSTALL='$INSTALL'
|
||||
INSTALL_PROGRAM='$INSTALL_PROGRAM'
|
||||
INSTALL_DATA='$INSTALL_DATA'
|
||||
CPP='$CPP'
|
||||
ALLOCA='$ALLOCA'
|
||||
LIBS='$LIBS'
|
||||
srcdir='$srcdir'
|
||||
DEFS='$DEFS'
|
||||
prefix='$prefix'
|
||||
exec_prefix='$exec_prefix'
|
||||
prsub='$prsub'
|
||||
EOF
|
||||
cat >> config.status <<\EOF
|
||||
|
||||
top_srcdir=$srcdir
|
||||
for file in .. Makefile; do if [ "x$file" != "x.." ]; then
|
||||
srcdir=$top_srcdir
|
||||
# Remove last slash and all that follows it. Not all systems have dirname.
|
||||
dir=`echo $file|sed 's%/[^/][^/]*$%%'`
|
||||
if test "$dir" != "$file"; then
|
||||
test "$top_srcdir" != . && srcdir=$top_srcdir/$dir
|
||||
test ! -d $dir && mkdir $dir
|
||||
fi
|
||||
echo creating $file
|
||||
rm -f $file
|
||||
echo "# Generated automatically from `echo $file|sed 's|.*/||'`.in by configure." > $file
|
||||
sed -e "
|
||||
$prsub
|
||||
s%@CC@%$CC%g
|
||||
s%@INSTALL@%$INSTALL%g
|
||||
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
|
||||
s%@INSTALL_DATA@%$INSTALL_DATA%g
|
||||
s%@CPP@%$CPP%g
|
||||
s%@ALLOCA@%$ALLOCA%g
|
||||
s%@LIBS@%$LIBS%g
|
||||
s%@srcdir@%$srcdir%g
|
||||
s%@DEFS@%$DEFS%
|
||||
" $top_srcdir/${file}.in >> $file
|
||||
fi; done
|
||||
|
||||
exit 0
|
||||
EOF
|
||||
chmod +x config.status
|
||||
test -n "$no_create" || ./config.status
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(regex.c)
|
||||
|
||||
AC_PROG_CC
|
||||
AC_PROG_INSTALL
|
||||
|
||||
dnl I'm not sure if AC_AIX and AC_DYNIX_SEQ are really necessary. The
|
||||
dnl Autoconf documentation isn't specific about which BSD functions they
|
||||
dnl provide.
|
||||
AC_AIX
|
||||
AC_DYNIX_SEQ
|
||||
AC_ISC_POSIX
|
||||
AC_MINIX
|
||||
|
||||
AC_STDC_HEADERS
|
||||
AC_HAVE_HEADERS(string.h)
|
||||
|
||||
AC_ALLOCA
|
||||
AC_CONST
|
||||
|
||||
AC_PREFIX(gcc)
|
||||
|
||||
AC_OUTPUT(Makefile doc/Makefile test/Makefile)
|
||||
@@ -1,4 +0,0 @@
|
||||
clean:
|
||||
default:
|
||||
all:
|
||||
echo "."
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,490 +0,0 @@
|
||||
/* Definitions for data structures and routines for the regular
|
||||
expression library, version 0.12.
|
||||
|
||||
Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
|
||||
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, 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. */
|
||||
|
||||
#ifndef __REGEXP_LIBRARY_H__
|
||||
#define __REGEXP_LIBRARY_H__
|
||||
|
||||
/* POSIX says that <sys/types.h> must be included (by the caller) before
|
||||
<regex.h>. */
|
||||
|
||||
#ifdef VMS
|
||||
/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
|
||||
should be there. */
|
||||
#include <stddef.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* The following bits are used to determine the regexp syntax we
|
||||
recognize. The set/not-set meanings are chosen so that Emacs syntax
|
||||
remains the value 0. The bits are given in alphabetical order, and
|
||||
the definitions shifted by one from the previous bit; thus, when we
|
||||
add or remove a bit, only one other definition need change. */
|
||||
typedef unsigned reg_syntax_t;
|
||||
|
||||
/* If this bit is not set, then \ inside a bracket expression is literal.
|
||||
If set, then such a \ quotes the following character. */
|
||||
#define RE_BACKSLASH_ESCAPE_IN_LISTS (1)
|
||||
|
||||
/* If this bit is not set, then + and ? are operators, and \+ and \? are
|
||||
literals.
|
||||
If set, then \+ and \? are operators and + and ? are literals. */
|
||||
#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
|
||||
|
||||
/* If this bit is set, then character classes are supported. They are:
|
||||
[:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
|
||||
[:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
|
||||
If not set, then character classes are not supported. */
|
||||
#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
|
||||
|
||||
/* If this bit is set, then ^ and $ are always anchors (outside bracket
|
||||
expressions, of course).
|
||||
If this bit is not set, then it depends:
|
||||
^ is an anchor if it is at the beginning of a regular
|
||||
expression or after an open-group or an alternation operator;
|
||||
$ is an anchor if it is at the end of a regular expression, or
|
||||
before a close-group or an alternation operator.
|
||||
|
||||
This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
|
||||
POSIX draft 11.2 says that * etc. in leading positions is undefined.
|
||||
We already implemented a previous draft which made those constructs
|
||||
invalid, though, so we haven't changed the code back. */
|
||||
#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
|
||||
|
||||
/* If this bit is set, then special characters are always special
|
||||
regardless of where they are in the pattern.
|
||||
If this bit is not set, then special characters are special only in
|
||||
some contexts; otherwise they are ordinary. Specifically,
|
||||
* + ? and intervals are only special when not after the beginning,
|
||||
open-group, or alternation operator. */
|
||||
#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
|
||||
|
||||
/* If this bit is set, then *, +, ?, and { cannot be first in an re or
|
||||
immediately after an alternation or begin-group operator. */
|
||||
#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
|
||||
|
||||
/* If this bit is set, then . matches newline.
|
||||
If not set, then it doesn't. */
|
||||
#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
|
||||
|
||||
/* If this bit is set, then . doesn't match NUL.
|
||||
If not set, then it does. */
|
||||
#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
|
||||
|
||||
/* If this bit is set, nonmatching lists [^...] do not match newline.
|
||||
If not set, they do. */
|
||||
#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
|
||||
|
||||
/* If this bit is set, either \{...\} or {...} defines an
|
||||
interval, depending on RE_NO_BK_BRACES.
|
||||
If not set, \{, \}, {, and } are literals. */
|
||||
#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
|
||||
|
||||
/* If this bit is set, +, ? and | aren't recognized as operators.
|
||||
If not set, they are. */
|
||||
#define RE_LIMITED_OPS (RE_INTERVALS << 1)
|
||||
|
||||
/* If this bit is set, newline is an alternation operator.
|
||||
If not set, newline is literal. */
|
||||
#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
|
||||
|
||||
/* If this bit is set, then `{...}' defines an interval, and \{ and \}
|
||||
are literals.
|
||||
If not set, then `\{...\}' defines an interval. */
|
||||
#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
|
||||
|
||||
/* If this bit is set, (...) defines a group, and \( and \) are literals.
|
||||
If not set, \(...\) defines a group, and ( and ) are literals. */
|
||||
#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
|
||||
|
||||
/* If this bit is set, then \<digit> matches <digit>.
|
||||
If not set, then \<digit> is a back-reference. */
|
||||
#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
|
||||
|
||||
/* If this bit is set, then | is an alternation operator, and \| is literal.
|
||||
If not set, then \| is an alternation operator, and | is literal. */
|
||||
#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
|
||||
|
||||
/* If this bit is set, then an ending range point collating higher
|
||||
than the starting range point, as in [z-a], is invalid.
|
||||
If not set, then when ending range point collates higher than the
|
||||
starting range point, the range is ignored. */
|
||||
#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
|
||||
|
||||
/* If this bit is set, then an unmatched ) is ordinary.
|
||||
If not set, then an unmatched ) is invalid. */
|
||||
#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
|
||||
|
||||
/* This global variable defines the particular regexp syntax to use (for
|
||||
some interfaces). When a regexp is compiled, the syntax used is
|
||||
stored in the pattern buffer, so changing this does not affect
|
||||
already-compiled regexps. */
|
||||
extern reg_syntax_t re_syntax_options;
|
||||
|
||||
/* Define combinations of the above bits for the standard possibilities.
|
||||
(The [[[ comments delimit what gets put into the Texinfo file, so
|
||||
don't delete them!) */
|
||||
/* [[[begin syntaxes]]] */
|
||||
#define RE_SYNTAX_EMACS 0
|
||||
|
||||
#define RE_SYNTAX_AWK \
|
||||
(RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \
|
||||
| RE_NO_BK_PARENS | RE_NO_BK_REFS \
|
||||
| RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \
|
||||
| RE_UNMATCHED_RIGHT_PAREN_ORD)
|
||||
|
||||
#define RE_SYNTAX_POSIX_AWK \
|
||||
(RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS)
|
||||
|
||||
#define RE_SYNTAX_GREP \
|
||||
(RE_BK_PLUS_QM | RE_CHAR_CLASSES \
|
||||
| RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \
|
||||
| RE_NEWLINE_ALT)
|
||||
|
||||
#define RE_SYNTAX_EGREP \
|
||||
(RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \
|
||||
| RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \
|
||||
| RE_NEWLINE_ALT | RE_NO_BK_PARENS \
|
||||
| RE_NO_BK_VBAR)
|
||||
|
||||
#define RE_SYNTAX_POSIX_EGREP \
|
||||
(RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES)
|
||||
|
||||
/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */
|
||||
#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
|
||||
|
||||
#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
|
||||
|
||||
/* Syntax bits common to both basic and extended POSIX regex syntax. */
|
||||
#define _RE_SYNTAX_POSIX_COMMON \
|
||||
(RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \
|
||||
| RE_INTERVALS | RE_NO_EMPTY_RANGES)
|
||||
|
||||
#define RE_SYNTAX_POSIX_BASIC \
|
||||
(_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
|
||||
|
||||
/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
|
||||
RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this
|
||||
isn't minimal, since other operators, such as \`, aren't disabled. */
|
||||
#define RE_SYNTAX_POSIX_MINIMAL_BASIC \
|
||||
(_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
|
||||
|
||||
#define RE_SYNTAX_POSIX_EXTENDED \
|
||||
(_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
|
||||
| RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
|
||||
| RE_NO_BK_PARENS | RE_NO_BK_VBAR \
|
||||
| RE_UNMATCHED_RIGHT_PAREN_ORD)
|
||||
|
||||
/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
|
||||
replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */
|
||||
#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \
|
||||
(_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
|
||||
| RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \
|
||||
| RE_NO_BK_PARENS | RE_NO_BK_REFS \
|
||||
| RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
|
||||
/* [[[end syntaxes]]] */
|
||||
|
||||
/* Maximum number of duplicates an interval can allow. Some systems
|
||||
(erroneously) define this in other header files, but we want our
|
||||
value, so remove any previous define. */
|
||||
#ifdef RE_DUP_MAX
|
||||
#undef RE_DUP_MAX
|
||||
#endif
|
||||
#define RE_DUP_MAX ((1 << 15) - 1)
|
||||
|
||||
|
||||
/* POSIX `cflags' bits (i.e., information for `regcomp'). */
|
||||
|
||||
/* If this bit is set, then use extended regular expression syntax.
|
||||
If not set, then use basic regular expression syntax. */
|
||||
#define REG_EXTENDED 1
|
||||
|
||||
/* If this bit is set, then ignore case when matching.
|
||||
If not set, then case is significant. */
|
||||
#define REG_ICASE (REG_EXTENDED << 1)
|
||||
|
||||
/* If this bit is set, then anchors do not match at newline
|
||||
characters in the string.
|
||||
If not set, then anchors do match at newlines. */
|
||||
#define REG_NEWLINE (REG_ICASE << 1)
|
||||
|
||||
/* If this bit is set, then report only success or fail in regexec.
|
||||
If not set, then returns differ between not matching and errors. */
|
||||
#define REG_NOSUB (REG_NEWLINE << 1)
|
||||
|
||||
|
||||
/* POSIX `eflags' bits (i.e., information for regexec). */
|
||||
|
||||
/* If this bit is set, then the beginning-of-line operator doesn't match
|
||||
the beginning of the string (presumably because it's not the
|
||||
beginning of a line).
|
||||
If not set, then the beginning-of-line operator does match the
|
||||
beginning of the string. */
|
||||
#define REG_NOTBOL 1
|
||||
|
||||
/* Like REG_NOTBOL, except for the end-of-line. */
|
||||
#define REG_NOTEOL (1 << 1)
|
||||
|
||||
|
||||
/* If any error codes are removed, changed, or added, update the
|
||||
`re_error_msg' table in regex.c. */
|
||||
typedef enum
|
||||
{
|
||||
REG_NOERROR = 0, /* Success. */
|
||||
REG_NOMATCH, /* Didn't find a match (for regexec). */
|
||||
|
||||
/* POSIX regcomp return error codes. (In the order listed in the
|
||||
standard.) */
|
||||
REG_BADPAT, /* Invalid pattern. */
|
||||
REG_ECOLLATE, /* Not implemented. */
|
||||
REG_ECTYPE, /* Invalid character class name. */
|
||||
REG_EESCAPE, /* Trailing backslash. */
|
||||
REG_ESUBREG, /* Invalid back reference. */
|
||||
REG_EBRACK, /* Unmatched left bracket. */
|
||||
REG_EPAREN, /* Parenthesis imbalance. */
|
||||
REG_EBRACE, /* Unmatched \{. */
|
||||
REG_BADBR, /* Invalid contents of \{\}. */
|
||||
REG_ERANGE, /* Invalid range end. */
|
||||
REG_ESPACE, /* Ran out of memory. */
|
||||
REG_BADRPT, /* No preceding re for repetition op. */
|
||||
|
||||
/* Error codes we've added. */
|
||||
REG_EEND, /* Premature end. */
|
||||
REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */
|
||||
REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */
|
||||
} reg_errcode_t;
|
||||
|
||||
/* This data structure represents a compiled pattern. Before calling
|
||||
the pattern compiler, the fields `buffer', `allocated', `fastmap',
|
||||
`translate', and `no_sub' can be set. After the pattern has been
|
||||
compiled, the `re_nsub' field is available. All other fields are
|
||||
private to the regex routines. */
|
||||
|
||||
struct re_pattern_buffer
|
||||
{
|
||||
/* [[[begin pattern_buffer]]] */
|
||||
/* Space that holds the compiled pattern. It is declared as
|
||||
`unsigned char *' because its elements are
|
||||
sometimes used as array indexes. */
|
||||
unsigned char *buffer;
|
||||
|
||||
/* Number of bytes to which `buffer' points. */
|
||||
unsigned long allocated;
|
||||
|
||||
/* Number of bytes actually used in `buffer'. */
|
||||
unsigned long used;
|
||||
|
||||
/* Syntax setting with which the pattern was compiled. */
|
||||
reg_syntax_t syntax;
|
||||
|
||||
/* Pointer to a fastmap, if any, otherwise zero. re_search uses
|
||||
the fastmap, if there is one, to skip over impossible
|
||||
starting points for matches. */
|
||||
char *fastmap;
|
||||
|
||||
/* Either a translate table to apply to all characters before
|
||||
comparing them, or zero for no translation. The translation
|
||||
is applied to a pattern when it is compiled and to a string
|
||||
when it is matched. */
|
||||
char *translate;
|
||||
|
||||
/* Number of subexpressions found by the compiler. */
|
||||
size_t re_nsub;
|
||||
|
||||
/* Zero if this pattern cannot match the empty string, one else.
|
||||
Well, in truth it's used only in `re_search_2', to see
|
||||
whether or not we should use the fastmap, so we don't set
|
||||
this absolutely perfectly; see `re_compile_fastmap' (the
|
||||
`duplicate' case). */
|
||||
unsigned can_be_null : 1;
|
||||
|
||||
/* If REGS_UNALLOCATED, allocate space in the `regs' structure
|
||||
for `max (RE_NREGS, re_nsub + 1)' groups.
|
||||
If REGS_REALLOCATE, reallocate space if necessary.
|
||||
If REGS_FIXED, use what's there. */
|
||||
#define REGS_UNALLOCATED 0
|
||||
#define REGS_REALLOCATE 1
|
||||
#define REGS_FIXED 2
|
||||
unsigned regs_allocated : 2;
|
||||
|
||||
/* Set to zero when `regex_compile' compiles a pattern; set to one
|
||||
by `re_compile_fastmap' if it updates the fastmap. */
|
||||
unsigned fastmap_accurate : 1;
|
||||
|
||||
/* If set, `re_match_2' does not return information about
|
||||
subexpressions. */
|
||||
unsigned no_sub : 1;
|
||||
|
||||
/* If set, a beginning-of-line anchor doesn't match at the
|
||||
beginning of the string. */
|
||||
unsigned not_bol : 1;
|
||||
|
||||
/* Similarly for an end-of-line anchor. */
|
||||
unsigned not_eol : 1;
|
||||
|
||||
/* If true, an anchor at a newline matches. */
|
||||
unsigned newline_anchor : 1;
|
||||
|
||||
/* [[[end pattern_buffer]]] */
|
||||
};
|
||||
|
||||
typedef struct re_pattern_buffer regex_t;
|
||||
|
||||
|
||||
/* search.c (search_buffer) in Emacs needs this one opcode value. It is
|
||||
defined both in `regex.c' and here. */
|
||||
#define RE_EXACTN_VALUE 1
|
||||
|
||||
/* Type for byte offsets within the string. POSIX mandates this. */
|
||||
typedef int regoff_t;
|
||||
|
||||
|
||||
/* This is the structure we store register match data in. See
|
||||
regex.texinfo for a full description of what registers match. */
|
||||
struct re_registers
|
||||
{
|
||||
unsigned num_regs;
|
||||
regoff_t *start;
|
||||
regoff_t *end;
|
||||
};
|
||||
|
||||
|
||||
/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
|
||||
`re_match_2' returns information about at least this many registers
|
||||
the first time a `regs' structure is passed. */
|
||||
#ifndef RE_NREGS
|
||||
#define RE_NREGS 30
|
||||
#endif
|
||||
|
||||
|
||||
/* POSIX specification for registers. Aside from the different names than
|
||||
`re_registers', POSIX uses an array of structures, instead of a
|
||||
structure of arrays. */
|
||||
typedef struct
|
||||
{
|
||||
regoff_t rm_so; /* Byte offset from string's start to substring's start. */
|
||||
regoff_t rm_eo; /* Byte offset from string's start to substring's end. */
|
||||
} regmatch_t;
|
||||
|
||||
/* Declarations for routines. */
|
||||
|
||||
/* To avoid duplicating every routine declaration -- once with a
|
||||
prototype (if we are ANSI), and once without (if we aren't) -- we
|
||||
use the following macro to declare argument types. This
|
||||
unfortunately clutters up the declarations a bit, but I think it's
|
||||
worth it. */
|
||||
|
||||
#if __STDC__
|
||||
|
||||
#define _RE_ARGS(args) args
|
||||
|
||||
#else /* not __STDC__ */
|
||||
|
||||
#define _RE_ARGS(args) ()
|
||||
|
||||
#endif /* not __STDC__ */
|
||||
|
||||
/* Sets the current default syntax to SYNTAX, and return the old syntax.
|
||||
You can also simply assign to the `re_syntax_options' variable. */
|
||||
extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
|
||||
|
||||
/* Compile the regular expression PATTERN, with length LENGTH
|
||||
and syntax given by the global `re_syntax_options', into the buffer
|
||||
BUFFER. Return NULL if successful, and an error string if not. */
|
||||
extern const char *re_compile_pattern
|
||||
_RE_ARGS ((const char *pattern, int length,
|
||||
struct re_pattern_buffer *buffer));
|
||||
|
||||
|
||||
/* Compile a fastmap for the compiled pattern in BUFFER; used to
|
||||
accelerate searches. Return 0 if successful and -2 if was an
|
||||
internal error. */
|
||||
extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
|
||||
|
||||
|
||||
/* Search in the string STRING (with length LENGTH) for the pattern
|
||||
compiled into BUFFER. Start searching at position START, for RANGE
|
||||
characters. Return the starting position of the match, -1 for no
|
||||
match, or -2 for an internal error. Also return register
|
||||
information in REGS (if REGS and BUFFER->no_sub are nonzero). */
|
||||
extern int re_search
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
|
||||
int length, int start, int range, struct re_registers *regs));
|
||||
|
||||
|
||||
/* Like `re_search', but search in the concatenation of STRING1 and
|
||||
STRING2. Also, stop searching at index START + STOP. */
|
||||
extern int re_search_2
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
|
||||
int length1, const char *string2, int length2,
|
||||
int start, int range, struct re_registers *regs, int stop));
|
||||
|
||||
|
||||
/* Like `re_search', but return how many characters in STRING the regexp
|
||||
in BUFFER matched, starting at position START. */
|
||||
extern int re_match
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
|
||||
int length, int start, struct re_registers *regs));
|
||||
|
||||
|
||||
/* Relates to `re_match' as `re_search_2' relates to `re_search'. */
|
||||
extern int re_match_2
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
|
||||
int length1, const char *string2, int length2,
|
||||
int start, struct re_registers *regs, int stop));
|
||||
|
||||
|
||||
/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
|
||||
ENDS. Subsequent matches using BUFFER and REGS will use this memory
|
||||
for recording register information. STARTS and ENDS must be
|
||||
allocated with malloc, and must each be at least `NUM_REGS * sizeof
|
||||
(regoff_t)' bytes long.
|
||||
|
||||
If NUM_REGS == 0, then subsequent matches should allocate their own
|
||||
register data.
|
||||
|
||||
Unless this function is called, the first search or match using
|
||||
PATTERN_BUFFER will allocate its own register data, without
|
||||
freeing the old data. */
|
||||
extern void re_set_registers
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
|
||||
unsigned num_regs, regoff_t *starts, regoff_t *ends));
|
||||
|
||||
/* 4.2 bsd compatibility. */
|
||||
extern char *re_comp _RE_ARGS ((const char *));
|
||||
extern int re_exec _RE_ARGS ((const char *));
|
||||
|
||||
/* POSIX compatibility. */
|
||||
extern int regcomp _RE_ARGS ((regex_t *preg, const char *pattern, int cflags));
|
||||
extern int regexec
|
||||
_RE_ARGS ((const regex_t *preg, const char *string, size_t nmatch,
|
||||
regmatch_t pmatch[], int eflags));
|
||||
extern size_t regerror
|
||||
_RE_ARGS ((int errcode, const regex_t *preg, char *errbuf,
|
||||
size_t errbuf_size));
|
||||
extern void regfree _RE_ARGS ((regex_t *preg));
|
||||
|
||||
#endif /* not __REGEXP_LIBRARY_H__ */
|
||||
|
||||
/*
|
||||
Local variables:
|
||||
make-backup-files: t
|
||||
version-control: t
|
||||
trim-versions-without-asking: nil
|
||||
End:
|
||||
*/
|
||||
Binary file not shown.
@@ -1,61 +0,0 @@
|
||||
/************************************************************************
|
||||
* Unreal Internet Relay Chat Daemon, include/auth.h
|
||||
* Copyright (C) 2001 Carsten V. Munk (stskeeps@tspre.org)
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
char *data;
|
||||
short type;
|
||||
} anAuthStruct;
|
||||
|
||||
#define AUTHTYPE_PLAINTEXT 0
|
||||
#define AUTHTYPE_UNIXCRYPT 1
|
||||
#define AUTHTYPE_MD5 2
|
||||
#define AUTHTYPE_SHA1 3
|
||||
#define AUTHTYPE_SSL_CLIENTCERT 4
|
||||
#define AUTHTYPE_RIPEMD160 5
|
||||
|
||||
#ifdef USE_SSL
|
||||
#define AUTHENABLE_MD5
|
||||
#define AUTHENABLE_SHA1
|
||||
#define AUTHENABLE_SSL_CLIENTCERT
|
||||
#define AUTHENABLE_RIPEMD160
|
||||
/* OpenSSL provides a crypt() */
|
||||
#ifndef AUTHENABLE_UNIXCRYPT
|
||||
#define AUTHENABLE_UNIXCRYPT
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x0090700fL
|
||||
#ifndef HAVE_CRYPT
|
||||
#define crypt DES_crypt
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
#ifndef AUTHENABLE_MD5
|
||||
#define AUTHENABLE_MD5
|
||||
#endif
|
||||
#ifndef AUTHENABLE_SHA1
|
||||
#define AUTHENABLE_SHA1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
#ifndef __BADWORDS_H
|
||||
#define __BADWORDS_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifndef _WIN32
|
||||
#include "tre/regex.h"
|
||||
#else
|
||||
#include "win32/regex.h"
|
||||
#endif
|
||||
|
||||
#define MAX_MATCH 1
|
||||
#define MAX_WORDLEN 64
|
||||
|
||||
#define PATTERN "\\w*%s\\w*"
|
||||
#define REPLACEWORD "<censored>"
|
||||
|
||||
#endif
|
||||
+6
-6
@@ -21,8 +21,8 @@
|
||||
|
||||
#ifndef __channel_include__
|
||||
#define __channel_include__
|
||||
#define CREATE 1 /* whether a channel should be
|
||||
created or just tested for existance */
|
||||
#define CREATE 1 /* whether a channel should be
|
||||
created or just tested for existance */
|
||||
|
||||
#define MODEBUFLEN 200
|
||||
|
||||
@@ -30,15 +30,15 @@
|
||||
|
||||
#define ChannelExists(n) (find_channel(n, NullChn) != NullChn)
|
||||
|
||||
#define IsULine(sptr) (sptr->flags & FLAGS_ULINE)
|
||||
#define IsULine(cptr,sptr) (sptr->flags & FLAGS_ULINE)
|
||||
|
||||
/* NOTE: Timestamps will be added to MODE-commands, so never make
|
||||
* RESYNCMODES and MODEPARAMS higher than MAXPARA-3. DALnet servers
|
||||
* before Dreamforge aren't safe with more than six. -Donwulff
|
||||
*/
|
||||
#include "msg.h"
|
||||
#define MAXMODEPARAMS (MAXPARA-3) /* Maximum modes processed */
|
||||
#define RESYNCMODES 12 /* Max modes per MODE in resync */
|
||||
#define MODEPARAMS 6 /* Max modes from user */
|
||||
#define MAXMODEPARAMS (MAXPARA-2) /* Maximum modes processed */
|
||||
#define RESYNCMODES 12 /* Max modes per MODE in resync */
|
||||
#define MODEPARAMS 6 /* Max modes from user */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
// $Id$
|
||||
#include <windows.h>
|
||||
|
||||
|
||||
#define CIOCLASS "CioClass"
|
||||
|
||||
#ifndef CIO
|
||||
#define CIO
|
||||
|
||||
typedef struct tag_CioLine
|
||||
{
|
||||
BYTE *Data;
|
||||
WORD Len;
|
||||
struct tag_CioLine *Prev, *Next;
|
||||
} CioLine;
|
||||
|
||||
typedef struct tag_CioWndInfo
|
||||
{
|
||||
CioLine *FirstLine, *CurLine;
|
||||
int Lines, Scroll;
|
||||
int Width, Height, XChar, YChar, YJunk, ScrollMe;
|
||||
HFONT hFont;
|
||||
BYTE FR, FG, FB;
|
||||
} CioWndInfo;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
// $Id$
|
||||
#include "Cio.h"
|
||||
|
||||
#define GWL_USER 0
|
||||
#define CIO_ADDSTRING WM_USER
|
||||
#define CIO_CLEAR WM_USER+1
|
||||
|
||||
// Cio_Init.c
|
||||
BOOL Cio_Init(HINSTANCE hInstance);
|
||||
|
||||
// Cio_Main.c
|
||||
LRESULT CALLBACK Cio_WndProc(HWND, UINT, WPARAM, LPARAM);
|
||||
HWND Cio_Create(HINSTANCE hInstance, HWND hParent, DWORD Style, int X, int Y, int W, int H);
|
||||
BOOL Cio_WndCreate(HWND hWnd);
|
||||
BOOL Cio_WndPaint(HWND hWnd);
|
||||
BOOL Cio_WndDestroy(HWND hWnd);
|
||||
BOOL Cio_WndAddString(HWND hWnd, int Len, char *Buffer);
|
||||
BOOL Cio_WndSize(HWND hWnd, LPARAM lParam);
|
||||
void Cio_Scroll(HWND hWnd, CioWndInfo *CWI, int Scroll);
|
||||
BOOL Cio_PrintF(HWND hWnd, char *InBuf, ...);
|
||||
+23
-15
@@ -22,13 +22,21 @@
|
||||
#ifndef __class_include__
|
||||
#define __class_include__
|
||||
|
||||
#ifndef PROTO
|
||||
#if __STDC__
|
||||
# define PROTO(x) x
|
||||
#else
|
||||
# define PROTO(x) ()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef struct Class {
|
||||
int class;
|
||||
int conFreq;
|
||||
int pingFreq;
|
||||
int maxLinks;
|
||||
long maxSendq;
|
||||
int links;
|
||||
int class;
|
||||
int conFreq;
|
||||
int pingFreq;
|
||||
int maxLinks;
|
||||
long maxSendq;
|
||||
int links;
|
||||
struct Class *next;
|
||||
} aClass;
|
||||
|
||||
@@ -49,15 +57,15 @@ typedef struct Class {
|
||||
#define FirstClass() classes
|
||||
#define NextClass(x) ((x)->next)
|
||||
|
||||
extern aClass *classes;
|
||||
extern aClass *classes;
|
||||
|
||||
extern aClass *find_class(int);
|
||||
extern int get_conf_class(aConfItem *);
|
||||
extern int get_client_class(aClient *);
|
||||
extern int get_client_ping(aClient *);
|
||||
extern int get_con_freq(aClass *);
|
||||
extern void add_class(int, int, int, int, long);
|
||||
extern void check_class(void);
|
||||
extern void initclass(void);
|
||||
extern aClass *find_class PROTO((int));
|
||||
extern int get_conf_class PROTO((aConfItem *));
|
||||
extern int get_client_class PROTO((aClient *));
|
||||
extern int get_client_ping PROTO((aClient *));
|
||||
extern int get_con_freq PROTO((aClass *));
|
||||
extern void add_class PROTO((int, int, int, int, long));
|
||||
extern void check_class PROTO((void));
|
||||
extern void initclass PROTO((void));
|
||||
|
||||
#endif /* __class_include__ */
|
||||
|
||||
+49
-189
@@ -25,46 +25,39 @@
|
||||
#include <time.h>
|
||||
#ifdef _WIN32
|
||||
#include <malloc.h>
|
||||
#ifdef INET6
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#endif
|
||||
#include <windows.h>
|
||||
#ifndef INET6
|
||||
#include <winsock.h>
|
||||
#endif
|
||||
#include <process.h>
|
||||
#include <io.h>
|
||||
#include "struct.h"
|
||||
#endif
|
||||
//#include "dynconf.h"
|
||||
#include "config.h"
|
||||
#include "dynconf.h"
|
||||
#include "ircsprintf.h"
|
||||
|
||||
#ifdef PARAMH
|
||||
#include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#if !defined(IN_ADDR)
|
||||
#include "sys.h"
|
||||
#ifndef PROTO
|
||||
#if __STDC__
|
||||
# define PROTO(x) x
|
||||
#else
|
||||
# define PROTO(x) ()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "ircsprintf.h"
|
||||
|
||||
|
||||
#ifdef DEVELOP_CVS
|
||||
#define ID_CVS(x) static char id_cvs[] = x
|
||||
#define ID_Copyright(x) static char id_copyright[] = x
|
||||
#define ID_Notes(x) static char id_notes[] = x
|
||||
#else
|
||||
#define ID_CVS(x)
|
||||
#define ID_Copyright(x)
|
||||
#define ID_Notes(x)
|
||||
#endif
|
||||
|
||||
#define BMAGIC 0x4675636B596F754661736369737473
|
||||
|
||||
#define BASE_VERSION "Unreal"
|
||||
#ifndef _WIN32
|
||||
#define FDwrite(x,y,z) write(x, y, z)
|
||||
#else
|
||||
#define FDwrite(x,y,z) send(x, y, z, 0)
|
||||
#endif
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
@@ -86,48 +79,46 @@
|
||||
|
||||
#if 0
|
||||
#ifndef MALLOCH
|
||||
char *malloc(), *calloc();
|
||||
void free();
|
||||
char *malloc(), *calloc();
|
||||
void free();
|
||||
#else
|
||||
#include MALLOCH
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define TS time_t
|
||||
|
||||
|
||||
extern int match(char *, char *);
|
||||
extern int match PROTO((char *, char *));
|
||||
#define mycmp(a,b) \
|
||||
( (toupper(a[0])!=toupper(b[0])) || smycmp((a)+1,(b)+1) )
|
||||
extern int smycmp(char *, char *);
|
||||
( (toupper((a)[0])!=toupper((b)[0])) || smycmp((a)+1,(b)+1) )
|
||||
extern int smycmp PROTO((char *, char *));
|
||||
#ifndef GLIBC2_x
|
||||
extern int myncmp(char *, char *, int);
|
||||
#endif
|
||||
extern int myncmp PROTO((char *, char *, int));
|
||||
#endif
|
||||
|
||||
#ifdef NEED_STRTOK
|
||||
extern char *strtok2(char *, char *);
|
||||
extern char *strtok2 PROTO((char *, char *));
|
||||
#endif
|
||||
#ifdef NEED_STRTOKEN
|
||||
extern char *strtoken(char **, char *, char *);
|
||||
extern char *strtoken PROTO((char **, char *, char *));
|
||||
#endif
|
||||
#ifdef NEED_INET_ADDR
|
||||
extern unsigned long inet_addr(char *);
|
||||
extern unsigned long inet_addr PROTO((char *));
|
||||
#endif
|
||||
|
||||
#if defined(NEED_INET_NTOA) || defined(NEED_INET_NETOF) && !defined(_WIN32)
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
#ifdef NEED_INET_NTOA
|
||||
extern char *inet_ntoa(struct IN_ADDR);
|
||||
extern char *inet_ntoa PROTO((struct IN_ADDR));
|
||||
#endif
|
||||
|
||||
#ifdef NEED_INET_NETOF
|
||||
extern int inet_netof(struct IN_ADDR);
|
||||
extern int inet_netof PROTO((struct IN_ADDR));
|
||||
#endif
|
||||
|
||||
int global_count, max_global_count;
|
||||
extern char *myctime(time_t);
|
||||
extern char *strtoken(char **, char *, char *);
|
||||
int global_count, max_global_count;
|
||||
extern char *myctime PROTO((time_t));
|
||||
extern char *strtoken PROTO((char **, char *, char *));
|
||||
|
||||
#define PRECISE_CHECK
|
||||
|
||||
@@ -138,20 +129,16 @@ extern char *strtoken(char **, char *, char *);
|
||||
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#define DupString(x,y) do{int l=strlen(y);x=MyMalloc(l+1);(void)memcpy(x,y, l+1);}while(0)
|
||||
#define DupString(x,y) do{x=MyMalloc(strlen(y)+1);(void)strcpy(x,y);}while(0)
|
||||
|
||||
extern u_char tolowertab[], touppertab[];
|
||||
|
||||
#if defined(CHINESE_NICK) || defined(JAPANESE_NICK)
|
||||
#define USE_LOCALE
|
||||
#endif
|
||||
|
||||
#ifndef USE_LOCALE
|
||||
#undef tolower
|
||||
#define tolower(c) (tolowertab[(u_char)(c)])
|
||||
#define tolower(c) (tolowertab[(c)])
|
||||
|
||||
#undef toupper
|
||||
#define toupper(c) (touppertab[(u_char)(c)])
|
||||
#define toupper(c) (touppertab[(c)])
|
||||
|
||||
#undef isalpha
|
||||
#undef isdigit
|
||||
@@ -191,8 +178,8 @@ extern unsigned char char_atribs[];
|
||||
#define islower(c) ((char_atribs[(u_char)(c)]&ALPHA) && ((u_char)(c) > 0x5f))
|
||||
#define isupper(c) ((char_atribs[(u_char)(c)]&ALPHA) && ((u_char)(c) < 0x60))
|
||||
#define isdigit(c) (char_atribs[(u_char)(c)]&DIGIT)
|
||||
#define isxdigit(c) (isdigit(c) || ('a' <= (c) && (c) <= 'f') || \
|
||||
('A' <= (c) && (c) <= 'F'))
|
||||
#define isxdigit(c) (isdigit(c) || 'a' <= (c) && (c) <= 'f' || \
|
||||
'A' <= (c) && (c) <= 'F')
|
||||
#define isalnum(c) (char_atribs[(u_char)(c)]&(DIGIT|ALPHA))
|
||||
#define isprint(c) (char_atribs[(u_char)(c)]&PRINT)
|
||||
#define isascii(c) ((u_char)(c) >= 0 && (u_char)(c) <= 0x7f)
|
||||
@@ -200,167 +187,40 @@ extern unsigned char char_atribs[];
|
||||
#define ispunct(c) (!(char_atribs[(u_char)(c)]&(CNTRL|ALPHA|DIGIT)))
|
||||
#endif
|
||||
|
||||
#ifndef MALLOCD
|
||||
#define MyFree free
|
||||
#define MyMalloc malloc
|
||||
#define MyRealloc realloc
|
||||
#else
|
||||
#define MyFree(x) do {debug(DEBUG_MALLOC, "%s:%i: free %02x", __FILE__, __LINE__, x); free(x); } while(0)
|
||||
#define MyMalloc(x) StsMalloc(x, __FILE__, __LINE__)
|
||||
#define MyRealloc realloc
|
||||
static char *StsMalloc(size_t size, char *file, long line)
|
||||
{
|
||||
void *x;
|
||||
|
||||
x = malloc(size);
|
||||
debug(DEBUG_MALLOC, "%s:%i: malloc %02x", file, line, x);
|
||||
return x;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
extern struct SLink *find_user_link( /* struct SLink *, struct Client * */ );
|
||||
// #ifndef DMALLOC
|
||||
extern char *MyMalloc();
|
||||
// #else
|
||||
// #define MyMalloc malloc
|
||||
// #define MyRealloc realloc
|
||||
// #define MyFree free
|
||||
// #endif
|
||||
extern void flush_connections();
|
||||
extern struct SLink *find_user_link(/* struct SLink *, struct Client * */);
|
||||
|
||||
/*
|
||||
* Protocol support text. DO NO CHANGE THIS unless you know what
|
||||
* you are doing.
|
||||
*/
|
||||
|
||||
/* IRCu/Hybrid/Unreal way now :) -Stskeeps */
|
||||
|
||||
#ifdef EXTCMODE
|
||||
#define EXPAR1 extchmstr[0]
|
||||
#define EXPAR2 extchmstr[1]
|
||||
#define EXPAR3 extchmstr[2]
|
||||
#define EXPAR4 extchmstr[3]
|
||||
#else
|
||||
#define EXPAR1 ""
|
||||
#define EXPAR2 ""
|
||||
#define EXPAR3 ""
|
||||
#define EXPAR4 ""
|
||||
#endif /* EXTCMODE */
|
||||
|
||||
#define PROTOCTL_CLIENT_1 \
|
||||
"MAP" \
|
||||
" KNOCK" \
|
||||
" SAFELIST" \
|
||||
" HCN" \
|
||||
" MAXCHANNELS=%i" \
|
||||
" MAXBANS=%i" \
|
||||
" NICKLEN=%i" \
|
||||
" TOPICLEN=%i" \
|
||||
" KICKLEN=%i" \
|
||||
" MAXTARGETS=%i" \
|
||||
" AWAYLEN=%i" \
|
||||
" :are supported by this server"
|
||||
#define PROTOCTL_PARAMETERS_1 \
|
||||
MAXCHANNELSPERUSER, \
|
||||
MAXBANS, \
|
||||
NICKLEN, \
|
||||
TOPICLEN, \
|
||||
TOPICLEN, \
|
||||
MAXTARGETS, \
|
||||
TOPICLEN
|
||||
|
||||
#ifdef PREFIX_AQ
|
||||
#define CHPFIX "(qaohv)~&@%+"
|
||||
#define CHPAR1 "be"
|
||||
#else
|
||||
#define CHPFIX "(ohv)@%+"
|
||||
#define CHPAR1 "beqa"
|
||||
#endif /* PREFIX_AQ */
|
||||
|
||||
#define CHPAR2 "kfL"
|
||||
#define CHPAR3 "l"
|
||||
#define CHPAR4 "psmntirRcOAQKVGCuzNSM"
|
||||
|
||||
#define PROTOCTL_CLIENT_2 \
|
||||
"WALLCHOPS" \
|
||||
" WATCH=%i" \
|
||||
" SILENCE=%i" \
|
||||
" MODES=%i" \
|
||||
" CHANTYPES=%s" \
|
||||
" PREFIX=%s" \
|
||||
" CHANMODES=%s%s,%s%s,%s%s,%s%s" \
|
||||
" NETWORK=%s" \
|
||||
" CASEMAPPING=%s" \
|
||||
" EXTBAN=~,%s" \
|
||||
" :are supported by this server"
|
||||
|
||||
#define PROTOCTL_PARAMETERS_2 \
|
||||
MAXWATCH, \
|
||||
SILENCE_LIMIT, \
|
||||
MAXMODEPARAMS, \
|
||||
"#", \
|
||||
CHPFIX, \
|
||||
CHPAR1, EXPAR1, \
|
||||
CHPAR2, EXPAR2, \
|
||||
CHPAR3, EXPAR3, \
|
||||
"psmntirRcOAQKVGCuzNSM", EXPAR4, \
|
||||
ircnet005, \
|
||||
"ascii", \
|
||||
extbanstr
|
||||
|
||||
/* Server-Server PROTOCTL -Stskeeps
|
||||
* Please check send_proto() for more. -- Syzop
|
||||
*/
|
||||
#define PROTOCTL_SERVER "NOQUIT" \
|
||||
" TOKEN" \
|
||||
" NICKv2" \
|
||||
" SJOIN" \
|
||||
" SJOIN2" \
|
||||
" UMODE2" \
|
||||
" VL" \
|
||||
" SJ3" \
|
||||
" NS" \
|
||||
" SJB64" \
|
||||
" TKLEXT"
|
||||
#define PROTOCTL_CLIENT "TOKEN WATCH=128 SAFELIST HCN PREFIX=@+%"
|
||||
#define PROTOCTL_SERVER "NOQUIT TOKEN NICKv2 SJOIN SJOIN2 UMODE2 ALN"
|
||||
|
||||
#ifdef _WIN32
|
||||
/*
|
||||
* Used to display a string to the GUI interface.
|
||||
* Windows' internal strerror() function doesn't work with socket errors.
|
||||
*/
|
||||
extern int DisplayString(HWND hWnd, char *InBuf, ...);
|
||||
extern int DisplayString(HWND hWnd, char *InBuf, ...);
|
||||
#undef strerror
|
||||
#else
|
||||
typedef int SOCKET;
|
||||
#define INVALID_SOCKET -1
|
||||
#endif
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__APPLE__)
|
||||
extern char *malloc_options;
|
||||
#endif
|
||||
|
||||
extern int lu_noninv, lu_inv, lu_serv, lu_oper,
|
||||
lu_unknown, lu_channel, lu_lu, lu_lulocal, lu_lserv,
|
||||
lu_clu, lu_mlu, lu_cglobalu, lu_mglobalu;
|
||||
|
||||
TS now;
|
||||
|
||||
#if defined(__STDC__)
|
||||
#define __const const
|
||||
#define __signed signed
|
||||
#define __volatile volatile
|
||||
#ifndef __GNUC__
|
||||
#define __inline
|
||||
#endif
|
||||
|
||||
#else
|
||||
#ifndef __GNUC__
|
||||
#define __const
|
||||
#define __inline
|
||||
#define __signed
|
||||
#define __volatile
|
||||
#ifndef NO_ANSI_KEYWORDS
|
||||
#define const /* delete ANSI C keywords */
|
||||
#define inline
|
||||
#define signed
|
||||
#define volatile
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define READBUF_SIZE 8192
|
||||
extern int lu_noninv, lu_inv, lu_serv, lu_oper,
|
||||
lu_unknown, lu_channel, lu_lu, lu_lulocal, lu_lserv,
|
||||
lu_clu, lu_mlu, lu_cglobalu, lu_mglobalu;
|
||||
|
||||
time_t now;
|
||||
|
||||
#endif /* __common_include__ */
|
||||
|
||||
+339
-213
@@ -3,7 +3,7 @@
|
||||
* Copyright (C) 1990 Jarkko Oikarinen
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
*
|
||||
* 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)
|
||||
@@ -23,7 +23,7 @@
|
||||
#define __config_include__
|
||||
|
||||
#include "setup.h"
|
||||
|
||||
#include "settings.h"
|
||||
/*
|
||||
*
|
||||
* NOTICE
|
||||
@@ -35,11 +35,23 @@
|
||||
*
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* To windows porters:
|
||||
* You can specify name and url for their diff wircd sites
|
||||
* #undef WIN32_SPECIFY for not having any notice about it in the wIRCd
|
||||
* --Techie
|
||||
*/
|
||||
#undef WIN32_SPECIFY
|
||||
|
||||
#ifdef WIN32_SPECIFY
|
||||
#define WIN32_PORTER ""
|
||||
#define WIN32_URL ""
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Define this if you're testing/debugging/programming.
|
||||
* Define this if you're testing/debugging/programming.
|
||||
*/
|
||||
#undef DEBUG
|
||||
*/
|
||||
|
||||
/* Type of host. These should be made redundant somehow. -avalon */
|
||||
|
||||
@@ -47,21 +59,27 @@
|
||||
/* HPUX Nothing needed (A.08/A.09) */
|
||||
/* ULTRIX Nothing needed (4.2) */
|
||||
/* OSF Nothing needed (1.2) */
|
||||
/* #undef AIX IBM ugly so-called Unix, AIX */
|
||||
/* #undef MIPS MIPS Unix */
|
||||
/* #undef AIX /* IBM ugly so-called Unix, AIX */
|
||||
/* #undef MIPS /* MIPS Unix */
|
||||
/* SGI Nothing needed (IRIX 4.0.4) */
|
||||
/* #undef SVR3 SVR3 stuff - being worked on where poss. */
|
||||
/* #undef DYNIXPTX Sequents Brain-dead Posix implement. */
|
||||
/* #undef SOL20 Solaris2 */
|
||||
/* #undef ESIX ESIX */
|
||||
/* #undef NEXT NeXTStep */
|
||||
/* #undef SVR4 */
|
||||
/* #undef SVR3 /* SVR3 stuff - being worked on where poss. */
|
||||
/* #undef DYNIXPTX /* Sequents Brain-dead Posix implement. */
|
||||
/* #undef SOL20 /* Solaris2 */
|
||||
/* #undef ESIX /* ESIX */
|
||||
/* #undef NEXT /* NeXTStep */
|
||||
/* #undef SVR4 /* */
|
||||
|
||||
/* Additional flags to give FreeBSD's malloc, only play with this if you
|
||||
* know what you're doing.
|
||||
*/
|
||||
|
||||
|
||||
#define MALLOC_FLAGS_EXTRA ""
|
||||
/*
|
||||
ConferenceRoom Java Client Hack -Fish
|
||||
if you want it to work #define CONFROOM_JAVA_PORT <port>
|
||||
where port MUST be a seperate port java clients connects on ..
|
||||
*/
|
||||
#undef CONFROOM_JAVA_PORT
|
||||
|
||||
/*
|
||||
dog3/comstud ircd fdlists
|
||||
@@ -70,125 +88,80 @@
|
||||
|
||||
#undef NO_FDLIST
|
||||
|
||||
/*
|
||||
* Defining this will allow all ircops to see people in +s channels
|
||||
* By default, only net/tech admins can see this
|
||||
*/
|
||||
#define SHOW_SECRET
|
||||
|
||||
/*
|
||||
* This allows you to see modes in /list
|
||||
*/
|
||||
#define LIST_SHOW_MODES
|
||||
|
||||
/*
|
||||
* Admin's chat...
|
||||
*/
|
||||
#define ADMINCHAT 1
|
||||
|
||||
/*
|
||||
* If channel mode is +z, only send to secure links & people
|
||||
*
|
||||
*/
|
||||
#undef SECURECHANMSGSONLYGOTOSECURE
|
||||
|
||||
/*
|
||||
* be compatible with older cloak keys? If you link to servers beta4 and
|
||||
* earlier without this the cloak keys will produce diff results
|
||||
* Not recommended, however, as beta4 and earlier 3.2 has an insecure
|
||||
* cloak algo -griever
|
||||
*/
|
||||
#undef COMPAT_BETA4_KEYS
|
||||
|
||||
/*
|
||||
If you want SHUN_NOTICES, define this
|
||||
*/
|
||||
#undef SHUN_NOTICES
|
||||
|
||||
/*
|
||||
If you want to support chinese and/or japanese nicks
|
||||
*/
|
||||
#undef CHINESE_NICK
|
||||
#undef JAPANESE_NICK
|
||||
|
||||
/*
|
||||
Remote rehash
|
||||
*/
|
||||
#define REMOTE_REHASH
|
||||
|
||||
/*
|
||||
Stripbadwords patch
|
||||
/*
|
||||
Ident checking
|
||||
#define this to disable ident checking
|
||||
*/
|
||||
#define STRIPBADWORDS
|
||||
|
||||
/*
|
||||
* Always strip badwords in channels? (channel does not have to be +G)
|
||||
*/
|
||||
#undef STRIPBADWORDS_CHAN_ALWAYS
|
||||
|
||||
/*
|
||||
* NO_OPEROVERRIDE
|
||||
* This will disable OperMode, OperTopic and Banwalks
|
||||
*/
|
||||
#undef NO_OPEROVERRIDE
|
||||
|
||||
/*
|
||||
* OPEROVERRIDE_VERIFY
|
||||
* This will prompt opers before permitting them to join +p/+s
|
||||
* channels, decreasing the chances of someone "accidentally"
|
||||
* entering a random channel.
|
||||
*/
|
||||
#undef OPEROVERRIDE_VERIFY
|
||||
|
||||
/*
|
||||
* THROTTLING
|
||||
* This will only allow 1 connection per ip in set::throttle::period time
|
||||
*/
|
||||
#define THROTTLING
|
||||
|
||||
/*
|
||||
* NAZIISH_CHBAN_HANDLING (formerly ANNOYING_BAN_THING)
|
||||
* Reject bans that are matched by existing bans, causes chanserv
|
||||
* To flood-kick an akicked user if their akick is matched by another
|
||||
* Ban, but if you don't mind, this can free up ban list space I guess
|
||||
*/
|
||||
#undef NAZIISH_CHBAN_HANDLING
|
||||
|
||||
/*
|
||||
* Disable /sethost, /setident, /chgname, /chghost, /chgident
|
||||
*/
|
||||
#undef DISABLE_USERMOD
|
||||
#undef NO_IDENT_CHECKING
|
||||
|
||||
/*
|
||||
* No spoof code
|
||||
*
|
||||
* This enables the spoof protection.
|
||||
*/
|
||||
/* #define NOSPOOF 1 */
|
||||
|
||||
/* #define NOSPOOF 1 /* */
|
||||
|
||||
/*
|
||||
* Enables locops to override the RFC1459 flood control too
|
||||
*/
|
||||
#undef NO_FAKE_LAG_FOR_LOCOPS
|
||||
*
|
||||
* This controls the "nospoof" system. These numbers are "seeds" of the
|
||||
* "random" number generating formula. Choose any number you like in the
|
||||
* range of 0x00000000 to 0xFFFFFFFF. Don't tell anyone these numbers, and
|
||||
* don't use the default ones. Change both #define NOSPOOF... lines below.
|
||||
*
|
||||
* Other data is mixed in as well, but these guarantee a per-server secret.
|
||||
* Also, these values need not remain constant over compilations... Change
|
||||
* them as often as you like.
|
||||
*/
|
||||
#ifdef NOSPOOF
|
||||
|
||||
#ifndef NOSPOOF_SEED01
|
||||
#define NOSPOOF_SEED01 0x12345678
|
||||
#endif
|
||||
|
||||
#ifndef NOSPOOF_SEED02
|
||||
#define NOSPOOF_SEED02 0x87654321
|
||||
#endif
|
||||
|
||||
#endif /* NOSPOOF */
|
||||
|
||||
/*
|
||||
* HOSTILENAME - Define this if you want the hostile username patch included,
|
||||
* it will strip characters that are not 0-9,a-z,A-Z,_,- or .
|
||||
*/
|
||||
#define HOSTILENAME /* [DO NOT CHANGE!] */
|
||||
#define HOSTILENAME /* */
|
||||
|
||||
/*
|
||||
* This makes topics include nick!user@host instead of nick in topic whoset,
|
||||
* ALL servers must be Unreal3.2-beta12 or higher, and services may have some
|
||||
* problems with this
|
||||
*/
|
||||
#undef TOPIC_NICK_IS_NUHOST
|
||||
* Define this to prevent mixed case userids that clonebots use. However
|
||||
* this affects the servers running telclients WLD* FIN* etc.
|
||||
*/
|
||||
#undef DISALLOW_MIXED_CASE
|
||||
|
||||
/*
|
||||
* Use JOIN instead of SJOIN on every remotely sent JOIN
|
||||
* Define this if you wish to ignore the case of the first character of
|
||||
* the user id when disallowing mixed case. This allows PC users to
|
||||
* enter the more intuitive first name with the first letter capitalised
|
||||
*/
|
||||
#define IGNORE_CASE_FIRST_CHAR
|
||||
|
||||
/*
|
||||
** Nick flood limit
|
||||
** Minimum time between nick changes.
|
||||
** (The first two changes are allowed quickly after another however).
|
||||
**
|
||||
** Define NICK_DELAY if you want this feature.
|
||||
*/
|
||||
#undef JOIN_INSTEAD_OF_SJOIN_ON_REMOTEJOIN
|
||||
|
||||
#define NICK_DELAY 15 /* recommended value 15 */
|
||||
|
||||
/*
|
||||
** Freelinks garbage collector -Stskeeps
|
||||
@@ -197,22 +170,23 @@
|
||||
** HOW_MANY_FREELINKS_ALLOWED - how many freelinks allowed
|
||||
*/
|
||||
#ifndef GARBAGE_COLLECT_EVERY
|
||||
#define GARBAGE_COLLECT_EVERY 600 /* default: 600 (10 mins) */
|
||||
#define GARBAGE_COLLECT_EVERY 600 /* default: 600 (10 mins) */
|
||||
#endif
|
||||
|
||||
#define HOW_MANY_FREELINKS_ALLOWED 200 /* default: 200 */
|
||||
#define HOW_MANY_FREELINKS_ALLOWED 200 /* default: 200 */
|
||||
|
||||
/*
|
||||
* MAXUNKNOWNCONNECTIONSPERIP
|
||||
*/
|
||||
#define MAXUNKNOWNCONNECTIONSPERIP 3
|
||||
* Define this if you wish to output a *file* to a K lined client rather
|
||||
* than the K line comment (the comment field is treated as a filename)
|
||||
*/
|
||||
#undef COMMENT_IS_FILE
|
||||
|
||||
|
||||
/* Do these work? I dunno... */
|
||||
|
||||
/* #undef VMS Should work for IRC client, not server */
|
||||
/* #undef MAIL50 If you're running VMS 5.0 */
|
||||
/* #undef PCS PCS Cadmus MUNIX, use with BSD flag! */
|
||||
/* #undef VMS /* Should work for IRC client, not server */
|
||||
/* #undef MAIL50 /* If you're running VMS 5.0 */
|
||||
/* #undef PCS /* PCS Cadmus MUNIX, use with BSD flag! */
|
||||
|
||||
/*
|
||||
* NOTE: On some systems, valloc() causes many problems.
|
||||
@@ -232,33 +206,57 @@
|
||||
* If your host supports varargs and has vsprintf(), vprintf() and vscanf()
|
||||
* C calls in its library, then you can define USE_VARARGS to use varargs
|
||||
* instead of imitation variable arg passing.
|
||||
*/
|
||||
#define USE_VARARGS
|
||||
|
||||
/* NOTE: with current server code, varargs doesn't survive because it can't
|
||||
* NOTE: with current server code, varargs doesn't survive because it can't
|
||||
* be used in a chain of 3 or more funtions which all have a variable
|
||||
* number of params. If anyone has a solution to this, please notify
|
||||
* the maintainer.
|
||||
*/
|
||||
|
||||
/* #undef DEBUGMODE define DEBUGMODE to enable debugging mode.*/
|
||||
/* #undef DEBUGMODE /* define DEBUGMODE to enable debugging mode.*/
|
||||
|
||||
/*
|
||||
* defining FORCE_CORE will automatically "unlimit core", forcing the
|
||||
* server to dump a core file whenever it has a fatal error. -mlv
|
||||
*/
|
||||
#define FORCE_CORE
|
||||
|
||||
/*
|
||||
* Full pathnames and defaults of irc system's support files. Please note that
|
||||
* these are only the recommened names and paths. Change as needed.
|
||||
* You must define these to something, even if you don't really want them.
|
||||
*/
|
||||
#define CPATH "unrealircd.conf" /* server configuration file */
|
||||
#define CPATH "ircd.conf" /* server configuration file */
|
||||
#define MPATH "ircd.motd" /* server MOTD file */
|
||||
#define SMPATH "ircd.smotd" /* short MOTD file */
|
||||
#define RPATH "ircd.rules" /* server rules file */
|
||||
#define OPATH "oper.motd" /* Operators MOTD file */
|
||||
#define RPATH "ircd.rules" /* server rules file */
|
||||
#define ZPATH "ircd.notes" /* server notes */
|
||||
#define ZCONF "networks/unrealircd.conf" /* ircd configuration .. */
|
||||
#define OPATH "oper.motd" /* Operators MOTD file */
|
||||
#define LPATH "debug.log" /* Where the debug file lives, if DEBUGMODE */
|
||||
#define PPATH "ircd.pid" /* file for server pid */
|
||||
#define lPATH "ircd.log" /* server log file */
|
||||
#define VPATH "ircd.svsmotd" /* Services MOTD append. */
|
||||
#define VPATH "ircd.svsmotd" /* Services MOTD append. */
|
||||
#define BPATH "bot.motd" /* Bot MOTD */
|
||||
#define IRCDTUNE "ircd.tune" /* tuning .. */
|
||||
#define IRCDTUNE "ircd.tune" /* tuning .. */
|
||||
|
||||
/*
|
||||
* Define this filename to maintain a list of persons who log
|
||||
* into this server. Logging will stop when the file does not exist.
|
||||
* Logging will be disable also if you do not define this.
|
||||
* FNAME_USERLOG just logs user connections, FNAME_OPERLOG logs every
|
||||
* successful use of /oper. These are either full paths or files within DPATH.
|
||||
*/
|
||||
#define FNAME_USERLOG "users.log"
|
||||
#define FNAME_OPERLOG "opers.log"
|
||||
|
||||
/* FAILOPER_WARN
|
||||
*
|
||||
* When defined, warns users on a failed oper attempt that it was/is logged
|
||||
* Only works when FNAME_OPERLOG is defined, and a logfile exists.
|
||||
* NOTE: Failed oper attempts are logged regardless.
|
||||
*/
|
||||
#define FAILOPER_WARN
|
||||
|
||||
/* CHROOTDIR
|
||||
*
|
||||
@@ -269,7 +267,7 @@
|
||||
*
|
||||
* You may want to define IRC_UID and IRC_GID
|
||||
*/
|
||||
/* #define CHROOTDIR */
|
||||
/* #define CHROOTDIR /* */
|
||||
|
||||
/* SHOW_INVISIBLE_LUSERS
|
||||
*
|
||||
@@ -280,6 +278,43 @@
|
||||
*/
|
||||
#define SHOW_INVISIBLE_LUSERS
|
||||
|
||||
|
||||
/* OPER_* defines
|
||||
*
|
||||
* See ./docs/example.conf for examples of how to restrict access for
|
||||
* your IRC Operators
|
||||
*/
|
||||
|
||||
/* MAXIMUM LINKS
|
||||
*
|
||||
* This define is useful for leaf nodes and gateways. It keeps you from
|
||||
* connecting to too many places. It works by keeping you from
|
||||
* connecting to more than "n" nodes which you have C:blah::blah:6667
|
||||
* lines for.
|
||||
*
|
||||
* Note that any number of nodes can still connect to you. This only
|
||||
* limits the number that you actively reach out to connect to.
|
||||
*
|
||||
* Leaf nodes are nodes which are on the edge of the tree. If you want
|
||||
* to have a backup link, then sometimes you end up connected to both
|
||||
* your primary and backup, routing traffic between them. To prevent
|
||||
* this, #define MAXIMUM_LINKS 1 and set up both primary and
|
||||
* secondary with C:blah::blah:6667 lines. THEY SHOULD NOT TRY TO
|
||||
* CONNECT TO YOU, YOU SHOULD CONNECT TO THEM.
|
||||
*
|
||||
* Gateways such as the server which connects Australia to the US can
|
||||
* do a similar thing. Put the American nodes you want to connect to
|
||||
* in with C:blah::blah:6667 lines, and the Australian nodes with
|
||||
* C:blah::blah lines. Have the Americans put you in with C:blah::blah
|
||||
* lines. Then you will only connect to one of the Americans.
|
||||
*
|
||||
* This value is only used if you don't have server classes defined, and
|
||||
* a server is in class 0 (the default class if none is set).
|
||||
*
|
||||
*/
|
||||
|
||||
#define MAXIMUM_LINKS 1
|
||||
|
||||
/*
|
||||
* NOTE: defining CMDLINE_CONFIG and installing ircd SUID or SGID is a MAJOR
|
||||
* security problem - they can use the "-f" option to read any files
|
||||
@@ -288,9 +323,55 @@
|
||||
* starts up the server with a new conf file that has some extra
|
||||
* O-lines. So don't use this unless you're debugging.
|
||||
*/
|
||||
#undef CMDLINE_CONFIG /* allow conf-file to be specified on command line */
|
||||
#define CMDLINE_CONFIG /* allow conf-file to be specified on command line */
|
||||
|
||||
/*
|
||||
* To use m4 as a preprocessor on the ircd.conf file, define M4_PREPROC.
|
||||
* The server will then call m4 each time it reads the ircd.conf file,
|
||||
* reading m4 output as the server's ircd.conf file.
|
||||
*/
|
||||
#undef M4_PREPROC
|
||||
|
||||
/*
|
||||
* If you wish to have the server send 'vital' messages about server
|
||||
* through syslog, define USE_SYSLOG. Only system errors and events critical
|
||||
* to the server are logged although if this is defined with FNAME_USERLOG,
|
||||
* syslog() is used instead of the above file. It is not recommended that
|
||||
* this option is used unless you tell the system administrator beforehand
|
||||
* and obtain their permission to send messages to the system log files.
|
||||
*/
|
||||
#ifndef _WIN32
|
||||
#undef USE_SYSLOG
|
||||
#endif
|
||||
|
||||
#ifdef USE_SYSLOG
|
||||
/*
|
||||
* If you use syslog above, you may want to turn some (none) of the
|
||||
* spurious log messages for KILL/SQUIT off.
|
||||
*/
|
||||
#undef SYSLOG_KILL /* log all operator kills to syslog */
|
||||
#undef SYSLOG_SQUIT /* log all remote squits for all servers to syslog */
|
||||
#undef SYSLOG_CONNECT /* log remote connect messages for other all servs */
|
||||
#undef SYSLOG_USERS /* send userlog stuff to syslog */
|
||||
#undef SYSLOG_OPER /* log all users who successfully become an Op */
|
||||
|
||||
/*
|
||||
* If you want to log to a different facility than DAEMON, change
|
||||
* this define.
|
||||
*/
|
||||
#define LOG_FACILITY LOG_DAEMON
|
||||
#endif /* USE_SYSLOG */
|
||||
|
||||
/*
|
||||
* IDLE_FROM_MSG
|
||||
*
|
||||
* Idle-time nullified only from privmsg, if undefined idle-time
|
||||
* is nullified from everything except ping/pong.
|
||||
* Added 3.8.1992, kny@cs.hut.fi (nam)
|
||||
*/
|
||||
#define IDLE_FROM_MSG
|
||||
|
||||
/*
|
||||
* Size of the LISTEN request. Some machines handle this large
|
||||
* without problem, but not all. It defaults to 5, but can be
|
||||
* raised if you know your machine handles it.
|
||||
@@ -310,7 +391,7 @@
|
||||
* Recommended value is 2 * MAXSENDQLENGTH, for hubs, 5 *.
|
||||
*/
|
||||
#ifndef BUFFERPOOL
|
||||
#define BUFFERPOOL (18 * MAXSENDQLENGTH)
|
||||
#define BUFFERPOOL (9 * MAXSENDQLENGTH)
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -319,12 +400,28 @@
|
||||
* If you start the server as root but wish to have it run as another user,
|
||||
* define IRC_UID to that UID. This should only be defined if you are running
|
||||
* as root and even then perhaps not.
|
||||
* use #define IRC_UID <uid>
|
||||
* and #define IRC_GID <gid>
|
||||
*/
|
||||
|
||||
#undef IRC_UID
|
||||
#undef IRC_GID
|
||||
|
||||
/*
|
||||
* Ok this one is being changed. it is advisable never to run anything that
|
||||
* uses sockets etc. and has the potential for the outside world to connect to it
|
||||
* to run as root... Hackers do things like buffer overruns, and get dumped on
|
||||
* a shell with root access effectivley ... so DONT do it.. if a program uses a
|
||||
* port <1024 it will run as root, once the program has binded to the socket it
|
||||
* will set its uid to something OTHER than root ... you set that in unrealircd.conf
|
||||
*
|
||||
* If you _must_ insist on running as root and not wanting the program to change its
|
||||
* UID, then define BIG_SECURITY_HOLE below
|
||||
*/
|
||||
#if !defined(_WIN32) && !defined(_AMIGA)
|
||||
/* Change This Line Below \/ */
|
||||
#define BIG_SECURITY_HOLE
|
||||
/* Its the one above ^^^^^^^ */
|
||||
#ifndef BIG_SECUTIRY_HOLE
|
||||
#define IRC_UID un_uid
|
||||
#define IRC_GID un_gid
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* CLIENT_FLOOD
|
||||
@@ -332,18 +429,14 @@
|
||||
* this controls the number of bytes the server will allow a client to
|
||||
* send to the server without processing before disconnecting the client for
|
||||
* flooding it. Values greater than 8000 make no difference to the server.
|
||||
* NOTE: you can now also set this in class::recvq, if that's not present,
|
||||
* this default value will be used.
|
||||
*/
|
||||
#define CLIENT_FLOOD 8000
|
||||
|
||||
/* Anti-Flood options
|
||||
* NO_FLOOD_AWAY - enables limiting of how frequently a client can set /away
|
||||
*/
|
||||
/* Define this if you want the server to accomplish ircII standard */
|
||||
/* Sends an extra NOTICE in the beginning of client connection */
|
||||
#undef IRCII_KLUDGE
|
||||
|
||||
#define NO_FLOOD_AWAY
|
||||
|
||||
/*
|
||||
/*
|
||||
* Define your network service names here.
|
||||
*/
|
||||
#define ChanServ "ChanServ"
|
||||
@@ -352,8 +445,11 @@
|
||||
#define OperServ "OperServ"
|
||||
#define HelpServ "HelpServ"
|
||||
#define StatServ "StatServ"
|
||||
#define InfoServ "InfoServ"
|
||||
#define BotServ "BotServ"
|
||||
|
||||
/*
|
||||
* How many seconds in between simultaneous nick changes?
|
||||
*/
|
||||
#define NICK_CHANGE_DELAY 30
|
||||
|
||||
/*
|
||||
* How many open targets can one nick have for messaging nicks and
|
||||
@@ -361,7 +457,34 @@
|
||||
*/
|
||||
|
||||
#define MAXTARGETS 20
|
||||
#define TARGET_DELAY 15
|
||||
#define TARGET_DELAY 120
|
||||
|
||||
/*
|
||||
* Would you like all clients to see the progress of their connections?
|
||||
*/
|
||||
|
||||
#define SHOWCONNECTINFO
|
||||
|
||||
/*
|
||||
* SOCKS proxy checker
|
||||
*
|
||||
* At the moment this isn't an ideal solution, however it's better
|
||||
* than nothing. Smaller servers shouldn't notice much of a performance
|
||||
* hit, larger servers might have to reduce their Y-lines. In either
|
||||
* case it's advisable to increase the number of FD's you define by
|
||||
* about 10%.
|
||||
*
|
||||
* This determines the port on the local ircd machine that the open
|
||||
* SOCKS server test attempts to connect back to. The default should
|
||||
* be fine except for those unusual situations where the default
|
||||
* port is in use for some reason.
|
||||
*
|
||||
* Undefining this will eliminate the checker from ircd.
|
||||
*/
|
||||
#define SOCKSPORT 6013
|
||||
|
||||
/* Define default Z:line time for SOCKS -taz */
|
||||
#define ZLINE_TIME 300
|
||||
|
||||
/* STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP */
|
||||
|
||||
@@ -371,7 +494,7 @@
|
||||
* Port where ircd resides. NOTE: This *MUST* be greater than 1024 if you
|
||||
* plan to run ircd under any other uid than root.
|
||||
*/
|
||||
#define PORTNUM 6667 /* 6667 is default */
|
||||
#define PORTNUM 6667 /* 6667 is default */
|
||||
|
||||
/*
|
||||
* Maximum number of network connections your server will allow. This should
|
||||
@@ -384,7 +507,7 @@
|
||||
* 1 server = 1 connection, 1 user = 1 connection.
|
||||
* This should be at *least* 3: 1 listen port, 1 dns port + 1 client
|
||||
*
|
||||
* Note: this figure will be too high for most systems. If you get an
|
||||
* Note: this figure will be too high for most systems. If you get an
|
||||
* fd-related error on compile, change this to 256.
|
||||
*
|
||||
* Windows users: This should be a fairly high number. Some operations
|
||||
@@ -412,19 +535,14 @@
|
||||
* chasing possible for mode and kick.
|
||||
*/
|
||||
#ifndef NICKNAMEHISTORYLENGTH
|
||||
#define NICKNAMEHISTORYLENGTH 2000
|
||||
#define NICKNAMEHISTORYLENGTH 2000
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Time interval to wait and if no messages have been received, then check for
|
||||
* PINGFREQUENCY and CONNECTFREQUENCY
|
||||
* Imo this is quite useless nowdays, it only saves _some_ cpu on tiny networks
|
||||
* with like 10 users all of them being inactive. On a normal network with >30
|
||||
* users this value is completely irrelevant.
|
||||
* The original value here was 60 (which was [hopefuly] never reached and was
|
||||
* stupid anyway), changed to 2.
|
||||
* PINGFREQUENCY and CONNECTFREQUENCY
|
||||
*/
|
||||
#define TIMESEC 2
|
||||
#define TIMESEC 60 /* Recommended value: 60 */
|
||||
|
||||
/*
|
||||
* If daemon doesn't receive anything from any of its links within
|
||||
@@ -435,7 +553,7 @@
|
||||
#define PINGFREQUENCY 120 /* Recommended value: 120 */
|
||||
|
||||
/*
|
||||
* If the connection to to uphost is down, then attempt to reconnect every
|
||||
* If the connection to to uphost is down, then attempt to reconnect every
|
||||
* CONNECTFREQUENCY seconds.
|
||||
*/
|
||||
#define CONNECTFREQUENCY 600 /* Recommended value: 600 */
|
||||
@@ -463,44 +581,32 @@
|
||||
* CONNECTTIMEOUT - 10 seconds for its host to respond to an ident lookup
|
||||
* query and for a DNS answer to be retrieved.
|
||||
*/
|
||||
#define CONNECTTIMEOUT 30 /* Recommended value: 60 */
|
||||
#define CONNECTTIMEOUT 60 /* Recommended value: 60 */
|
||||
|
||||
/*
|
||||
* Max time from the nickname change that still causes KILL
|
||||
* automaticly to switch for the current nick of that user. (seconds)
|
||||
*/
|
||||
#define KILLCHASETIMELIMIT 90 /* Recommended value: 90 */
|
||||
#define KILLCHASETIMELIMIT 90 /* Recommended value: 90 */
|
||||
|
||||
|
||||
/*
|
||||
* Use much faster badwords replace routine (>100 times faster).
|
||||
* SendQ-Always causes the server to put all outbound data into the sendq and
|
||||
* flushing the sendq at the end of input processing. This should cause more
|
||||
* efficient write's to be made to the network.
|
||||
* There *shouldn't* be any problems with this method.
|
||||
* -avalon
|
||||
*/
|
||||
#define FAST_BADWORD_REPLACE
|
||||
|
||||
/*
|
||||
* Only important for people using IPv6 (default should be ok for now) -Onliner
|
||||
* Because ip6.arpa is still not delegated for the 6bone (3ffe::/16)
|
||||
* this options allows you to still resolve it using ip6.int.
|
||||
*/
|
||||
#define SIXBONE_HACK
|
||||
|
||||
/*
|
||||
* Extended channel modes. This extends the channel modes with yet another
|
||||
* 32 possible modes which can also be used in modules.
|
||||
*/
|
||||
#define EXTCMODE
|
||||
|
||||
/*
|
||||
* New channelmode +f system which allows flood control for:
|
||||
* msgs, joins, ctcps, nickchanges and /knock.
|
||||
*/
|
||||
#define NEWCHFLOODPROT
|
||||
#define SENDQ_ALWAYS
|
||||
|
||||
/* ------------------------- END CONFIGURATION SECTION -------------------- */
|
||||
#define MOTD MPATH
|
||||
#define RULES RPATH
|
||||
#define SNOTES ZPATH
|
||||
#define MYNAME SPATH
|
||||
#define CONFIGFILE CPATH
|
||||
#define IRCD_PIDFILE PPATH
|
||||
#define GLINE_LOG GPATH
|
||||
|
||||
#ifdef __osf__
|
||||
#define OSF
|
||||
@@ -512,6 +618,11 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _SEQUENT_ /* Dynix 1.4 or 2.0 Generic Define.. */
|
||||
#undef BSD
|
||||
#define SYSV /* Also #define SYSV */
|
||||
#endif
|
||||
|
||||
#ifdef ultrix
|
||||
#define ULTRIX
|
||||
#endif
|
||||
@@ -532,23 +643,21 @@
|
||||
#endif
|
||||
|
||||
#ifdef DEBUGMODE
|
||||
#ifndef _WIN32
|
||||
extern void debug(int, char *, ...);
|
||||
#define Debug(x) debug x
|
||||
extern void debug();
|
||||
# define Debug(x) debug x
|
||||
# define LOGFILE LPATH
|
||||
#else
|
||||
extern void debug(int, char *, ...);
|
||||
#define Debug(x) debug x
|
||||
#endif
|
||||
#define LOGFILE LPATH
|
||||
#else
|
||||
#define Debug(x) ;
|
||||
#if VMS
|
||||
#define LOGFILE "NLA0:"
|
||||
#else
|
||||
#define LOGFILE "/dev/null"
|
||||
#endif
|
||||
# define Debug(x) ;
|
||||
# if VMS
|
||||
# define LOGFILE "NLA0:"
|
||||
# else
|
||||
# define LOGFILE "/dev/null"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef ENABLE_SUMMON
|
||||
# undef LEAST_IDLE
|
||||
#endif
|
||||
|
||||
#if defined(mips) || defined(PCS)
|
||||
#undef SYSV
|
||||
@@ -556,53 +665,72 @@
|
||||
|
||||
#ifdef MIPS
|
||||
#undef BSD
|
||||
#define BSD 1 /* mips only works in bsd43 environment */
|
||||
#define BSD 1 /* mips only works in bsd43 environment */
|
||||
#endif
|
||||
|
||||
#ifdef sequent /* Dynix (sequent OS) */
|
||||
#define SEQ_NOFILE 128 /* set to your current kernel impl, */
|
||||
#endif /* max number of socket connections */
|
||||
|
||||
#ifdef _SEQUENT_
|
||||
#define DYNIXPTX
|
||||
#endif
|
||||
|
||||
#ifdef BSD_RELIABLE_SIGNALS
|
||||
# if defined(SYSV_UNRELIABLE_SIGNALS) || defined(POSIX_SIGNALS)
|
||||
error You stuffed up config.h signals
|
||||
#define use only one.
|
||||
error You stuffed up config.h signals #defines use only one.
|
||||
# endif
|
||||
#define HAVE_RELIABLE_SIGNALS
|
||||
#endif
|
||||
|
||||
#ifdef SYSV_UNRELIABLE_SIGNALS
|
||||
# ifdef POSIX_SIGNALS
|
||||
error You stuffed up config.h signals
|
||||
#define use only one.
|
||||
error You stuffed up config.h signals #defines use only one.
|
||||
# endif
|
||||
#undef HAVE_RELIABLE_SIGNALS
|
||||
#endif
|
||||
|
||||
#ifdef POSIX_SIGNALS
|
||||
#define HAVE_RELIABLE_SIGNALS
|
||||
#endif
|
||||
|
||||
/*
|
||||
* safety margin so we can always have one spare fd, for motd/authd or
|
||||
* whatever else. -4 allows "safety" margin of 1 and space reserved.
|
||||
*/
|
||||
#define MAXCLIENTS (MAXCONNECTIONS-4)
|
||||
|
||||
#ifdef HAVECURSES
|
||||
# define DOCURSES
|
||||
#else
|
||||
# undef DOCURSES
|
||||
#endif
|
||||
|
||||
#ifdef HAVETERMCAP
|
||||
# define DOTERMCAP
|
||||
#else
|
||||
# undef DOTERMCAP
|
||||
#endif
|
||||
|
||||
# define stricmp strcasecmp
|
||||
# define strnicmp strncasecmp
|
||||
|
||||
#if defined(CLIENT_FLOOD)
|
||||
# if (CLIENT_FLOOD > 8000)
|
||||
# define CLIENT_FLOOD 8000
|
||||
# else
|
||||
# if (CLIENT_FLOOD < 512)
|
||||
error CLIENT_FLOOD needs redefining.
|
||||
error CLIENT_FLOOD needs redefining.
|
||||
# endif
|
||||
# endif
|
||||
#else
|
||||
error CLIENT_FLOOD undefined
|
||||
error CLIENT_FLOOD undefined
|
||||
#endif
|
||||
|
||||
#if (NICKNAMEHISTORYLENGTH < 100)
|
||||
# define NICKNAMEHISTORYLENGTH 100
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Some ugliness for AIX platforms.
|
||||
*/
|
||||
@@ -620,34 +748,32 @@ error You stuffed up config.h signals
|
||||
# define BSD_INCLUDES
|
||||
#endif
|
||||
/*
|
||||
* This is just to make Solaris porting easier -- codemastr
|
||||
* This is just to make Solaris porting easier -- codemastr
|
||||
*/
|
||||
#if defined(SOL20) || defined(SOL25) || defined(SOL26) || defined(SOL27)
|
||||
#define _SOLARIS
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Cleaup for WIN32 platform.
|
||||
*/
|
||||
#ifdef _WIN32
|
||||
# undef FORCE_CORE
|
||||
#endif
|
||||
#ifdef NEED_BCMP
|
||||
#define bcmp memcmp
|
||||
#endif
|
||||
#ifdef NEED_BCOPY
|
||||
#define bcopy(a,b,c) memcpy(b,a,c)
|
||||
#endif
|
||||
#ifdef NEED_BZERO
|
||||
#define bzero(a,b) memset(a,0,b)
|
||||
#endif
|
||||
#ifdef HAVE_CRYPT
|
||||
#define AUTHENABLE_UNIXCRYPT
|
||||
#endif
|
||||
#if defined(AIX) && defined(_XOPEN_SOURCE_EXTENDED) && _XOPEN_SOURCE_EXTENDED
|
||||
# define SOCK_LEN_TYPE size_t
|
||||
#else
|
||||
# define SOCK_LEN_TYPE int
|
||||
#endif
|
||||
/* use cflag longmodes */
|
||||
#define USE_LONGMODE
|
||||
#define Reg1 register
|
||||
#define Reg2 register
|
||||
#define Reg3 register
|
||||
#define Reg4 register
|
||||
#define Reg5 register
|
||||
#define Reg6 register
|
||||
#define Reg7 register
|
||||
#define Reg8 register
|
||||
#define Reg9 register
|
||||
#define Reg10 register
|
||||
|
||||
#endif /* __config_include__ */
|
||||
|
||||
#endif /* __config_include__ */
|
||||
|
||||
|
||||
+42
-23
@@ -22,6 +22,14 @@
|
||||
#ifndef __dbuf_include__
|
||||
#define __dbuf_include__
|
||||
|
||||
#ifndef PROTO
|
||||
#ifdef __STDC__
|
||||
# define PROTO(x) x
|
||||
#else
|
||||
# define PROTO(x) ()
|
||||
#endif /* __STDC__ */
|
||||
#endif /* ! PROTO */
|
||||
|
||||
/*
|
||||
** dbuf is a collection of functions which can be used to
|
||||
** maintain a dynamic buffering of a byte stream.
|
||||
@@ -37,14 +45,25 @@
|
||||
** implementation of this package without changing the
|
||||
** interface.
|
||||
*/
|
||||
typedef struct dbuf {
|
||||
u_int length; /* Current number of bytes stored */
|
||||
u_int offset; /* Offset to the first byte */
|
||||
struct dbufbuf *head; /* First data buffer, if length > 0 */
|
||||
#if !defined(_SEQUENT_)
|
||||
typedef struct dbuf
|
||||
{
|
||||
u_int length; /* Current number of bytes stored */
|
||||
u_int offset; /* Offset to the first byte */
|
||||
struct dbufbuf *head; /* First data buffer, if length > 0 */
|
||||
/* added by mnystrom@mit.edu: */
|
||||
struct dbufbuf *tail; /* last data buffer, if length > 0 */
|
||||
} dbuf;
|
||||
|
||||
struct dbufbuf *tail; /* last data buffer, if length > 0 */
|
||||
} dbuf;
|
||||
#else
|
||||
typedef struct dbuf
|
||||
{
|
||||
uint length; /* Current number of bytes stored */
|
||||
uint offset; /* Offset to the first byte */
|
||||
struct dbufbuf *head; /* First data buffer, if length > 0 */
|
||||
/* added by mnystrom@mit.edu: */
|
||||
struct dbufbuf *tail; /* last data buffer, if length > 0 */
|
||||
} dbuf;
|
||||
#endif
|
||||
/*
|
||||
** And this 'dbufbuf' should never be referenced outside the
|
||||
** implementation of 'dbuf'--would be "hidden" if C had such
|
||||
@@ -54,10 +73,11 @@ typedef struct dbuf {
|
||||
** as long as a pointer is 4 bytes, we get 2032 bytes for buffer
|
||||
** data after we take away a bit for malloc to play with. -avalon
|
||||
*/
|
||||
typedef struct dbufbuf {
|
||||
struct dbufbuf *next; /* Next data buffer, NULL if this is last */
|
||||
char data[2032]; /* Actual data stored here */
|
||||
} dbufbuf;
|
||||
typedef struct dbufbuf
|
||||
{
|
||||
struct dbufbuf *next; /* Next data buffer, NULL if this is last */
|
||||
char data[2032]; /* Actual data stored here */
|
||||
} dbufbuf;
|
||||
|
||||
/*
|
||||
** dbuf_put
|
||||
@@ -68,10 +88,10 @@ typedef struct dbufbuf {
|
||||
** returns > 0, if operation successfull
|
||||
** < 0, if failed (due memory allocation problem)
|
||||
*/
|
||||
int dbuf_put(dbuf *, char *, int);
|
||||
int dbuf_put PROTO((dbuf *, char *, int));
|
||||
/* Dynamic buffer header */
|
||||
/* Pointer to data to be stored */
|
||||
/* Number of bytes to store */
|
||||
/* Pointer to data to be stored */
|
||||
/* Number of bytes to store */
|
||||
|
||||
/*
|
||||
** dbuf_get
|
||||
@@ -88,10 +108,10 @@ int dbuf_put(dbuf *, char *, int);
|
||||
** Negative return values indicate some unspecified
|
||||
** error condition, rather fatal...
|
||||
*/
|
||||
int dbuf_get(dbuf *, char *, int);
|
||||
int dbuf_get PROTO(( dbuf *, char *, int));
|
||||
/* Dynamic buffer header */
|
||||
/* Pointer to buffer to receive the data */
|
||||
/* Max amount of bytes that can be received */
|
||||
/* Pointer to buffer to receive the data */
|
||||
/* Max amount of bytes that can be received */
|
||||
|
||||
/*
|
||||
** dbuf_map, dbuf_delete
|
||||
@@ -117,11 +137,11 @@ int dbuf_get(dbuf *, char *, int);
|
||||
** Note: delete can be used alone, there is no real binding
|
||||
** between map and delete functions...
|
||||
*/
|
||||
char *dbuf_map(dbuf *, int *);
|
||||
/* Dynamic buffer header */
|
||||
/* Return number of bytes accessible */
|
||||
char *dbuf_map PROTO((dbuf *, int *));
|
||||
/* Dynamic buffer header */
|
||||
/* Return number of bytes accessible */
|
||||
|
||||
int dbuf_delete(dbuf *, int);
|
||||
int dbuf_delete PROTO((dbuf *, int));
|
||||
/* Dynamic buffer header */
|
||||
/* Number of bytes to delete */
|
||||
|
||||
@@ -139,8 +159,7 @@ int dbuf_delete(dbuf *, int);
|
||||
** allocated buffers and make it empty.
|
||||
*/
|
||||
#define DBufClear(dyn) dbuf_delete((dyn),DBufLength(dyn))
|
||||
#define NOTINIT "\x53\x50\x59";
|
||||
|
||||
extern int dbuf_getmsg(dbuf *, char *, int);
|
||||
extern int dbuf_getmsg PROTO((dbuf *, char *, int));
|
||||
|
||||
#endif /* __dbuf_include__ */
|
||||
|
||||
+61
-181
@@ -21,159 +21,88 @@
|
||||
|
||||
|
||||
#define DYNCONF_H
|
||||
|
||||
/* config level */
|
||||
#define DYNCONF_CONF_VERSION "1.5"
|
||||
#define DYNCONF_NETWORK_VERSION "2.2"
|
||||
|
||||
typedef struct zNetwork aNetwork;
|
||||
struct zNetwork {
|
||||
long key;
|
||||
long key2;
|
||||
long key3;
|
||||
long keycrc;
|
||||
unsigned x_inah:1;
|
||||
char *x_ircnetwork;
|
||||
char *x_ircnet005;
|
||||
char *x_defserv;
|
||||
char *x_services_name;
|
||||
char *x_oper_host;
|
||||
char *x_admin_host;
|
||||
char *x_locop_host;
|
||||
char *x_sadmin_host;
|
||||
char *x_netadmin_host;
|
||||
char *x_coadmin_host;
|
||||
char *x_hidden_host;
|
||||
char *x_prefix_quit;
|
||||
char *x_helpchan;
|
||||
char *x_stats_server;
|
||||
typedef struct zNetwork aNetwork;
|
||||
struct zNetwork {
|
||||
unsigned x_inah : 1;
|
||||
char *x_ircnetwork;
|
||||
char *x_defserv;
|
||||
char *x_services_name;
|
||||
char *x_oper_host;
|
||||
char *x_admin_host;
|
||||
char *x_locop_host;
|
||||
char *x_sadmin_host;
|
||||
char *x_netadmin_host;
|
||||
char *x_coadmin_host;
|
||||
char *x_techadmin_host;
|
||||
char *x_hidden_host;
|
||||
char *x_netdomain;
|
||||
char *x_helpchan;
|
||||
char *x_stats_server;
|
||||
};
|
||||
|
||||
enum UHAllowed { UHALLOW_ALWAYS, UHALLOW_NOCHANS, UHALLOW_REJOIN, UHALLOW_NEVER };
|
||||
|
||||
struct ChMode {
|
||||
long mode;
|
||||
#ifdef EXTCMODE
|
||||
long extmodes;
|
||||
char *extparams[EXTCMODETABLESZ];
|
||||
#endif
|
||||
#ifdef NEWCHFLOODPROT
|
||||
ChanFloodProt floodprot;
|
||||
#else
|
||||
unsigned short msgs;
|
||||
unsigned short per;
|
||||
unsigned char kmode;
|
||||
#endif
|
||||
};
|
||||
|
||||
typedef struct _OperStat {
|
||||
struct _OperStat *prev, *next;
|
||||
char *flag;
|
||||
} OperStat;
|
||||
|
||||
typedef struct zConfiguration aConfiguration;
|
||||
struct zConfiguration {
|
||||
unsigned som:1;
|
||||
unsigned hide_ulines:1;
|
||||
unsigned allow_chatops:1;
|
||||
unsigned webtv_support:1;
|
||||
unsigned no_oper_hiding:1;
|
||||
unsigned ident_check:1;
|
||||
unsigned fail_oper_warn:1;
|
||||
unsigned show_connect_info:1;
|
||||
unsigned dont_resolve:1;
|
||||
unsigned use_ban_version:1;
|
||||
unsigned mkpasswd_for_everyone:1;
|
||||
unsigned allow_part_if_shunned:1;
|
||||
unsigned use_egd;
|
||||
long host_timeout;
|
||||
int host_retries;
|
||||
char *name_server;
|
||||
#ifdef THROTTLING
|
||||
long throttle_period;
|
||||
char throttle_count;
|
||||
#endif
|
||||
char *kline_address;
|
||||
long conn_modes;
|
||||
long oper_modes;
|
||||
char *oper_snomask;
|
||||
char *user_snomask;
|
||||
char *auto_join_chans;
|
||||
char *oper_auto_join_chans;
|
||||
char *oper_only_stats;
|
||||
OperStat *oper_only_stats_ext;
|
||||
int maxchannelsperuser;
|
||||
int anti_spam_quit_message_time;
|
||||
char *egd_path;
|
||||
char *static_quit;
|
||||
char *static_part;
|
||||
#ifdef USE_SSL
|
||||
char *x_server_cert_pem;
|
||||
char *x_server_key_pem;
|
||||
char *trusted_ca_file;
|
||||
long ssl_options;
|
||||
#endif
|
||||
enum UHAllowed userhost_allowed;
|
||||
char *restrict_usermodes;
|
||||
char *restrict_channelmodes;
|
||||
char *channel_command_prefix;
|
||||
long unknown_flood_bantime;
|
||||
long unknown_flood_amount;
|
||||
struct ChMode modes_on_join;
|
||||
#ifdef NO_FLOOD_AWAY
|
||||
unsigned char away_count;
|
||||
long away_period;
|
||||
#endif
|
||||
unsigned char nick_count;
|
||||
long nick_period;
|
||||
int ident_connect_timeout;
|
||||
int ident_read_timeout;
|
||||
long default_bantime;
|
||||
int who_limit;
|
||||
int silence_limit;
|
||||
#ifdef NEWCHFLOODPROT
|
||||
unsigned char modef_default_unsettime;
|
||||
unsigned char modef_max_unsettime;
|
||||
#endif
|
||||
long ban_version_tkl_time;
|
||||
long spamfilter_ban_time;
|
||||
char *spamfilter_ban_reason;
|
||||
char *spamfilter_virus_help_channel;
|
||||
SpamExcept *spamexcept;
|
||||
char *spamexcept_line;
|
||||
aNetwork network;
|
||||
struct zConfiguration {
|
||||
unsigned som : 1;
|
||||
unsigned mode_x : 1;
|
||||
unsigned mode_i : 1;
|
||||
unsigned mode_stripbadwords : 1;
|
||||
unsigned truehub : 1;
|
||||
unsigned stop : 1;
|
||||
unsigned showopers : 1;
|
||||
unsigned killdiff : 1;
|
||||
unsigned hide_ulines : 1;
|
||||
unsigned allow_chatops : 1;
|
||||
unsigned webtv_support : 1;
|
||||
unsigned no_oper_hiding : 1;
|
||||
/* long nospoof_seed01;
|
||||
long nospoof_seed02; */
|
||||
long host_timeout;
|
||||
int host_retries;
|
||||
char *kline_address;
|
||||
char *include;
|
||||
char *domainname;
|
||||
char *domainmask; /* '*' + domainname */
|
||||
char *auto_join_chans;
|
||||
char *oper_auto_join_chans;
|
||||
int socksbantime;
|
||||
int maxchannelsperuser;
|
||||
char *socksbanmessage;
|
||||
char *socksquitmessage;
|
||||
aNetwork network;
|
||||
};
|
||||
|
||||
#ifndef DYNCONF_C
|
||||
extern aConfiguration iConf;
|
||||
extern aConfiguration iConf;
|
||||
#endif
|
||||
|
||||
// #define NOSPOOF_SEED01 iConf.nospoof_seed01
|
||||
// #define NOSPOOF_SEED02 iConf.nospoof_seed02
|
||||
#define KLINE_ADDRESS iConf.kline_address
|
||||
#define CONN_MODES iConf.conn_modes
|
||||
#define OPER_MODES iConf.oper_modes
|
||||
#define OPER_SNOMASK iConf.oper_snomask
|
||||
#define CONNECT_SNOMASK iConf.user_snomask
|
||||
#define INCLUDE iConf.include
|
||||
#define DOMAINNAMEMASK "*" DOMAINNAME
|
||||
#define MODE_X iConf.mode_x
|
||||
#define MODE_I iConf.mode_i
|
||||
#define MODE_STRIPWORDS iConf.mode_stripbadwords
|
||||
#define TRUEHUB iConf.truehub
|
||||
#define SHOWOPERS iConf.showopers
|
||||
#define KILLDIFF iConf.killdiff
|
||||
#define SHOWOPERMOTD iConf.som
|
||||
#define HIDE_ULINES iConf.hide_ulines
|
||||
#define ALLOW_CHATOPS iConf.allow_chatops
|
||||
#define MAXCHANNELSPERUSER iConf.maxchannelsperuser
|
||||
#define WEBTV_SUPPORT iConf.webtv_support
|
||||
#define NO_OPER_HIDING iConf.no_oper_hiding
|
||||
#define DONT_RESOLVE iConf.dont_resolve
|
||||
#define AUTO_JOIN_CHANS iConf.auto_join_chans
|
||||
#define OPER_AUTO_JOIN_CHANS iConf.oper_auto_join_chans
|
||||
#define HOST_TIMEOUT iConf.host_timeout
|
||||
#define HOST_RETRIES iConf.host_retries
|
||||
#define NAME_SERVER iConf.name_server
|
||||
#define IDENT_CHECK iConf.ident_check
|
||||
#define FAILOPER_WARN iConf.fail_oper_warn
|
||||
#define SHOWCONNECTINFO iConf.show_connect_info
|
||||
#define OPER_ONLY_STATS iConf.oper_only_stats
|
||||
#define ANTI_SPAM_QUIT_MSG_TIME iConf.anti_spam_quit_message_time
|
||||
#define USE_EGD iConf.use_egd
|
||||
#define EGD_PATH iConf.egd_path
|
||||
|
||||
#define ircnetwork iConf.network.x_ircnetwork
|
||||
#define ircnet005 iConf.network.x_ircnet005
|
||||
#define defserv iConf.network.x_defserv
|
||||
#define SERVICES_NAME iConf.network.x_services_name
|
||||
#define oper_host iConf.network.x_oper_host
|
||||
@@ -184,58 +113,9 @@ extern aConfiguration iConf;
|
||||
#define coadmin_host iConf.network.x_coadmin_host
|
||||
#define techadmin_host iConf.network.x_techadmin_host
|
||||
#define hidden_host iConf.network.x_hidden_host
|
||||
#define netdomain iConf.network.x_netdomain
|
||||
#define helpchan iConf.network.x_helpchan
|
||||
#define STATS_SERVER iConf.network.x_stats_server
|
||||
#define STATS_SERVER iConf.network.x_stats_server
|
||||
#define iNAH iConf.network.x_inah
|
||||
#define prefix_quit iConf.network.x_prefix_quit
|
||||
#define SSL_SERVER_CERT_PEM (iConf.x_server_cert_pem ? iConf.x_server_cert_pem : "server.cert.pem")
|
||||
#define SSL_SERVER_KEY_PEM (iConf.x_server_key_pem ? iConf.x_server_key_pem : "server.key.pem")
|
||||
|
||||
#define CLOAK_KEY1 iConf.network.key
|
||||
#define CLOAK_KEY2 iConf.network.key2
|
||||
#define CLOAK_KEY3 iConf.network.key3
|
||||
#define CLOAK_KEYCRC iConf.network.keycrc
|
||||
#define STATIC_QUIT iConf.static_quit
|
||||
#define STATIC_PART iConf.static_part
|
||||
#define UHOST_ALLOWED iConf.userhost_allowed
|
||||
#define RESTRICT_USERMODES iConf.restrict_usermodes
|
||||
#define RESTRICT_CHANNELMODES iConf.restrict_channelmodes
|
||||
#ifdef THROTTLING
|
||||
#define THROTTLING_PERIOD iConf.throttle_period
|
||||
#define THROTTLING_COUNT iConf.throttle_count
|
||||
#endif
|
||||
#define USE_BAN_VERSION iConf.use_ban_version
|
||||
#define UNKNOWN_FLOOD_BANTIME iConf.unknown_flood_bantime
|
||||
#define UNKNOWN_FLOOD_AMOUNT iConf.unknown_flood_amount
|
||||
#define MODES_ON_JOIN iConf.modes_on_join.mode
|
||||
|
||||
#ifdef NO_FLOOD_AWAY
|
||||
#define AWAY_PERIOD iConf.away_period
|
||||
#define AWAY_COUNT iConf.away_count
|
||||
#endif
|
||||
#define NICK_PERIOD iConf.nick_period
|
||||
#define NICK_COUNT iConf.nick_count
|
||||
|
||||
#define IDENT_CONNECT_TIMEOUT iConf.ident_connect_timeout
|
||||
#define IDENT_READ_TIMEOUT iConf.ident_read_timeout
|
||||
|
||||
#define MKPASSWD_FOR_EVERYONE iConf.mkpasswd_for_everyone
|
||||
#define CHANCMDPFX iConf.channel_command_prefix
|
||||
|
||||
#define DEFAULT_BANTIME iConf.default_bantime
|
||||
#define WHOLIMIT iConf.who_limit
|
||||
|
||||
#ifdef NEWCHFLOODPROT
|
||||
#define MODEF_DEFAULT_UNSETTIME iConf.modef_default_unsettime
|
||||
#define MODEF_MAX_UNSETTIME iConf.modef_max_unsettime
|
||||
#endif
|
||||
|
||||
#define ALLOW_PART_IF_SHUNNED iConf.allow_part_if_shunned
|
||||
|
||||
#define BAN_VERSION_TKL_TIME iConf.ban_version_tkl_time
|
||||
#define SILENCE_LIMIT (iConf.silence_limit ? iConf.silence_limit : 15)
|
||||
|
||||
#define SPAMFILTER_BAN_TIME iConf.spamfilter_ban_time
|
||||
#define SPAMFILTER_BAN_REASON iConf.spamfilter_ban_reason
|
||||
#define SPAMFILTER_VIRUSCHAN iConf.spamfilter_virus_help_channel
|
||||
#define SPAMFILTER_EXCEPT iConf.spamexcept_line
|
||||
#define net_quit iConf.network.x_net_quit
|
||||
#define STOPSE iConf.network.x_se
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
/************************************************************************
|
||||
* Unreal Internet Relay Chat Daemon, include/events.h
|
||||
* (C) Carsten V. Munk 2001 <stskeeps@tspre.org>
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
#include "modules.h"
|
||||
+7
-12
@@ -4,26 +4,21 @@
|
||||
/* $Id$ */
|
||||
|
||||
typedef struct fdstruct {
|
||||
int entry[MAXCONNECTIONS + 2];
|
||||
int last_entry;
|
||||
int entry[MAXCONNECTIONS + 2];
|
||||
int last_entry;
|
||||
} fdlist;
|
||||
|
||||
void addto_fdlist(int a, fdlist * b);
|
||||
void delfrom_fdlist(int a, fdlist * b);
|
||||
void init_fdlist(fdlist * b);
|
||||
|
||||
#ifndef NO_FDLIST
|
||||
extern fdlist oper_fdlist;
|
||||
#endif
|
||||
|
||||
void addto_fdlist(int a, fdlist * b);
|
||||
void delfrom_fdlist(int a, fdlist * b);
|
||||
void init_fdlist(fdlist * b);
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
|
||||
|
||||
#define LOADCFREQ 5
|
||||
#define LOADRECV 35
|
||||
#define FDLISTCHKFREQ 2
|
||||
#define FDLISTCHKFREQ 2
|
||||
|
||||
#endif /*
|
||||
* _IRCD_DOG3_FDLIST
|
||||
|
||||
+265
-608
@@ -28,124 +28,29 @@
|
||||
#ifndef NO_FDLIST
|
||||
#include "fdlist.h"
|
||||
#endif
|
||||
extern char *extraflags;
|
||||
extern int tainted;
|
||||
/* for the new s_err.c */
|
||||
extern char *getreply(int);
|
||||
#define rpl_str(x) getreply(x)
|
||||
#define err_str(x) getreply(x)
|
||||
extern Member *freemember;
|
||||
extern Membership *freemembership;
|
||||
extern MembershipL *freemembershipL;
|
||||
extern TS nextconnect, nextdnscheck, nextping;
|
||||
extern aClient *client, me, *local[];
|
||||
extern aChannel *channel;
|
||||
extern struct stats *ircstp;
|
||||
extern int bootopt;
|
||||
extern time_t TSoffset;
|
||||
|
||||
extern time_t nextconnect, nextdnscheck, nextping;
|
||||
extern aClient *client, me, *local[];
|
||||
extern aChannel *channel;
|
||||
extern struct stats *ircstp;
|
||||
extern int bootopt;
|
||||
extern time_t TSoffset;
|
||||
/* Prototype added to force errors -- Barubary */
|
||||
extern TS check_pings(TS now);
|
||||
extern TS TS2ts(char *s);
|
||||
extern time_t timeofday;
|
||||
/* newconf */
|
||||
#define get_sendq(x) ((x)->class ? (x)->class->sendq : MAXSENDQLENGTH)
|
||||
/* get_recvq is only called in send.c for local connections */
|
||||
#define get_recvq(x) ((x)->class->recvq ? (x)->class->recvq : CLIENT_FLOOD)
|
||||
extern time_t check_pings(time_t now, int check_kills);
|
||||
|
||||
#define CMD_FUNC(x) int (x) (aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
|
||||
#ifndef NO_FDLIST
|
||||
extern float currentrate;
|
||||
extern float currentrate2; /* outgoing */
|
||||
extern float highest_rate;
|
||||
extern float highest_rate2;
|
||||
extern int lifesux;
|
||||
extern int LRV;
|
||||
extern time_t LCF;
|
||||
extern int currlife;
|
||||
extern int HTMLOCK;
|
||||
extern int noisy_htm;
|
||||
extern long lastsendK, lastrecvK;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Configuration linked lists
|
||||
*/
|
||||
extern ConfigItem_me *conf_me;
|
||||
extern ConfigItem_class *conf_class;
|
||||
extern ConfigItem_class *default_class;
|
||||
extern ConfigItem_admin *conf_admin;
|
||||
extern ConfigItem_admin *conf_admin_tail;
|
||||
extern ConfigItem_drpass *conf_drpass;
|
||||
extern ConfigItem_ulines *conf_ulines;
|
||||
extern ConfigItem_tld *conf_tld;
|
||||
extern ConfigItem_oper *conf_oper;
|
||||
extern ConfigItem_listen *conf_listen;
|
||||
extern ConfigItem_allow *conf_allow;
|
||||
extern ConfigItem_except *conf_except;
|
||||
extern ConfigItem_vhost *conf_vhost;
|
||||
extern ConfigItem_link *conf_link;
|
||||
extern ConfigItem_ban *conf_ban;
|
||||
extern ConfigItem_badword *conf_badword_channel;
|
||||
extern ConfigItem_badword *conf_badword_message;
|
||||
extern ConfigItem_badword *conf_badword_quit;
|
||||
extern ConfigItem_deny_dcc *conf_deny_dcc;
|
||||
extern ConfigItem_deny_channel *conf_deny_channel;
|
||||
extern ConfigItem_deny_link *conf_deny_link;
|
||||
extern ConfigItem_allow_channel *conf_allow_channel;
|
||||
extern ConfigItem_deny_version *conf_deny_version;
|
||||
extern ConfigItem_log *conf_log;
|
||||
extern ConfigItem_alias *conf_alias;
|
||||
extern ConfigItem_include *conf_include;
|
||||
extern ConfigItem_help *conf_help;
|
||||
extern ConfigItem_offchans *conf_offchans;
|
||||
extern int completed_connection(aClient *);
|
||||
extern void clear_unknown();
|
||||
extern EVENT(tkl_check_expire);
|
||||
extern EVENT(e_unload_module_delayed);
|
||||
#ifdef THROTTLING
|
||||
extern EVENT(e_clean_out_throttling_buckets);
|
||||
#endif
|
||||
|
||||
extern void module_loadall(int module_load);
|
||||
extern long set_usermode(char *umode);
|
||||
extern char *get_modestr(long umodes);
|
||||
extern void tkl_stats(aClient *cptr, int type, char *para);
|
||||
extern void config_error(char *format, ...) __attribute__((format(printf,1,2)));
|
||||
extern int config_verbose;
|
||||
extern void config_progress(char *format, ...) __attribute__((format(printf,1,2)));
|
||||
extern void ipport_seperate(char *string, char **ip, char **port);
|
||||
ConfigItem_class *Find_class(char *name);
|
||||
ConfigItem_deny_dcc *Find_deny_dcc(char *name);
|
||||
ConfigItem_oper *Find_oper(char *name);
|
||||
ConfigItem_listen *Find_listen(char *ipmask, int port);
|
||||
ConfigItem_ulines *Find_uline(char *host);
|
||||
ConfigItem_except *Find_except(char *host, short type);
|
||||
ConfigItem_tld *Find_tld(aClient *cptr, char *host);
|
||||
ConfigItem_link *Find_link(char *username, char *hostname, char *ip, char *servername);
|
||||
ConfigItem_ban *Find_ban(char *host, short type);
|
||||
ConfigItem_ban *Find_banEx(char *host, short type, short type2);
|
||||
ConfigItem_vhost *Find_vhost(char *name);
|
||||
ConfigItem_deny_channel *Find_channel_allowed(char *name);
|
||||
ConfigItem_alias *Find_alias(char *name);
|
||||
ConfigItem_help *Find_Help(char *command);
|
||||
int AllowClient(aClient *cptr, struct hostent *hp, char *sockhost, char *username);
|
||||
int parse_netmask(const char *text, struct IN_ADDR *addr, int *b);
|
||||
int match_ipv4(struct IN_ADDR *addr, struct IN_ADDR *mask, int b);
|
||||
#ifdef INET6
|
||||
int match_ipv6(struct IN_ADDR *addr, struct IN_ADDR *mask, int b);
|
||||
#endif
|
||||
extern struct tm motd_tm, smotd_tm;
|
||||
extern Link *Servers;
|
||||
void add_ListItem(ListStruct *, ListStruct **);
|
||||
ListStruct *del_ListItem(ListStruct *, ListStruct **);
|
||||
/* Remmed out for win32 compatibility.. as stated of 467leaf win32 port.. */
|
||||
extern aClient *find_match_server(char *mask);
|
||||
extern LoopStruct loop;
|
||||
extern int del_banid(aChannel *chptr, char *banid);
|
||||
extern int del_exbanid(aChannel *chptr, char *banid);
|
||||
|
||||
#ifdef _WIN32
|
||||
// extern void *hCio;
|
||||
#endif
|
||||
|
||||
#ifdef SHOWCONNECTINFO
|
||||
|
||||
#ifdef SOCKSPORT
|
||||
#define BREPORT_DO_SOCKS "NOTICE AUTH :*** Checking for open socks server...\r\n"
|
||||
#define BREPORT_GOOD_SOCKS "NOTICE AUTH :*** Secure socks found (good!)...\r\n"
|
||||
#define BREPORT_NO_SOCKS "NOTICE AUTH :*** No socks server found (good!)...\r\n"
|
||||
#endif
|
||||
|
||||
#define BREPORT_DO_DNS "NOTICE AUTH :*** Looking up your hostname...\r\n"
|
||||
#define BREPORT_FIN_DNS "NOTICE AUTH :*** Found your hostname\r\n"
|
||||
@@ -155,533 +60,285 @@ extern int del_exbanid(aChannel *chptr, char *banid);
|
||||
#define BREPORT_FIN_ID "NOTICE AUTH :*** Received identd response\r\n"
|
||||
#define BREPORT_FAIL_ID "NOTICE AUTH :*** No ident response; username prefixed with ~\r\n"
|
||||
|
||||
extern char REPORT_DO_DNS[256], REPORT_FIN_DNS[256], REPORT_FIN_DNSC[256],
|
||||
REPORT_FAIL_DNS[256], REPORT_DO_ID[256], REPORT_FIN_ID[256],
|
||||
REPORT_FAIL_ID[256];
|
||||
extern char REPORT_DO_DNS[128], REPORT_FIN_DNS[128], REPORT_FIN_DNSC[128],
|
||||
REPORT_FAIL_DNS[128], REPORT_DO_ID[128], REPORT_FIN_ID[128],
|
||||
REPORT_FAIL_ID[128];
|
||||
#ifdef SOCKSPORT
|
||||
extern char REPORT_DO_SOCKS[128], REPORT_GOOD_SOCKS[128],
|
||||
REPORT_NO_SOCKS[128];
|
||||
#endif
|
||||
|
||||
extern int R_do_dns, R_fin_dns, R_fin_dnsc, R_fail_dns,
|
||||
R_do_id, R_fin_id, R_fail_id;
|
||||
R_do_id, R_fin_id, R_fail_id;
|
||||
#ifdef SOCKSPORT
|
||||
extern int R_do_socks,
|
||||
R_good_socks, R_no_socks;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
extern inline aCommand *find_Command(char *cmd, short token, int flags);
|
||||
extern aCommand *find_Command_simple(char *cmd);
|
||||
extern aChannel *find_channel(char *, aChannel *);
|
||||
extern Membership *find_membership_link(Membership *lp, aChannel *ptr);
|
||||
extern Member *find_member_link(Member *, aClient *);
|
||||
extern void remove_user_from_channel(aClient *, aChannel *);
|
||||
extern char *base64enc(long);
|
||||
extern long base64dec(char *);
|
||||
extern void add_server_to_table(aClient *);
|
||||
extern void remove_server_from_table(aClient *);
|
||||
extern void iNAH_host(aClient *sptr, char *host);
|
||||
extern void set_snomask(aClient *sptr, char *snomask);
|
||||
extern char *get_sno_str(aClient *sptr);
|
||||
extern aChannel *find_channel PROTO((char *, aChannel *));
|
||||
extern void remove_user_from_channel PROTO((aClient *, aChannel *));
|
||||
/* for services */
|
||||
extern void del_invite(aClient *, aChannel *);
|
||||
extern int add_silence(aClient *, char *, int);
|
||||
extern int del_silence(aClient *, char *);
|
||||
extern void send_user_joins(aClient *, aClient *);
|
||||
extern void clean_channelname(char *);
|
||||
extern int do_nick_name(char *);
|
||||
extern int can_send(aClient *, aChannel *, char *, int);
|
||||
extern long get_access(aClient *, aChannel *);
|
||||
extern int is_chan_op(aClient *, aChannel *);
|
||||
extern int has_voice(aClient *, aChannel *);
|
||||
extern int is_chanowner(aClient *, aChannel *);
|
||||
extern Ban *is_banned(aClient *, aChannel *, int);
|
||||
extern int parse_help(aClient *, char *, char *);
|
||||
extern void del_invite PROTO((aClient *, aChannel *));
|
||||
extern int del_silence PROTO((aClient *, char *));
|
||||
extern void send_user_joins PROTO((aClient *, aClient *));
|
||||
extern void clean_channelname PROTO((char *));
|
||||
extern int do_nick_name PROTO((char *));
|
||||
extern int can_send PROTO((aClient *, aChannel *, char *));
|
||||
extern int is_chan_op PROTO((aClient *, aChannel *));
|
||||
extern int is_zombie PROTO((aClient *, aChannel *));
|
||||
extern int has_voice PROTO((aClient *, aChannel *));
|
||||
extern int is_chanowner PROTO((aClient *, aChannel *));
|
||||
extern int count_channels PROTO((aClient *));
|
||||
extern Ban *is_banned PROTO((aClient *, aClient *, aChannel *));
|
||||
extern int parse_help PROTO((aClient *, char *, char *));
|
||||
|
||||
extern void ircd_log(int, char *, ...) __attribute__((format(printf,2,3)));
|
||||
extern aClient *find_client(char *, aClient *);
|
||||
extern aClient *find_name(char *, aClient *);
|
||||
extern aClient *find_nickserv(char *, aClient *);
|
||||
extern aClient *find_person(char *, aClient *);
|
||||
extern aClient *find_server(char *, aClient *);
|
||||
extern aClient *find_server_quickx(char *, aClient *);
|
||||
extern aClient *find_service(char *, aClient *);
|
||||
#define find_server_quick(x) find_server_quickx(x, NULL)
|
||||
extern char *find_or_add(char *);
|
||||
extern int attach_conf(aClient *, aConfItem *);
|
||||
extern void inittoken();
|
||||
extern void reset_help();
|
||||
extern void ircd_log PROTO((char *, ...));
|
||||
extern aClient *find_client PROTO((char *, aClient *));
|
||||
extern aClient *find_name PROTO((char *, aClient *));
|
||||
extern aClient *find_nickserv PROTO((char *, aClient *));
|
||||
extern aClient *find_person PROTO((char *, aClient *));
|
||||
extern aClient *find_server PROTO((char *, aClient *));
|
||||
extern aClient *find_service PROTO((char *, aClient *));
|
||||
|
||||
extern char *debugmode, *configfile, *sbrk0;
|
||||
extern char *getfield(char *);
|
||||
extern void get_sockhost(aClient *, char *);
|
||||
extern char *strerror(int);
|
||||
extern int dgets(int, char *, int);
|
||||
extern char *inetntoa(char *);
|
||||
extern char *find_or_add PROTO((char *));
|
||||
extern int attach_conf PROTO((aClient *, aConfItem *));
|
||||
extern aConfItem *attach_confs PROTO((aClient*, char *, int));
|
||||
extern aConfItem *attach_confs_host PROTO((aClient*, char *, int));
|
||||
extern int attach_Iline PROTO((aClient *, struct hostent *, char *));
|
||||
extern aConfItem *conf, *find_me PROTO(()), *find_admin PROTO(());
|
||||
extern aConfItem *count_cnlines PROTO((Link *));
|
||||
extern aSqlineItem *sqline;
|
||||
extern void det_confs_butmask PROTO((aClient *, int));
|
||||
extern int detach_conf PROTO((aClient *, aConfItem *));
|
||||
extern aSqlineItem *find_sqline_nick PROTO((char *));
|
||||
extern aSqlineItem *find_sqline_match PROTO((char *));
|
||||
extern aConfItem *det_confs_butone PROTO((aClient *, aConfItem *));
|
||||
extern char *find_diepass();
|
||||
extern char *find_restartpass();
|
||||
extern aConfItem *find_conf PROTO((Link *, char*, int));
|
||||
extern aConfItem *find_conf_exact PROTO((char *, char *, char *, int));
|
||||
extern aConfItem *find_conf_host PROTO((Link *, char *, int));
|
||||
extern aConfItem *find_conf_ip PROTO((Link *, char *, char *, int));
|
||||
extern aConfItem *find_conf_name PROTO((char *, int));
|
||||
extern aConfItem *find_temp_conf_entry PROTO((aConfItem *, u_int));
|
||||
extern aConfItem *find_conf_servern PROTO((char *));
|
||||
extern int find_kill PROTO((aClient *));
|
||||
extern char *find_zap PROTO((aClient *, int));
|
||||
extern int find_restrict PROTO((aClient *));
|
||||
extern int rehash PROTO((aClient *, aClient *, int));
|
||||
extern int initconf PROTO((int));
|
||||
extern void add_temp_conf();
|
||||
extern void inittoken PROTO(());
|
||||
extern void reset_help PROTO(());
|
||||
extern int find_exception(char *); /* hidden host */
|
||||
|
||||
#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
|
||||
/* #ifndef _WIN32 XXX why was this?? -- Syzop. */
|
||||
extern int snprintf (char *str, size_t count, const char *fmt, ...);
|
||||
extern int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
|
||||
/* #endif */
|
||||
#endif
|
||||
extern char *MyMalloc PROTO((int)), *MyRealloc PROTO((char *, int));
|
||||
|
||||
extern char *debugmode, *configfile, *sbrk0;
|
||||
extern char *getfield PROTO((char *));
|
||||
extern void get_sockhost PROTO((aClient *, char *));
|
||||
extern char *rpl_str PROTO((int)), *err_str PROTO((int));
|
||||
extern char *strerror PROTO((int));
|
||||
extern int dgets PROTO((int, char *, int));
|
||||
extern char *inetntoa PROTO((char *));
|
||||
|
||||
#ifdef _WIN32
|
||||
extern int dbufalloc, dbufblocks, debuglevel;
|
||||
extern int dbufalloc, dbufblocks, debuglevel;
|
||||
#else
|
||||
extern int dbufalloc, dbufblocks, debuglevel, errno, h_errno;
|
||||
extern int dbufalloc, dbufblocks, debuglevel, errno, h_errno;
|
||||
#endif
|
||||
extern short LastSlot; /* last used index in local client array */
|
||||
extern int OpenFiles; /* number of files currently open */
|
||||
extern int debuglevel, portnum, debugtty, maxusersperchannel;
|
||||
extern int readcalls, udpfd, resfd;
|
||||
extern aClient *add_connection(aClient *, int);
|
||||
extern int add_listener(aConfItem *);
|
||||
extern void add_local_domain(char *, int);
|
||||
extern int check_client(aClient *, char *);
|
||||
extern int check_server(aClient *, struct hostent *, aConfItem *,
|
||||
aConfItem *, int);
|
||||
extern int check_server_init(aClient *);
|
||||
extern void close_connection(aClient *);
|
||||
extern void close_listeners();
|
||||
extern int connect_server(ConfigItem_link *, aClient *, struct hostent *);
|
||||
extern void get_my_name(aClient *, char *, int);
|
||||
extern int get_sockerr(aClient *);
|
||||
extern int inetport(aClient *, char *, int);
|
||||
extern void init_sys();
|
||||
extern void init_modef();
|
||||
extern int highest_fd, debuglevel, portnum, debugtty, maxusersperchannel;
|
||||
extern int readcalls, udpfd, resfd;
|
||||
extern aClient *add_connection PROTO((aClient *, int));
|
||||
extern int add_listener PROTO((aConfItem *));
|
||||
extern void add_local_domain PROTO((char *, int));
|
||||
extern int check_client PROTO((aClient *));
|
||||
extern int check_server PROTO((aClient *, struct hostent *, \
|
||||
aConfItem *, aConfItem *, int));
|
||||
extern int check_server_init PROTO((aClient *));
|
||||
extern void close_connection PROTO((aClient *));
|
||||
extern void close_listeners PROTO(());
|
||||
extern int connect_server PROTO((aConfItem *, aClient *, struct hostent *));
|
||||
extern void get_my_name PROTO((aClient *, char *, int));
|
||||
extern int get_sockerr PROTO((aClient *));
|
||||
extern int inetport PROTO((aClient *, char *, int));
|
||||
extern void init_sys PROTO(());
|
||||
|
||||
#ifdef NO_FDLIST
|
||||
extern int read_message(time_t);
|
||||
extern int read_message PROTO((time_t));
|
||||
#else
|
||||
extern int read_message(time_t, fdlist *);
|
||||
extern int read_message PROTO((time_t, fdlist *));
|
||||
#endif
|
||||
|
||||
extern void report_error(char *, aClient *);
|
||||
extern void set_non_blocking(int, aClient *);
|
||||
extern int setup_ping();
|
||||
extern void report_error PROTO((char *, aClient *));
|
||||
extern void set_non_blocking PROTO((int, aClient *));
|
||||
extern int setup_ping PROTO(());
|
||||
extern void summon PROTO((aClient *, char *, char *, char *));
|
||||
extern int unixport PROTO((aClient *, char *, int));
|
||||
extern int utmp_open PROTO(());
|
||||
extern int utmp_read PROTO((int, char *, char *, char *, int));
|
||||
extern int utmp_close PROTO((int));
|
||||
|
||||
extern void start_auth(aClient *);
|
||||
extern void read_authports(aClient *);
|
||||
extern void send_authports(aClient *);
|
||||
extern void start_auth PROTO((aClient *));
|
||||
extern void read_authports PROTO((aClient *));
|
||||
extern void send_authports PROTO((aClient *));
|
||||
|
||||
#ifdef SOCKSPORT
|
||||
extern void init_socks PROTO((aClient *));
|
||||
extern void start_socks PROTO((aClient *));
|
||||
extern void send_socksquery PROTO((aClient *));
|
||||
extern void read_socks PROTO((aClient *));
|
||||
#endif
|
||||
|
||||
extern void restart(char *);
|
||||
extern void send_channel_modes(aClient *, aChannel *);
|
||||
extern void server_reboot(char *);
|
||||
extern void terminate(), write_pidfile();
|
||||
extern void *MyMallocEx(size_t size);
|
||||
extern int advanced_check(char *userhost, int ipstat);
|
||||
extern int send_queued(aClient *);
|
||||
extern void restart PROTO((char *));
|
||||
extern void send_channel_modes PROTO((aClient *, aChannel *));
|
||||
extern void server_reboot PROTO((char *));
|
||||
extern void terminate PROTO(()), write_pidfile PROTO(());
|
||||
|
||||
extern int send_queued PROTO((aClient *));
|
||||
/*VARARGS2*/
|
||||
// extern void sendto_one(char *, ...);
|
||||
/*VARARGS4*/
|
||||
/* i know this is naughty but :P --stskeeps */
|
||||
extern void send_channel_modes_sjoin(aClient *cptr, aChannel *chptr);
|
||||
extern void send_channel_modes_sjoin3(aClient *cptr, aChannel *chptr);
|
||||
extern void sendto_locfailops(char *pattern, ...) __attribute__((format(printf,1,2)));
|
||||
extern void sendto_connectnotice(char *nick, anUser *user, aClient *sptr, int disconnect, char *comment);
|
||||
extern void sendto_serv_butone_nickcmd(aClient *one, aClient *sptr, char *nick, int hopcount,
|
||||
long lastnick, char *username, char *realhost, char *server, long servicestamp, char *info, char *umodes,
|
||||
char *virthost);
|
||||
extern void sendto_message_one(aClient *to, aClient *from, char *sender,
|
||||
char *cmd, char *nick, char *msg);
|
||||
#define PREFIX_ALL 0
|
||||
#define PREFIX_HALFOP 0x1
|
||||
#define PREFIX_VOICE 0x2
|
||||
#define PREFIX_OP 0x4
|
||||
#define PREFIX_ADMIN 0x08
|
||||
#define PREFIX_OWNER 0x10
|
||||
extern void sendto_channelprefix_butone(aClient *one, aClient *from, aChannel *chptr,
|
||||
int prefix, char *pattern, ...) __attribute__((format(printf,5,6)));
|
||||
extern void sendto_channelprefix_butone_tok(aClient *one, aClient *from, aChannel *chptr,
|
||||
int prefix, char *cmd, char *tok, char *nick, char *text, char do_send_check);
|
||||
extern void sendto_channel_butone(aClient *, aClient *, aChannel *,
|
||||
char *, ...) __attribute__((format(printf,4,5)));
|
||||
extern void sendto_channel_butserv_butone(aChannel *chptr, aClient *from, aClient *one,
|
||||
char *pattern, ...) __attribute__((format(printf,4,5)));
|
||||
extern void sendto_serv_butone(aClient *, char *, ...) __attribute__((format(printf,2,3)));
|
||||
extern void sendto_serv_butone_quit(aClient *, char *, ...) __attribute__((format(printf,2,3)));
|
||||
extern void sendto_serv_butone_sjoin(aClient *, char *, ...) __attribute__((format(printf,2,3)));
|
||||
extern void sendto_serv_sjoin(aClient *, char *, ...) __attribute__((format(printf,2,3)));
|
||||
extern void sendto_common_channels(aClient *, char *, ...) __attribute__((format(printf,2,3)));
|
||||
extern void sendto_channel_butserv(aChannel *, aClient *, char *, ...) __attribute__((format(printf,3,4)));
|
||||
extern void sendto_match_servs(aChannel *, aClient *, char *, ...) __attribute__((format(printf,3,4)));
|
||||
extern void sendto_match_butone(aClient *, aClient *, char *, int,
|
||||
char *pattern, ...) __attribute__((format(printf,5,6)));
|
||||
extern void sendto_all_butone(aClient *, aClient *, char *, ...) __attribute__((format(printf,3,4)));
|
||||
extern void sendto_ops(char *, ...) __attribute__((format(printf,1,2)));
|
||||
extern void sendto_ops_butone(aClient *, aClient *, char *, ...) __attribute__((format(printf,3,4)));
|
||||
extern void sendto_ops_butme(aClient *, char *, ...) __attribute__((format(printf,2,3)));
|
||||
extern void sendto_prefix_one(aClient *, aClient *, const char *, ...) __attribute__((format(printf,3,4)));
|
||||
extern void sendto_failops_whoare_opers(char *, ...) __attribute__((format(printf,1,2)));
|
||||
extern void sendto_failops(char *, ...) __attribute__((format(printf,1,2)));
|
||||
extern void sendto_opers(char *, ...) __attribute__((format(printf,1,2)));
|
||||
extern void sendto_umode(int, char *, ...) __attribute__((format(printf,2,3)));
|
||||
extern void sendto_umode_raw(int, char *, ...) __attribute__((format(printf,2,3)));
|
||||
extern void sendto_snomask(int snomask, char *pattern, ...) __attribute__((format(printf,2,3)));
|
||||
extern void sendnotice(aClient *to, char *pattern, ...) __attribute__((format(printf,2,3)));
|
||||
extern int writecalls, writeb[];
|
||||
extern int deliver_it(aClient *, char *, int);
|
||||
extern int check_for_chan_flood(aClient *cptr, aClient *sptr, aChannel *chptr);
|
||||
extern int check_for_target_limit(aClient *sptr, void *target, const char *name);
|
||||
extern char *stripbadwords_message(char *str, int *);
|
||||
extern char *stripbadwords_channel(char *str, int *);
|
||||
extern char *stripbadwords_quit(char *str, int *);
|
||||
extern char *stripbadwords(char *, ConfigItem_badword *, int *);
|
||||
extern unsigned char *StripColors(unsigned char *);
|
||||
extern const char *StripControlCodes(unsigned char *text);
|
||||
extern char *canonize(char *buffer);
|
||||
extern int webtv_parse(aClient *sptr, char *string);
|
||||
extern ConfigItem_deny_dcc *dcc_isforbidden(aClient *cptr, aClient *sptr, aClient *target, char *filename);
|
||||
extern int check_registered(aClient *);
|
||||
extern int check_registered_user(aClient *);
|
||||
extern char *get_client_name(aClient *, int);
|
||||
extern char *get_client_host(aClient *);
|
||||
extern char *myctime(time_t), *date(time_t);
|
||||
extern int exit_client(aClient *, aClient *, aClient *, char *);
|
||||
extern void initstats(), tstats(aClient *, char *);
|
||||
extern char *check_string(char *);
|
||||
extern char *make_nick_user_host(char *, char *, char *);
|
||||
extern char *make_user_host(char *, char *);
|
||||
extern int parse(aClient *, char *, char *);
|
||||
extern int do_numeric(int, aClient *, aClient *, int, char **);
|
||||
extern int hunt_server(aClient *, aClient *, char *, int, int, char **);
|
||||
extern int hunt_server_token(aClient *, aClient *, char *, char *, char *, int, int, char **);
|
||||
extern int hunt_server_token_quiet(aClient *, aClient *, char *, char *, char *, int, int, char **);
|
||||
extern aClient *next_client(aClient *, char *);
|
||||
extern int m_umode(aClient *, aClient *, int, char **);
|
||||
extern int m_names(aClient *, aClient *, int, char **);
|
||||
extern int m_server_estab(aClient *);
|
||||
extern void umode_init(void);
|
||||
extern long umode_get(char, int, int (*)(aClient *, int));
|
||||
#define UMODE_GLOBAL 1
|
||||
#define UMODE_LOCAL 0
|
||||
#define umode_lget(x) umode_get(x, 0, 0);
|
||||
#define umode_gget(x) umode_get(x, 1, 0);
|
||||
extern int umode_allow_all(aClient *sptr, int what);
|
||||
extern int umode_allow_opers(aClient *sptr, int what);
|
||||
extern int umode_delete(char ch, long val);
|
||||
extern void send_umode(aClient *, aClient *, long, long, char *);
|
||||
extern void send_umode_out(aClient *, aClient *, long);
|
||||
extern void sendto_channel_butone(aClient *, aClient *, aChannel *, char *, ...);
|
||||
extern void sendto_channelops_butone(aClient *, aClient *, aChannel *, char *, ...);
|
||||
extern void sendto_channelvoice_butone(aClient *, aClient *, aChannel *, char *, ...);
|
||||
/*VARARGS2*/
|
||||
extern void sendto_serv_butone(aClient *, char *, ...);
|
||||
/*VARARGS2*/
|
||||
extern void sendto_serv_butone_quit(aClient *, char *, ...);
|
||||
extern void sendto_serv_butone_sjoin(aClient *, char *, ...);
|
||||
extern void sendto_serv_sjoin(aClient *, char *, ...);
|
||||
/*VARARGS2*/
|
||||
|
||||
extern void free_client(aClient *);
|
||||
extern void free_link(Link *);
|
||||
extern void free_ban(Ban *);
|
||||
extern void free_class(aClass *);
|
||||
extern void free_user(anUser *, aClient *);
|
||||
extern int find_str_match_link(Link *, char *);
|
||||
extern void free_str_list(Link *);
|
||||
extern Link *make_link();
|
||||
extern Ban *make_ban();
|
||||
extern anUser *make_user(aClient *);
|
||||
extern aClass *make_class();
|
||||
extern aServer *make_server();
|
||||
extern aClient *make_client(aClient *, aClient *);
|
||||
extern Link *find_user_link(Link *, aClient *);
|
||||
extern Member *find_channel_link(Member *, aChannel *);
|
||||
extern char *pretty_mask(char *);
|
||||
extern void add_client_to_list(aClient *);
|
||||
extern void checklist();
|
||||
extern void remove_client_from_list(aClient *);
|
||||
extern void initlists();
|
||||
extern struct hostent *get_res(char *);
|
||||
extern struct hostent *gethost_byaddr(char *, Link *);
|
||||
extern struct hostent *gethost_byname(char *, Link *);
|
||||
extern void flush_cache();
|
||||
extern int init_resolver(int);
|
||||
extern time_t timeout_query_list(time_t);
|
||||
extern time_t expire_cache(time_t);
|
||||
extern void del_queries(char *);
|
||||
extern void sendto_common_channels(aClient *, char *, ...);
|
||||
/*VARARGS3*/
|
||||
extern void sendto_channel_butserv(aChannel *, aClient *, char *, ...);
|
||||
/*VARARGS3*/
|
||||
extern void sendto_match_servs(aChannel *, aClient *, char *, ...);
|
||||
/*VARARGS5*/
|
||||
extern void sendto_match_butone(aClient *, aClient *, char *, int, char *pattern, ...);
|
||||
/*VARARGS3*/
|
||||
extern void sendto_all_butone(aClient *, aClient *, char *, ...);
|
||||
/*VARARGS1*/
|
||||
extern void sendto_ops(char *, ...);
|
||||
/*VARARGS3*/
|
||||
extern void sendto_ops_butone(aClient *, aClient *, char *, ...);
|
||||
/*VARARGS3*/
|
||||
extern void sendto_ops_butme(aClient *, char *, ...);
|
||||
/*VARARGS3*/
|
||||
extern void sendto_prefix_one(aClient *, aClient *, const char *, ...);
|
||||
/*VARARGS3*/
|
||||
extern void sendto_failops_whoare_opers(char *, ...);
|
||||
/*VARARGS3*/
|
||||
extern void sendto_failops(char *, ...);
|
||||
/*VARARGS3*/
|
||||
extern void sendto_opers(char *, ...);
|
||||
/*VARARGS?*/
|
||||
extern void sendto_umode(int, char *, ...);
|
||||
extern void sendto_conn_hcn(char *, ...);
|
||||
extern int writecalls, writeb[];
|
||||
extern int deliver_it PROTO((aClient *, char *, int));
|
||||
|
||||
extern void clear_channel_hash_table();
|
||||
extern void clear_client_hash_table();
|
||||
extern void clear_watch_hash_table();
|
||||
extern int add_to_client_hash_table(char *, aClient *);
|
||||
extern int del_from_client_hash_table(char *, aClient *);
|
||||
extern int add_to_channel_hash_table(char *, aChannel *);
|
||||
extern int del_from_channel_hash_table(char *, aChannel *);
|
||||
extern int add_to_watch_hash_table(char *, aClient *);
|
||||
extern int del_from_watch_hash_table(char *, aClient *);
|
||||
extern int hash_check_watch(aClient *, int);
|
||||
extern int hash_del_watch_list(aClient *);
|
||||
extern void count_watch_memory(int *, u_long *);
|
||||
extern aWatch *hash_get_watch(char *);
|
||||
extern aChannel *hash_get_chan_bucket(unsigned int);
|
||||
extern aClient *hash_find_client(char *, aClient *);
|
||||
extern aClient *hash_find_nickserver(char *, aClient *);
|
||||
extern aClient *hash_find_server(char *, aClient *);
|
||||
extern char *find_by_aln(char *);
|
||||
extern char *convert2aln(int);
|
||||
extern int convertfromaln(char *);
|
||||
extern char *find_server_aln(char *);
|
||||
extern time_t atime(char *xtime);
|
||||
extern int check_registered PROTO((aClient *));
|
||||
extern int check_registered_user PROTO((aClient *));
|
||||
extern char *get_client_name PROTO((aClient *, int));
|
||||
extern char *get_client_host PROTO((aClient *));
|
||||
extern char *my_name_for_link PROTO((char *, aConfItem *));
|
||||
extern char *myctime PROTO((time_t)), *date PROTO((time_t));
|
||||
extern int exit_client PROTO((aClient *, aClient *, aClient *, char *));
|
||||
extern void initstats PROTO(()), tstats PROTO((aClient *, char *));
|
||||
extern char *check_string PROTO((char *));
|
||||
extern char *make_nick_user_host PROTO((char *, char *, char *));
|
||||
|
||||
extern int parse PROTO((aClient *, char *, char *, struct Message *));
|
||||
extern int do_numeric PROTO((int, aClient *, aClient *, int, char **));
|
||||
extern int hunt_server PROTO((aClient *,aClient *,char *,int,int,char **));
|
||||
extern aClient *next_client PROTO((aClient *, char *));
|
||||
extern int m_umode PROTO((aClient *, aClient *, int, char **));
|
||||
extern int m_names PROTO((aClient *, aClient *, int, char **));
|
||||
extern int m_server_estab PROTO((aClient *));
|
||||
extern void send_umode PROTO((aClient *, aClient *, int, int, char *));
|
||||
extern void send_umode_out PROTO((aClient*, aClient *, int));
|
||||
|
||||
/* Mode externs
|
||||
*/
|
||||
extern long UMODE_INVISIBLE; /* 0x0001 makes user invisible */
|
||||
extern long UMODE_OPER; /* 0x0002 Operator */
|
||||
extern long UMODE_WALLOP; /* 0x0004 send wallops to them */
|
||||
extern long UMODE_FAILOP; /* 0x0008 Shows some global messages */
|
||||
extern long UMODE_HELPOP; /* 0x0010 Help system operator */
|
||||
extern long UMODE_REGNICK; /* 0x0020 Nick set by services as registered */
|
||||
extern long UMODE_SADMIN; /* 0x0040 Services Admin */
|
||||
extern long UMODE_ADMIN; /* 0x0080 Admin */
|
||||
extern long UMODE_SERVNOTICE;/* 0x0100 server notices such as kill */
|
||||
extern long UMODE_LOCOP; /* 0x0200 Local operator -- SRB */
|
||||
extern long UMODE_RGSTRONLY; /* 0x0400 Only reg nick message */
|
||||
extern long UMODE_WEBTV; /* 0x0800 WebTV Client */
|
||||
extern long UMODE_SERVICES; /* 0x4000 services */
|
||||
extern long UMODE_HIDE; /* 0x8000 Hide from Nukes */
|
||||
extern long UMODE_NETADMIN; /* 0x10000 Network Admin */
|
||||
extern long UMODE_COADMIN; /* 0x80000 Co Admin */
|
||||
extern long UMODE_WHOIS; /* 0x100000 gets notice on /whois */
|
||||
extern long UMODE_KIX; /* 0x200000 usermode +q */
|
||||
extern long UMODE_BOT; /* 0x400000 User is a bot */
|
||||
extern long UMODE_SECURE; /* 0x800000 User is a secure connect */
|
||||
extern long UMODE_VICTIM; /* 0x8000000 Intentional Victim */
|
||||
extern long UMODE_DEAF; /* 0x10000000 Deaf */
|
||||
extern long UMODE_HIDEOPER; /* 0x20000000 Hide oper mode */
|
||||
extern long UMODE_SETHOST; /* 0x40000000 used sethost */
|
||||
extern long UMODE_STRIPBADWORDS; /* 0x80000000 */
|
||||
extern long UMODE_HIDEWHOIS; /* hides channels in /whois */
|
||||
extern long UMODE_NOCTCP; /* blocks all ctcp (except dcc and action) */
|
||||
extern long AllUmodes, SendUmodes;
|
||||
extern void free_client PROTO((aClient *));
|
||||
extern void free_link PROTO((Link *));
|
||||
extern void free_ban PROTO((Ban *));
|
||||
extern void free_conf PROTO((aConfItem *));
|
||||
extern void free_class PROTO((aClass *));
|
||||
extern void free_user PROTO((anUser *, aClient *));
|
||||
extern int find_str_match_link PROTO((Link **, char *));
|
||||
extern void free_str_list PROTO ((Link *));
|
||||
extern Link *make_link PROTO(());
|
||||
extern Ban *make_ban PROTO(());
|
||||
extern anUser *make_user PROTO((aClient *));
|
||||
extern aSqlineItem *make_sqline PROTO(());
|
||||
extern aConfItem *make_conf PROTO(());
|
||||
extern aClass *make_class PROTO(());
|
||||
extern aServer *make_server PROTO(());
|
||||
extern aClient *make_client PROTO((aClient *, aClient *));
|
||||
extern Link *find_user_link PROTO((Link *, aClient *));
|
||||
extern Link *find_channel_link PROTO((Link *, aChannel *));
|
||||
extern char *pretty_mask PROTO((char *));
|
||||
extern void add_client_to_list PROTO((aClient *));
|
||||
extern void checklist PROTO(());
|
||||
extern void remove_client_from_list PROTO((aClient *));
|
||||
extern void initlists PROTO(());
|
||||
|
||||
extern long SNO_KILLS;
|
||||
extern long SNO_CLIENT;
|
||||
extern long SNO_FLOOD;
|
||||
extern long SNO_FCLIENT;
|
||||
extern long SNO_JUNK;
|
||||
extern long SNO_VHOST;
|
||||
extern long SNO_EYES;
|
||||
extern long SNO_TKL;
|
||||
extern long SNO_NICKCHANGE;
|
||||
extern long SNO_FNICKCHANGE;
|
||||
extern long SNO_QLINE;
|
||||
extern long SNO_SNOTICE;
|
||||
extern long SNO_SPAMF;
|
||||
extern void add_class PROTO((int, int, int, int, long));
|
||||
extern void fix_class PROTO((aConfItem *, aConfItem *));
|
||||
extern long get_sendq PROTO((aClient *));
|
||||
extern int get_con_freq PROTO((aClass *));
|
||||
extern int get_client_ping PROTO((aClient *));
|
||||
extern int get_client_class PROTO((aClient *));
|
||||
extern int get_conf_class PROTO((aConfItem *));
|
||||
extern void report_classes PROTO((aClient *));
|
||||
|
||||
#ifdef EXTCMODE
|
||||
/* Extended chanmodes... */
|
||||
extern Cmode_t EXTMODE_NONOTICE;
|
||||
#endif
|
||||
extern struct hostent *get_res PROTO((char *));
|
||||
extern struct hostent *gethost_byaddr PROTO((char *, Link *));
|
||||
extern struct hostent *gethost_byname PROTO((char *, Link *));
|
||||
extern void flush_cache PROTO(());
|
||||
extern int init_resolver PROTO((int));
|
||||
extern time_t timeout_query_list PROTO((time_t));
|
||||
extern time_t expire_cache PROTO((time_t));
|
||||
extern void del_queries PROTO((char *));
|
||||
|
||||
#ifndef HAVE_STRLCPY
|
||||
size_t strlcpy(char *dst, const char *src, size_t size);
|
||||
#endif
|
||||
#ifndef HAVE_STRLCAT
|
||||
size_t strlcat(char *dst, const char *src, size_t size);
|
||||
#endif
|
||||
#ifndef HAVE_STRLNCAT
|
||||
size_t strlncat(char *dst, const char *src, size_t size, size_t n);
|
||||
#endif
|
||||
extern void clear_channel_hash_table PROTO(());
|
||||
extern void clear_client_hash_table PROTO(());
|
||||
extern void clear_notify_hash_table PROTO(());
|
||||
extern int add_to_client_hash_table PROTO((char *, aClient *));
|
||||
extern int del_from_client_hash_table PROTO((char *, aClient *));
|
||||
extern int add_to_channel_hash_table PROTO((char *, aChannel *));
|
||||
extern int del_from_channel_hash_table PROTO((char *, aChannel *));
|
||||
extern int add_to_notify_hash_table PROTO((char *, aClient *));
|
||||
extern int del_from_notify_hash_table PROTO((char *, aClient *));
|
||||
extern int hash_check_notify PROTO((aClient *, int));
|
||||
extern int hash_del_notify_list PROTO((aClient *));
|
||||
extern void count_watch_memory PROTO((int *, u_long *));
|
||||
extern aNotify *hash_get_notify PROTO((char *));
|
||||
extern aChannel *hash_get_chan_bucket PROTO((int));
|
||||
extern aClient *hash_find_client PROTO((char *, aClient *));
|
||||
extern aClient *hash_find_nickserver PROTO((char *, aClient *));
|
||||
extern aClient *hash_find_server PROTO((char *, aClient *));
|
||||
extern char *find_by_aln PROTO((char *));
|
||||
extern char *convert2aln PROTO((int));
|
||||
extern int convertfromaln PROTO((char *));
|
||||
extern char *find_server_aln PROTO((char *));
|
||||
extern int dopacket PROTO((aClient *, char *, int));
|
||||
|
||||
|
||||
extern int dopacket(aClient *, char *, int);
|
||||
|
||||
extern void debug(int, char *, ...);
|
||||
/*VARARGS2*/
|
||||
extern void debug();
|
||||
#if defined(DEBUGMODE)
|
||||
extern void send_usage(aClient *, char *);
|
||||
extern void send_listinfo(aClient *, char *);
|
||||
extern void count_memory(aClient *, char *);
|
||||
extern void send_usage PROTO((aClient *, char *));
|
||||
extern void send_listinfo PROTO((aClient *, char *));
|
||||
extern void count_memory PROTO((aClient *, char *));
|
||||
#endif
|
||||
|
||||
#ifdef INET6
|
||||
extern char *inetntop(int af, const void *in, char *local_dummy,
|
||||
size_t the_size);
|
||||
extern char *inetntop(int af, const void *in, char *local_dummy, size_t the_size);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* socket.c
|
||||
*/
|
||||
|
||||
char *Inet_si2p(struct SOCKADDR_IN *sin);
|
||||
char *Inet_si2pB(struct SOCKADDR_IN *sin, char *buf, int sz);
|
||||
char *Inet_ia2p(struct IN_ADDR *ia);
|
||||
char *Inet_ia2pNB(struct IN_ADDR *ia, int compressed);
|
||||
|
||||
/*
|
||||
* CommandHash -Stskeeps
|
||||
*/
|
||||
extern aCommand *CommandHash[256];
|
||||
extern aCommand *TokenHash[256];
|
||||
extern void init_CommandHash(void);
|
||||
extern aCommand *add_Command_backend(char *cmd, int (*func)(), unsigned char parameters, unsigned char token, int flags);
|
||||
extern void add_Command(char *cmd, char *token, int (*func)(), unsigned char parameters);
|
||||
extern void add_Command_to_list(aCommand *item, aCommand **list);
|
||||
extern aCommand *del_Command_from_list(aCommand *item, aCommand **list);
|
||||
extern int del_Command(char *cmd, char *token, int (*func)());
|
||||
extern void add_CommandX(char *cmd, char *token, int (*func)(), unsigned char parameters, int flags);
|
||||
|
||||
/* CRULE */
|
||||
char *crule_parse(char *);
|
||||
int crule_test(char *);
|
||||
char *crule_errstring(int);
|
||||
int crule_eval(char *);
|
||||
void crule_free(char **);
|
||||
|
||||
/* Add clients to LocalClients array */
|
||||
extern void add_local_client(aClient* cptr);
|
||||
/* Remove clients from LocalClients array */
|
||||
extern void remove_local_client(aClient* cptr);
|
||||
/*
|
||||
* Close all local socket connections, invalidate client fd's
|
||||
* WIN32 cleanup winsock lib
|
||||
*/
|
||||
extern void close_connections(void);
|
||||
extern void flush_connections(aClient *cptr);
|
||||
|
||||
extern int b64_encode(unsigned char const *src, size_t srclength, char *target, size_t targsize);
|
||||
extern int b64_decode(char const *src, unsigned char *target, size_t targsize);
|
||||
|
||||
extern int Auth_FindType(char *type);
|
||||
extern anAuthStruct *Auth_ConvertConf2AuthStruct(ConfigEntry *ce);
|
||||
extern void Auth_DeleteAuthStruct(anAuthStruct *as);
|
||||
extern int Auth_Check(aClient *cptr, anAuthStruct *as, char *para);
|
||||
extern char *Auth_Make(short type, char *para);
|
||||
extern int Auth_CheckError(ConfigEntry *ce);
|
||||
|
||||
extern long xbase64dec(char *b64);
|
||||
extern aClient *find_server_b64_or_real(char *name);
|
||||
extern aClient *find_server_by_base64(char *b64);
|
||||
extern int is_chanownprotop(aClient *cptr, aChannel *chptr);
|
||||
extern int is_skochanop(aClient *cptr, aChannel *chptr);
|
||||
extern char *make_virthost(char *curr, char *new, int mode);
|
||||
extern int channel_canjoin(aClient *sptr, char *name);
|
||||
extern char *collapse(char *pattern);
|
||||
extern void send_list(aClient *cptr, int numsend);
|
||||
extern int find_tkline_match_zap(aClient *cptr);
|
||||
extern int find_shun(aClient *cptr);
|
||||
extern aTKline *find_qline(aClient *cptr, char *nick, int *ishold);
|
||||
extern void tkl_synch(aClient *sptr);
|
||||
extern void dcc_sync(aClient *sptr);
|
||||
extern void report_flines(aClient *sptr);
|
||||
extern void report_network(aClient *sptr);
|
||||
extern void report_dynconf(aClient *sptr);
|
||||
extern void count_memory(aClient *cptr, char *nick);
|
||||
extern void list_scache(aClient *sptr);
|
||||
extern void ns_stats(aClient *cptr);
|
||||
extern char *oflagstr(long oflag);
|
||||
extern int rehash(aClient *cptr, aClient *sptr, int sig);
|
||||
extern int _match(char *mask, char *name);
|
||||
extern void outofmemory(void);
|
||||
extern unsigned long our_crc32(const unsigned char *s, unsigned int len);
|
||||
extern int add_listener2(ConfigItem_listen *conf);
|
||||
extern void link_cleanup(ConfigItem_link *link_ptr);
|
||||
extern void listen_cleanup();
|
||||
extern int numeric_collides(long numeric);
|
||||
extern u_long cres_mem(aClient *sptr, char *nick);
|
||||
extern void flag_add(char ch);
|
||||
extern void flag_del(char ch);
|
||||
extern void init_dynconf(void);
|
||||
extern char *pretty_time_val(long);
|
||||
extern int init_conf(char *filename, int rehash);
|
||||
extern void validate_configuration(void);
|
||||
extern void run_configuration(void);
|
||||
extern void rehash_motdrules();
|
||||
extern aMotd *read_file(char *filename, aMotd **list);
|
||||
extern aMotd *read_file_ex(char *filename, aMotd **list, struct tm *);
|
||||
extern CMD_FUNC(m_server_remote);
|
||||
extern void send_proto(aClient *, ConfigItem_link *);
|
||||
extern char *xbase64enc(long i);
|
||||
extern void unload_all_modules(void);
|
||||
extern void flush_fdlist_connections(fdlist * listp);
|
||||
extern int set_blocking(int fd);
|
||||
extern void set_sock_opts(int fd, aClient *cptr);
|
||||
extern void iCstrip(char *line);
|
||||
extern time_t rfc2time(char *s);
|
||||
extern char *rfctime(time_t t, char *buf);
|
||||
extern void *MyMallocEx(size_t size);
|
||||
#ifdef USE_SSL
|
||||
extern char *ssl_get_cipher(SSL *ssl);
|
||||
#endif
|
||||
extern long config_checkval(char *value, unsigned short flags);
|
||||
extern void config_status(char *format, ...) __attribute__((format(printf,1,2)));
|
||||
extern void init_random();
|
||||
extern u_char getrandom8();
|
||||
extern u_int16_t getrandom16();
|
||||
extern u_int32_t getrandom32();
|
||||
extern char trouble_info[1024];
|
||||
#define EVENT_DRUGS BASE_VERSION
|
||||
extern void rejoin_doparts(aClient *sptr);
|
||||
extern void rejoin_dojoinandmode(aClient *sptr);
|
||||
extern void ident_failed(aClient *cptr);
|
||||
|
||||
extern char extchmstr[4][64];
|
||||
extern char extbanstr[EXTBANTABLESZ+1];
|
||||
#ifdef EXTCMODE
|
||||
extern int extcmode_default_requirechop(aClient *, aChannel *, char *, int, int);
|
||||
extern int extcmode_default_requirehalfop(aClient *, aChannel *, char *, int, int);
|
||||
extern Cmode_t extcmode_get(Cmode *);
|
||||
extern void extcmode_init(void);
|
||||
extern CmodeParam *extcmode_get_struct(CmodeParam *, char);
|
||||
extern void make_extcmodestr();
|
||||
extern CmodeParam *extcmode_duplicate_paramlist(CmodeParam *);
|
||||
extern void extcmode_free_paramlist(CmodeParam *);
|
||||
#endif
|
||||
extern int do_chanflood(ChanFloodProt *, int);
|
||||
extern void do_chanflood_action(aChannel *, int, char *);
|
||||
extern char *channel_modef_string(ChanFloodProt *);
|
||||
extern void chmode_str(struct ChMode, char *, char *);
|
||||
extern char *get_cptr_status(aClient *);
|
||||
extern char *get_snostr(long);
|
||||
#ifdef _WIN32
|
||||
extern void InitDebug(void);
|
||||
extern int InitwIRCD(int argc, char **);
|
||||
extern void SocketLoop(void *);
|
||||
#endif
|
||||
#ifdef STATIC_LINKING
|
||||
extern int l_commands_Init(ModuleInfo *);
|
||||
extern int l_commands_Test(ModuleInfo *);
|
||||
extern int l_commands_Load(int);
|
||||
#endif
|
||||
extern void sendto_chmodemucrap(aClient *, aChannel *, char *);
|
||||
extern void verify_opercount(aClient *, char *);
|
||||
extern int place_host_ban(aClient *sptr, int action, char *reason, long time);
|
||||
extern int valid_host(char *host);
|
||||
extern int count_oper_sessions(char *);
|
||||
extern char *unreal_mktemp(char *dir, char *suffix);
|
||||
extern char *unreal_getfilename(char *path);
|
||||
extern int unreal_copyfile(char *src, char *dest);
|
||||
extern time_t unreal_getfilemodtime(char *filename);
|
||||
extern void unreal_setfilemodtime(char *filename, time_t mtime);
|
||||
extern void DeleteTempModules(void);
|
||||
extern Extban *extbaninfo;
|
||||
extern Extban *findmod_by_bantype(char c);
|
||||
extern Extban *ExtbanAdd(Module *reserved, ExtbanInfo req);
|
||||
extern void ExtbanDel(Extban *);
|
||||
extern void extban_init(void);
|
||||
extern char *trim_str(char *str, int len);
|
||||
extern char *ban_realhost, *ban_virthost, *ban_ip;
|
||||
extern void join_channel(aChannel *chptr, aClient *cptr, aClient *sptr, int flags);
|
||||
extern char *unreal_checkregex(char *s, int fastsupport, int check_broadness);
|
||||
extern int banact_stringtoval(char *s);
|
||||
extern char *banact_valtostring(int val);
|
||||
extern int banact_chartoval(char c);
|
||||
extern char banact_valtochar(int val);
|
||||
extern int spamfilter_gettargets(char *s, aClient *sptr);
|
||||
extern char *spamfilter_target_inttostring(int v);
|
||||
extern Spamfilter *unreal_buildspamfilter(char *s);
|
||||
extern int dospamfilter(aClient *sptr, char *str_in, int type, char *target);
|
||||
extern char *our_strcasestr(char *haystack, char *needle);
|
||||
extern int spamfilter_getconftargets(char *s);
|
||||
extern void remove_oper_snomasks(aClient *sptr);
|
||||
extern char *spamfilter_inttostring_long(int v);
|
||||
extern int check_channelmask(aClient *, aClient *, char *);
|
||||
extern aChannel *get_channel(aClient *cptr, char *chname, int flag);
|
||||
extern char backupbuf[];
|
||||
extern void add_invite(aClient *, aChannel *);
|
||||
extern void channel_modes(aClient *, char *, char *, aChannel *);
|
||||
extern char modebuf[BUFSIZE], parabuf[BUFSIZE];
|
||||
extern int op_can_override(aClient *sptr);
|
||||
extern aClient *find_chasing(aClient *sptr, char *user, int *chasing);
|
||||
extern long opermode;
|
||||
extern void do_mode(aChannel *, aClient *, aClient *, int, char **, time_t, int);
|
||||
extern void set_mode(aChannel *, aClient *, int, char **, u_int *,
|
||||
char[MAXMODEPARAMS][MODEBUFLEN + 3], int);
|
||||
extern void add_user_to_channel(aChannel *chptr, aClient *who, int flags);
|
||||
extern int add_banid(aClient *, aChannel *, char *);
|
||||
extern int add_exbanid(aClient *cptr, aChannel *chptr, char *banid);
|
||||
extern void sub1_from_channel(aChannel *);
|
||||
extern aCtab cFlagTab[];
|
||||
extern char *unreal_encodespace(char *s);
|
||||
extern char *unreal_decodespace(char *s);
|
||||
extern Link *helpign;
|
||||
extern aMotd *rules;
|
||||
extern fdlist default_fdlist, busycli_fdlist, serv_fdlist, oper_fdlist;
|
||||
extern void DCCdeny_add(char *filename, char *reason, int type);
|
||||
extern void DCCdeny_del(ConfigItem_deny_dcc *deny);
|
||||
extern void dcc_wipe_services(void);
|
||||
extern void reread_motdsandrules();
|
||||
char *crule_parse PROTO((char *));
|
||||
int crule_eval PROTO((char *));
|
||||
void crule_free PROTO((char **));
|
||||
|
||||
+6
-15
@@ -23,9 +23,9 @@
|
||||
#define __hash_include__
|
||||
|
||||
typedef struct hashentry {
|
||||
int hits;
|
||||
int links;
|
||||
void *list;
|
||||
int hits;
|
||||
int links;
|
||||
void *list;
|
||||
} aHashEntry;
|
||||
|
||||
/* Taner had BITS_PER_COL 4 BITS_PER_COL_MASK 0xF - Dianora */
|
||||
@@ -38,7 +38,7 @@ typedef struct hashentry {
|
||||
* used in hash.c
|
||||
*/
|
||||
|
||||
#define U_MAX_INITIAL 2048
|
||||
#define U_MAX_INITIAL 8192
|
||||
#define U_MAX_INITIAL_MASK (U_MAX_INITIAL-1)
|
||||
#define U_MAX (U_MAX_INITIAL*MAX_SUB)
|
||||
|
||||
@@ -58,18 +58,9 @@ typedef struct hashentry {
|
||||
#define WW_MAX_INITIAL_MASK (WW_MAX_INITIAL-1)
|
||||
#define WW_MAX (WW_MAX_INITIAL*MAX_SUB)
|
||||
|
||||
#define WATCHHASHSIZE 10007 /* prime number */
|
||||
|
||||
/*
|
||||
* Throttling
|
||||
*/
|
||||
#ifdef THROTTLING
|
||||
#define THROTTLING_HASH_SIZE 1019 /* prime number */
|
||||
#endif
|
||||
|
||||
#define NOTIFYHASHSIZE 10007 /* prime number */
|
||||
|
||||
#define NullChn ((aChannel *)0)
|
||||
|
||||
#define find_channel hash_find_channel
|
||||
|
||||
#endif /* __hash_include__ */
|
||||
#endif /* __hash_include__ */
|
||||
|
||||
+3
-5
@@ -22,7 +22,7 @@
|
||||
*/
|
||||
|
||||
/* External definitions for functions in inet(3) */
|
||||
#include "config.h" /* for system definitions */
|
||||
#include "config.h" /* for system definitions */
|
||||
|
||||
#ifdef __alpha
|
||||
#define __u_l unsigned int
|
||||
@@ -33,11 +33,9 @@
|
||||
#ifdef __STDC__
|
||||
# ifndef _WIN32
|
||||
extern __u_l inet_addr(char *);
|
||||
extern char *inet_ntoa(struct in_addr);
|
||||
extern int inet_aton(const char *, struct in_addr *);
|
||||
extern int inet_netof(struct in_addr);
|
||||
extern char *inet_ntoa(char *);
|
||||
# endif
|
||||
extern __u_l inet_makeaddr(int, int);
|
||||
extern __u_l inet_makeaddr(int , int);
|
||||
extern __u_l inet_network(char *);
|
||||
extern __u_l inet_lnaof(struct in_addr);
|
||||
#else
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
/*
|
||||
* sprintf_irc.h
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef IRCSPRINTF_H
|
||||
#define IRCSPRINTF_H
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
/*
|
||||
* Proto types
|
||||
*/
|
||||
|
||||
/* You do want it to work in debug mode yes ? --DrBin */
|
||||
|
||||
/* ugly hack GRR */
|
||||
#if !defined(__GNUC__) && !defined(__common_include__)
|
||||
#define __attribute__(x) /* nothing */
|
||||
#endif
|
||||
|
||||
extern char *ircvsprintf(char *str, const char *format, va_list);
|
||||
extern char *ircsprintf(char *str, const char *format, ...) __attribute__((format(printf,2,3)));
|
||||
|
||||
extern const char atoi_tab[4000];
|
||||
|
||||
#endif
|
||||
+30
-19
@@ -16,6 +16,9 @@
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* This file may not be removed from the IRCd package.
|
||||
* It will be a violation of copyright.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
@@ -24,25 +27,33 @@
|
||||
*
|
||||
*/
|
||||
|
||||
static char *Statement[] = {
|
||||
" * This file may not be removed from the IRCd package.",
|
||||
" * It will be a violation of copyright. This program must always",
|
||||
" * stay free and not be charged for, being sold commercially or privately",
|
||||
" * Only charge may be for the transport medium like one CD-ROM, floppy",
|
||||
" * or other kinds.",
|
||||
0};
|
||||
|
||||
char *gnulicense[] = {
|
||||
" \2UnrealIRCd License\2",
|
||||
"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.",
|
||||
"",
|
||||
"To see the UnrealIRCd License, please point your browser",
|
||||
"at http://www.gnu.org/copyleft/gpl.html or look in the",
|
||||
"file LICENSE in the UnrealIRCd dist",
|
||||
0
|
||||
" \2UnrealIRCd License\2",
|
||||
"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.",
|
||||
"",
|
||||
"To see the UnrealIRCd License, please point your browser",
|
||||
"at http://www.gnu.org/copyleft/gpl.html or look in the",
|
||||
"file LICENSE in the UnrealIRCd dist",
|
||||
0
|
||||
};
|
||||
|
||||
|
||||
@@ -1,587 +0,0 @@
|
||||
/************************************************************************
|
||||
* Unreal Internet Relay Chat Daemon, include/modules.h
|
||||
* (C) Carsten V. Munk 2000 <stskeeps@tspre.org>
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
#ifndef MODULES_H
|
||||
#define MODULES_H
|
||||
#include "types.h"
|
||||
#define MOD_VERSION "3.2-b5-1"
|
||||
#define MOD_WE_SUPPORT "3.2-b5*"
|
||||
#define MAXCUSTOMHOOKS 30
|
||||
#define MAXHOOKTYPES 70
|
||||
#if defined(_WIN32)
|
||||
#define DLLFUNC _declspec(dllexport)
|
||||
#define irc_dlopen(x,y) LoadLibrary(x)
|
||||
#define irc_dlclose FreeLibrary
|
||||
#define irc_dlsym(x,y,z) z = (void *)GetProcAddress(x,y)
|
||||
#undef irc_dlerror
|
||||
#elif defined(HPUX)
|
||||
#define irc_dlopen(x,y) shl_load(x,y,0L)
|
||||
#define irc_dlsym(x,y,z) shl_findsym(x,y,z)
|
||||
#define irc_dlclose shl_unload
|
||||
#define irc_dlerror() strerror(errno)
|
||||
#else
|
||||
#define irc_dlopen dlopen
|
||||
#define irc_dlclose dlclose
|
||||
#if defined(UNDERSCORE)
|
||||
#define irc_dlsym(x,y,z) z = obsd_dlsym(x,y)
|
||||
#else
|
||||
#define irc_dlsym(x,y,z) z = dlsym(x,y)
|
||||
#endif
|
||||
#define irc_dlerror dlerror
|
||||
#define DLLFUNC
|
||||
#endif
|
||||
|
||||
#define EVENT(x) void (x) (void *data)
|
||||
|
||||
typedef struct _mod_symboltable Mod_SymbolDepTable;
|
||||
typedef struct _event Event;
|
||||
typedef struct _eventinfo EventInfo;
|
||||
typedef struct _irchook Hook;
|
||||
typedef struct _hooktype Hooktype;
|
||||
|
||||
/*
|
||||
* Module header that every module must include, with the name of
|
||||
* mod_header
|
||||
*/
|
||||
|
||||
typedef struct _ModuleHeader {
|
||||
char *name;
|
||||
char *version;
|
||||
char *description;
|
||||
char *modversion;
|
||||
Mod_SymbolDepTable *symdep;
|
||||
} ModuleHeader;
|
||||
|
||||
/*
|
||||
* One piece of Borg ass..
|
||||
*/
|
||||
typedef struct _Module Module;
|
||||
|
||||
typedef struct _ModuleChild
|
||||
{
|
||||
struct _ModuleChild *prev, *next;
|
||||
Module *child; /* Aww. aint it cute? */
|
||||
} ModuleChild;
|
||||
|
||||
typedef struct {
|
||||
int size;
|
||||
int module_load;
|
||||
Module *handle;
|
||||
} ModuleInfo;
|
||||
|
||||
|
||||
#define MOBJ_EVENT 0x0001
|
||||
#define MOBJ_HOOK 0x0002
|
||||
#define MOBJ_COMMAND 0x0004
|
||||
#define MOBJ_HOOKTYPE 0x0008
|
||||
#define MOBJ_VERSIONFLAG 0x0010
|
||||
#define MOBJ_SNOMASK 0x0020
|
||||
#define MOBJ_UMODE 0x0040
|
||||
#define MOBJ_CMDOVERRIDE 0x0080
|
||||
#define MOBJ_EXTBAN 0x0100
|
||||
|
||||
typedef struct {
|
||||
long mode;
|
||||
char flag;
|
||||
int (*allowed)(aClient *sptr, int what);
|
||||
char unloaded;
|
||||
Module *owner;
|
||||
} Umode;
|
||||
|
||||
typedef struct {
|
||||
long mode;
|
||||
char flag;
|
||||
int (*allowed)(aClient *sptr, int what);
|
||||
char unloaded;
|
||||
Module *owner;
|
||||
} Snomask;
|
||||
|
||||
#ifdef EXTCMODE
|
||||
#define EXCHK_ACCESS 0 /* Check access */
|
||||
#define EXCHK_ACCESS_ERR 1 /* Check access and send error if needed */
|
||||
#define EXCHK_PARAM 2 /* Check parameter and send error if needed */
|
||||
|
||||
#define EXSJ_SAME 0 /* Parameters are the same */
|
||||
#define EXSJ_WEWON 1 /* We won! w00t */
|
||||
#define EXSJ_THEYWON 2 /* They won :( */
|
||||
|
||||
/* return values for EXCHK_ACCESS*: */
|
||||
#define EX_DENY 0 /* Disallowed, except in case of operoverride */
|
||||
#define EX_ALLOW 1 /* Allowed */
|
||||
#define EX_ALWAYS_DENY -1 /* Disallowed, even in case of operoverride
|
||||
* (eg: for operlevel modes like +A)
|
||||
*/
|
||||
|
||||
/** Extended channel mode table.
|
||||
* This table contains all extended channelmode info like the flag, mode, their
|
||||
* functions, etc..
|
||||
*/
|
||||
typedef unsigned long Cmode_t;
|
||||
|
||||
#define EXTCM_PAR_HEADER struct _CmodeParam *prev, *next; char flag;
|
||||
|
||||
typedef struct _CmodeParam {
|
||||
EXTCM_PAR_HEADER
|
||||
/** other fields are placed after this header in your own paramstruct */
|
||||
} CmodeParam;
|
||||
|
||||
typedef struct {
|
||||
/** mode character (like 'Z') */
|
||||
char flag;
|
||||
|
||||
/** unique flag (like 0x10) */
|
||||
Cmode_t mode;
|
||||
|
||||
/** # of paramters (1 or 0) */
|
||||
int paracount;
|
||||
|
||||
/** access and parameter checking.
|
||||
* aClient *: the client
|
||||
* aChannel *: the channel
|
||||
* para *: the parameter (NULL for paramless modes)
|
||||
* int: check type (see EXCHK_*)
|
||||
* int: what (MODE_ADD or MODE_DEL)
|
||||
* return value: 1=ok, 0=bad
|
||||
*/
|
||||
int (*is_ok)(aClient *,aChannel *, char *para, int, int);
|
||||
|
||||
/** NOTE: The routines below are NULL for paramless modes */
|
||||
|
||||
/** Store parameter in memory for channel.
|
||||
* aExtCMtableParam *: the list (usually chptr->mode.extmodeparams).
|
||||
* char *: the parameter.
|
||||
* return value: the head of the list, RTFS if you wonder why.
|
||||
* design notes: only alloc a new paramstruct if you need to, search for
|
||||
* any current one first (like in case of mode +y 5 and then +y 6 later without -y).
|
||||
*/
|
||||
CmodeParam * (*put_param)(CmodeParam *, char *);
|
||||
|
||||
/** Get readable string version" of the stored parameter.
|
||||
* aExtCMtableParam *: the list (usually chptr->mode.extmodeparams).
|
||||
* return value: a pointer to the string (temp. storage)
|
||||
*/
|
||||
char * (*get_param)(CmodeParam *);
|
||||
|
||||
/** Convert input parameter to output.
|
||||
* Like +l "1aaa" becomes "1".
|
||||
* char *: the input parameter.
|
||||
* return value: pointer to output string (temp. storage)
|
||||
*/
|
||||
char * (*conv_param)(char *);
|
||||
|
||||
/** free and remove parameter from list.
|
||||
* aExtCMtableParam *: the list (usually chptr->mode.extmodeparams).
|
||||
*/
|
||||
void (*free_param)(CmodeParam *);
|
||||
|
||||
/** duplicate a struct and return a pointer to duplicate.
|
||||
* This is usually just a malloc + memcpy.
|
||||
* aExtCMtableParam *: source struct itself (no list).
|
||||
* return value: pointer to newly allocated struct.
|
||||
*/
|
||||
CmodeParam * (*dup_struct)(CmodeParam *);
|
||||
|
||||
/** Compares 2 parameters and decides who wins the sjoin fight.
|
||||
* When syncing channel modes (m_sjoin) a parameter conflict may occur, things like
|
||||
* +l 5 vs +l 10. This function should determinate who wins the fight, this decision
|
||||
* should of course not be random but the same at every server on the net.
|
||||
* examples of such comparisons are "highest wins" (+l) and a strcmp() check (+k/+L).
|
||||
* aChannel *: channel the fight is about.
|
||||
* aExtCMtableParam *: our parameter
|
||||
* aExtCMtableParam *: their parameter
|
||||
*/
|
||||
int (*sjoin_check)(aChannel *, CmodeParam *, CmodeParam *);
|
||||
} Cmode;
|
||||
|
||||
typedef struct {
|
||||
char flag;
|
||||
int paracount;
|
||||
int (*is_ok)(aClient *,aChannel *, char *para, int, int);
|
||||
CmodeParam * (*put_param)(CmodeParam *, char *);
|
||||
char * (*get_param)(CmodeParam *);
|
||||
char * (*conv_param)(char *);
|
||||
void (*free_param)(CmodeParam *);
|
||||
CmodeParam * (*dup_struct)(CmodeParam *);
|
||||
int (*sjoin_check)(aChannel *, CmodeParam *, CmodeParam *);
|
||||
} CmodeInfo;
|
||||
#endif
|
||||
|
||||
/*** Extended bans ***/
|
||||
|
||||
#define EXBCHK_ACCESS 0 /* Check access */
|
||||
#define EXBCHK_ACCESS_ERR 1 /* Check access and send error */
|
||||
#define EXBCHK_PARAM 2 /* Check if the parameter is valid */
|
||||
|
||||
#define EXBTYPE_BAN 0 /* a ban */
|
||||
#define EXBTYPE_EXCEPT 1 /* an except */
|
||||
|
||||
#define EXTBANTABLESZ 32
|
||||
|
||||
typedef struct {
|
||||
/** extbans module */
|
||||
Module *owner;
|
||||
/** extended ban character */
|
||||
char flag;
|
||||
|
||||
/** access checking [optional].
|
||||
* aClient *: the client
|
||||
* aChannel *: the channel
|
||||
* para: the ban parameter
|
||||
* int: check type (see EXBCHK_*)
|
||||
* int: what (MODE_ADD or MODE_DEL)
|
||||
* int: what2 (EXBTYPE_BAN or EXBTYPE_EXCEPT)
|
||||
* return value: 1=ok, 0=bad
|
||||
* NOTE: just set this of NULL if you want only +hoaq to place/remove bans as usual.
|
||||
* NOTE2: This has not been tested yet!!
|
||||
*/
|
||||
int (*is_ok)(aClient *, aChannel *, char *para, int, int, int);
|
||||
|
||||
/** Convert input parameter to output [optional].
|
||||
* like with normal bans '+b blah' gets '+b blah!*@*', and it allows
|
||||
* you to limit the length of the ban too. You can set this to NULL however
|
||||
* to use the value as-is.
|
||||
* char *: the input parameter.
|
||||
* return value: pointer to output string (temp. storage)
|
||||
*/
|
||||
char * (*conv_param)(char *);
|
||||
|
||||
/** Checks if the user is affected by this ban [required].
|
||||
* Called from is_banned.
|
||||
* aClient *: the client
|
||||
* aChannel *: the channel
|
||||
* para: the ban entry
|
||||
* int: a value of BANCHK_* (see struct.h)
|
||||
*/
|
||||
int (*is_banned)(aClient *, aChannel *, char *, int);
|
||||
} Extban;
|
||||
|
||||
typedef struct {
|
||||
char flag;
|
||||
int (*is_ok)(aClient *, aChannel *, char *para, int, int, int);
|
||||
char * (*conv_param)(char *);
|
||||
int (*is_banned)(aClient *, aChannel *, char *, int);
|
||||
} ExtbanInfo;
|
||||
|
||||
|
||||
typedef struct _command {
|
||||
struct _command *prev, *next;
|
||||
aCommand *cmd, *tok;
|
||||
} Command;
|
||||
|
||||
typedef struct _versionflag {
|
||||
struct _versionflag *prev, *next;
|
||||
char flag;
|
||||
ModuleChild *parents;
|
||||
} Versionflag;
|
||||
|
||||
typedef struct _ModuleObject {
|
||||
struct _ModuleObject *prev, *next;
|
||||
short type;
|
||||
union {
|
||||
Event *event;
|
||||
Hook *hook;
|
||||
Command *command;
|
||||
Hooktype *hooktype;
|
||||
Versionflag *versionflag;
|
||||
Snomask *snomask;
|
||||
Umode *umode;
|
||||
Cmdoverride *cmdoverride;
|
||||
Extban *extban;
|
||||
} object;
|
||||
} ModuleObject;
|
||||
|
||||
struct _irchook {
|
||||
Hook *prev, *next;
|
||||
short type;
|
||||
union {
|
||||
int (*intfunc)();
|
||||
void (*voidfunc)();
|
||||
char *(*pcharfunc)();
|
||||
} func;
|
||||
Module *owner;
|
||||
};
|
||||
|
||||
struct _hooktype {
|
||||
short id;
|
||||
char *string;
|
||||
ModuleChild *parents;
|
||||
};
|
||||
/*
|
||||
* What we use to keep track internally of the modules
|
||||
*/
|
||||
|
||||
#define MODERR_NOERROR 0
|
||||
#define MODERR_EXISTS 1
|
||||
#define MODERR_NOSPACE 2
|
||||
#define MODERR_INVALID 3
|
||||
#define MODERR_NOTFOUND 4
|
||||
|
||||
unsigned int ModuleGetError(Module *module);
|
||||
const char *ModuleGetErrorStr(Module *module);
|
||||
unsigned int ModuleGetOptions(Module *module);
|
||||
unsigned int ModuleSetOptions(Module *module, unsigned int options);
|
||||
|
||||
struct _Module
|
||||
{
|
||||
struct _Module *prev, *next;
|
||||
ModuleHeader *header; /* The module's header */
|
||||
#ifdef _WIN32
|
||||
HMODULE dll; /* Return value of LoadLibrary */
|
||||
#elif defined(HPUX)
|
||||
shl_t dll;
|
||||
#else
|
||||
void *dll; /* Return value of dlopen */
|
||||
#endif
|
||||
unsigned char flags; /* 8-bits for flags .. [<- this is misleading, there's mod->flags = .. everywhere] */
|
||||
ModuleChild *children;
|
||||
ModuleObject *objects;
|
||||
ModuleInfo modinfo; /* Used to store handle info for module */
|
||||
unsigned char options;
|
||||
unsigned char errorcode;
|
||||
char *tmp_file;
|
||||
unsigned char compilecheck; /* feel free to rename this mess, but mod->flags sucks :[. */
|
||||
};
|
||||
/*
|
||||
* Symbol table
|
||||
*/
|
||||
|
||||
#define MOD_OPT_PERM 0x0001 /* Permanent module (not unloadable) */
|
||||
#define MOD_OPT_OFFICIAL 0x0002 /* Official module, do not set "tainted" */
|
||||
|
||||
struct _mod_symboltable
|
||||
{
|
||||
#ifndef STATIC_LINKING
|
||||
char *symbol;
|
||||
#else
|
||||
void *realfunc;
|
||||
#endif
|
||||
vFP *pointer;
|
||||
#ifndef STATIC_LINKING
|
||||
char *module;
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifndef STATIC_LINKING
|
||||
#define MOD_Dep(name, container,module) {#name, (vFP *) &container, module}
|
||||
#else
|
||||
#define MOD_Dep(name, container,module) {(void *)&name, (vFP *) &container}
|
||||
#endif
|
||||
/* Event structs */
|
||||
struct _event {
|
||||
Event *prev, *next;
|
||||
char *name;
|
||||
time_t every;
|
||||
long howmany;
|
||||
vFP event;
|
||||
void *data;
|
||||
time_t last;
|
||||
Module *owner;
|
||||
};
|
||||
|
||||
#define EMOD_EVERY 0x0001
|
||||
#define EMOD_HOWMANY 0x0002
|
||||
#define EMOD_NAME 0x0004
|
||||
#define EMOD_EVENT 0x0008
|
||||
#define EMOD_DATA 0x0010
|
||||
|
||||
struct _eventinfo {
|
||||
int flags;
|
||||
long howmany;
|
||||
time_t every;
|
||||
char *name;
|
||||
vFP event;
|
||||
void *data;
|
||||
};
|
||||
|
||||
|
||||
/* Huh? Why are those not marked as extern?? -- Syzop */
|
||||
|
||||
#define EventAdd(name, every, howmany, event, data) EventAddEx(NULL, name, every, howmany, event, data)
|
||||
Event *EventAddEx(Module *, char *name, long every, long howmany,
|
||||
vFP event, void *data);
|
||||
Event *EventDel(Event *event);
|
||||
Event *EventMarkDel(Event *event);
|
||||
Event *EventFind(char *name);
|
||||
int EventMod(Event *event, EventInfo *mods);
|
||||
void DoEvents(void);
|
||||
void EventStatus(aClient *sptr);
|
||||
void SetupEvents(void);
|
||||
void LockEventSystem(void);
|
||||
void UnlockEventSystem(void);
|
||||
extern Hook *Hooks[MAXHOOKTYPES];
|
||||
extern Hooktype Hooktypes[MAXCUSTOMHOOKS];
|
||||
|
||||
void Module_Init(void);
|
||||
char *Module_Create(char *path);
|
||||
void Init_all_testing_modules(void);
|
||||
void Unload_all_loaded_modules(void);
|
||||
void Unload_all_testing_modules(void);
|
||||
int Module_Unload(char *name, int unload);
|
||||
vFP Module_Sym(char *name);
|
||||
vFP Module_SymX(char *name, Module **mptr);
|
||||
int Module_free(Module *mod);
|
||||
|
||||
#ifdef __OpenBSD__
|
||||
void *obsd_dlsym(void *handle, char *symbol);
|
||||
#endif
|
||||
|
||||
Versionflag *VersionflagAdd(Module *module, char flag);
|
||||
void VersionflagDel(Versionflag *vflag, Module *module);
|
||||
|
||||
#define add_Hook(hooktype, func) HookAddMain(NULL, hooktype, func, NULL, NULL)
|
||||
#define HookAdd(hooktype, func) HookAddMain(NULL, hooktype, func, NULL, NULL)
|
||||
#define HookAddEx(module, hooktype, func) HookAddMain(module, hooktype, func, NULL, NULL)
|
||||
#define HookAddVoid(hooktype, func) HookAddMain(NULL, hooktype, NULL, func, NULL)
|
||||
#define HookAddVoidEx(module, hooktype, func) HookAddMain(module, hooktype, NULL, func, NULL)
|
||||
#define HookAddPChar(hooktype, func) HookAddMain(NULL, hooktype, NULL, NULL, func)
|
||||
#define HookAddPCharEx(module, hooktype, func) HookAddMain(module, hooktype, NULL, NULL, func)
|
||||
#define add_HookX(hooktype, func1, func2, func3) HookAddMain(NULL, hooktype, func1, func2, func3)
|
||||
|
||||
Hook *HookAddMain(Module *module, int hooktype, int (*intfunc)(), void (*voidfunc)(), char *(*pcharfunc)());
|
||||
Hook *HookDel(Hook *hook);
|
||||
|
||||
Hooktype *HooktypeAdd(Module *module, char *string, int *type);
|
||||
void HooktypeDel(Hooktype *hooktype, Module *module);
|
||||
|
||||
#define RunHook0(hooktype) do { Hook *h; for (h = Hooks[hooktype]; h; h = h->next)(*(h->func.intfunc))(); } while(0)
|
||||
#define RunHook(hooktype,x) do { Hook *h; for (h = Hooks[hooktype]; h; h = h->next) (*(h->func.intfunc))(x); } while(0)
|
||||
#define RunHookReturn(hooktype,x,ret) do { Hook *h; for (h = Hooks[hooktype]; h; h = h->next) if((*(h->func.intfunc))(x) ret) return -1; } while(0)
|
||||
#define RunHookReturnInt(hooktype,x,retchk) \
|
||||
{ \
|
||||
int retval; \
|
||||
Hook *h; \
|
||||
for (h = Hooks[hooktype]; h; h = h->next) \
|
||||
{ \
|
||||
retval = (*(h->func.intfunc))(x); \
|
||||
if (retval retchk) return retval; \
|
||||
} \
|
||||
}
|
||||
#define RunHookReturnInt2(hooktype,x,y,retchk) \
|
||||
{ \
|
||||
int retval; \
|
||||
Hook *h; \
|
||||
for (h = Hooks[hooktype]; h; h = h->next) \
|
||||
{ \
|
||||
retval = (*(h->func.intfunc))(x,y); \
|
||||
if (retval retchk) return retval; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define RunHookReturnVoid(hooktype,x,ret) do { Hook *h; for (h = Hooks[hooktype]; h; h = h->next) if((*(h->func.intfunc))(x) ret) return; } while(0)
|
||||
#define RunHook2(hooktype,x,y) do { Hook *h; for (h = Hooks[hooktype]; h; h = h->next) (*(h->func.intfunc))(x,y); } while(0)
|
||||
#define RunHook3(hooktype,a,b,c) do { Hook *h; for (h = Hooks[hooktype]; h; h = h->next) (*(h->func.intfunc))(a,b,c); } while(0)
|
||||
#define RunHook4(hooktype,a,b,c,d) do { Hook *h; for (h = Hooks[hooktype]; h; h = h->next) (*(h->func.intfunc))(a,b,c,d); } while(0)
|
||||
#define RunHook5(hooktype,a,b,c,d,e) do { Hook *h; for (h = Hooks[hooktype]; h; h = h->next) (*(h->func.intfunc))(a,b,c,d,e); } while(0)
|
||||
#define RunHook6(hooktype,a,b,c,d,e,f) do { Hook *h; for (h = Hooks[hooktype]; h; h = h->next) (*(h->func.intfunc))(a,b,c,d,e,f); } while(0)
|
||||
#define RunHook7(hooktype,a,b,c,d,e,f,g) do { Hook *h; for (h = Hooks[hooktype]; h; h = h->next) (*(h->func.intfunc))(a,b,c,d,e,f,g); } while(0)
|
||||
|
||||
Command *CommandAdd(Module *module, char *cmd, char *tok, int (*func)(), unsigned char params, int flags);
|
||||
void CommandDel(Command *command);
|
||||
int CommandExists(char *name);
|
||||
Cmdoverride *CmdoverrideAdd(Module *module, char *cmd, iFP function);
|
||||
void CmdoverrideDel(Cmdoverride *ovr);
|
||||
int CallCmdoverride(Cmdoverride *ovr, aClient *cptr, aClient *sptr, int parc, char *parv[]);
|
||||
|
||||
/* Hook types */
|
||||
#define HOOKTYPE_LOCAL_QUIT 1
|
||||
#define HOOKTYPE_LOCAL_NICKCHANGE 2
|
||||
#define HOOKTYPE_LOCAL_CONNECT 3
|
||||
#define HOOKTYPE_REHASHFLAG 4
|
||||
#define HOOKTYPE_PRE_LOCAL_PART 5
|
||||
#define HOOKTYPE_CONFIGPOSTTEST 6
|
||||
#define HOOKTYPE_REHASH 7
|
||||
#define HOOKTYPE_PRE_LOCAL_CONNECT 8
|
||||
#define HOOKTYPE_PRE_LOCAL_QUIT 9
|
||||
#define HOOKTYPE_GUEST 10
|
||||
#define HOOKTYPE_SERVER_CONNECT 11
|
||||
#define HOOKTYPE_SERVER_QUIT 12
|
||||
#define HOOKTYPE_STATS 13
|
||||
#define HOOKTYPE_LOCAL_JOIN 14
|
||||
#define HOOKTYPE_CONFIGTEST 15
|
||||
#define HOOKTYPE_CONFIGRUN 16
|
||||
/* If you ever change the number of usermsg & chanmsg, notify Syzop first, kthx! ;p */
|
||||
#define HOOKTYPE_USERMSG 17
|
||||
#define HOOKTYPE_CHANMSG 18
|
||||
#define HOOKTYPE_LOCAL_PART 19
|
||||
#define HOOKTYPE_LOCAL_KICK 20
|
||||
#define HOOKTYPE_LOCAL_CHANMODE 21
|
||||
#define HOOKTYPE_LOCAL_TOPIC 22
|
||||
#define HOOKTYPE_LOCAL_OPER 23
|
||||
#define HOOKTYPE_UNKUSER_QUIT 24
|
||||
#define HOOKTYPE_LOCAL_PASS 25
|
||||
#define HOOKTYPE_REMOTE_CONNECT 26
|
||||
#define HOOKTYPE_REMOTE_QUIT 27
|
||||
#define HOOKTYPE_PRE_LOCAL_JOIN 28
|
||||
#define HOOKTYPE_PRE_LOCAL_KICK 29
|
||||
#define HOOKTYPE_PRE_LOCAL_TOPIC 30
|
||||
#define HOOKTYPE_REMOTE_NICKCHANGE 31
|
||||
#define HOOKTYPE_CHANNEL_CREATE 32
|
||||
#define HOOKTYPE_CHANNEL_DESTROY 33
|
||||
#define HOOKTYPE_REMOTE_CHANMODE 34
|
||||
#define HOOKTYPE_TKL_EXCEPT 35
|
||||
#define HOOKTYPE_UMODE_CHANGE 36
|
||||
#define HOOKTYPE_TOPIC 37
|
||||
#define HOOKTYPE_REHASH_COMPLETE 38
|
||||
|
||||
/* Hook return values */
|
||||
#define HOOK_CONTINUE 0
|
||||
#define HOOK_ALLOW -1
|
||||
#define HOOK_DENY 1
|
||||
|
||||
/* Module flags */
|
||||
#define MODFLAG_NONE 0x0000
|
||||
#define MODFLAG_LOADED 0x0001 /* Fully loaded */
|
||||
#define MODFLAG_TESTING 0x0002 /* Not yet initialized */
|
||||
#define MODFLAG_INIT 0x0004 /* Initialized */
|
||||
#define MODFLAG_DELAYED 0x0008 /* Delayed unload */
|
||||
|
||||
/* Module function return values */
|
||||
#define MOD_SUCCESS 0
|
||||
#define MOD_FAILED -1
|
||||
#define MOD_DELAY 2
|
||||
|
||||
#define CONFIG_MAIN 1
|
||||
#define CONFIG_SET 2
|
||||
#define CONFIG_BAN 3
|
||||
#define CONFIG_EXCEPT 4
|
||||
#define CONFIG_DENY 5
|
||||
#define CONFIG_ALLOW 6
|
||||
|
||||
#ifdef DYNAMIC_LINKING
|
||||
#define MOD_HEADER(name) Mod_Header
|
||||
#define MOD_TEST(name) Mod_Test
|
||||
#define MOD_INIT(name) Mod_Init
|
||||
#define MOD_LOAD(name) Mod_Load
|
||||
#define MOD_UNLOAD(name) Mod_Unload
|
||||
#else
|
||||
#define MOD_HEADER(name) name##_Header
|
||||
#define MOD_TEST(name) name##_Test
|
||||
#define MOD_INIT(name) name##_Init
|
||||
#define MOD_LOAD(name) name##_Load
|
||||
#define MOD_UNLOAD(name) name##_Unload
|
||||
#endif
|
||||
|
||||
#ifdef DYNAMIC_LINKING
|
||||
/* ugly alert!!!! */
|
||||
#include "version.h"
|
||||
char Mod_Version[] = BASE_VERSION PATCH1 PATCH2 PATCH3 PATCH4 PATCH5 PATCH6 PATCH7 PATCH8 PATCH9;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user