mirror of
https://github.com/unrealircd/unrealircd.git
synced 2026-06-23 23:56:37 +02:00
Compare commits
75 Commits
u31_chatfirst
...
komara
| Author | SHA1 | Date | |
|---|---|---|---|
| 6ea328e05c | |||
| f60d1c2e20 | |||
| 6c548c83e7 | |||
| d0a119a6c9 | |||
| 47c5bcf1fe | |||
| 8a99d15208 | |||
| 28f718593a | |||
| 07f1e7c377 | |||
| cfffbcf605 | |||
| 9a4d359753 | |||
| be78cc4ac8 | |||
| d14f1af650 | |||
| 29d7a0d07c | |||
| 0ad0bd1e55 | |||
| 55f7713dfa | |||
| 60c79e809c | |||
| 5a079cc107 | |||
| 6c3d86f3df | |||
| e4b87e6985 | |||
| db184a8fd3 | |||
| b76ce5b666 | |||
| aae8ad6e00 | |||
| df99acd210 | |||
| 6939ec9779 | |||
| 9cdcd0fed1 | |||
| 261a49eba2 | |||
| dc61fc74ca | |||
| 4dc4249538 | |||
| caebff8d64 | |||
| e9342567bf | |||
| 67f1287fb5 | |||
| a139d804db | |||
| b97965dd0c | |||
| 9bfe99cdd6 | |||
| 9bb7d0adce | |||
| d15261fdae | |||
| 589fa3907d | |||
| eb796f97ea | |||
| 6fb290e077 | |||
| 8601eaadc1 | |||
| 61fd1bbc33 | |||
| 219b30f429 | |||
| 0484f40586 | |||
| 9cd1c23682 | |||
| 5ec26b59d6 | |||
| 25e19fe45b | |||
| 41ce0d3fed | |||
| 280846c00c | |||
| 4f2055b949 | |||
| 012d4300b9 | |||
| de853cfdac | |||
| 09ac0e6ee4 | |||
| 06dc3023ab | |||
| d2a36e13b2 | |||
| f72b278876 | |||
| ff6de09c3c | |||
| d9d9b8b46b | |||
| 9757cd71e2 | |||
| 0028312387 | |||
| ebcb49f729 | |||
| 438fd75d02 | |||
| d04ab8dd73 | |||
| fe9b0e2a49 | |||
| 90fb20a2db | |||
| a85a7a3851 | |||
| 4f642b373b | |||
| 8dd915de96 | |||
| 27a2e5c3e1 | |||
| f7deba3bda | |||
| fe721a0f43 | |||
| 8396e0cce1 | |||
| fbb724b642 | |||
| 4ecf4d4d3a | |||
| 672b345057 | |||
| e6efde5291 |
+1
-1
@@ -16,4 +16,4 @@ permission from one of the UnrealIRCd coders.)
|
||||
Finally, unofficial UnrealIRCd/32 builds (if it doesn't say "genuine"
|
||||
in the display) are _NOT_ supported.
|
||||
|
||||
-Luke (maintainer of UnrealIRCd 3.1.x)
|
||||
- Luke (luke@unrealircd.com)
|
||||
|
||||
+10
-18
@@ -1,25 +1,17 @@
|
||||
|
||||
Unreal3.1.4-Meadows Release Notes
|
||||
Unreal3.1.6-Noon Release Notes
|
||||
===================================
|
||||
|
||||
* This is yet another significant upgrade over the last version. Most notable
|
||||
compatibility wise is the backporting of the new host cloaking from 3.2.
|
||||
As a result of this, we strongly recommend that you convert all of your servers
|
||||
to 3.1.4 and avoid running a network with mixed versions. They'll link fine
|
||||
and operate okay, but the differences in cloaking will make it easier for
|
||||
individuals to evade bans by simply switching servers.
|
||||
* Initial release preparation, no bugs fixed yet!
|
||||
|
||||
* Also, before this version if a 3.2 server with IPv6 enabled was linked to the
|
||||
network, and a client connected using IPv6, it caused 3.1.x servers to segfault,
|
||||
as the cloaking routine was unable to deal with IPv6 format addresses. This is
|
||||
also corrected in this version
|
||||
* If you are upgrading from Unreal3.1.4-Meadows, please read
|
||||
doc/RELEASE-NOTES.3.1.5 as well.
|
||||
|
||||
* Please Note: There have been a couple of configuration file changes! This is
|
||||
IMPORTANT. Your IRCd WILL NOT START if you don't change the cloak key values found
|
||||
in the .network file. Additionally, it would be prudent to note that there is a
|
||||
new directive in unrealircd.conf, exempt_all, which permits exempt lines in
|
||||
ircd.conf to match glines in addition to klines. It defaults to 1.
|
||||
|
||||
* The rest of the changes can be found (obviously) in the Changes file.
|
||||
* If you are upgrading from an even earlier version (before 3.1.4),
|
||||
please read the doc/RELEASE-NOTES.3.1.4 file as well. There
|
||||
were numerous important/significant changes between 3.1.4 and
|
||||
earlier versions.
|
||||
|
||||
* Finally, read Unreal.nfo as usual AND THE DOCS in doc/.
|
||||
|
||||
- Luke (luke@unrealircd.com)
|
||||
|
||||
@@ -276,7 +276,7 @@ newdns.c removed - another useless file
|
||||
===================================
|
||||
|
||||
------------------------------------------------
|
||||
Beta2
|
||||
Beta2 Released
|
||||
------------------------------------------------
|
||||
|
||||
ripped cloak.c from 3.2, and added Config
|
||||
@@ -325,7 +325,7 @@ Added temp patch to m_kline to stop segfault
|
||||
===================================
|
||||
|
||||
------------------------------------------------
|
||||
Beta3
|
||||
Beta3 Released
|
||||
------------------------------------------------
|
||||
|
||||
Backported check_pings with loop.do_ban_check from 3.2
|
||||
@@ -339,7 +339,7 @@ done, but whatever.)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Moved cloak key definitions to unrealircd.conf
|
||||
Moved cloak key definitions to .network file
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
@@ -383,7 +383,7 @@ larne
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Rewrote all of /who, fuck everyone's patches
|
||||
Rewrote all of /who, screw everyone's patches
|
||||
mine are better!
|
||||
--Luke
|
||||
===================================
|
||||
@@ -395,3 +395,487 @@ it will display real hosts instead of masked ones
|
||||
in the replies.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Oper invisibility is no longer enabled by default
|
||||
but is a provided option in ./Config
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Changed information flag shown in /version. R now
|
||||
appears if invisibility is compiled in (even if
|
||||
disabled in unrealircd.conf)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
rmed Config.c (broken, severely) and networks.ndx
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Added win32-compile-guide in doc/ for people wanting
|
||||
to compile their own version for windows.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Once again we global when anyone that's not a local
|
||||
oper opers. I like this, if you don't email me and
|
||||
maybe I'll add a conf option for it.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Deprecated /akill and /rakill. Please stop using
|
||||
these commands. They're old and will be removed in
|
||||
future releases. For now they simply add/remove a
|
||||
permanent gline, which is essentially what an akill
|
||||
is anyway (yes, I know they disappear when you rehash)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Rewrote m_oper, massive mods to most set* and chg* functions
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Reintroduced original patch in channel.c with mode overflow
|
||||
(saves char * for each function call)
|
||||
-- Luke
|
||||
===================================
|
||||
|
||||
Fixed a seriously stupid bug introduced by myself with SAMODE
|
||||
globops. (Thanks to Zerwas)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Added additional operoverride capabilities (namely
|
||||
ability to view banlists, exemptlists, etc.)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Played with I line password bug for a while
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed (maybe?) an implementation with MAXBANLENGTH
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Thanks a TON to JK, applied patch he developed to
|
||||
resolve desynch problem with mode +,-p/s.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed I line segfault bug...lots of fun. Thanks again
|
||||
to JK for helping :)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
---------------------------------------------
|
||||
Beta4 Released
|
||||
---------------------------------------------
|
||||
|
||||
Incorporated STATS_ONLY_OPER patch thanks to
|
||||
psycho
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Added JK /map patch to resolve hidden U lines
|
||||
being trivially found.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed clients able to connect on server-only port
|
||||
bug. (thanks to worf for reporting)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Resolved halfops + operoverride issues
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed problem where normal users could view topics of
|
||||
+s/+p channels. (removed /topic functionality for
|
||||
non channel members altogether. Channel topics can
|
||||
still be obtained via /list)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Finally fixed *all* mode problems that are known
|
||||
at this time. Long parameters no longer create
|
||||
desynchs, everything is happy! Fear.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Thanks to Zerwas, added numeric 489 for SECUREONLYCHAN
|
||||
so +z channels no longer respond with you're banned.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Revamped operoverride again to better handle mode walks
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed a SERIOUS security problem with c/n line passwords
|
||||
Thanks a bunch to node357 for reporting!
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
----------------------------------------------
|
||||
Beta5 Released
|
||||
----------------------------------------------
|
||||
|
||||
Fixed bug with mirc where +a/+q were misinterpreted as modes
|
||||
without nick parameters.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Implemented actual prefixes for +q and +a (~ and &)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Modified is_chan_op and is_chanprot functions to better
|
||||
respect hierarchy (chanowner is chanprot as well as chanop)
|
||||
chanprot is chanop.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed m_gline and m_gzline bugs. (Thanks to nighthawk for
|
||||
noticing)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed sjoin bug with ban propagation
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed m_who bug with normal users using masks
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Rearranged structs in struct.h to be more memory efficient
|
||||
(saved 4 bytes in User, in preparation for new operoverride
|
||||
system.)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Decided channel owners can deown themsleves, implemented
|
||||
as such
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Revised operoverride system further, now default prompting
|
||||
before permitting opers to walk channel modes.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Scratch previous revision, redid override system altogether.
|
||||
Now done via /invite. Sts' response to those of you that
|
||||
don't like it: "fuck them"
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed lowercase host errors with cloaking (sts' patch)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
do_mode_char fixes (mostly from sts)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
SJ3 fixes from codemastr for possible desynch
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed prefix problem as per nighthawk
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Temp removed +q/+a prefixes to give client coders
|
||||
chance to implement PREFIX= sanely
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Added a nice little win32 fix to cloak.c to stop snprintf
|
||||
from breaking things all over the place
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed win32 settings.h for the few who actually recompile
|
||||
their own win32 version.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Minor issue with +I and new invite system resolved.
|
||||
We should remove +I altogether...
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Rmed a bunch of files in doc/ redid some other documentation.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Finally redid /credits thanks to sts :P
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed OPEROVERRIDE_VERIFY Bug
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
*** Unreal3.1.4 Released ***
|
||||
|
||||
[ Unreal 3.1.5 ]
|
||||
|
||||
------------------------------------------
|
||||
We begin this release with a stupid
|
||||
bug fix. Yes, I severely broke userhost.
|
||||
I'm sorry.
|
||||
------------------------------------------
|
||||
|
||||
Beta1
|
||||
----------------------------
|
||||
|
||||
Fixed userhost displaying * all the time
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed broken m_invite, thanks to codemastr
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed halfop kick priv bug thanks to JK
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Added Oo flags in version response if
|
||||
OPEROVERRIDE is enabled, and OPEROVERRIDE_VERIFY
|
||||
enabled.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Removed LEAST_IDLE, served no useful purpose
|
||||
really.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed grammatical error thanks to MorPheus
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed m_invite, really. I tested it this time :)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Changed +A/+O bans to act more sanely
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed cloaking fun for hosts w/out . (from codemastr)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Copied fixes to /helpop from 3.2 reported by FrostByghte
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Applied weird sts patch for dynamic allocation of nick
|
||||
field in topics
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed broken /who
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed bug with /whois and +I
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed exempt propagation bug
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
------------------------------------------------------
|
||||
Beta2 Released
|
||||
------------------------------------------------------
|
||||
|
||||
Fixed m_who bug displaying channels
|
||||
when it isn't supposed to, thanks to frozen
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed issue with server IP addresses being
|
||||
shown to normal +s lusers (thanks to MrAllthat)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Added prefixes for channel owner/protected to
|
||||
/who and /whois (& and ~). They probably should never
|
||||
have been removed. Still to be implemented
|
||||
are actual prefixes in /names.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Small m_who bug with opers fixed.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Implemented awesome new feature for operoverride, per
|
||||
codemastr. You now need the letter "v" in your O line
|
||||
in order to be able to override!
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
------------------------------------------------------
|
||||
Beta3 Released
|
||||
------------------------------------------------------
|
||||
|
||||
Fixed problem with topics screwing up services
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed semantics with operoverride_verify and +s/+p
|
||||
channels.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Kill me. Really. Still trying to fix services fun...
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Given up for now on fixing the services "problem."
|
||||
(it isn't really a problem, afaik, it's just annoying.)
|
||||
Anyone that has ideas about what causes it, or how
|
||||
it can be fixed email luke@unrealircd.com.
|
||||
The problem is that IRC Services 5 starts sending out
|
||||
notices about being "unable to set modes for #channel"
|
||||
blah blah. There isn't any indication of anything actually
|
||||
being bounced, so we're not sure why it happens.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
*** Unreal 3.1.5 Released ***
|
||||
|
||||
[ Unreal 3.1.5.1 ]
|
||||
--------------------------------------------------
|
||||
Had I only known what I was getting myself into...
|
||||
--------------------------------------------------
|
||||
|
||||
Fixed a "bug" too stupid to be listed here. No, I
|
||||
didn't introduce it, and apparently it has existed
|
||||
since pre-3.0. *shudder*
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed bug with "empty" channels showing up in list with
|
||||
60 something odd thousand users in it. (found by codemastr)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed compilation error when NO_OPEROVERRIDE is defined,
|
||||
reported by Joe.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Ummm, yea, you want to upgrade. There's a, um, bug that
|
||||
probably isn't a good thing
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
*** Unreal 3.1.5.1 Released ***
|
||||
|
||||
[ Unreal 3.1.6 ]
|
||||
--------------------------------------------------
|
||||
No comment.
|
||||
--------------------------------------------------
|
||||
|
||||
Initial release prep, changing version numbers in cvs
|
||||
(again).
|
||||
===================================
|
||||
|
||||
Fixed /botserv bug, reported by SciFi
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Unbroke +A channels and bans. :-/
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Removed +I. Don't you dare even think about whining.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Added chmode +R, requires umode +r to speak.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Deleted extra, unused oflag...wmaster.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Added a max of 500:500 to +f
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Removed USE_LONGMODE.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Added modes S, M to common.h.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Added end of stats messages in /gline, /gzline, /shun
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed bug in channel mode +L
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed -o+b user *!*@blah.com halfop stuff.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed bug where HCN would display exit client notices twice.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Modified it so people with override flag in O line can
|
||||
dechanown, dechanprot people.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Small m_topic bug resolved
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Backported m_message fix from 3.2, fixed by Syzop, reported by Ashkrynt
|
||||
-Stskeeps
|
||||
===================================
|
||||
|
||||
*** Unreal3.1.6 released ***
|
||||
|
||||
[ Unreal 3.1.7 ]
|
||||
--------------------------------------------------
|
||||
...
|
||||
--------------------------------------------------
|
||||
|
||||
Initial release prep, changing version numbers in cvs
|
||||
(again).
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed double snotice exit bug (probably)
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Fixed stats being visible to users even after defining
|
||||
STATS_ONLYOPER in config.h
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Applied Syzop's fix for operoverride crash.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
Ported Syzop's fix for PRIVMSG/NOTICE bug.
|
||||
--Luke
|
||||
===================================
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
# distribution without the author's prior consent.
|
||||
#
|
||||
# $Id$
|
||||
IRCD_VERSION="Unreal3.1.4 Meadows"
|
||||
IRCD_VERSION="Unreal3.1.6 Noon"
|
||||
CONF_DATE=`date`
|
||||
LAST_VERSION="very very old"
|
||||
#
|
||||
@@ -1502,7 +1502,6 @@ fi
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
FOO=""
|
||||
runonce=""
|
||||
while [ -z "$FOO" ] ; do
|
||||
@@ -1941,7 +1940,6 @@ cat << __EOF__
|
||||
| - The UnrealIRCd Team - |
|
||||
| * Stskeeps stskeeps@unrealircd.com |
|
||||
| * codemastr codemastr@unrealircd.com |
|
||||
| * DrBin drbin@unrealircd.com |
|
||||
| * Luke luke@unrealircd.com |
|
||||
|_____________________________________________________________________|
|
||||
__EOF__
|
||||
|
||||
+1
-2
@@ -1,10 +1,9 @@
|
||||
===============================================
|
||||
= UnrealIRCd v3.1.4 =
|
||||
= UnrealIRCd v3.1.6 =
|
||||
===============================================
|
||||
Was brought to you by:
|
||||
* Stskeeps <stskeeps@unrealircd.com>
|
||||
* codemastr <codemastr@unrealircd.com>
|
||||
* DrBin <drbin@unrealircd.com>
|
||||
* Luke <luke@unrealircd.com>
|
||||
|
||||
Precenses on the Internet:
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
# $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-)\)
|
||||
# }
|
||||
# }
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
[ $Id$ ]
|
||||
Take this with a grain of salt.. it's heaps old and this isn't Elite anymore
|
||||
|
||||
|
||||
---------------------------
|
||||
Version Elite2.0 ==========
|
||||
===========================
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
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$ ]
|
||||
@@ -1,34 +0,0 @@
|
||||
|
||||
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$ ]
|
||||
@@ -1,41 +0,0 @@
|
||||
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$ ]
|
||||
@@ -1,129 +0,0 @@
|
||||
[ $Id$ ]
|
||||
Take this with a grain of salt.. it's heaps old and this isn't Elite anymore
|
||||
|
||||
|
||||
---------------------------
|
||||
Version Elite2.0 ==========
|
||||
===========================
|
||||
- Since +x was rewritten, the ban bug is 100% fixed. :)
|
||||
- Rewrote +x hidden host function completely.
|
||||
- Fixed FUNNY bug with hiddenhost and /who (Reported by Prod|gy)
|
||||
- Added/Removed irc networks
|
||||
- Fixed bug in /watch (Reported/Fixed by Despise)
|
||||
- Added nick-change flood protection.
|
||||
- Added an awesome manual... ./manual to run
|
||||
- Removed /who notice for opers.
|
||||
- Added protection of /akill *@* :)
|
||||
- Removed java stuff completely. (Java clients are like normal IRC clients...right?)
|
||||
- Added new +a mode. This mode can only be set by +q channel owners. When you are +a in a
|
||||
channel, you cannot be deopped or kicked. (Syntax: /mode #chan +a <nick>)
|
||||
- Added new +q channel mode. ChanServ must set the channel founder +q so they are also
|
||||
known as channel owners via the ircd. Channel owners are protected and may set
|
||||
other users +a which they will also be protected (but not chan owners).
|
||||
(Syntax: /mode #chan +q <nick>)
|
||||
- Re-coded /MAP
|
||||
- Changed GLINE notices from sendto_ops to send to all opers with +e flag on.
|
||||
- Added (addnet) script, you can run this to add your net settings to the next release.
|
||||
- Changed <server> to <ircnetwork> in whois "Blah is an oper on <server>"
|
||||
- Added new +L channel mode. If a #chat has a limit (+l) of 10 users, and +L set to channel
|
||||
#chat2, when a user trys to join #chat, they won't get "#chat is full", they will be
|
||||
auto-joined to #chat2 - (Linked channels in other words).
|
||||
(Syntax: /mode #chan +L <linked chan>)
|
||||
- Changes user@shadow-33.com to user@user-33.one.com (noone will know one.com is the realhost)
|
||||
- Changed +x for IP's from (x.x.x.***) to (x.x.x.network-#)
|
||||
- In oline flags * will introduce +e on oper up. (before: required +e in oline flag)
|
||||
- Removed +t usermode (UMODE_ALL) - wasn't used.
|
||||
- Made 'create your own network setting' feature more stable.
|
||||
- Added new channel mode (+x) to disable colored text in channel.
|
||||
- Added +C (Co Administrator)
|
||||
- Added +T (Technical Administrator)
|
||||
- Changed /map to numerics...
|
||||
- Made startup message when booting more stable.
|
||||
|
||||
Version Elite1.3 (02/23/99)
|
||||
============================
|
||||
- Cleaned up version.c.SH
|
||||
- Added new net settings (netdomain & helpchan)
|
||||
- Added new net config creator in ./Config
|
||||
- Made ./Config more easier...
|
||||
- Created new usermode +j (Java user)
|
||||
- New hostname (java.shadownet.org) for java users.
|
||||
- Removed RUN_SERVICES code from entire ircd.
|
||||
|
||||
Version Elite1.2.4 (02/14/99)
|
||||
============================
|
||||
- Fixed the nick crash bug! (damn m_kill small error)
|
||||
- New network(s) added.
|
||||
- Changed one thing in m_gline (nothing big)
|
||||
|
||||
Version Elite1.2.3 (02/10/99)
|
||||
============================
|
||||
- Removed SOCKS checking. (possibly cause of crashing)
|
||||
- Added new networks
|
||||
|
||||
Version Elite1.2.2 (02/02/99)
|
||||
============================
|
||||
- Fixed the crashing bug. (Changing nicks with linked servers)
|
||||
- Modified AceStar net settings.
|
||||
- Q-line notices are back (except for ULined clients).
|
||||
- Fixed /kill bug with services.
|
||||
|
||||
Version Elite1.2.1 (01/29/99)
|
||||
============================
|
||||
- Fixed multiple notices from +N / -N
|
||||
- Added some text to s_err.c
|
||||
- Possibly fixed the odd crashing... ?
|
||||
|
||||
Version Elite1.2 (01/24/99)
|
||||
============================
|
||||
- Netadmin can be used via +N in the oline slot now.
|
||||
- When +N is executed, net-wide oper msg's are sent about it.
|
||||
- Completely removed the freeze function (it's a toy unlike a command)
|
||||
- Changed abit of the GLINE adding notice.
|
||||
- Added logging to a file for glines (gline.log)
|
||||
- Implemented SOCKS checking (thx Rhom).
|
||||
- Changed channel lists only when 2 ppl in chan to 1.
|
||||
- Changed sendto_ops function in many places in s_user.c/s_serv.c to
|
||||
sendto_locfailops.
|
||||
- Changed GNOTICE in s_user.c/s_serv.c to GLOBOPS
|
||||
- Fixed hiddenhost bug with /kill (+w could see real host of oper)
|
||||
- Fixed hiddenhost bug with /oper (+s could see real host of oper)
|
||||
|
||||
[Special thanks goes out to Rhom for reporting/help patch bugs]
|
||||
|
||||
Version Elite1.1.1 (12/12/98)
|
||||
=============================
|
||||
- Fixed /whois bug (had problems with mIRC clients *sigh*)
|
||||
- Fixed /topic bug (didn't allow topic changes at all.)
|
||||
|
||||
Version Elite1.1 (12/6/98)
|
||||
============================
|
||||
- Fixed ./Config script (Net select)
|
||||
- Fixed /remgline bug.
|
||||
- If ULined clients, channels are not shown which they are in.
|
||||
- Fixed +e / +t / +b (non-opers could get +et before)
|
||||
- Fixed OperMode notice.
|
||||
- Fixed Gline sending extra Global on expire.
|
||||
- Fixed /whowas wrong hostname bug (by Thiago)
|
||||
- Fixed chkconf ZLINE error (by matt)
|
||||
- Added PhazeNet configuration
|
||||
- Added option for auto +x in ./Config
|
||||
- Freeze was disabled in this version (It will be back in 1.2)
|
||||
|
||||
Version Elite1.0 (09/20/98)
|
||||
============================
|
||||
- Changed Shadow3.9 to Elite1.0 (Starting a new IRCD)
|
||||
- Changed some numeric's around in src/s_err.c
|
||||
- Auto +x on Oper up.
|
||||
- Fixed small error in ./ircd script.
|
||||
- Made ./Config more Linux-redhat friendly.
|
||||
- Added RelicNet to the ircd.
|
||||
- include/config.h is much more compatible with all IRC nets.
|
||||
- Added /gline (works 100%) [/gline <user@host> <seconds> <reason>].
|
||||
- Fixed up /map.
|
||||
- Added UMODE's +e & +t
|
||||
* e: EYES [Can see ppl who /whois, and other notices.]
|
||||
* t: ALL [See's all net notices ie: See's all Client connectings...]
|
||||
- Fixed the hiddenhost bug with IP's...
|
||||
- Fixed major bug with hiddenhost which caused coredump.
|
||||
- Made a new script (makeconf) -- generates the ircd.conf file.
|
||||
@@ -1,86 +0,0 @@
|
||||
/************************************************************************
|
||||
* 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
@@ -1,963 +0,0 @@
|
||||
/************************************************************************
|
||||
* 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
@@ -1,382 +0,0 @@
|
||||
/************************************************************************
|
||||
* 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.
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
|
||||
Unreal3.1.4-Meadows Release Notes
|
||||
===================================
|
||||
|
||||
* This is yet another significant upgrade over the last version. Most notable
|
||||
compatibility wise is the backporting of the new host cloaking from 3.2.
|
||||
As a result of this, we strongly recommend that you convert all of your servers
|
||||
to 3.1.4 and avoid running a network with mixed versions. They'll link fine
|
||||
and operate okay, but the differences in cloaking will make it easier for
|
||||
individuals to evade bans by simply switching servers.
|
||||
|
||||
* Before this version if a 3.2 server with IPv6 enabled was linked to the
|
||||
network, and a client connected using IPv6, it caused 3.1.x servers to segfault,
|
||||
as the cloaking routine was unable to deal with IPv6 format addresses. This is
|
||||
also corrected in this version
|
||||
|
||||
* Other serious bugs involving the mode system have been resolved. These problems
|
||||
include problems that could potentially generate a desynch on the network. This is
|
||||
yet another reason you should use all 3.1.4 servers.
|
||||
|
||||
* The OperOverride system is completely redone. You must now invite yourself (as an
|
||||
oper) into a channel in order to walk any modes on join.
|
||||
|
||||
* Please Note: There have been a couple of configuration file changes! This is
|
||||
IMPORTANT. Your IRCd WILL NOT START if you don't change the cloak key values found
|
||||
in unrealircd.conf. Additionally, it would be prudent to note that there is a
|
||||
new directive in unrealircd.conf, exempt_all, which permits exempt lines in
|
||||
ircd.conf to match glines in addition to klines. It defaults to 1. Finally, both
|
||||
version numbers in the .network file and unrealircd.conf have been changed. In
|
||||
unrealircd.conf, because of the 4 new directives. In the .network file because
|
||||
we removed techadmin, and the host directive for it. We will NOT bring techadmin
|
||||
back. If you don't like it, readd it yourself, and be sure to note that we won't
|
||||
provide support for modified versions of Unreal.
|
||||
|
||||
* The rest of the changes can be found (obviously) in the Changes file.
|
||||
|
||||
* Finally, read Unreal.nfo as usual AND THE DOCS in doc/.
|
||||
|
||||
- Luke (luke@unrealircd.com)
|
||||
@@ -0,0 +1,25 @@
|
||||
|
||||
Unreal3.1.5-Valek Release Notes
|
||||
===================================
|
||||
|
||||
* IMPORTANT: OperOverride has been modified. In order to be
|
||||
able to override anything as an oper, you MUST have the letter
|
||||
"v" in your O line flags!
|
||||
|
||||
* This release is mostly a bug fix release. It resolves the
|
||||
following issues as well as some others:
|
||||
- Bug with /invite not propagating
|
||||
- Bug with channel exempts being added multiple times
|
||||
- Bug with channel exempts multiplying on synch (to resolve
|
||||
this bug entirely *all* your servers must run 3.1.5)
|
||||
- Bug with /userhost always displaying *
|
||||
- Others (read the Changes file in .)
|
||||
|
||||
* If you are upgrading from an earlier version (before 3.1.4),
|
||||
please read the doc/RELEASE-NOTES.3.1.4 file as well. There
|
||||
were numerous important/significant changes between 3.1.4 and
|
||||
earlier versions.
|
||||
|
||||
* Finally, read Unreal.nfo as usual AND THE DOCS in doc/.
|
||||
|
||||
- Luke (luke@unrealircd.com)
|
||||
@@ -1,109 +0,0 @@
|
||||
|
||||
RPL_PROTOCTL (RPL_ISUPPORT):
|
||||
version: 2.1+ (new version: 3.1+)
|
||||
|
||||
This sends a numeric during client signon that lists various features that
|
||||
Unreal supports. This allows client and script writers to know what features
|
||||
they can use, and various parameters about the irc server. The numeric
|
||||
used is '005' to try and maintain some semblance of compatibility with
|
||||
DALnet which has a similar feature. The 005 numeric may be split across
|
||||
multiple lines if the length exceeds 512 characters.
|
||||
|
||||
The format is:
|
||||
:servername 005 target feature1 feature2... :are supported by this server.
|
||||
:servername 005 target feature200... :are supported by this server.
|
||||
|
||||
features are either a word describing the feature eg: 'SILENCE', or a word
|
||||
describing the feature and an equals and a list of parameters.
|
||||
eg: SILENCE=15 (says that we support silence, and we support up to 15 of
|
||||
them per user), or FOO=12,3 (says we support FOO with parameters 12 and 3)
|
||||
for example ircu2.10.08 lists:
|
||||
|
||||
:test.undernet.org 005 test SILENCE=15 WHOX WALLCHOPS USERIP CPRIVMSG
|
||||
CNOTICE MODES=6 MAXCHANNELS=10 MAXBANS=30 NICKLEN=9 TOPICLEN=160
|
||||
KICKLEN=160
|
||||
|
||||
-------------------------------------------------------------------------
|
||||
UnrealIRCd Supports:
|
||||
|
||||
:unreal.server 005 nick MAP KNOCK SAFELIST HCN WATCH=%i SILENCE=%i MODES=%i
|
||||
MAXCHANNELS=%i MAXBANS=%i NICKLEN=%i TOPICLEN=%i
|
||||
KICKLEN=%i CHANTYPES=# PREFIX=%s :are supported by this server
|
||||
|
||||
Feature "MAP"
|
||||
-------------
|
||||
|
||||
/map shows the servers as the server percieves them, who's connected
|
||||
to who in a pretty display, with number of users attached to each server
|
||||
|
||||
Numerics used:
|
||||
|
||||
RPL_MAP (006)
|
||||
RPL_MAPEND (007)
|
||||
|
||||
Feature "KNOCK"
|
||||
---------------
|
||||
|
||||
Command: /KNOCK #Channel :<Reason>
|
||||
|
||||
This command will only work if you are not a member of the channel and the
|
||||
+K (No knocks) mode is not on, and the channel is not +i (and you are not
|
||||
banned). This will send a notice to ops in the channel, about that the user
|
||||
"knocked".
|
||||
|
||||
Feature "SAFELIST"
|
||||
------------------
|
||||
|
||||
|
||||
This note means that the user will not get disconnected when doing a /list,
|
||||
as some IRC networks do
|
||||
|
||||
Feature "HCN"
|
||||
-------------
|
||||
|
||||
This is a special feature that you activate using /protoctl +HCN,
|
||||
that will cause +c notices when being oper, being in the Hybrid IRCd style
|
||||
|
||||
Feature "WATCH"
|
||||
---------------
|
||||
|
||||
Parameters: How many watch entries are possible
|
||||
|
||||
This will ensure the server is able to do the DALnet WATCH command
|
||||
|
||||
|
||||
Feature "SILENCE"
|
||||
-----------------
|
||||
Parameters: How many silence entries you can have
|
||||
Version: unknown, ircu2.9.32 at least.
|
||||
|
||||
Silence is a server side ignore. You can /silence +hostmask or
|
||||
/silence +nick, to add someone to your silence list, or use /silence
|
||||
-hostmask to remove it. /silence will list your 'silence list'.
|
||||
you can /silence nick, to see someone elses silence list (useful for
|
||||
helping someone). Silence is preferably used as a last resort as it
|
||||
tends to use server CPU time.
|
||||
|
||||
Syntax:
|
||||
SILENCE +hostmask
|
||||
SILENCE +nick
|
||||
SILENCE -hostmask
|
||||
SILENCE -nick
|
||||
SILENCE nick
|
||||
|
||||
reply:
|
||||
RPL_SILELIST 217
|
||||
RPL_ENDOFSILELIST 218
|
||||
|
||||
|
||||
Feature/Modifier "MODES"
|
||||
------------------------
|
||||
Parameters: How many modes with parameters you can use in one /mode buffer
|
||||
|
||||
|
||||
Feature/Modifier "MAXCHANNELS"
|
||||
------------------------------
|
||||
Parameters: How many channels a normal user can join (opers may have
|
||||
unlimited)
|
||||
|
||||
Feature/Modifier "MAXBANS"
|
||||
@@ -1,82 +0,0 @@
|
||||
.\" $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
@@ -1,140 +0,0 @@
|
||||
.\" $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.
|
||||
@@ -1,47 +0,0 @@
|
||||
[ $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.
|
||||
@@ -1,294 +0,0 @@
|
||||
[ $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.| |
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
Compiling UnrealIRCd 3.1.x for Windows
|
||||
--------------------------------------
|
||||
This document assumes you have a working build environment for
|
||||
Visual Studio .NET or Visual Studio 6.0. Other versions may work
|
||||
as well, but have not been tested.
|
||||
|
||||
1. Copy include/win32/settings.h and setup.h to include/
|
||||
2. Copy extras/regex/regex.h to include/
|
||||
3. Copy extras/regex/regex.c to src/
|
||||
4. Edit include/settings.h to your liking (pretty much change DOMAINNAME)
|
||||
5. Unzip src/win32/unrealircd.bmp.gz
|
||||
6. Execute "nmake makefile.win32"
|
||||
|
||||
Congratulations, you should have a functioning win32 binary.
|
||||
|
||||
--Luke (luke@unrealircd.com)
|
||||
@@ -1,20 +1,21 @@
|
||||
Dynamic Configuration Guide
|
||||
|
||||
Okay first you have to go edit the file "unrealircd.conf" in
|
||||
the directory "networks/". In that file you see a field with
|
||||
name "Include" .. if you want to create your own network file
|
||||
(IRC network specification) you have to write like
|
||||
"networks/<irc network>.network" like "networks/myircnetwork.network"
|
||||
- Edit ircd.conf to correctly reflect your server configuration.
|
||||
|
||||
If there is already a network file you can just put in the path
|
||||
like : "networks/dragonwings.org"
|
||||
- Edit networks/unrealircd.conf to suit you. If you're going
|
||||
to use your own network file (encouraged), change the "Include"
|
||||
line to point to your own network file.
|
||||
|
||||
If you want to create your own network file
|
||||
copy the file "template.network" to the name you want to use for
|
||||
your network file and edit it.
|
||||
- Assuming you do want your own network file, copy template.network
|
||||
in networks/ to yourircnet.network. Edit it to your liking.
|
||||
|
||||
If you experince any problems email me at stskeeps@tspre.org
|
||||
or try msg me at /server irc.ircsystems.net : #UnrealIRCd
|
||||
My nick is mostly Stskeeps or Techie (or Nightwalker if i had a bad night:P)
|
||||
If you've completed all these steps *correctly* your server should
|
||||
start up without any problems. If there are errors, there is an
|
||||
extremely high chance that it's due to user configuration error.
|
||||
Please read the documentation and check over your configuration files
|
||||
before contacting us.
|
||||
|
||||
--Stskeeps
|
||||
If the problem persists, and you cannot fix it, email luke@unrealircd.com
|
||||
or come on irc.ircsystems.net and /join #unreal-support.
|
||||
|
||||
- Luke (luke@unrealircd.com)
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@
|
||||
* before Dreamforge aren't safe with more than six. -Donwulff
|
||||
*/
|
||||
#include "msg.h"
|
||||
#define MAXMODEPARAMS (MAXPARA-2) /* Maximum modes processed */
|
||||
#define MAXMODEPARAMS (MAXPARA-3) /* Maximum modes processed */
|
||||
#define RESYNCMODES 12 /* Max modes per MODE in resync */
|
||||
#define MODEPARAMS 6 /* Max modes from user */
|
||||
|
||||
|
||||
+6
-1
@@ -226,6 +226,7 @@ extern struct SLink *find_user_link( /* struct SLink *, struct Client * */ );
|
||||
" KICKLEN=%i" \
|
||||
" CHANTYPES=%s" \
|
||||
" PREFIX=%s" \
|
||||
" CHANMODES=%s,%s,%s,%s" \
|
||||
" :are supported by this server"
|
||||
|
||||
#define PROTOCTL_PARAMETERS MAXWATCH, \
|
||||
@@ -237,7 +238,11 @@ extern struct SLink *find_user_link( /* struct SLink *, struct Client * */ );
|
||||
TOPICLEN, \
|
||||
TOPICLEN, \
|
||||
"#", \
|
||||
"(ohv)@%+"
|
||||
"(ohv)@%+", \
|
||||
"ohvbeqa", \
|
||||
"kfL", \
|
||||
"l", \
|
||||
"psmntirRcOAQKVGCuzNSM"
|
||||
|
||||
/* Server-Server PROTOCTL -Stskeeps */
|
||||
#define PROTOCTL_SERVER "NOQUIT" \
|
||||
|
||||
+18
-3
@@ -118,12 +118,30 @@
|
||||
*/
|
||||
#define STRIPBADWORDS
|
||||
|
||||
/* STATS_ONLYOPER
|
||||
* This changes all stats related commands so that the output
|
||||
* is only visible if the user is an oper.
|
||||
*/
|
||||
#undef STATS_ONLYOPER
|
||||
|
||||
/*
|
||||
* NO_OPEROVERRIDE
|
||||
* This will disable OperMode, OperTopic and Banwalks
|
||||
*/
|
||||
#undef NO_OPEROVERRIDE
|
||||
|
||||
/*
|
||||
* OPEROVERRIDE_VERIFY
|
||||
* This will prompt opers before permitting them to join +s/+p
|
||||
* channels, preventing them from "accidentally" joining random
|
||||
* channels
|
||||
*/
|
||||
#ifndef NO_OPEROVERRIDE
|
||||
#define OPEROVERRIDE_VERIFY 1
|
||||
#else
|
||||
#undef OPEROVERRIDE_VERIFY
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Disable /sethost, /setident, /chgname, /chghost, /chgident
|
||||
*/
|
||||
@@ -607,8 +625,6 @@ extern void debug();
|
||||
# endif
|
||||
#endif
|
||||
|
||||
# undef LEAST_IDLE
|
||||
|
||||
#if defined(mips) || defined(PCS)
|
||||
#undef SYSV
|
||||
#endif
|
||||
@@ -695,7 +711,6 @@ error You stuffed up config.h signals
|
||||
# undef FORCE_CORE
|
||||
#endif
|
||||
/* use cflag longmodes */
|
||||
#define USE_LONGMODE
|
||||
#define Reg1 register
|
||||
#define Reg2 register
|
||||
#define Reg3 register
|
||||
|
||||
+2
-2
@@ -202,6 +202,7 @@ extern int send_queued PROTO((aClient *));
|
||||
// extern void sendto_one(char *, ...);
|
||||
/*VARARGS4*/
|
||||
/* i know this is naughty but :P --stskeeps */
|
||||
extern void sendto_connectnotice(char *nick, anUser *user, aClient *sptr, int disconnect, char *comment);
|
||||
extern void sendto_channel_butone(aClient *, aClient *, aChannel *, char *,
|
||||
...);
|
||||
extern void sendto_channelops_butone(aClient *, aClient *, aChannel *,
|
||||
@@ -242,7 +243,6 @@ extern void sendto_failops(char *, ...);
|
||||
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));
|
||||
|
||||
@@ -330,7 +330,7 @@ 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 atime(char *xtime);
|
||||
extern time_t atime(char *xtime);
|
||||
|
||||
|
||||
extern int dopacket PROTO((aClient *, char *, int));
|
||||
|
||||
+2
-2
@@ -503,8 +503,8 @@ struct Message msgtab[] = {
|
||||
{MSG_SVSNAME, m_chgname, 0, MAXPARA, TOK_CHGNAME, 0L},
|
||||
{MSG_SHUN, m_shun, 0, MAXPARA, TOK_SHUN, 0L},
|
||||
{MSG_NEWJOIN, m_join, 0, MAXPARA, TOK_JOIN, 0L},
|
||||
{MSG_BOTSERV, m_botserv, 0, MAXPARA, TOK_BOTSERV,0L},
|
||||
{TOK_BOTSERV, m_botserv, 0, MAXPARA, TOK_BOTSERV,0L},
|
||||
{MSG_BOTSERV, m_botserv, 0, 1, TOK_BOTSERV,0L},
|
||||
{TOK_BOTSERV, m_botserv, 0, 1, TOK_BOTSERV,0L},
|
||||
{(char *)0, (int (*)())0, 0, 0, 0, 0L}
|
||||
};
|
||||
|
||||
|
||||
+4
-3
@@ -82,7 +82,6 @@
|
||||
|
||||
#define ERR_HOSTILENAME 455
|
||||
|
||||
#define ERR_NOHIDING 459
|
||||
#define ERR_NOTFORHALFOPS 460
|
||||
#define ERR_NEEDMOREPARAMS 461
|
||||
#define ERR_ALREADYREGISTRED 462
|
||||
@@ -111,7 +110,9 @@
|
||||
#define ERR_ATTACKDENY 484
|
||||
#define ERR_KILLDENY 485
|
||||
|
||||
#define ERR_HTMDISABLED 486
|
||||
#define ERR_HTMDISABLED 486
|
||||
|
||||
#define ERR_SECUREONLYCHAN 489
|
||||
|
||||
#define ERR_NOOPERHOST 491
|
||||
#define ERR_NOSERVICEHOST 492
|
||||
@@ -127,7 +128,7 @@
|
||||
#define ERR_ADMONLY 519
|
||||
#define ERR_OPERONLY 520
|
||||
#define ERR_LISTSYNTAX 521
|
||||
|
||||
#define ERR_OPERSPVERIFY 524
|
||||
/*
|
||||
* Numberic replies from server commands.
|
||||
* These are currently in the range 200-399.
|
||||
|
||||
@@ -52,7 +52,6 @@ void sendto_chanops_butone PROTO((aClient *one, aChannel *chptr, char *pattern,
|
||||
void sendto_realops PROTO((char *pattern, ...));
|
||||
void sendto_serv_butone_token PROTO((aClient *one, char *prefix, char *command, char *token, char *pattern, ...));
|
||||
void sendto_serv_butone_token_opt PROTO((aClient *one, int opt, char *prefix, char *command, char *token, char *pattern, ...));
|
||||
void sendto_channel_ntadmins PROTO((aClient *from, aChannel *chptr, char *pattern, ...));
|
||||
|
||||
/* support.c */
|
||||
char *my_itoa PROTO((int i));
|
||||
|
||||
+119
-114
@@ -99,7 +99,6 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define MAXRECIPIENTS 20
|
||||
#define MAXKILLS 20
|
||||
#define MAXBANS 60
|
||||
#define MAXBANLENGTH 1024
|
||||
#define MAXSILES 5
|
||||
#define MAXSILELENGTH 128
|
||||
/*
|
||||
@@ -247,14 +246,15 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define UMODE_BOT 0x400000 /* User is a bot */
|
||||
#define UMODE_SECURE 0x800000 /* User is a secure connect */
|
||||
#define UMODE_FCLIENT 0x1000000 /* recieve client on far connects.. */
|
||||
#define UMODE_HIDING 0x2000000 /* Totally invisible .. */
|
||||
|
||||
#define UMODE_VICTIM 0x8000000 /* Intentional Victim */
|
||||
#define UMODE_DEAF 0x10000000
|
||||
#define UMODE_HIDEOPER 0x20000000 /* Hide oper mode */
|
||||
#define UMODE_SETHOST 0x40000000 /* used sethost */
|
||||
#define UMODE_STRIPBADWORDS 0x80000000 /* */
|
||||
|
||||
#define SEND_UMODES (UMODE_INVISIBLE|UMODE_OPER|UMODE_WALLOP|UMODE_FAILOP|UMODE_HELPOP|UMODE_REGNICK|UMODE_SADMIN|UMODE_NETADMIN|UMODE_COADMIN|UMODE_ADMIN|UMODE_SERVICES|UMODE_HIDE|UMODE_EYES|UMODE_WHOIS|UMODE_KIX|UMODE_BOT|UMODE_SECURE|UMODE_FCLIENT|UMODE_HIDING|UMODE_DEAF|UMODE_VICTIM|UMODE_HIDEOPER|UMODE_SETHOST|UMODE_STRIPBADWORDS|UMODE_JUNK)
|
||||
#define SEND_UMODES (UMODE_INVISIBLE|UMODE_OPER|UMODE_WALLOP|UMODE_FAILOP|UMODE_HELPOP|UMODE_REGNICK|UMODE_SADMIN|UMODE_NETADMIN|UMODE_COADMIN|UMODE_ADMIN|UMODE_SERVICES|UMODE_HIDE|UMODE_EYES|UMODE_WHOIS|UMODE_KIX|UMODE_BOT|UMODE_SECURE|UMODE_FCLIENT|UMODE_DEAF|UMODE_VICTIM|UMODE_HIDEOPER|UMODE_SETHOST|UMODE_STRIPBADWORDS|UMODE_JUNK)
|
||||
|
||||
#define ALL_UMODES (SEND_UMODES|UMODE_SERVNOTICE|UMODE_LOCOP|UMODE_KILLS|UMODE_CLIENT|UMODE_FLOOD|UMODE_SERVICES|UMODE_EYES)
|
||||
#define FLAGS_ID (FLAGS_DOID|FLAGS_GOTID)
|
||||
|
||||
@@ -283,7 +283,6 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define IsKix(x) ((x)->umodes & UMODE_KIX)
|
||||
#define IsHelpOp(x) ((x)->umodes & UMODE_HELPOP)
|
||||
#define IsAdmin(x) ((x)->umodes & UMODE_ADMIN)
|
||||
#define IsHiding(x) ((x)->umodes & UMODE_HIDING)
|
||||
|
||||
#ifdef STRIPBADWORDS
|
||||
#define IsFilteringWords(x) ((x)->umodes & UMODE_STRIPBADWORDS)
|
||||
@@ -341,6 +340,8 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define SetHelpOp(x) ((x)->umodes |= UMODE_HELPOP)
|
||||
#define SetOper(x) ((x)->umodes |= UMODE_OPER)
|
||||
#define SetLocOp(x) ((x)->umodes |= UMODE_LOCOP)
|
||||
#define SetWhois(x) ((x)->umodes |= UMODE_WHOIS)
|
||||
#define SetHide(x) ((x)->umodes |= UMODE_HIDE)
|
||||
#define SetAdmin(x) ((x)->umodes |= UMODE_ADMIN)
|
||||
#define SetSAdmin(x) ((x)->umodes |= UMODE_SADMIN)
|
||||
#define SetNetAdmin(x) ((x)->umodes |= UMODE_NETADMIN)
|
||||
@@ -360,7 +361,7 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define SetRegNick(x) ((x)->umodes & UMODE_REGNICK)
|
||||
#define SetHidden(x) ((x)->umodes |= UMODE_HIDE)
|
||||
#define SetHideOper(x) ((x)->umodes |= UMODE_HIDEOPER)
|
||||
|
||||
#define IsSecureConnect(x) ((x)->umodes & UMODE_SECURE)
|
||||
#define ClearAdmin(x) ((x)->umodes &= ~UMODE_ADMIN)
|
||||
#define ClearNetAdmin(x) ((x)->umodes &= ~UMODE_NETADMIN)
|
||||
#define ClearCoAdmin(x) ((x)->umodes &= ~UMODE_COADMIN)
|
||||
@@ -448,12 +449,12 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define OFLAG_SADMIN 0x01000000 /* services admin gets +a */
|
||||
#define OFLAG_WHOIS 0x02000000 /* gets auto +W on oper up */
|
||||
#define OFLAG_HIDE 0x04000000 /* gets auto +x on oper up */
|
||||
#define OFLAG_AFOUNDER 0x10000000
|
||||
#ifndef NO_OPEROVERRIDE
|
||||
#define OFLAG_CANOVER 0x10000000 /* Oper can utilize operoverride */
|
||||
#endif
|
||||
#define OFLAG_COFOUND 0x20000000
|
||||
#define OFLAG_WMASTER 0x40000000
|
||||
#define OFLAG_INVISIBLE 0x80000000
|
||||
#define OFLAG_LOCAL (OFLAG_REHASH|OFLAG_HELPOP|OFLAG_GLOBOP|OFLAG_WALLOP|OFLAG_LOCOP|OFLAG_LROUTE|OFLAG_LKILL|OFLAG_KLINE|OFLAG_UNKLINE|OFLAG_LNOTICE|OFLAG_UMODEC|OFLAG_UMODEF)
|
||||
#define OFLAG_GLOBAL (OFLAG_LOCAL|OFLAG_GROUTE|OFLAG_GKILL|OFLAG_GNOTICE)
|
||||
#define OFLAG_LOCAL (OFLAG_REHASH|OFLAG_HELPOP|OFLAG_LOCOP|OFLAG_LROUTE|OFLAG_LKILL|OFLAG_KLINE|OFLAG_UNKLINE|OFLAG_LNOTICE|OFLAG_UMODEC|OFLAG_ZLINE|OFLAG_HIDE)
|
||||
#define OFLAG_GLOBAL (OFLAG_LOCAL|OFLAG_GLOBOP|OFLAG_WALLOP|OFLAG_UMODEF|OFLAG_GROUTE|OFLAG_GKILL|OFLAG_GNOTICE|OFLAG_HIDE)
|
||||
#define OFLAG_ISGLOBAL (OFLAG_GROUTE|OFLAG_GKILL|OFLAG_GNOTICE)
|
||||
|
||||
|
||||
@@ -476,11 +477,15 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define OPIsAdmin(x) ((x)->oflag & OFLAG_ADMIN)
|
||||
#define OPIsSAdmin(x) ((x)->oflag & OFLAG_SADMIN)
|
||||
#define OPIsNetAdmin(x) ((x)->oflag & OFLAG_NETADMIN)
|
||||
#define OPIsGlobal(x) ((x)->oflag & OFLAG_ISGLOBAL)
|
||||
#define OPIsCoAdmin(x) ((x)->oflag & OFLAG_COADMIN)
|
||||
#define OPCanUModeC(x) ((x)->oflag & OFLAG_UMODEC)
|
||||
#define OPCanUModeF(x) ((x)->oflag & OFLAG_UMODEF)
|
||||
#define OPIsEyes(x) ((x)->oflag & OFLAG_EYES)
|
||||
#define OPIsWhois(x) ((x)->oflag & OFLAG_WHOIS)
|
||||
#ifndef NO_OPEROVERRIDE
|
||||
#define OPCanOver(x) (MyClient(x) ? (IsOper(x) && ((x)->oflag & OFLAG_CANOVER)) : IsOper(x))
|
||||
#endif
|
||||
|
||||
#define OPSetRehash(x) ((x)->oflag |= OFLAG_REHASH)
|
||||
#define OPSetDie(x) ((x)->oflag |= OFLAG_DIE)
|
||||
@@ -506,6 +511,7 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define OPSetEyes(x) ((x)->oflag |= OFLAG_EYES)
|
||||
#define OPSetZLine(x) ((x)->oflag |= OFLAG_ZLINE)
|
||||
#define OPSetWhois(x) ((x)->oflag |= OFLAG_WHOIS)
|
||||
|
||||
#define OPClearRehash(x) ((x)->oflag &= ~OFLAG_REHASH)
|
||||
#define OPClearDie(x) ((x)->oflag &= ~OFLAG_DIE)
|
||||
#define OPClearRestart(x) ((x)->oflag &= ~OFLAG_RESTART)
|
||||
@@ -530,6 +536,7 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define OPClearEyes(x) ((x)->oflag &= ~OFLAG_EYES)
|
||||
#define OPClearZLine(x) ((x)->oflag &= ~OFLAG_ZLINE)
|
||||
#define OPClearWhois(x) ((x)->oflag &= ~OFLAG_WHOIS)
|
||||
|
||||
/*
|
||||
* defined debugging levels
|
||||
*/
|
||||
@@ -572,45 +579,45 @@ struct aloopStruct {
|
||||
};
|
||||
|
||||
typedef struct Whowas {
|
||||
int hashv;
|
||||
long umodes;
|
||||
char *name;
|
||||
char *username;
|
||||
char *hostname;
|
||||
char *virthost;
|
||||
char *servername;
|
||||
char *realname;
|
||||
long umodes;
|
||||
TS logoff;
|
||||
struct Client *online; /* Pointer to new nickname for chasing or NULL */
|
||||
struct Whowas *next; /* for hash table... */
|
||||
struct Whowas *prev; /* for hash table... */
|
||||
struct Whowas *cnext; /* for client struct linked list */
|
||||
struct Whowas *cprev; /* for client struct linked list */
|
||||
int hashv;
|
||||
TS logoff;
|
||||
} aWhowas;
|
||||
|
||||
|
||||
struct SqlineItem {
|
||||
unsigned int status;
|
||||
char *sqline;
|
||||
char *reason;
|
||||
struct SqlineItem *next;
|
||||
unsigned int status;
|
||||
};
|
||||
|
||||
struct ConfItem {
|
||||
unsigned int status; /* If CONF_ILLEGAL, delete when no clients */
|
||||
int clients; /* Number of *LOCAL* clients using this */
|
||||
struct IN_ADDR ipnum; /* ip number of host field */
|
||||
char *host;
|
||||
char *passwd;
|
||||
char *name;
|
||||
int port;
|
||||
TS hold; /* Hold action until this time (calendar time) */
|
||||
int tmpconf;
|
||||
#ifndef VMSP
|
||||
aClass *class; /* Class of connection */
|
||||
#endif
|
||||
short options;
|
||||
struct ConfItem *next;
|
||||
#ifndef VMSP
|
||||
aClass *class; /* Class of connection */
|
||||
#endif
|
||||
unsigned int status; /* If CONF_ILLEGAL, delete when no clients */
|
||||
TS hold; /* Hold action until this time (calendar time) */
|
||||
int clients; /* Number of *LOCAL* clients using this */
|
||||
int port;
|
||||
int tmpconf;
|
||||
short options;
|
||||
};
|
||||
|
||||
#define CONF_ILLEGAL 0x80000000
|
||||
@@ -660,40 +667,40 @@ struct ConfItem {
|
||||
* Client structures
|
||||
*/
|
||||
struct User {
|
||||
char realhost[HOSTLEN + 1];
|
||||
char username[USERLEN + 1];
|
||||
struct User *nextu;
|
||||
Link *channel; /* chain of channel pointer blocks */
|
||||
Link *invited; /* chain of invite pointer blocks */
|
||||
Link *silence; /* chain of silence pointer blocks */
|
||||
char *away; /* pointer to away message */
|
||||
char *virthost;
|
||||
char *server;
|
||||
char *swhois; /* special whois thing */
|
||||
aClient *serv;
|
||||
LOpts *lopt; /* Saved /list options */
|
||||
aWhowas *whowas;
|
||||
#ifdef LIST_DEBUG
|
||||
aClient *bcptr;
|
||||
#endif
|
||||
TS last;
|
||||
u_int32_t servicestamp; /* Services' time stamp variable */
|
||||
signed char refcnt; /* Number of times this block is referenced */
|
||||
unsigned short joined; /* number of channels joined */
|
||||
char username[USERLEN + 1];
|
||||
char realhost[HOSTLEN + 1];
|
||||
char *virthost;
|
||||
char *server;
|
||||
char *swhois; /* special whois thing */
|
||||
aClient *serv;
|
||||
LOpts *lopt; /* Saved /list options */
|
||||
aWhowas *whowas;
|
||||
#ifdef LIST_DEBUG
|
||||
aClient *bcptr;
|
||||
#endif
|
||||
signed char refcnt; /* Number of times this block is referenced */
|
||||
};
|
||||
|
||||
struct Server {
|
||||
char by[NICKLEN + 1];
|
||||
long users;
|
||||
struct Server *nexts;
|
||||
anUser *user; /* who activated this connection */
|
||||
char *up; /* uplink for this server */
|
||||
char by[NICKLEN + 1];
|
||||
aConfItem *nline; /* N-line pointer for this server */
|
||||
#ifdef LIST_DEBUG
|
||||
aClient *bcptr;
|
||||
#endif
|
||||
TS timestamp; /* Remotely determined connect try time */
|
||||
unsigned short numeric; /* NS numeric, 0 if none */
|
||||
long users;
|
||||
#ifdef LIST_DEBUG
|
||||
aClient *bcptr;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct t_vhost {
|
||||
@@ -724,45 +731,45 @@ struct t_kline {
|
||||
char *hostmask;
|
||||
char *reason;
|
||||
char *setby;
|
||||
aTKline *next;
|
||||
aTKline *prev;
|
||||
TS expire_at;
|
||||
TS set_at;
|
||||
aTKline *next;
|
||||
aTKline *prev;
|
||||
};
|
||||
|
||||
struct ircstatsx {
|
||||
int clients; /* total */
|
||||
int invisible; /* invisible */
|
||||
unsigned short servers; /* servers */
|
||||
int operators; /* operators */
|
||||
int unknown; /* unknown local connections */
|
||||
int channels; /* channels */
|
||||
int me_clients; /* my clients */
|
||||
unsigned short me_servers; /* my servers */
|
||||
int me_max; /* local max */
|
||||
int global_max; /* global max */
|
||||
unsigned short servers; /* servers */
|
||||
unsigned short me_servers; /* my servers */
|
||||
};
|
||||
|
||||
struct t_fline {
|
||||
char *mask;
|
||||
char *reason;
|
||||
int type;
|
||||
aFline *next;
|
||||
aFline *prev;
|
||||
int type;
|
||||
};
|
||||
|
||||
struct t_crline {
|
||||
char *channel;
|
||||
int type;
|
||||
aCRline *next, *prev;
|
||||
int type;
|
||||
};
|
||||
|
||||
struct t_vhline {
|
||||
char *login;
|
||||
char *password;
|
||||
char *vhost;
|
||||
int type;
|
||||
aVHline *next, *prev;
|
||||
int type;
|
||||
};
|
||||
|
||||
#define LISTENER_NORMAL 0x000001
|
||||
@@ -777,26 +784,26 @@ struct t_vhline {
|
||||
|
||||
|
||||
struct Client {
|
||||
char info[REALLEN + 1]; /* Free form additional client information */
|
||||
char name[HOSTLEN + 1]; /* Unique name of the client, nick or host */
|
||||
char username[USERLEN + 1]; /* username here now for auth stuff */
|
||||
u_char targets[MAXTARGETS]; /* Hash values of current targets */
|
||||
long flags; /* client flags */
|
||||
long umodes; /* client usermodes */
|
||||
struct Client *next, *prev, *hnext;
|
||||
anUser *user; /* ...defined, if this is a User */
|
||||
aServer *serv; /* ...defined, if this is a server */
|
||||
aClient *from; /* == self, if Local Client, *NEVER* NULL! */
|
||||
aClient *srvptr; /* Server introducing this. May be &me */
|
||||
TS lasttime; /* ...should be only LOCAL clients? --msa */
|
||||
TS firsttime; /* time client was created */
|
||||
TS since; /* last time we parsed something */
|
||||
TS lastnick; /* TimeStamp on nick */
|
||||
TS nextnick; /* Time the next nick change will be allowed */
|
||||
TS nexttarget; /* Time until a change in targets is allowed */
|
||||
u_char targets[MAXTARGETS]; /* Hash values of current targets */
|
||||
long flags; /* client flags */
|
||||
long umodes; /* client usermodes */
|
||||
aClient *from; /* == self, if Local Client, *NEVER* NULL! */
|
||||
int fd; /* >= 0, for local clients */
|
||||
short status; /* Client type */
|
||||
unsigned char hopcount; /* number of servers to this 0 = local */
|
||||
short status; /* Client type */
|
||||
char name[HOSTLEN + 1]; /* Unique name of the client, nick or host */
|
||||
char username[USERLEN + 1]; /* username here now for auth stuff */
|
||||
char info[REALLEN + 1]; /* Free form additional client information */
|
||||
aClient *srvptr; /* Server introducing this. May be &me */
|
||||
/*
|
||||
** The following fields are allocated only for local clients
|
||||
** (directly connected to *this* server with a socket.
|
||||
@@ -805,45 +812,47 @@ struct Client {
|
||||
** these fields, if (from != self).
|
||||
*/
|
||||
int count; /* Amount of data in buffer */
|
||||
char buffer[BUFSIZE]; /* Incoming message buffer */
|
||||
short lastsq; /* # of 2k blocks when sendqueued called last */
|
||||
dbuf sendQ; /* Outgoing message queue--if socket full */
|
||||
dbuf recvQ; /* Hold for data incoming yet to be parsed */
|
||||
char buffer[BUFSIZE]; /* Incoming message buffer */
|
||||
char sockhost[HOSTLEN + 1]; /* This is the host name from the socket
|
||||
** and after which the connection was
|
||||
** accepted.
|
||||
*/
|
||||
dbuf sendQ; /* Outgoing message queue--if socket full */
|
||||
dbuf recvQ; /* Hold for data incoming yet to be parsed */
|
||||
struct IN_ADDR ip; /* keep real ip# too */
|
||||
long oflag; /* Operator access flags -Cabal95 */
|
||||
long sendM; /* Statistics: protocol messages send */
|
||||
long sendK; /* Statistics: total k-bytes send */
|
||||
long receiveM; /* Statistics: protocol messages received */
|
||||
long receiveK; /* Statistics: total k-bytes received */
|
||||
#ifndef NO_FDLIST
|
||||
long lastrecvM; /* to check for activity --Mika */
|
||||
#endif
|
||||
#ifdef USE_SSL
|
||||
struct SSL *ssl;
|
||||
struct X509 *client_cert;
|
||||
#endif
|
||||
aClient *acpt; /* listening client which we accepted from */
|
||||
Link *confs; /* Configuration record associated */
|
||||
Link *notify; /* Links to clients notify-structures */
|
||||
char *passwd;
|
||||
struct hostent *hostp;
|
||||
#ifdef NOSPOOF
|
||||
u_int32_t nospoof; /* Anti-spoofing random number */
|
||||
#endif
|
||||
long oflag; /* Operator access flags -Cabal95 */
|
||||
long proto; /* ProtoCtl options */
|
||||
long sendM; /* Statistics: protocol messages send */
|
||||
long sendK; /* Statistics: total k-bytes send */
|
||||
long receiveM; /* Statistics: protocol messages received */
|
||||
#ifdef USE_SSL
|
||||
struct SSL *ssl;
|
||||
struct X509 *client_cert;
|
||||
#endif
|
||||
#ifndef NO_FDLIST
|
||||
long lastrecvM; /* to check for activity --Mika */
|
||||
int priority;
|
||||
#endif
|
||||
long receiveK; /* Statistics: total k-bytes received */
|
||||
u_short sendB; /* counters to count upto 1-k lots of bytes */
|
||||
u_short receiveB; /* sent and received. */
|
||||
aClient *acpt; /* listening client which we accepted from */
|
||||
Link *confs; /* Configuration record associated */
|
||||
int authfd; /* fd for rfc931 authentication */
|
||||
int authfd; /* fd for rfc931 authentication */
|
||||
#ifdef SOCKSPORT
|
||||
int socksfd;
|
||||
#endif
|
||||
struct IN_ADDR ip; /* keep real ip# too */
|
||||
int proto; /* ProtoCtl options */
|
||||
u_short sendB; /* counters to count upto 1-k lots of bytes */
|
||||
u_short receiveB; /* sent and received. */
|
||||
u_short port; /* and the remote port# too :-) */
|
||||
struct hostent *hostp;
|
||||
u_short notifies; /* Keep track of count of notifies */
|
||||
Link *notify; /* Links to clients notify-structures */
|
||||
char sockhost[HOSTLEN + 1]; /* This is the host name from the socket
|
||||
** and after which the connection was
|
||||
** accepted.
|
||||
*/
|
||||
char *passwd;
|
||||
short lastsq; /* # of 2k blocks when sendqueued called last */
|
||||
#ifdef DEBUGMODE
|
||||
TS cputime;
|
||||
#endif
|
||||
@@ -856,19 +865,15 @@ struct Client {
|
||||
* statistics structures
|
||||
*/
|
||||
struct stats {
|
||||
unsigned long is_cks; /* k-bytes sent to clients */
|
||||
unsigned long is_ckr; /* k-bytes received to clients */
|
||||
unsigned long is_sks; /* k-bytes sent to servers */
|
||||
unsigned long is_skr; /* k-bytes received to servers */
|
||||
TS is_cti; /* time spent connected by clients */
|
||||
TS is_sti; /* time spent connected by servers */
|
||||
unsigned int is_cl; /* number of client connections */
|
||||
unsigned int is_sv; /* number of server connections */
|
||||
unsigned int is_ni; /* connection but no idea who it was */
|
||||
unsigned short is_cbs; /* bytes sent to clients */
|
||||
unsigned short is_cbr; /* bytes received to clients */
|
||||
unsigned short is_sbs; /* bytes sent to servers */
|
||||
unsigned short is_sbr; /* bytes received to servers */
|
||||
unsigned long is_cks; /* k-bytes sent to clients */
|
||||
unsigned long is_ckr; /* k-bytes received to clients */
|
||||
unsigned long is_sks; /* k-bytes sent to servers */
|
||||
unsigned long is_skr; /* k-bytes received to servers */
|
||||
TS is_cti; /* time spent connected by clients */
|
||||
TS is_sti; /* time spent connected by servers */
|
||||
unsigned int is_ac; /* connections accepted */
|
||||
unsigned int is_ref; /* accepts refused */
|
||||
unsigned int is_unco; /* unknown commands */
|
||||
@@ -882,32 +887,32 @@ struct stats {
|
||||
unsigned int is_abad; /* bad auth requests */
|
||||
unsigned int is_udp; /* packets recv'd on udp port */
|
||||
unsigned int is_loc; /* local connections made */
|
||||
unsigned short is_cbs; /* bytes sent to clients */
|
||||
unsigned short is_cbr; /* bytes received to clients */
|
||||
unsigned short is_sbs; /* bytes sent to servers */
|
||||
unsigned short is_sbr; /* bytes received to servers */
|
||||
};
|
||||
|
||||
struct ListOptions {
|
||||
LOpts *next;
|
||||
Link *yeslist, *nolist;
|
||||
int starthash;
|
||||
short int showall;
|
||||
unsigned short usermin;
|
||||
int usermax;
|
||||
TS currenttime;
|
||||
TS chantimemin;
|
||||
TS chantimemax;
|
||||
TS topictimemin;
|
||||
TS topictimemax;
|
||||
int starthash;
|
||||
int usermax;
|
||||
short int showall;
|
||||
unsigned short usermin;
|
||||
};
|
||||
|
||||
/* mode structure for channels */
|
||||
struct SMode {
|
||||
#ifndef USE_LONGMODE
|
||||
unsigned int mode;
|
||||
#else
|
||||
long mode;
|
||||
#endif
|
||||
int limit;
|
||||
char key[KEYLEN + 1];
|
||||
char link[LINKLEN + 1];
|
||||
char key[KEYLEN + 1];
|
||||
/* x:y */
|
||||
unsigned short msgs; /* x */
|
||||
unsigned short per; /* y */
|
||||
@@ -921,11 +926,11 @@ struct Message {
|
||||
int (*func) ();
|
||||
unsigned int count;
|
||||
unsigned parameters : 5;
|
||||
u_char token[3]; /* Cheat for tokenized value */
|
||||
u_char token[3]; /* Cheat for tokenized value */
|
||||
unsigned long bytes;
|
||||
#ifdef DEBUGMODE
|
||||
unsigned long lticks;
|
||||
unsigned long rticks;
|
||||
unsigned long lticks;
|
||||
unsigned long rticks;
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -933,8 +938,8 @@ struct Message {
|
||||
|
||||
struct Notify {
|
||||
aNotify *hnext;
|
||||
TS lasttime;
|
||||
Link *notify;
|
||||
TS lasttime;
|
||||
char nick[1];
|
||||
};
|
||||
|
||||
@@ -942,7 +947,6 @@ struct Notify {
|
||||
|
||||
struct SLink {
|
||||
struct SLink *next;
|
||||
int flags;
|
||||
aFloodOpt *flood;
|
||||
union {
|
||||
aClient *cptr;
|
||||
@@ -957,6 +961,7 @@ struct SLink {
|
||||
TS when;
|
||||
} ban;
|
||||
} value;
|
||||
int flags;
|
||||
};
|
||||
|
||||
struct SBan {
|
||||
@@ -980,17 +985,17 @@ struct DSlink {
|
||||
/* channel structure */
|
||||
|
||||
struct Channel {
|
||||
struct Channel *nextch, *prevch, *hnextch;
|
||||
Mode mode;
|
||||
TS creationtime;
|
||||
struct Channel *nextch, *prevch, *hnextch;
|
||||
char *topic;
|
||||
char *topic_nick;
|
||||
TS topic_time;
|
||||
unsigned short users;
|
||||
Link *members;
|
||||
Link *invites;
|
||||
Ban *banlist;
|
||||
Ban *exlist; /* exceptions */
|
||||
TS creationtime;
|
||||
TS topic_time;
|
||||
unsigned short users;
|
||||
char chname[1];
|
||||
};
|
||||
|
||||
@@ -1043,7 +1048,7 @@ struct Channel {
|
||||
#define MODE_NOKNOCK 0x800000
|
||||
#define MODE_NOINVITE 0x1000000
|
||||
#define MODE_FLOODLIMIT 0x2000000
|
||||
#define MODE_NOHIDING 0x4000000
|
||||
#define MODE_MODREG 0x4000000
|
||||
#ifdef STRIPBADWORDS
|
||||
#define MODE_STRIPBADWORDS 0x8000000
|
||||
#endif
|
||||
@@ -1083,8 +1088,8 @@ struct Channel {
|
||||
find_channel_link((blah->user)->channel, chan)) ? 1 : 0)
|
||||
|
||||
struct FloodOpt {
|
||||
unsigned short nmsg;
|
||||
TS lastmsg;
|
||||
unsigned short nmsg;
|
||||
};
|
||||
|
||||
/* Misc macros */
|
||||
|
||||
+4
-4
@@ -25,14 +25,14 @@
|
||||
/**/
|
||||
#define COMPILEINFO DEBUGMODESET DEBUGSET
|
||||
/*
|
||||
* Version Unreal3.1.4-Meadows
|
||||
* Version Unreal3.1.6-Noon
|
||||
*/
|
||||
#define UnrealProtocol 2302
|
||||
#define PATCH1 "3"
|
||||
#define PATCH2 ".1"
|
||||
#define PATCH3 ".4"
|
||||
#define PATCH4 "-Meadows"
|
||||
#define PATCH5 "[beta3]"
|
||||
#define PATCH3 ".7"
|
||||
#define PATCH4 "-Jones"
|
||||
#define PATCH5 "[beta1]"
|
||||
#define PATCH6 ""
|
||||
#define PATCH7 ""
|
||||
#define PATCH8 COMPILEINFO
|
||||
|
||||
@@ -1,3 +1,25 @@
|
||||
#define SPATH "."
|
||||
/*
|
||||
* VERSION: Unreal3.1.6 Noon
|
||||
* DATE: Sat Jun 15 13:43:51 EST 2002
|
||||
* OS: Win-32
|
||||
*
|
||||
*/
|
||||
|
||||
#define DPATH "."
|
||||
#define DOMAINNAME "irc.net"
|
||||
#define SPATH "."
|
||||
#define DOMAINNAME "irc.net"
|
||||
#define LISTEN_SIZE 5
|
||||
#define MAXSENDQLENGTH 3000000
|
||||
#define BUFFERPOOL (9 * MAXSENDQLENGTH)
|
||||
#define MAXCONNECTIONS 1024
|
||||
#define NICKNAMEHISTORYLENGTH 2000
|
||||
#define OPEROVERRIDE_VERIFY 1
|
||||
#undef CRYPT_OPER_PASSWORD
|
||||
#undef USE_SSL
|
||||
#undef CRYPT_LINK_PASSWORD
|
||||
#undef CRYPT_ILINE_PASSWORD
|
||||
#undef CRYPT_XLINE_PASSWORD
|
||||
#define HUB 1
|
||||
#define HAVE_REGEX 1
|
||||
#define NOSPOOF 1
|
||||
#define GLIBC2_x
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
# Networks index file - do not touch please
|
||||
# 1 network listed
|
||||
# Please report outdated entries to unreal-networks@lists.sourceforge.net
|
||||
networks/template.netowrk .........: Template network file
|
||||
@@ -97,7 +97,7 @@ Set WEBTV_SUPPORT .......: 0
|
||||
#
|
||||
# Should usermode +I (Total Invisibility) be disabled?
|
||||
# 1 = Yes 0 = No
|
||||
Set NO_OPER_HIDING ......: 0
|
||||
Set NO_OPER_HIDING ......: 1
|
||||
|
||||
#
|
||||
# Should we make the user join a channel(s) on connect?
|
||||
|
||||
-377
@@ -1,377 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#ifdef _WIN32
|
||||
#include <io.h>
|
||||
#endif
|
||||
#include <fcntl.h>
|
||||
#ifdef _WIN32
|
||||
#include <sys\stat.h>
|
||||
#endif
|
||||
#include <time.h>
|
||||
|
||||
int _FD_SETSIZE = 1024;
|
||||
char _NS_ADDRESS[256], _KLINE_ADDRESS[256];
|
||||
|
||||
|
||||
char Makefile[] =
|
||||
"CC=cl\n"
|
||||
"FD_SETSIZE=/D FD_SETSIZE=$FD_SETSIZE\n"
|
||||
"CFLAGS=/MT /O2 /I ./INCLUDE /Fosrc/ /nologo $(FD_SETSIZE) $(NS_ADDRESS) /D NOSPOOF=1 /c\n"
|
||||
"INCLUDES=./include/struct.h ./include/config.h ./include/sys.h \\\n"
|
||||
" ./include/common.h ./include/settings.h ./include/h.h ./include/numeric.h \\\n"
|
||||
" ./include/msg.h ./include/setup.h\n"
|
||||
"LINK=link.exe\n"
|
||||
"LFLAGS=kernel32.lib user32.lib gdi32.lib shell32.lib wsock32.lib \\\n"
|
||||
" oldnames.lib libcmt.lib /nodefaultlib /nologo /out:SRC/WIRCD.EXE\n"
|
||||
"OBJ_FILES=SRC/CHANNEL.OBJ SRC/USERLOAD.OBJ SRC/SEND.OBJ SRC/BSD.OBJ \\\n"
|
||||
" SRC/CIO_MAIN.OBJ SRC/S_CONF.OBJ SRC/DBUF.OBJ SRC/RES.OBJ \\\n"
|
||||
" SRC/HASH.OBJ SRC/CIO_INIT.OBJ SRC/PARSE.OBJ SRC/IRCD.OBJ \\\n"
|
||||
" SRC/S_NUMERIC.OBJ SRC/WHOWAS.OBJ SRC/RES_COMP.OBJ SRC/S_AUTH.OBJ \\\n"
|
||||
" SRC/HELP.OBJ SRC/S_MISC.OBJ SRC/MATCH.OBJ SRC/CRULE.OBJ \\\n"
|
||||
" SRC/S_DEBUG.OBJ SRC/RES_INIT.OBJ SRC/SUPPORT.OBJ SRC/LIST.OBJ \\\n"
|
||||
" SRC/S_ERR.OBJ SRC/PACKET.OBJ SRC/CLASS.OBJ SRC/S_BSD.OBJ \\\n"
|
||||
" SRC/MD5.OBJ SRC/S_SERV.OBJ SRC/S_USER.OBJ SRC/WIN32.OBJ \\\n"
|
||||
" SRC/DYNCONF.OBJ\\\n"
|
||||
" SRC/VERSION.OBJ SRC/WIN32.RES SRC/CLOAK.OBJ SRC/S_UNREAL.OBJ\n"
|
||||
"RC=rc.exe\n"
|
||||
"\n"
|
||||
"ALL: SRC/WIRCD.EXE SRC/CHKCONF.EXE\n"
|
||||
" @echo Complete.\n"
|
||||
"\n"
|
||||
"CLEAN:\n"
|
||||
" -@erase src\\*.exe 2>NUL\n"
|
||||
" -@erase src\\*.obj 2>NUL\n"
|
||||
" -@erase src\\win32.res 2>NUL\n"
|
||||
" -@erase src\\version.c 2>NUL\n"
|
||||
"\n"
|
||||
"include/setup.h:\n"
|
||||
" @echo Hmm...doesn't look like you've run Config...\n"
|
||||
" @echo Doing so now.\n"
|
||||
" @config.exe\n"
|
||||
"\n"
|
||||
"src/version.c: dummy\n"
|
||||
" @config.exe -v\n"
|
||||
"\n"
|
||||
"src/version.obj: src/version.c\n"
|
||||
" $(CC) $(CFLAGS) src/version.c\n"
|
||||
"\n"
|
||||
"SRC/WIRCD.EXE: $(OBJ_FILES) src/version.obj\n"
|
||||
" $(LINK) $(LFLAGS) $(OBJ_FILES)\n"
|
||||
"\n"
|
||||
"SRC/CHKCONF.EXE: ./include/struct.h ./include/config.h ./include/sys.h \\\n"
|
||||
" ./include/common.h ./src/crule.c ./src/match.c ./src/chkconf.c\n"
|
||||
" $(CC) /nologo /I ./include /D CR_CHKCONF /Fosrc/chkcrule.obj /c src/crule.c\n"
|
||||
" $(CC) /nologo /I ./include /D CR_CHKCONF /Fosrc/chkmatch.obj /c src/match.c\n"
|
||||
" $(CC) /nologo /I ./include /D CR_CHKCONF /Fosrc/chkconf.obj /c src/chkconf.c\n"
|
||||
" $(LINK) /nologo /out:src/chkconf.exe src/chkconf.obj src/chkmatch.obj \\\n"
|
||||
" src/chkcrule.obj\n"
|
||||
"\n"
|
||||
"src/parse.obj: src/parse.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/parse.c\n"
|
||||
"\n"
|
||||
"src/bsd.obj: src/bsd.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/bsd.c\n"
|
||||
"\n"
|
||||
"src/dbuf.obj: src/dbuf.c $(INCLUDES) ./include/dbuf.h\n"
|
||||
" $(CC) $(CFLAGS) src/dbuf.c\n"
|
||||
"\n"
|
||||
"src/packet.obj: src/packet.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/packet.c\n"
|
||||
"\n"
|
||||
"src/send.obj: src/send.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/send.c\n"
|
||||
"\n"
|
||||
"src/match.obj: src/match.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/match.c\n"
|
||||
"\n"
|
||||
"src/support.obj: src/support.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/support.c\n"
|
||||
"\n"
|
||||
"src/channel.obj: src/channel.c $(INCLUDES) ./include/channel.h\n"
|
||||
" $(CC) $(CFLAGS) src/channel.c\n"
|
||||
"\n"
|
||||
"src/class.obj: src/class.c $(INCLUDES) ./include/class.h\n"
|
||||
" $(CC) $(CFLAGS) src/class.c\n"
|
||||
"\n"
|
||||
"src/ircd.obj: src/ircd.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/ircd.c\n"
|
||||
"\n"
|
||||
"src/list.obj: src/list.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/list.c\n"
|
||||
"\n"
|
||||
"src/res.obj: src/res.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/res.c\n"
|
||||
"\n"
|
||||
"src/s_bsd.obj: src/s_bsd.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/s_bsd.c\n"
|
||||
"\n"
|
||||
"src/s_auth.obj: src/s_auth.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/s_auth.c\n"
|
||||
"\n"
|
||||
"src/s_conf.obj: src/s_conf.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/s_conf.c\n"
|
||||
"\n"
|
||||
"src/s_debug.obj: src/s_debug.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/s_debug.c\n"
|
||||
"\n"
|
||||
"src/s_err.obj: src/s_err.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/s_err.c\n"
|
||||
"\n"
|
||||
"src/s_misc.obj: src/s_misc.c $(INCLUDES) ./include/dbuf.h\n"
|
||||
" $(CC) $(CFLAGS) src/s_misc.c\n"
|
||||
"\n"
|
||||
"src/s_user.obj: src/s_user.c $(INCLUDES) ./include/dbuf.h \\\n"
|
||||
" ./include/channel.h ./include/whowas.h\n"
|
||||
" $(CC) $(CFLAGS) src/s_user.c\n"
|
||||
"\n"
|
||||
"src/dynconf.obj: src/dynconf.c $(INCLUDES) ./include/dbuf.h \\\n"
|
||||
" ./include/channel.h ./include/whowas.h ./include/dynconf.h\n"
|
||||
" $(CC) $(CFLAGS) src/dynconf.c\n"
|
||||
"\n"
|
||||
"src/s_unreal.obj: src/s_unreal.c $(INCLUDES) ./include/dbuf.h \\\n"
|
||||
" ./include/channel.h ./include/whowas.h\n"
|
||||
" $(CC) $(CFLAGS) src/s_unreal.c\n"
|
||||
"\n"
|
||||
"src/cloak.obj: src/cloak.c $(INCLUDES) ./include/dbuf.h \\\n"
|
||||
" ./include/channel.h ./include/whowas.h\n"
|
||||
" $(CC) $(CFLAGS) src/s_unreal.c\n"
|
||||
"\n"
|
||||
"src/s_serv.obj: src/s_serv.c $(INCLUDES) ./include/dbuf.h ./include/whowas.h\n"
|
||||
" $(CC) $(CFLAGS) src/s_serv.c\n"
|
||||
"\n"
|
||||
"src/s_numeric.obj: src/s_numeric.c $(INCLUDES) ./include/dbuf.h\n"
|
||||
" $(CC) $(CFLAGS) src/s_numeric.c\n"
|
||||
"\n"
|
||||
"src/whowas.obj: src/whowas.c $(INCLUDES) ./include/dbuf.h ./include/whowas.h\n"
|
||||
" $(CC) $(CFLAGS) src/whowas.c\n"
|
||||
"\n"
|
||||
"src/hash.obj: src/hash.c $(INCLUDES) ./include/hash.h\n"
|
||||
" $(CC) $(CFLAGS) src/hash.c\n"
|
||||
"\n"
|
||||
"src/crule.obj: src/crule.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/crule.c\n"
|
||||
"\n"
|
||||
"src/win32.obj: src/win32.c $(INCLUDES) ./include/resource.h\n"
|
||||
" $(CC) $(CFLAGS) src/win32.c\n"
|
||||
"\n"
|
||||
"src/cio_main.obj: src/cio_main.c $(INCLUDES) ./include/cio.h ./include/ciofunc.h\n"
|
||||
" $(CC) $(CFLAGS) src/cio_main.c\n"
|
||||
"\n"
|
||||
"src/cio_init.obj: src/cio_init.c $(INCLUDES) ./include/cio.h ./include/ciofunc.h\n"
|
||||
" $(CC) $(CFLAGS) src/cio_init.c\n"
|
||||
"\n"
|
||||
"src/res_comp.obj: src/res_comp.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/res_comp.c\n"
|
||||
"\n"
|
||||
"src/res_init.obj: src/res_init.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/res_init.c\n"
|
||||
"\n"
|
||||
"src/help.obj: src/help.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/help.c\n"
|
||||
"\n"
|
||||
"src/md5.obj: src/md5.c $(INCLUDES)\n"
|
||||
" $(CC) $(CFLAGS) src/md5.c\n"
|
||||
"\n"
|
||||
"src/win32.res: src/win32.rc\n"
|
||||
" $(RC) /l 0x409 /fosrc/win32.res /i ./include /i ./src \\\n"
|
||||
" /d NDEBUG src/win32.rc\n" "\n" "dummy:\n" "\n";
|
||||
|
||||
|
||||
char SetupH[] =
|
||||
"/* This is only a wrapper.. --Stskeeps */\n"
|
||||
"#include \"win32/setup.h\"\n";
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if (argc > 1)
|
||||
{
|
||||
if (!strcmp(argv[1], "-v"))
|
||||
return do_version();
|
||||
|
||||
if (!strcmp(argv[1], "-n"))
|
||||
return do_config(1);
|
||||
}
|
||||
printf
|
||||
("To do win32 compiling copy include/win32/setup.h to include/\n");
|
||||
printf("Copy include/win32/settings.h to include/ and modify it\n");
|
||||
printf("and copy makefile.win32 to Makefile\n");
|
||||
}
|
||||
|
||||
|
||||
int do_config(int autoconf)
|
||||
{
|
||||
int fd;
|
||||
char str[128];
|
||||
|
||||
|
||||
if ((fd =
|
||||
open("include\\setup.h", O_CREAT | O_TRUNC | O_WRONLY | O_TEXT,
|
||||
S_IREAD | S_IWRITE)) == -1)
|
||||
printf("Error opening include\\setup.h\n\r");
|
||||
else
|
||||
{
|
||||
write(fd, SetupH, strlen(SetupH));
|
||||
close(fd);
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
/*
|
||||
* FD_SETSIZE
|
||||
*/
|
||||
printf("\n");
|
||||
printf
|
||||
("How many file descriptors (or sockets) can the irc server use?");
|
||||
printf("\n");
|
||||
printf("[%d] -> ", _FD_SETSIZE);
|
||||
gets(str);
|
||||
if (*str != '\n' && *str != '\r')
|
||||
sscanf(str, "%d", &_FD_SETSIZE);
|
||||
|
||||
if (_FD_SETSIZE >= 100)
|
||||
{
|
||||
printf("\n");
|
||||
printf("FD_SETSIZE will be overridden using -D "
|
||||
"FD_SETSIZE=%d when compiling ircd.", _FD_SETSIZE);
|
||||
printf("\n");
|
||||
break;
|
||||
}
|
||||
printf("\n");
|
||||
printf
|
||||
("You need to enter a number here, greater or equal to 100.\n");
|
||||
}
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
/*
|
||||
* Now write the makefile out.
|
||||
*/
|
||||
write_makefile();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int write_makefile(void)
|
||||
{
|
||||
int fd, makfd, len;
|
||||
char *buffer, *s;
|
||||
|
||||
buffer = (char *)malloc(strlen(Makefile) + 4096);
|
||||
memcpy(buffer, Makefile, strlen(Makefile) + 1);
|
||||
|
||||
s = (char *)strstr(buffer, "$FD_SETSIZE");
|
||||
if (s)
|
||||
{
|
||||
itoa(_FD_SETSIZE, s, 10);
|
||||
memmove(s + strlen(s), s + 11, strlen(s + 11) + 1);
|
||||
}
|
||||
|
||||
|
||||
if ((makfd = open("Makefile", O_CREAT | O_TRUNC | O_WRONLY | O_TEXT,
|
||||
S_IREAD | S_IWRITE)) == -1)
|
||||
{
|
||||
printf("Error creating Makefile\n\r");
|
||||
return 1;
|
||||
}
|
||||
write(makfd, buffer, strlen(buffer));
|
||||
close(makfd);
|
||||
|
||||
free(buffer);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int do_version(void)
|
||||
{
|
||||
int fd, verfd, generation = 0, len, doingvernow = 0;
|
||||
char buffer[16384], *s;
|
||||
|
||||
if ((verfd = open("src\\version.c", O_RDONLY | O_TEXT)) != -1)
|
||||
{
|
||||
while (!eof(verfd))
|
||||
{
|
||||
len = read(verfd, buffer, sizeof(buffer) - 1);
|
||||
if (len == -1)
|
||||
break;
|
||||
buffer[len] = 0;
|
||||
s = (char *)strstr(buffer, "char *generation = \"");
|
||||
if (s)
|
||||
{
|
||||
s += 20;
|
||||
generation = atoi(s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
close(verfd);
|
||||
}
|
||||
|
||||
if ((fd = open("src\\version.c.SH", O_RDONLY | O_TEXT)) == -1)
|
||||
{
|
||||
printf("Error opening src\\version.c.SH\n\r");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ((verfd =
|
||||
open("src\\version.c", O_CREAT | O_TRUNC | O_WRONLY | O_TEXT,
|
||||
S_IREAD | S_IWRITE)) == -1)
|
||||
{
|
||||
printf("Error opening src\\version.c\n\r");
|
||||
return 1;
|
||||
}
|
||||
|
||||
generation++;
|
||||
|
||||
printf("Extracting IRC/ircd/version.c...\n\r");
|
||||
|
||||
while (!eof(fd))
|
||||
{
|
||||
len = read(fd, buffer, sizeof(buffer) - 1);
|
||||
if (len == -1)
|
||||
break;
|
||||
buffer[len] = 0;
|
||||
if (!doingvernow)
|
||||
{
|
||||
s = (char *)strstr(buffer, "/*");
|
||||
if (!s)
|
||||
continue;
|
||||
memmove(buffer, s, strlen(s) + 1);
|
||||
doingvernow = 1;
|
||||
}
|
||||
s = (char *)strstr(buffer, "$generation");
|
||||
if (s)
|
||||
{
|
||||
itoa(generation, s, 10);
|
||||
memmove(s + strlen(s), s + 11, strlen(s + 11) + 1);
|
||||
}
|
||||
s = (char *)strstr(buffer, "$creation");
|
||||
if (s)
|
||||
{
|
||||
time_t t = time(0);
|
||||
char *ct = ctime(&t);
|
||||
|
||||
memmove(s + strlen(ct) - 1, s + 9, strlen(s + 9) + 1);
|
||||
memmove(s, ct, strlen(ct) - 1);
|
||||
}
|
||||
s = (char *)strstr(buffer, "$package");
|
||||
if (s)
|
||||
{
|
||||
memmove(s, "IRC", 3);
|
||||
memmove(s + 3, s + 8, strlen(s + 8) + 1);
|
||||
}
|
||||
|
||||
s = (char *)strstr(buffer, "!SUB!THIS!");
|
||||
if (s)
|
||||
*s = 0;
|
||||
|
||||
write(verfd, buffer, strlen(buffer));
|
||||
}
|
||||
|
||||
close(fd);
|
||||
close(verfd);
|
||||
return 0;
|
||||
}
|
||||
+497
-466
File diff suppressed because it is too large
Load Diff
+4
-1
@@ -92,7 +92,7 @@ static int openconf()
|
||||
return open(configfile, O_RDONLY);
|
||||
}
|
||||
|
||||
#define STAR1 OFLAG_SADMIN|OFLAG_ADMIN|OFLAG_NETADMIN|OFLAG_COADMIN
|
||||
#define STAR1 OFLAG_SADMIN|OFLAG_ADMIN|OFLAG_NETADMIN
|
||||
#define STAR2 OFLAG_ZLINE|OFLAG_HIDE|OFLAG_WHOIS
|
||||
static int oper_access[] = {
|
||||
~(STAR1 | STAR2), '*',
|
||||
@@ -123,6 +123,9 @@ static int oper_access[] = {
|
||||
OFLAG_ZLINE, 'z',
|
||||
OFLAG_WHOIS, 'W',
|
||||
OFLAG_HIDE, 'H',
|
||||
#ifndef NO_OPEROVERRIDE
|
||||
OFLAG_CANOVER, 'v',
|
||||
#endif
|
||||
0, 0
|
||||
};
|
||||
|
||||
|
||||
+61
-20
@@ -33,6 +33,18 @@ static char sccxid[] = "@(#)cloak.c 9.00 7/12/99 UnrealIRCd";
|
||||
#include <string.h>
|
||||
#include "h.h"
|
||||
|
||||
/* crack fix for win32 compiling */
|
||||
#ifdef _WIN32
|
||||
#define snprintf _snprintf
|
||||
#endif
|
||||
|
||||
#undef KEY
|
||||
#undef KEY2
|
||||
#undef KEY3
|
||||
#define KEY CLOAK_KEY1
|
||||
#define KEY2 CLOAK_KEY2
|
||||
#define KEY3 CLOAK_KEY3
|
||||
|
||||
#define POW_8 256L
|
||||
#define POW_16 65536L
|
||||
#define POW_32 4294967296L
|
||||
@@ -154,16 +166,23 @@ unsigned long crc32(const unsigned char *s, unsigned int len)
|
||||
return crc32val;
|
||||
}
|
||||
|
||||
char *hidehost(char *host)
|
||||
char *hidehost(char *rhost)
|
||||
{
|
||||
static char cloaked[512];
|
||||
static char h1[512];
|
||||
static char h2[4][4];
|
||||
static char h3[300];
|
||||
char *host;
|
||||
unsigned long l[8];
|
||||
int i;
|
||||
char *p;
|
||||
char *p, *q;
|
||||
|
||||
host = malloc(strlen(rhost)+1);
|
||||
q = host;
|
||||
for (p = rhost; *p; p++, q++) {
|
||||
*q = tolower(*p);
|
||||
}
|
||||
*q = '\0';
|
||||
/* Find out what kind of host we're dealing with here */
|
||||
/* IPv6 ? */
|
||||
if (strchr(host, ':'))
|
||||
@@ -191,11 +210,17 @@ char *hidehost(char *host)
|
||||
l[2] = crc32(host, strlen(host));
|
||||
for (i = 0; i <= 2; i++)
|
||||
{
|
||||
l[i] = ((l[i] + CLOAK_KEY2) ^ CLOAK_KEY1) + CLOAK_KEY3;
|
||||
l[i] <<= 2; l[i] >>= 2;
|
||||
#ifdef COMPAT_BETA4_KEYS
|
||||
l[i] = ((l[i] + KEY2) ^ KEY) ^ KEY3;
|
||||
#else
|
||||
l[i] = ((l[i] + KEY2) ^ KEY) + KEY3;
|
||||
#endif
|
||||
|
||||
l[i] &= 0x3FFFFFFF;
|
||||
}
|
||||
ircsprintf(cloaked, "%lx:%lx:%lx:IP",
|
||||
l[2], l[1], l[0]);
|
||||
free(host);
|
||||
return cloaked;
|
||||
}
|
||||
/* Is this a IPv4 IP? */
|
||||
@@ -209,21 +234,32 @@ char *hidehost(char *host)
|
||||
if (!(*p))
|
||||
{
|
||||
/* Do IPv4 cloaking here */
|
||||
strcpy(h1, host);
|
||||
strncpyzt(h1, host, sizeof h1);
|
||||
i = 0;
|
||||
for (i = 0, p = strtok(h1, "."); p && (i <= 3); p = strtok(NULL, "."), i++)
|
||||
{
|
||||
strncpy(h2[i], p, 4);
|
||||
}
|
||||
#ifndef COMPAT_BETA4_KEYS
|
||||
ircsprintf(h3, "%s.%s", h2[0], h2[1]);
|
||||
l[0] = ((crc32(h3, strlen(h3)) + CLOAK_KEY2) ^ CLOAK_KEY1) ^ CLOAK_KEY3;
|
||||
ircsprintf(h3, "%s.%s.%s", h2[0], h2[1], h2[2]);
|
||||
l[1] = ((CLOAK_KEY2 + crc32(h3, strlen(h3))) ^ CLOAK_KEY3) ^ CLOAK_KEY1;
|
||||
l[0] = ((crc32(h3, strlen(h3)) + KEY) ^ KEY2) + KEY3;
|
||||
ircsprintf(h3, "%s.%s.%s", h2[0], h2[1], h2[2]);
|
||||
l[1] = ((KEY2 ^ crc32(h3, strlen(h3))) + KEY3) ^ KEY;
|
||||
l[4] = crc32(host, strlen(host));
|
||||
l[2] = ((l[4] + CLOAK_KEY1) ^ CLOAK_KEY3)^ CLOAK_KEY2;
|
||||
l[2] <<= 2; l[2] >>= 2;
|
||||
l[0] <<= 1; l[0] >>= 1;
|
||||
ircsprintf(cloaked, "%lX.%lX.%lX.IP", l[2], l[1], l[0]);
|
||||
l[2] = ((l[4] + KEY3) ^ KEY) + KEY2;
|
||||
#else
|
||||
ircsprintf(h3, "%s.%s", h2[0], h2[1]);
|
||||
l[0] = ((crc32(h3, strlen(h3)) + KEY2) ^ KEY) ^ KEY3;
|
||||
ircsprintf(h3, "%s.%s.%s", h2[0], h2[1], h2[2]);
|
||||
l[1] = ((KEY2 + crc32(h3, strlen(h3))) ^ KEY3) ^ KEY;
|
||||
l[4] = crc32(host, strlen(host));
|
||||
l[2] = ((l[4] + KEY) ^ KEY3)^ KEY2;
|
||||
#endif
|
||||
l[2] &= 0x3FFFFFFF;
|
||||
l[0] &= 0x7FFFFFFF;
|
||||
l[1] &= 0xFFFFFFFF;
|
||||
snprintf(cloaked, sizeof cloaked, "%lX.%lX.%lX.IP", l[2], l[1], l[0]);
|
||||
free(host);
|
||||
return cloaked;
|
||||
}
|
||||
else
|
||||
@@ -240,19 +276,24 @@ char *hidehost(char *host)
|
||||
break;
|
||||
}
|
||||
}
|
||||
l[0] = ((crc32(host, strlen(host)) ^ CLOAK_KEY2) + CLOAK_KEY1) ^ CLOAK_KEY3;
|
||||
l[0] <<= 2;
|
||||
l[0] >>= 2;
|
||||
p++;
|
||||
if (*p)
|
||||
sprintf(cloaked, "%s-%lX.%s", hidden_host,
|
||||
#ifdef COMPAT_BETA4_KEYS
|
||||
l[0] = ((crc32(host, strlen(host)) + KEY2) ^ KEY)^ KEY3;
|
||||
#else
|
||||
l[0] = ((crc32(host, strlen(host)) ^ KEY2) + KEY) ^ KEY3;
|
||||
#endif
|
||||
l[0] &= 0x3FFFFFFF;
|
||||
if (*p) {
|
||||
p++;
|
||||
snprintf(cloaked, sizeof cloaked, "%s-%lX.%s", hidden_host,
|
||||
l[0], p);
|
||||
}
|
||||
else
|
||||
sprintf(cloaked, "%s-%lX", hidden_host, l[0]);
|
||||
|
||||
snprintf(cloaked, sizeof cloaked, "%s-%lX", hidden_host, l[0]);
|
||||
free(host);
|
||||
return cloaked;
|
||||
}
|
||||
/* Couldn't cloak, -WTF? */
|
||||
free(host);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "common.h"
|
||||
#include "sys.h"
|
||||
#include "h.h"
|
||||
#include <string.h>
|
||||
|
||||
char *collapse PROTO((char *pattern));
|
||||
extern aClient *client, *local[];
|
||||
@@ -379,12 +380,16 @@ char *crule_parse(rule)
|
||||
if ((errcode = crule_parseorexpr(&ruleroot, &next_tok,
|
||||
&ruleptr)) == CR_NOERR)
|
||||
if (ruleroot != NULL)
|
||||
{
|
||||
if (next_tok == CR_END)
|
||||
return ((char *)ruleroot);
|
||||
else
|
||||
errcode = CR_UNEXPCTTOK;
|
||||
}
|
||||
else
|
||||
{
|
||||
errcode = CR_EXPCTOR;
|
||||
}
|
||||
if (ruleroot != NULL)
|
||||
crule_free((char **)&ruleroot);
|
||||
#if !defined(CR_DEBUG) && !defined(CR_CHKCONF)
|
||||
|
||||
+1
-2
@@ -316,8 +316,7 @@ int load_conf2(FILE * conf, char *filename, int type)
|
||||
"[fatal error] STOP code in %s\n",
|
||||
filename);
|
||||
fprintf(stderr,
|
||||
"*** READ/EDIT YOUR CONFIGURATION FILES! ***",
|
||||
filename);
|
||||
"*** READ/EDIT YOUR CONFIGURATION FILES! ***");
|
||||
#endif
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "h.h"
|
||||
#include "config.h"
|
||||
#include "fdlist.h"
|
||||
#include <string.h>
|
||||
|
||||
void addto_fdlist(int fd, fdlist * listp)
|
||||
{
|
||||
|
||||
+1
-1
@@ -1076,7 +1076,7 @@ int parse_help(sptr, name, help)
|
||||
SND(" This command provides timed Z:Lines. If you match a Z:Line you cannot");
|
||||
SND(" connect to ANY server on the IRC network");
|
||||
SND(" A time of 0 in the ZLINE makes it permanent (Never Expires).");
|
||||
SND(" In Unreal 3.1.4 you may also specify the time in the format 1d10h15m30s.");
|
||||
SND(" You may also specify the time in the format 1d10h15m30s.");
|
||||
SND(" IRC Operator only command.");
|
||||
SND(" -");
|
||||
SND(" Syntax: GZLINE <user@host mask> <seconds to be banned> :<reason>");
|
||||
|
||||
+17
-12
@@ -81,6 +81,9 @@ int un_gid = 99;
|
||||
extern char unreallogo[];
|
||||
#endif
|
||||
|
||||
#ifndef NO_FDLIST
|
||||
extern void flush_fdlist_connections(fdlist * listp);
|
||||
#endif
|
||||
LoopStruct loop;
|
||||
extern aMotd *opermotd;
|
||||
extern aMotd *svsmotd;
|
||||
@@ -132,15 +135,15 @@ void save_stats(void)
|
||||
FILE *stats = fopen("ircd.stats", "w");
|
||||
if (!stats)
|
||||
return;
|
||||
fprintf(stats, "%li\n", IRCstats.clients);
|
||||
fprintf(stats, "%li\n", IRCstats.invisible);
|
||||
fprintf(stats, "%li\n", IRCstats.servers);
|
||||
fprintf(stats, "%li\n", IRCstats.operators);
|
||||
fprintf(stats, "%li\n", IRCstats.unknown);
|
||||
fprintf(stats, "%li\n", IRCstats.me_clients);
|
||||
fprintf(stats, "%li\n", IRCstats.me_servers);
|
||||
fprintf(stats, "%li\n", IRCstats.me_max);
|
||||
fprintf(stats, "%li\n", IRCstats.global_max);
|
||||
fprintf(stats, "%i\n", IRCstats.clients);
|
||||
fprintf(stats, "%i\n", IRCstats.invisible);
|
||||
fprintf(stats, "%i\n", IRCstats.servers);
|
||||
fprintf(stats, "%i\n", IRCstats.operators);
|
||||
fprintf(stats, "%i\n", IRCstats.unknown);
|
||||
fprintf(stats, "%i\n", IRCstats.me_clients);
|
||||
fprintf(stats, "%i\n", IRCstats.me_servers);
|
||||
fprintf(stats, "%i\n", IRCstats.me_max);
|
||||
fprintf(stats, "%i\n", IRCstats.global_max);
|
||||
fclose(stats);
|
||||
}
|
||||
|
||||
@@ -409,7 +412,8 @@ static TS try_connections(currenttime)
|
||||
int connecting, confrq;
|
||||
TS next = 0;
|
||||
aClass *cltmp;
|
||||
aConfItem *cconf, *con_conf;
|
||||
aConfItem *cconf;
|
||||
aConfItem *con_conf = NULL;
|
||||
int con_class = 0;
|
||||
|
||||
connecting = FALSE;
|
||||
@@ -479,7 +483,7 @@ static TS try_connections(currenttime)
|
||||
}
|
||||
if (connect_server(con_conf, (aClient *)NULL,
|
||||
(struct hostent *)NULL) == 0)
|
||||
sendto_ops("Connection to %s[%s] activated.",
|
||||
sendto_realops("Connection to %s[%s] activated.",
|
||||
con_conf->name, con_conf->host);
|
||||
}
|
||||
Debug((DEBUG_NOTICE, "Next connection check : %s", myctime(next)));
|
||||
@@ -736,7 +740,6 @@ int InitwIRCD(argc, argv)
|
||||
uid_t uid, euid;
|
||||
TS delay = 0;
|
||||
#endif
|
||||
int i;
|
||||
int portarg = 0;
|
||||
#ifdef FORCE_CORE
|
||||
struct rlimit corelim;
|
||||
@@ -808,7 +811,9 @@ int InitwIRCD(argc, argv)
|
||||
argc -= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
p = "";
|
||||
}
|
||||
|
||||
switch (flag)
|
||||
{
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@
|
||||
*/
|
||||
#include "ircsprintf.h"
|
||||
#include <stdio.h>
|
||||
|
||||
extern char *xbase64enc(long i);
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
|
||||
|
||||
@@ -41,12 +41,14 @@
|
||||
#include "sys.h"
|
||||
#include "h.h"
|
||||
#include "numeric.h"
|
||||
#include <string.h>
|
||||
#ifdef DBMALLOC
|
||||
#include "malloc.h"
|
||||
#endif
|
||||
void free_link PROTO((Link *));
|
||||
Link *make_link PROTO(());
|
||||
extern ircstats IRCstats;
|
||||
extern void remove_server_from_table(aClient *what);
|
||||
|
||||
ID_Copyright
|
||||
("(C) 1988 University of Oulu, Computing Center and Jarkko Oikarinen");
|
||||
|
||||
+1
-1
@@ -48,7 +48,7 @@ int match(mask, name)
|
||||
u_char *n;
|
||||
u_char cm;
|
||||
u_char *mylowertab;
|
||||
u_char *wsn;
|
||||
u_char *wsn = NULL;
|
||||
u_char *wsm;
|
||||
|
||||
m = (u_char *)mask;
|
||||
|
||||
@@ -622,7 +622,6 @@ static int cancel_clients(cptr, sptr, cmd)
|
||||
(cptr->name!=NULL)?cptr->name:"<unknown>",
|
||||
(fromname!=NULL)?fromname:"<unknown>");
|
||||
|
||||
/*
|
||||
* We don't drop the server anymore. Just ignore
|
||||
* the message and go about your business. And hope
|
||||
* we don't get flooded. :-) -Cabal95
|
||||
|
||||
@@ -96,6 +96,9 @@ void start_auth(cptr)
|
||||
set_non_blocking(cptr->authfd, cptr);
|
||||
|
||||
getsockname(cptr->fd, (struct SOCKADDR *)&sock, &addrlen);
|
||||
|
||||
/* Use the listener that the user got in on, dah? */
|
||||
sock.SIN_ADDR = cptr->acpt->ip;
|
||||
sock.SIN_PORT = 0;
|
||||
sock.SIN_FAMILY = AFINET; /* redundant? */
|
||||
(void)bind(cptr->authfd, (struct SOCKADDR *)&sock, sizeof(sock));
|
||||
|
||||
+6
-207
@@ -887,7 +887,7 @@ int m_svsnoop(cptr, sptr, parc, parv)
|
||||
~(UMODE_NETADMIN | UMODE_CLIENT |
|
||||
UMODE_FLOOD | UMODE_EYES | UMODE_WHOIS);
|
||||
acptr->umodes &=
|
||||
~(UMODE_KIX | UMODE_FCLIENT | UMODE_HIDING |
|
||||
~(UMODE_KIX | UMODE_FCLIENT |
|
||||
UMODE_DEAF | UMODE_HIDEOPER);
|
||||
acptr->oflag = 0;
|
||||
|
||||
@@ -1038,9 +1038,8 @@ extern char *getfield();
|
||||
|
||||
#define STAR1 OFLAG_SADMIN|OFLAG_ADMIN|OFLAG_NETADMIN|OFLAG_COADMIN
|
||||
#define STAR2 OFLAG_ZLINE|OFLAG_HIDE|OFLAG_WHOIS
|
||||
#define STAR3 OFLAG_INVISIBLE
|
||||
static int oper_access[] = {
|
||||
~(STAR1 | STAR2 | STAR3), '*',
|
||||
~(STAR1 | STAR2 ), '*',
|
||||
OFLAG_LOCAL, 'o',
|
||||
OFLAG_GLOBAL, 'O',
|
||||
OFLAG_REHASH, 'r',
|
||||
@@ -1069,7 +1068,9 @@ static int oper_access[] = {
|
||||
OFLAG_WHOIS, 'W',
|
||||
OFLAG_HIDE, 'H',
|
||||
/* OFLAG_AGENT, 'S',*/
|
||||
OFLAG_INVISIBLE, '^',
|
||||
#ifndef NO_OPEROVERRIDE
|
||||
OFLAG_CANOVER, 'v',
|
||||
#endif
|
||||
0, 0
|
||||
};
|
||||
|
||||
@@ -1860,208 +1861,6 @@ static int is_comment(comment)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
** m_rakill;
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = hostmask
|
||||
** parv[2] = username
|
||||
** parv[3] = comment
|
||||
*/
|
||||
int m_rakill(cptr, sptr, parc, parv)
|
||||
aClient *cptr, *sptr;
|
||||
int parc;
|
||||
char *parv[];
|
||||
{
|
||||
char *hostmask, *usermask;
|
||||
int result;
|
||||
|
||||
if (parc < 2 && IsPerson(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
|
||||
me.name, parv[0], "AKILL");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (IsServer(sptr) && parc < 3)
|
||||
return 0;
|
||||
|
||||
if (!IsServer(cptr))
|
||||
{
|
||||
if (!IsOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
sptr->name);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((hostmask = (char *)index(parv[1], '@')))
|
||||
{
|
||||
*hostmask = 0;
|
||||
hostmask++;
|
||||
usermask = parv[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_one(sptr, ":%s NOTICE %s :%s", me.name,
|
||||
sptr->name, "Please use a user@host mask.");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hostmask = parv[1];
|
||||
usermask = parv[2];
|
||||
}
|
||||
|
||||
if (!usermask || !hostmask)
|
||||
{
|
||||
/*
|
||||
* This is very bad, it should never happen.
|
||||
*/
|
||||
sendto_ops("Error adding akill from %s!", sptr->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
result = del_temp_conf(CONF_KILL, hostmask, NULL, usermask, 0, 0, 2);
|
||||
if (result == KLINE_DEL_ERR)
|
||||
{
|
||||
if (!MyClient(sptr))
|
||||
{
|
||||
sendto_serv_butone(cptr, ":%s RAKILL %s %s",
|
||||
IsServer(cptr) ? parv[0] : me.name, hostmask,
|
||||
usermask);
|
||||
return 0;
|
||||
}
|
||||
sendto_one(sptr, ":%s NOTICE %s :Akill %s@%s does not exist.",
|
||||
me.name, sptr->name, usermask, hostmask);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (MyClient(sptr))
|
||||
{
|
||||
sendto_ops("%s removed akill for %s@%s",
|
||||
sptr->name, usermask, hostmask);
|
||||
sendto_serv_butone(&me,
|
||||
":%s GLOBOPS :%s removed akill for %s@%s",
|
||||
me.name, sptr->name, usermask, hostmask);
|
||||
}
|
||||
|
||||
sendto_serv_butone(cptr, ":%s RAKILL %s %s",
|
||||
IsServer(cptr) ? parv[0] : me.name, hostmask, usermask);
|
||||
|
||||
loop.do_ban_check = 1;
|
||||
}
|
||||
|
||||
/* ** m_akill;
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = hostmask
|
||||
** parv[2] = username
|
||||
** parv[3] = comment
|
||||
*/
|
||||
int m_akill(cptr, sptr, parc, parv)
|
||||
aClient *cptr, *sptr;
|
||||
int parc;
|
||||
char *parv[];
|
||||
{
|
||||
char *hostmask, *usermask, *comment;
|
||||
|
||||
|
||||
if (parc < 2 && IsPerson(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
|
||||
me.name, parv[0], "AKILL");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (IsServer(sptr) && parc < 3)
|
||||
return 0;
|
||||
|
||||
if (!IsServer(cptr))
|
||||
{
|
||||
if (!IsOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
sptr->name);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
comment = parc < 3 ? NULL : parv[2];
|
||||
if ((hostmask = (char *)index(parv[1], '@')))
|
||||
{
|
||||
*hostmask = 0;
|
||||
hostmask++;
|
||||
usermask = parv[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_one(sptr, ":%s NOTICE %s :%s", me.name,
|
||||
sptr->name,
|
||||
"Please use a nick!user@host mask.");
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(usermask, "*") || !strchr(hostmask, '.'))
|
||||
{
|
||||
sendto_one(sptr,
|
||||
"NOTICE %s :*** What a sweeping AKILL. If only your admin knew you tried that..",
|
||||
parv[0]);
|
||||
sendto_realops("%s attempted to /akill *@*",
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
if (MyClient(sptr))
|
||||
{
|
||||
sendto_ops("%s added akill for %s@%s (%s)",
|
||||
sptr->name, usermask, hostmask,
|
||||
!BadPtr(comment) ? comment : "no reason");
|
||||
sendto_serv_butone(&me,
|
||||
":%s GLOBOPS :%s added akill for %s@%s (%s)",
|
||||
me.name, sptr->name, usermask, hostmask,
|
||||
!BadPtr(comment) ? comment : "no reason");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hostmask = parv[1];
|
||||
usermask = parv[2];
|
||||
comment = parc < 4 ? NULL : parv[3];
|
||||
}
|
||||
|
||||
if (!usermask || !hostmask)
|
||||
{
|
||||
/*
|
||||
* This is very bad, it should never happen.
|
||||
*/
|
||||
sendto_ops("Error adding akill from %s!", sptr->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!find_kill_byname(hostmask, usermask))
|
||||
{
|
||||
|
||||
#ifndef COMMENT_IS_FILE
|
||||
add_temp_conf(CONF_KILL, hostmask, comment, usermask, 0, 0, 2);
|
||||
#else
|
||||
add_temp_conf(CONF_KILL, hostmask, NULL, usermask, 0, 0, 2);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (comment)
|
||||
sendto_serv_butone(cptr, ":%s AKILL %s %s :%s",
|
||||
IsServer(cptr) ? parv[0] : me.name, hostmask,
|
||||
usermask, comment);
|
||||
else
|
||||
sendto_serv_butone(cptr, ":%s AKILL %s %s",
|
||||
IsServer(cptr) ? parv[0] : me.name, hostmask, usermask);
|
||||
|
||||
|
||||
loop.do_ban_check = 1;
|
||||
|
||||
}
|
||||
|
||||
/* m_sqline
|
||||
** parv[0] = sender
|
||||
** parv[1] = nickmask
|
||||
@@ -2856,7 +2655,7 @@ int m_svso(cptr, sptr, parc, parv)
|
||||
~(UMODE_NETADMIN | UMODE_CLIENT |
|
||||
UMODE_FLOOD | UMODE_EYES | UMODE_WHOIS);
|
||||
acptr->umodes &=
|
||||
~(UMODE_KIX | UMODE_FCLIENT | UMODE_HIDING |
|
||||
~(UMODE_KIX | UMODE_FCLIENT |
|
||||
UMODE_DEAF | UMODE_HIDEOPER);
|
||||
acptr->oflag = 0;
|
||||
send_umode_out(acptr, acptr, fLag);
|
||||
|
||||
+5
-5
@@ -54,9 +54,6 @@ char serveropts[] = {
|
||||
#ifndef NO_DEFAULT_INVISIBLE
|
||||
'I',
|
||||
#endif
|
||||
#ifdef LEAST_IDLE
|
||||
'L',
|
||||
#endif
|
||||
#ifdef CRYPT_OPER_PASSWORD
|
||||
'p',
|
||||
#endif
|
||||
@@ -84,8 +81,11 @@ char serveropts[] = {
|
||||
#ifdef USE_SYSLOG
|
||||
'Y',
|
||||
#endif
|
||||
#ifdef OPER_NO_HIDING
|
||||
'H',
|
||||
#ifndef NO_OPEROVERRIDE
|
||||
'O',
|
||||
#endif
|
||||
#ifdef OPEROVERRIDE_VERIFY
|
||||
'o',
|
||||
#endif
|
||||
#ifdef NO_IDENT_CHECKING
|
||||
'K',
|
||||
|
||||
+3
-3
@@ -541,7 +541,7 @@ static char *replies[] = {
|
||||
/* 486 ERR_HTMDISABLED */ ":%s 486 %s :%s is currently disabled, please try again later.",
|
||||
/* 487 */ NULL,
|
||||
/* 488 */ NULL,
|
||||
/* 489 */ NULL,
|
||||
/* 489 ERR_SECUREONLYCHAN */ ":%s 489 %s %s :Cannot join channel (+z)",
|
||||
/* 490 */ NULL,
|
||||
/* 491 ERR_NOOPERHOST */ ":%s 491 %s :No O-lines for your host",
|
||||
/* 492 */ NULL,
|
||||
@@ -574,9 +574,9 @@ static char *replies[] = {
|
||||
/* 519 519 */ ":%s 519 %s :Cannot join channel (Admin only)",
|
||||
/* 520 520 */ ":%s 520 %s :Cannot join channel (IRCops only)",
|
||||
/* 521 ERR_LISTSYNTAX */ ":%s 521 %s Bad list syntax, type /quote list ? or /raw list ?",
|
||||
/* 522 */ NULL,
|
||||
/* 522 */ NULL,
|
||||
/* 523 */ NULL,
|
||||
/* 524 */ NULL,
|
||||
/* 524 ERR_OPERSPVERIFY */ ":%s 524 %s :Trying to join +s or +p channel as an oper. Please invite yourself first.",
|
||||
/* 525 */ NULL,
|
||||
/* 526 */ NULL,
|
||||
/* 527 */ NULL,
|
||||
|
||||
+267
-19
@@ -422,6 +422,15 @@ void tkl_stats(cptr)
|
||||
Character:
|
||||
G, Z, K, z
|
||||
*/
|
||||
#ifdef STATS_ONLYOPER
|
||||
if (!IsAnOper(cptr))
|
||||
{
|
||||
sendto_one(cptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
tkl_check_expire();
|
||||
curtime = TStime();
|
||||
for (tk = tklines; tk; tk = tk->next)
|
||||
@@ -754,12 +763,13 @@ int m_gzline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
if (parc == 1)
|
||||
{
|
||||
tkl_stats(sptr);
|
||||
sendto_one(sptr, rpl_str(RPL_ENDOFSTATS), me.name, sptr->name, 'g');
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (IsServer(sptr))
|
||||
{
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
if (!IsOper(sptr))
|
||||
{
|
||||
@@ -772,7 +782,7 @@ int m_gzline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
|
||||
me.name, sptr->name, "GZLINE");
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
mask = parv[1];
|
||||
@@ -782,7 +792,7 @@ int m_gzline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
|
||||
me.name, sptr->name, "GZLINE");
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
whattodo = 1;
|
||||
mask++;
|
||||
@@ -793,7 +803,7 @@ int m_gzline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
|
||||
me.name, sptr->name, "GZLINE");
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
whattodo = 0;
|
||||
mask++;
|
||||
@@ -804,7 +814,7 @@ int m_gzline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
|
||||
me.name, sptr->name, "GZLINE");
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -818,9 +828,7 @@ int m_gzline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (whattodo == 1)
|
||||
goto nochecks;
|
||||
if (p)
|
||||
if (p && whattodo != 1)
|
||||
{
|
||||
p++;
|
||||
i = 0;
|
||||
@@ -839,17 +847,24 @@ int m_gzline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
}
|
||||
}
|
||||
|
||||
nochecks:
|
||||
usermask = strtok(mask, "@");
|
||||
hostmask = strtok(NULL, "");
|
||||
tkl_check_expire();
|
||||
|
||||
if (BadPtr(hostmask))
|
||||
{
|
||||
if (BadPtr(usermask))
|
||||
return 0;
|
||||
hostmask = usermask;
|
||||
usermask = "*";
|
||||
}
|
||||
|
||||
for (tk = tklines; tk; tk = tk->next)
|
||||
{
|
||||
if (tk->type == (TKL_GLOBAL | TKL_ZAP))
|
||||
{
|
||||
if (!match(tk->hostmask, usermask)
|
||||
&& !match(tk->usermask, hostmask))
|
||||
if (!match(tk->hostmask, hostmask)
|
||||
&& !match(tk->usermask, usermask))
|
||||
{
|
||||
found = 1;
|
||||
break;
|
||||
@@ -864,7 +879,7 @@ int m_gzline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
if ((found == 1) && whattodo == 1)
|
||||
if ((found == 0) && whattodo == 1)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** [Z:Line error] No such Z:Line", me.name,
|
||||
@@ -944,6 +959,7 @@ int m_gline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
if (parc == 1)
|
||||
{
|
||||
tkl_stats(sptr);
|
||||
sendto_one(sptr, rpl_str(RPL_ENDOFSTATS), me.name, sptr->name, 'g');
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1008,9 +1024,7 @@ int m_gline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (whattodo == 1)
|
||||
goto nochecks;
|
||||
if (p)
|
||||
if (p && whattodo != 1)
|
||||
{
|
||||
p++;
|
||||
i = 0;
|
||||
@@ -1029,17 +1043,24 @@ int m_gline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
}
|
||||
}
|
||||
|
||||
nochecks:
|
||||
usermask = strtok(mask, "@");
|
||||
hostmask = strtok(NULL, "");
|
||||
tkl_check_expire();
|
||||
|
||||
if (BadPtr(hostmask))
|
||||
{
|
||||
if (BadPtr(usermask))
|
||||
return 0;
|
||||
hostmask = usermask;
|
||||
usermask = "*";
|
||||
}
|
||||
|
||||
for (tk = tklines; tk; tk = tk->next)
|
||||
{
|
||||
if (tk->type == (TKL_GLOBAL | TKL_KILL))
|
||||
{
|
||||
if (!match(tk->hostmask, usermask)
|
||||
&& !match(tk->usermask, hostmask))
|
||||
if (!match(tk->hostmask, hostmask)
|
||||
&& !match(tk->usermask, usermask))
|
||||
{
|
||||
found = 1;
|
||||
break;
|
||||
@@ -1054,7 +1075,7 @@ int m_gline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
if ((found == 1) && whattodo == 1)
|
||||
if ((found == 0) && whattodo == 1)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** [G:Line error] No such G:Line", me.name,
|
||||
@@ -1136,6 +1157,7 @@ int m_shun(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
if (parc == 1)
|
||||
{
|
||||
tkl_stats(sptr);
|
||||
sendto_one(sptr, rpl_str(RPL_ENDOFSTATS), me.name, sptr->name, 'g');
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1304,3 +1326,229 @@ int m_shun(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* ** m_akill;
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = hostmask
|
||||
** parv[2] = username
|
||||
** parv[3] = comment
|
||||
*/
|
||||
int m_akill(cptr, sptr, parc, parv)
|
||||
aClient *cptr, *sptr;
|
||||
int parc;
|
||||
char *parv[];
|
||||
{
|
||||
aTKline *tk;
|
||||
int found = 0;
|
||||
int i;
|
||||
char *mask = NULL;
|
||||
char mo[1024], mo2[1024];
|
||||
char *p, *usermask, *hostmask;
|
||||
char *tkllayer[9] = {
|
||||
me.name, /*0 server.name */
|
||||
NULL, /*1 +|- */
|
||||
"G", /*2 G */
|
||||
NULL, /*3 user */
|
||||
NULL, /*4 host */
|
||||
NULL, /*5 setby */
|
||||
NULL, /*6 expire_at */
|
||||
NULL, /*7 set_at */
|
||||
NULL /*8 reason */
|
||||
};
|
||||
|
||||
if (parc == 1)
|
||||
{
|
||||
tkl_stats(sptr);
|
||||
sendto_one(sptr, rpl_str(RPL_ENDOFSTATS), me.name, sptr->name, 'g');
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (IsServer(sptr))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!IsOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
sptr->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (parc < 3)
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
|
||||
me.name, sptr->name, "GLINE");
|
||||
return;
|
||||
}
|
||||
|
||||
mask = parv[1];
|
||||
|
||||
/* Check if its a hostmask and legal .. */
|
||||
p = strchr(mask, '@');
|
||||
if (!p || (p == mask))
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** [G:Line error] Please use a user@host mask.",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (p)
|
||||
{
|
||||
p++;
|
||||
i = 0;
|
||||
while (*p)
|
||||
{
|
||||
if (*p != '*' && *p != '.')
|
||||
i++;
|
||||
p++;
|
||||
}
|
||||
if (i < 4)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** [G:Line error] Too broad mask",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
usermask = strtok(mask, "@");
|
||||
hostmask = strtok(NULL, "");
|
||||
tkl_check_expire();
|
||||
|
||||
for (tk = tklines; tk; tk = tk->next)
|
||||
{
|
||||
if (tk->type == (TKL_GLOBAL | TKL_KILL))
|
||||
{
|
||||
if (!match(tk->hostmask, usermask)
|
||||
&& !match(tk->usermask, hostmask))
|
||||
{
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (found == 1)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** [G:Line error] Match already exists!",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
tkllayer[1] = "+";
|
||||
tkllayer[3] = usermask;
|
||||
tkllayer[4] = hostmask;
|
||||
tkllayer[5] =
|
||||
make_nick_user_host(sptr->name, sptr->user->username,
|
||||
(IsHidden(sptr) ? sptr->user->virthost : sptr->user->realhost));
|
||||
ircsprintf(mo, "%li", 0);
|
||||
ircsprintf(mo2, "%li", TStime());
|
||||
tkllayer[6] = mo;
|
||||
tkllayer[7] = mo2;
|
||||
tkllayer[8] = parv[2];
|
||||
/* call the tkl layer .. */
|
||||
sendto_one(sptr,"*** Notice -- This command is deprecated and will eventually be removed. Please use /gline next time.");
|
||||
m_tkl(&me, &me, 9, tkllayer);
|
||||
}
|
||||
|
||||
/*
|
||||
* ** m_rakill;
|
||||
* ** parv[0] = sender prefix
|
||||
* ** parv[1] = hostmask
|
||||
* ** parv[2] = username
|
||||
* ** parv[3] = comment
|
||||
* */
|
||||
int m_rakill(cptr, sptr, parc, parv)
|
||||
aClient *cptr, *sptr;
|
||||
int parc;
|
||||
char *parv[];
|
||||
{
|
||||
aTKline *tk;
|
||||
int found = 0;
|
||||
int i;
|
||||
char *mask = NULL;
|
||||
char mo[1024], mo2[1024];
|
||||
char *p, *usermask, *hostmask;
|
||||
char *tkllayer[9] = {
|
||||
me.name, /*0 server.name */
|
||||
NULL, /*1 +|- */
|
||||
"G", /*2 G */
|
||||
NULL, /*3 user */
|
||||
NULL, /*4 host */
|
||||
NULL, /*5 setby */
|
||||
NULL, /*6 expire_at */
|
||||
NULL, /*7 set_at */
|
||||
NULL /*8 reason */
|
||||
};
|
||||
|
||||
if (parc == 1)
|
||||
{
|
||||
tkl_stats(sptr);
|
||||
sendto_one(sptr, rpl_str(RPL_ENDOFSTATS), me.name, sptr->name, 'g');
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (IsServer(sptr))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!IsOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
sptr->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (parc < 2)
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
|
||||
me.name, sptr->name, "GLINE");
|
||||
return;
|
||||
}
|
||||
|
||||
mask = parv[1];
|
||||
|
||||
/* Check if its a hostmask and legal .. */
|
||||
p = strchr(mask, '@');
|
||||
if (!p || (p == mask))
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** [G:Line error] Please use a user@host mask.",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
usermask = strtok(mask, "@");
|
||||
hostmask = strtok(NULL, "");
|
||||
tkl_check_expire();
|
||||
|
||||
for (tk = tklines; tk; tk = tk->next)
|
||||
{
|
||||
if (tk->type == (TKL_GLOBAL | TKL_KILL))
|
||||
{
|
||||
if (!match(tk->hostmask, usermask)
|
||||
&& !match(tk->usermask, hostmask))
|
||||
{
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (found == 1)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** [G:Line error] No such G:Line", me.name,
|
||||
sptr->name);
|
||||
return 0;
|
||||
}
|
||||
tkllayer[1] = "-";
|
||||
tkllayer[3] = usermask;
|
||||
tkllayer[4] = hostmask;
|
||||
tkllayer[5] =
|
||||
make_nick_user_host(sptr->name, sptr->user->username,
|
||||
(IsHidden(sptr) ? sptr->user->virthost : sptr->user->realhost));
|
||||
/* call the tkl layer .. */
|
||||
m_tkl(&me, &me, 6, tkllayer);
|
||||
}
|
||||
|
||||
+1
-9
@@ -428,15 +428,7 @@ int exit_client(cptr, sptr, from, comment)
|
||||
sptr->flags |= FLAGS_CLOSING;
|
||||
if (IsPerson(sptr))
|
||||
{
|
||||
sendto_umode(UMODE_OPER | UMODE_CLIENT,
|
||||
"*** Notice -- Client exiting: %s (%s@%s) [%s]",
|
||||
sptr->name, sptr->user->username,
|
||||
sptr->user->realhost, comment);
|
||||
sendto_conn_hcn
|
||||
("*** Notice -- Client exiting: %s (%s@%s) [%s] [%s]",
|
||||
sptr->name, sptr->user->username,
|
||||
sptr->user->realhost, comment, sptr->sockhost);
|
||||
|
||||
sendto_connectnotice(sptr->name, sptr->user, sptr, 1, comment);
|
||||
}
|
||||
current_load_data.conn_count--;
|
||||
if (IsPerson(sptr))
|
||||
|
||||
+34
-16
@@ -712,7 +712,8 @@ int m_server(cptr, sptr, parc, parv)
|
||||
#else
|
||||
encr = cptr->passwd;
|
||||
#endif /* CRYPT_LINK_PASSWORD */
|
||||
if (aconf->passwd && encr && *aconf->passwd && !StrEq(aconf->passwd, encr))
|
||||
if (aconf->passwd && *aconf->passwd &&
|
||||
(!encr || !StrEq(aconf->passwd, encr)))
|
||||
{
|
||||
sendto_one(cptr,
|
||||
"ERROR :No Access (passwd mismatch) %s", inpath);
|
||||
@@ -1677,8 +1678,6 @@ void m_info_send(sptr)
|
||||
me.name, RPL_INFO, sptr->name);
|
||||
sendto_one(sptr, ":%s %d %s :| * codemastr <codemastr@unrealircd.com>",
|
||||
me.name, RPL_INFO, sptr->name);
|
||||
sendto_one(sptr, ":%s %d %s :| * DrBin <drbin@unrealircd.com>",
|
||||
me.name, RPL_INFO, sptr->name);
|
||||
sendto_one(sptr, ":%s %d %s :| * Luke <luke@unrealircd.com>",
|
||||
me.name, RPL_INFO, sptr->name);
|
||||
sendto_one(sptr, ":%s %d %s :|", me.name, RPL_INFO, sptr->name);
|
||||
@@ -2355,7 +2354,10 @@ int m_stats(cptr, sptr, parc, parv)
|
||||
|
||||
#ifdef STATS_ONLYOPER
|
||||
if (!IsAnOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2760,31 +2762,44 @@ int m_help(cptr, sptr, parc, parv)
|
||||
parse_help(sptr, parv[0], message + 1);
|
||||
return 0;
|
||||
}
|
||||
if (message[1] == '!')
|
||||
sendto_serv_butone_token(IsServer(cptr) ? cptr : NULL,
|
||||
parv[0], MSG_HELP, TOK_HELP, "%s", message);
|
||||
if (!myncmp(message, "IGNORE ", 7))
|
||||
{
|
||||
tmpl = make_link();
|
||||
DupString(tmpl->value.cp, message + 7);
|
||||
tmpl->next = helpign;
|
||||
helpign = tmpl;
|
||||
return 0;
|
||||
}
|
||||
sendto_umode(UMODE_HELPOP, "*** HelpOp -- from %s (HelpOp): %s", parv[0], message);
|
||||
if (message[0] == '!')
|
||||
message++;
|
||||
if (BadPtr(message))
|
||||
return 0;
|
||||
sendto_serv_butone_token(IsServer(cptr) ? cptr : NULL,
|
||||
parv[0], MSG_HELP, TOK_HELP, "%s", message);
|
||||
sendto_umode(UMODE_HELPOP, "*** HelpOp -- from %s (HelpOp): %s",
|
||||
parv[0], message);
|
||||
}
|
||||
else if (MyConnect(sptr))
|
||||
{
|
||||
/* New syntax: ?... never goes out, !... always does. */
|
||||
if (!BadPtr(message))
|
||||
{
|
||||
parse_help(sptr, parv[0], message);
|
||||
if (BadPtr(message)) {
|
||||
parse_help(sptr, parv[0], NULL);
|
||||
return 0;
|
||||
}
|
||||
if ((!BadPtr(message) && !(message[0] == '!'))
|
||||
|| BadPtr(message))
|
||||
else if (message[0] == '?') {
|
||||
parse_help(sptr, parv[0], message+1);
|
||||
return 0;
|
||||
}
|
||||
else if (message[0] == '!') {
|
||||
message++;
|
||||
}
|
||||
else {
|
||||
if (parse_help(sptr, parv[0], message))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (BadPtr(message))
|
||||
return 0;
|
||||
s = make_nick_user_host(cptr->name, cptr->user->username,
|
||||
cptr->user->realhost);
|
||||
for (tmpl = helpign; tmpl; tmpl = tmpl->next)
|
||||
@@ -2797,14 +2812,16 @@ int m_help(cptr, sptr, parc, parv)
|
||||
|
||||
sendto_serv_butone_token(IsServer(cptr) ? cptr : NULL,
|
||||
parv[0], MSG_HELP, TOK_HELP, "%s", message);
|
||||
sendto_umode(UMODE_HELPOP, "*** HelpOp -- from %s (Local): %s", parv[0], message);
|
||||
sendto_umode(UMODE_HELPOP, "*** HelpOp -- from %s (Local): %s",
|
||||
parv[0], message);
|
||||
sendto_one(sptr, rpl_str(RPL_HELPFWD), me.name, parv[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_serv_butone_token(IsServer(cptr) ? cptr : NULL,
|
||||
parv[0], MSG_HELP, TOK_HELP, "%s", message);
|
||||
sendto_umode(UMODE_HELPOP, "*** HelpOp -- from %s: %s", parv[0], message);
|
||||
sendto_umode(UMODE_HELPOP, "*** HelpOp -- from %s: %s", parv[0],
|
||||
message);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -4814,7 +4831,8 @@ void dump_map(cptr, server, mask, prompt_length, length)
|
||||
for (lp = (Link *) return_servers(); lp; lp = lp->next)
|
||||
{
|
||||
acptr = lp->value.cptr;
|
||||
if (acptr->srvptr != server)
|
||||
if (acptr->srvptr != server ||
|
||||
IsULine(acptr) && !IsOper(cptr) && HIDE_ULINES)
|
||||
continue;
|
||||
acptr->flags |= FLAGS_MAP;
|
||||
cnt++;
|
||||
@@ -4823,7 +4841,7 @@ void dump_map(cptr, server, mask, prompt_length, length)
|
||||
for (lp = (Link *) return_servers(); lp; lp = lp->next)
|
||||
{
|
||||
acptr = lp->value.cptr;
|
||||
if (IsULine(acptr) && HIDE_ULINES && !IsAnOper(cptr))
|
||||
if (IsULine(acptr) && HIDE_ULINES && !IsOper(cptr))
|
||||
continue;
|
||||
if (acptr->srvptr != server)
|
||||
continue;
|
||||
|
||||
+94
-182
@@ -74,49 +74,22 @@ int m_sethost(cptr, sptr, parc, parv)
|
||||
char *parv[];
|
||||
{
|
||||
char *vhost, *s;
|
||||
#ifndef DISABLE_USERMOD
|
||||
int permit = 0; /* 0 = opers(glob/locop) 1 = global oper 2 = not MY clients.. */
|
||||
#else
|
||||
int permit = 2;
|
||||
#endif
|
||||
int legalhost = 1; /* is legal characters? */
|
||||
|
||||
#ifdef DISABLE_USERMOD
|
||||
if (MyClient(sptr))
|
||||
{
|
||||
sendto_one(sptr, ":%s NOTICE %s :*** The /sethost command is disabled on this server", me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!MyConnect(sptr))
|
||||
goto have_permit1;
|
||||
switch (permit)
|
||||
{
|
||||
case 0:
|
||||
if (!IsAnOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (!IsOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (MyConnect(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
default:
|
||||
sendto_ops_butone(IsServer(cptr) ? cptr : NULL, sptr,
|
||||
":%s WALLOPS :[SETHOST] Somebody fixing this corrupted server? !(0|1) !!!",
|
||||
me.name);
|
||||
break;
|
||||
if (MyClient(sptr) && !IsAnOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
have_permit1:
|
||||
if (parc < 2)
|
||||
vhost = NULL;
|
||||
else
|
||||
@@ -128,18 +101,19 @@ int m_sethost(cptr, sptr, parc, parv)
|
||||
if (MyConnect(sptr))
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** Syntax: /SetHost <new host>",
|
||||
":%s NOTICE %s :*** SetHost Error: Syntax is /sethost <new host>",
|
||||
me.name, parv[0]);
|
||||
}
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
/* uh uh .. too small */
|
||||
if (strlen(parv[1]) < 1)
|
||||
{
|
||||
if (MyConnect(sptr))
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** /SetHost Error: Atleast write SOMETHING that makes sense (':' string)",
|
||||
":%s NOTICE %s :*** SetHost Error: Host cannot be NULL.",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
/* too large huh? */
|
||||
if (strlen(parv[1]) > (HOSTLEN))
|
||||
@@ -147,9 +121,9 @@ int m_sethost(cptr, sptr, parc, parv)
|
||||
/* ignore us as well if we're not a child of 3k */
|
||||
if (MyConnect(sptr))
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** /SetHost Error: Hostnames are limited to %i characters.",
|
||||
":%s NOTICE %s :*** SetHost Error: Hostnames are limited to %i characters.",
|
||||
me.name, sptr->name, HOSTLEN);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* illegal?! */
|
||||
@@ -157,18 +131,13 @@ int m_sethost(cptr, sptr, parc, parv)
|
||||
{
|
||||
if (!isallowed(*s))
|
||||
{
|
||||
legalhost = 0;
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** SetHost Error: Hostnames may only contain a-z, A-Z, 0-9, '-' & '.'",
|
||||
me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (legalhost == 0)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** /SetHost Error: A hostname may contain a-z, A-Z, 0-9, '-' & '.' - Please only use them",
|
||||
me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* hide it */
|
||||
sptr->umodes |= UMODE_HIDE;
|
||||
sptr->umodes |= UMODE_SETHOST;
|
||||
@@ -208,7 +177,6 @@ int m_chghost(cptr, sptr, parc, parv)
|
||||
{
|
||||
aClient *acptr;
|
||||
char *s;
|
||||
int legalhost = 1;
|
||||
|
||||
#ifdef DISABLE_USERMOD
|
||||
if (MyClient(sptr))
|
||||
@@ -218,19 +186,17 @@ int m_chghost(cptr, sptr, parc, parv)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (MyClient(sptr))
|
||||
if (!IsAnOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
|
||||
}
|
||||
if (MyClient(sptr) && !IsOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (parc < 3)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** /ChgHost syntax is /ChgHost <nick> <newhost>",
|
||||
":%s NOTICE %s :*** ChgHost Error: Syntax is /chghost <nick> <newhost>",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
@@ -238,7 +204,7 @@ int m_chghost(cptr, sptr, parc, parv)
|
||||
if (strlen(parv[2]) < 1)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** Write atleast something to change the host to!",
|
||||
":%s NOTICE %s :*** ChgHost Error: The host cannot be NULL.",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
@@ -246,8 +212,8 @@ int m_chghost(cptr, sptr, parc, parv)
|
||||
if (strlen(parv[2]) > (HOSTLEN))
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** ChgHost Error: Too long hostname!!",
|
||||
me.name, sptr->name);
|
||||
":%s NOTICE %s :*** ChgHost Error: Hostnames are limited to %i characters.",
|
||||
me.name, sptr->name, HOSTLEN);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -256,18 +222,13 @@ int m_chghost(cptr, sptr, parc, parv)
|
||||
{
|
||||
if (!isallowed(*s))
|
||||
{
|
||||
legalhost = 0;
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** ChgHost Error: Hostnames may only contain a-z, A-Z, 0-9, '-' & '.'",
|
||||
me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (legalhost == 0)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** /ChgHost Error: A hostname may contain a-z, A-Z, 0-9, '-' & '.' - Please only use them",
|
||||
me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((acptr = find_person(parv[1], NULL)))
|
||||
{
|
||||
if (!IsULine(sptr))
|
||||
@@ -312,7 +273,6 @@ int m_chgident(cptr, sptr, parc, parv)
|
||||
{
|
||||
aClient *acptr;
|
||||
char *s;
|
||||
int legalident = 1;
|
||||
|
||||
#ifdef DISABLE_USERMOD
|
||||
if (MyClient(sptr))
|
||||
@@ -322,19 +282,17 @@ int m_chgident(cptr, sptr, parc, parv)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (MyClient(sptr))
|
||||
if (!IsAnOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
|
||||
}
|
||||
if (MyClient(sptr) && !IsOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (parc < 3)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** /ChgIdent syntax is /ChgIdent <nick> <newident>",
|
||||
":%s NOTICE %s :*** ChgIdent Error: Syntax is /chgident <nick> <newident>",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
@@ -342,7 +300,7 @@ int m_chgident(cptr, sptr, parc, parv)
|
||||
if (strlen(parv[2]) < 1)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** Write atleast something to change the ident to!",
|
||||
":%s NOTICE %s :*** ChgIdent Error: Ident cannot be NULL.",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
@@ -350,28 +308,23 @@ int m_chgident(cptr, sptr, parc, parv)
|
||||
if (strlen(parv[2]) > (USERLEN))
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** ChgIdent Error: Too long ident!!",
|
||||
me.name, sptr->name);
|
||||
":%s NOTICE %s :*** ChgIdent Error: Ident is limited to %i characters.",
|
||||
me.name, sptr->name, USERLEN);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* illegal?! */
|
||||
for (s = parv[2]; *s; s++)
|
||||
{
|
||||
if (!isallowed(*s))
|
||||
if (!isallowed(*s) && (*s != '~'))
|
||||
{
|
||||
legalident = 0;
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** ChgIdent Error: Ident may only contain a-z, A-Z, 0-9, '-', '~' & '.'",
|
||||
me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (legalident == 0)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** /ChgIdent Error: A ident may contain a-z, A-Z, 0-9, '-' & '.' - Please only use them",
|
||||
me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((acptr = find_person(parv[1], NULL)))
|
||||
{
|
||||
if (!IsULine(sptr))
|
||||
@@ -412,49 +365,23 @@ int m_setident(cptr, sptr, parc, parv)
|
||||
int parc;
|
||||
char *parv[];
|
||||
{
|
||||
|
||||
char *vident, *s;
|
||||
#ifndef DISABLE_USERMOD
|
||||
int permit = 0; /* 0 = opers(glob/locop) 1 = global oper */
|
||||
#else
|
||||
int permit = 2;
|
||||
#endif
|
||||
int legalident = 1; /* is legal characters? */
|
||||
if (!MyConnect(sptr))
|
||||
goto permit_2;
|
||||
switch (permit)
|
||||
{
|
||||
case 0:
|
||||
if (!IsAnOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (!IsOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (MyConnect(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
sendto_ops_butone(IsServer(cptr) ? cptr : NULL, sptr,
|
||||
":%s WALLOPS :[SETIDENT] Somebody fixing this corrupted server? !(0|1) !!!",
|
||||
me.name);
|
||||
break;
|
||||
|
||||
#ifdef DISABLE_USERMOD
|
||||
if (MyClient(sptr))
|
||||
{
|
||||
sendto_one(sptr, ":%s NOTICE %s :*** The /setident command is disabled on this server", me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (MyClient(sptr) && !IsAnOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
permit_2:
|
||||
|
||||
if (parc < 2)
|
||||
vident = NULL;
|
||||
else
|
||||
@@ -466,17 +393,18 @@ int m_setident(cptr, sptr, parc, parv)
|
||||
if (MyConnect(sptr))
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** Syntax: /SetIdent <new host>",
|
||||
":%s NOTICE %s :*** SetIdent Error: Syntax /setident <new ident>",
|
||||
me.name, parv[0]);
|
||||
}
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
if (strlen(parv[1]) < 1)
|
||||
{
|
||||
if (MyConnect(sptr))
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** /SetIdent Error: Atleast write SOMETHING that makes sense (':' string)",
|
||||
":%s NOTICE %s :*** SetIdent Error: Ident cannot be NULL.",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* too large huh? */
|
||||
@@ -485,29 +413,21 @@ int m_setident(cptr, sptr, parc, parv)
|
||||
/* ignore us as well if we're not a child of 3k */
|
||||
if (MyConnect(sptr))
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** /SetIdent Error: Usernames are limited to %i characters.",
|
||||
":%s NOTICE %s :*** SetIdent Error: Ident is limited to %i characters.",
|
||||
me.name, sptr->name, USERLEN);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* illegal?! */
|
||||
for (s = vident; *s; s++)
|
||||
{
|
||||
if (!isallowed(*s))
|
||||
if (!isallowed(*s) && (*s != '~'))
|
||||
{
|
||||
legalident = 0;
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** SetIdent Error: Ident may only contain a-z, A-Z, 0-9, '-', '~' & '.'",
|
||||
me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
if (*s == '~')
|
||||
legalident = 1;
|
||||
|
||||
}
|
||||
|
||||
if (legalident == 0)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** /SetIdent Error: A username may contain a-z, A-Z, 0-9, '-', '~' & '.' - Please only use them",
|
||||
me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* get it in */
|
||||
@@ -524,7 +444,7 @@ int m_setident(cptr, sptr, parc, parv)
|
||||
IsHidden(sptr) ? sptr->user->virthost : sptr->
|
||||
user->realhost);
|
||||
}
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
/* m_setname - 12/05/1999 - Stskeeps
|
||||
* :prefix SETNAME :gecos
|
||||
@@ -542,12 +462,13 @@ int m_setname(cptr, sptr, parc, parv)
|
||||
{
|
||||
if (parc < 2)
|
||||
return;
|
||||
|
||||
if (strlen(parv[1]) > (REALLEN))
|
||||
{
|
||||
if (MyConnect(sptr))
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** /SetName Error: \"Real names\" may maximum be %i characters of length",
|
||||
":%s NOTICE %s :*** SetName Error: GECOS may be %i characters of length max.",
|
||||
me.name, sptr->name, REALLEN);
|
||||
}
|
||||
return 0;
|
||||
@@ -556,7 +477,7 @@ int m_setname(cptr, sptr, parc, parv)
|
||||
if (strlen(parv[1]) < 1)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :Couldn't change realname - Nothing in parameter",
|
||||
":%s NOTICE %s :*** SetName Error: GECOS cannot be NULL.",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
@@ -579,13 +500,10 @@ int m_setname(cptr, sptr, parc, parv)
|
||||
":%s", parv[1]);
|
||||
if (MyConnect(sptr))
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :Your \"real name\" is now set to be %s - you have to set it manually to undo it",
|
||||
":%s NOTICE %s :*** SetName: Your GECOS is now set to be %s - you have to set it manually to undo it",
|
||||
me.name, parv[0], parv[1]);
|
||||
|
||||
return 0;
|
||||
|
||||
/* sendto_serv_butone(cptr, ":%s SETNAME %s", parv[0], parv[1]); */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* m_sdesc - 15/05/1999 - Stskeeps
|
||||
@@ -597,7 +515,7 @@ int m_setname(cptr, sptr, parc, parv)
|
||||
|
||||
int m_sdesc(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
{
|
||||
if (!IsAdmin(sptr) && !IsCoAdmin(sptr))
|
||||
if (!IsAdmin(sptr))
|
||||
return 0;
|
||||
|
||||
if (parc < 2)
|
||||
@@ -699,8 +617,7 @@ int m_nachat(cptr, sptr, parc, parv)
|
||||
return 0;
|
||||
}
|
||||
#ifdef ADMINCHAT
|
||||
if (MyClient(sptr))
|
||||
if (!(IsNetAdmin(sptr)))
|
||||
if (MyClient(sptr) && !IsNetAdmin(sptr))
|
||||
#else
|
||||
if (MyClient(sptr))
|
||||
#endif
|
||||
@@ -1056,9 +973,6 @@ int m_sendumode(cptr, sptr, parc, parv)
|
||||
sendto_umode(UMODE_CODER, "%s", parv[2]);
|
||||
break;
|
||||
*/
|
||||
case 'I':
|
||||
sendto_umode(UMODE_HIDING, "%s", parv[2]);
|
||||
break;
|
||||
case 'w':
|
||||
sendto_umode(UMODE_WALLOP, "%s", parv[2]);
|
||||
break;
|
||||
@@ -1385,19 +1299,17 @@ int m_chgname(cptr, sptr, parc, parv)
|
||||
#endif
|
||||
|
||||
|
||||
if (MyClient(sptr))
|
||||
if (!IsAnOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
|
||||
}
|
||||
if (MyClient(sptr) && !IsOper(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (parc < 3)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** /ChgName syntax is /ChgName <nick> <newident>",
|
||||
":%s NOTICE %s :*** ChgName Error: Syntax is /chgname <nick> <newident>",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
@@ -1405,7 +1317,7 @@ int m_chgname(cptr, sptr, parc, parv)
|
||||
if (strlen(parv[2]) < 1)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** Write atleast something to change the ident to!",
|
||||
":%s NOTICE %s :*** ChgName Error: GECOS cannot be NULL.",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
@@ -1413,8 +1325,8 @@ int m_chgname(cptr, sptr, parc, parv)
|
||||
if (strlen(parv[2]) > (REALLEN - 1))
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** ChgName Error: Too long !!", me.name,
|
||||
sptr->name);
|
||||
":%s NOTICE %s :*** ChgName Error: GECOS can be %i characters of length max.", me.name,
|
||||
sptr->name, REALLEN);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
+196
-229
@@ -88,7 +88,6 @@ static int user_modes[] = { UMODE_OPER, 'o',
|
||||
UMODE_KIX, 'q',
|
||||
UMODE_BOT, 'B',
|
||||
UMODE_FCLIENT, 'F',
|
||||
UMODE_HIDING, 'I',
|
||||
UMODE_SECURE, 'z',
|
||||
UMODE_DEAF, 'd',
|
||||
UMODE_VICTIM, 'v',
|
||||
@@ -836,22 +835,22 @@ static int register_user(cptr, sptr, nick, username, umode, virthost)
|
||||
{
|
||||
/* I:line password encryption --codemastr */
|
||||
#ifdef CRYPT_ILINE_PASSWORD
|
||||
if (sptr->passwd) {
|
||||
char salt[3];
|
||||
extern char *crypt();
|
||||
if (sptr->passwd) {
|
||||
char salt[3];
|
||||
extern char *crypt();
|
||||
|
||||
salt[0]=aconf->passwd[0];
|
||||
salt[1]=aconf->passwd[1];
|
||||
salt[3]='\0';
|
||||
salt[0]=aconf->passwd[0];
|
||||
salt[1]=aconf->passwd[1];
|
||||
salt[3]='\0';
|
||||
|
||||
encr = crypt(sptr->passwd, salt);
|
||||
}
|
||||
else
|
||||
encr = "";
|
||||
encr = crypt(sptr->passwd, salt);
|
||||
}
|
||||
else
|
||||
encr = "";
|
||||
#else
|
||||
encr = sptr->passwd;
|
||||
encr = sptr->passwd;
|
||||
#endif
|
||||
if (!encr || !StrEq(encr, aconf->passwd))
|
||||
if (BadPtr(sptr->passwd) || !StrEq(encr, aconf->passwd))
|
||||
{
|
||||
ircstp->is_ref++;
|
||||
sendto_one(sptr, err_str(ERR_PASSWDMISMATCH),
|
||||
@@ -864,7 +863,13 @@ static int register_user(cptr, sptr, nick, username, umode, virthost)
|
||||
* - Wizzu
|
||||
*/
|
||||
else
|
||||
MyFree(sptr->passwd);
|
||||
{
|
||||
MyFree(sptr->passwd);
|
||||
/* BadPtr relies on things being null, it doesn't
|
||||
* test validity which is *not* cool.
|
||||
*/
|
||||
sptr->passwd = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -947,7 +952,7 @@ static int register_user(cptr, sptr, nick, username, umode, virthost)
|
||||
sptr->name, olduser, userbad, stripuser);
|
||||
#endif
|
||||
nextping = TStime();
|
||||
sendto_connectnotice(nick, user, sptr);
|
||||
sendto_connectnotice(nick, user, sptr, 0, NULL);
|
||||
if (IsSecure(sptr))
|
||||
sptr->umodes |= UMODE_SECURE;
|
||||
}
|
||||
@@ -1024,7 +1029,7 @@ static int register_user(cptr, sptr, nick, username, umode, virthost)
|
||||
*/
|
||||
if (MyConnect(sptr))
|
||||
{
|
||||
if (sptr->passwd)
|
||||
if (!BadPtr(sptr->passwd))
|
||||
if (sptr->passwd && (nsptr = find_person(NickServ, NULL)))
|
||||
sendto_one(nsptr, ":%s PRIVMSG %s@%s :IDENTIFY %s",
|
||||
sptr->name, NickServ, SERVICES_NAME, sptr->passwd);
|
||||
@@ -1044,8 +1049,10 @@ static int register_user(cptr, sptr, nick, username, umode, virthost)
|
||||
}
|
||||
|
||||
if (MyConnect(sptr) && !BadPtr(sptr->passwd))
|
||||
{
|
||||
MyFree(sptr->passwd);
|
||||
|
||||
sptr->passwd = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1610,7 +1617,7 @@ int m_nick(cptr, sptr, parc, parv)
|
||||
{
|
||||
/* Horrible hack to add operoverride notification for +N channels --Luke */
|
||||
#ifndef NO_OPEROVERRIDE
|
||||
if (IsOper(cptr))
|
||||
if (OPCanOver(cptr))
|
||||
{
|
||||
sendto_umode(UMODE_EYES, "*** OperOverride -- %s (%s@%s) BANWALK %s",
|
||||
cptr->name, cptr->user->username, cptr->user->realhost,
|
||||
@@ -1630,7 +1637,7 @@ int m_nick(cptr, sptr, parc, parv)
|
||||
if (!IsULine(cptr) && lp->value.chptr->mode.mode &
|
||||
MODE_NONICKCHANGE && !is_chanownprotop(cptr, lp->value.chptr)) {
|
||||
#ifndef NO_OPEROVERRIDE
|
||||
if (IsOper(cptr))
|
||||
if (OPCanOver(cptr))
|
||||
{
|
||||
sendto_umode(UMODE_EYES, "*** OperOverride -- %s (%s@%s) NICKWALK %s",
|
||||
cptr->name, cptr->user->username, cptr->user->realhost,
|
||||
@@ -1710,11 +1717,13 @@ int m_nick(cptr, sptr, parc, parv)
|
||||
/* Copy password to the passwd field if it's given after NICK
|
||||
* - originally by taz, modified by Wizzu
|
||||
*/
|
||||
if ((parc > 2) && (strlen(parv[2]) < sizeof(sptr->passwd)))
|
||||
if (parc > 2)
|
||||
{
|
||||
if (sptr->passwd)
|
||||
if (BadPtr(sptr->passwd) || strlen(parv[2]) > strlen(sptr->passwd))
|
||||
{
|
||||
MyFree(sptr->passwd);
|
||||
sptr->passwd = MyMalloc(strlen(parv[2]) + 1);
|
||||
sptr->passwd = MyMalloc(strlen(parv[2]) + 1);
|
||||
}
|
||||
(void)strcpy(sptr->passwd, parv[2]);
|
||||
}
|
||||
/* This had to be copied here to avoid problems.. */
|
||||
@@ -1790,6 +1799,7 @@ static int m_message(cptr, sptr, parc, parv, notice)
|
||||
char *nick, *server, *p, *cmd, *ctcp, *p2, *pc, *text;
|
||||
int cansend = 0;
|
||||
int prefix = 0;
|
||||
char pfixchan[CHANNELLEN + 32];
|
||||
|
||||
/*
|
||||
* Reasons why someone can't send to a channel
|
||||
@@ -1797,9 +1807,10 @@ static int m_message(cptr, sptr, parc, parv, notice)
|
||||
static char *err_cantsend[] = {
|
||||
"You need voice (+v)",
|
||||
"No external channel messages",
|
||||
"Colour is not permitted in this channel",
|
||||
"Color is not permitted in this channel",
|
||||
"You are banned",
|
||||
"CTCPs are not permitted in this channel",
|
||||
"You must have a registered nick (+r) to talk on this channel",
|
||||
NULL
|
||||
};
|
||||
|
||||
@@ -1845,7 +1856,7 @@ static int m_message(cptr, sptr, parc, parv, notice)
|
||||
{
|
||||
parse(sptr, parv[2],
|
||||
(parv[2] + strlen(parv[2])), msgtab);
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
if (!strcasecmp(nick, "irc") && MyClient(sptr))
|
||||
{
|
||||
@@ -1853,7 +1864,7 @@ static int m_message(cptr, sptr, parc, parv, notice)
|
||||
{
|
||||
parse(sptr, parv[2], (parv[2] + strlen(parv[2])), msgtab);
|
||||
}
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
if (*nick != '#' && (acptr = find_person(nick, NULL)))
|
||||
{
|
||||
@@ -1947,23 +1958,35 @@ static int m_message(cptr, sptr, parc, parv, notice)
|
||||
if (p2 && (chptr = find_channel(p2, NullChn)))
|
||||
{
|
||||
if (p2 != nick)
|
||||
{
|
||||
int len = 0;
|
||||
for (pc = nick; pc != p2; pc++)
|
||||
{
|
||||
switch (*pc)
|
||||
{
|
||||
case '+':
|
||||
if (!(prefix & PREFIX_VOICE))
|
||||
pfixchan[len++] = '+';
|
||||
prefix |= PREFIX_VOICE;
|
||||
break;
|
||||
case '%':
|
||||
if (!(prefix & PREFIX_HALFOP))
|
||||
pfixchan[len++] = '%';
|
||||
prefix |= PREFIX_HALFOP;
|
||||
break;
|
||||
case '@':
|
||||
if (!(prefix & PREFIX_OP))
|
||||
pfixchan[len++] = '@';
|
||||
prefix |= PREFIX_OP;
|
||||
break;
|
||||
default:
|
||||
break; /* ignore it :P */
|
||||
}
|
||||
pfixchan[len] = '\0';
|
||||
strncat(pfixchan, p2, sizeof(pfixchan) - strlen(pfixchan));
|
||||
nick = pfixchan;
|
||||
}
|
||||
}
|
||||
cansend =
|
||||
!IsULine(sptr) ? can_send(sptr, chptr,
|
||||
parv[2]) : 0;
|
||||
@@ -2452,8 +2475,6 @@ static void do_who(sptr, acptr, repchan)
|
||||
/* checks for channel /who's and nonopers */
|
||||
if (channelwho && !IsOper(sptr) && sptr != acptr)
|
||||
{
|
||||
if IsHiding(acptr)
|
||||
return;
|
||||
if (IsAuditorium(repchan) && !is_chan_op(acptr,repchan)
|
||||
&& !is_chan_op(sptr,repchan))
|
||||
return;
|
||||
@@ -2462,10 +2483,6 @@ static void do_who(sptr, acptr, repchan)
|
||||
if (IsInvisible(acptr) && !IsMember(sptr,repchan))
|
||||
return;
|
||||
}
|
||||
|
||||
if (channelwho && IsHiding(acptr) && !IsNetAdmin(sptr))
|
||||
return;
|
||||
|
||||
if (acptr->user->away)
|
||||
status[i++] = 'G';
|
||||
else
|
||||
@@ -2484,14 +2501,26 @@ static void do_who(sptr, acptr, repchan)
|
||||
* simply because they are an oper. (adds ! to the who "flags")
|
||||
*/
|
||||
if (IsAnOper(sptr) && sptr != acptr)
|
||||
if (channelwho && IsHiding(acptr) && IsNetAdmin(sptr) ||
|
||||
IsInvisible(acptr) ||
|
||||
IsAuditorium(repchan) && !is_chan_op(acptr,repchan) ||
|
||||
!ShowChannel(sptr,repchan))
|
||||
status[i++] = '!';
|
||||
|
||||
if (
|
||||
IsInvisible(acptr) && !IsMember(sptr,repchan) ||
|
||||
IsAuditorium(repchan) && !is_chan_op(acptr,repchan) ||
|
||||
!ShowChannel(sptr,repchan))
|
||||
status[i++] = '!';
|
||||
else if (sptr != acptr)
|
||||
if (
|
||||
IsInvisible(acptr) && !IsMember(sptr,repchan) ||
|
||||
IsAuditorium(repchan) && !is_chan_op(acptr,repchan) ||
|
||||
!ShowChannel(sptr,repchan))
|
||||
return;
|
||||
|
||||
/* Channel owner */
|
||||
if (repchan && is_chanowner(acptr, repchan))
|
||||
status[i++] = '~';
|
||||
/* Channel protected */
|
||||
else if (repchan && is_chanprot(acptr, repchan))
|
||||
status[i++] = '&';
|
||||
/* Channel operator */
|
||||
if (repchan && is_chan_op(acptr, repchan))
|
||||
else if (repchan && is_chan_op(acptr, repchan))
|
||||
status[i++] = '@';
|
||||
|
||||
/* Channel halfop */
|
||||
@@ -2509,8 +2538,6 @@ static void do_who(sptr, acptr, repchan)
|
||||
":%s NOTICE %s :*** %s either did a /who or a specific /who on you",
|
||||
me.name, acptr->name, sptr->name);
|
||||
}
|
||||
if (IsHiding(acptr) && sptr != acptr && !IsNetAdmin(sptr))
|
||||
repchan = NULL;
|
||||
|
||||
sendto_one(sptr, rpl_str(RPL_WHOREPLY), me.name, sptr->name,
|
||||
(repchan) ? (repchan->chname) : "*", acptr->user->username,
|
||||
@@ -2525,7 +2552,7 @@ static void do_who(sptr, acptr, repchan)
|
||||
** m_who
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = nickname mask list
|
||||
** parv[2] = additional selection flag, only 'o' for now.
|
||||
** parv[2] = additional selection flag, 'o' and 'h' for now.
|
||||
*/
|
||||
int m_who(cptr, sptr, parc, parv)
|
||||
aClient *cptr, *sptr;
|
||||
@@ -2538,7 +2565,6 @@ int m_who(cptr, sptr, parc, parv)
|
||||
aChannel *chptr;
|
||||
char *channame = NULL, *s;
|
||||
int show_opers = parc > 2 ? (*parv[2] == 'o') : 0; /* Show OPERS only */
|
||||
int member;
|
||||
|
||||
show_hosts = 0;
|
||||
|
||||
@@ -2586,6 +2612,7 @@ int m_who(cptr, sptr, parc, parv)
|
||||
|
||||
sendto_one(sptr, rpl_str(RPL_ENDOFWHO), me.name, parv[0],
|
||||
BadPtr(mask) ? "*" : mask);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* List all users on a given channel */
|
||||
@@ -2612,6 +2639,7 @@ int m_who(cptr, sptr, parc, parv)
|
||||
for (acptr = client; acptr; acptr = acptr->next)
|
||||
{
|
||||
aChannel *ch2ptr = NULL;
|
||||
short g2g = 0;
|
||||
|
||||
if (!IsPerson(acptr))
|
||||
continue;
|
||||
@@ -2620,14 +2648,44 @@ int m_who(cptr, sptr, parc, parv)
|
||||
&& !IsOper(sptr))))
|
||||
continue;
|
||||
|
||||
/* The other method my have been slightly more efficient,
|
||||
* but I honestly doubt it. The readability of that code was
|
||||
* well, insane. --Luke
|
||||
/* *sigh* okay so maybe I should have kept some of that code,
|
||||
* especially since it seems to be the stuff that determines
|
||||
* whether or not the user should show in /who.
|
||||
*/
|
||||
if (acptr->user->channel)
|
||||
ch2ptr = acptr->user->channel->value.chptr;
|
||||
|
||||
if (
|
||||
#ifndef NO_OPEROVERRIDE
|
||||
if (OPCanOver(sptr))
|
||||
{
|
||||
g2g = 1;
|
||||
if (acptr->user->channel) ch2ptr = acptr->user->channel->value.chptr;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
for (lp = acptr->user->channel; lp; lp = lp->next)
|
||||
{
|
||||
/* sptr not a member
|
||||
* not whoing oneself & acptr invisible
|
||||
*/
|
||||
if (!IsMember(sptr, lp->value.chptr) &&
|
||||
(acptr != sptr && IsInvisible(acptr)))
|
||||
continue;
|
||||
|
||||
/* sptr is a member OR
|
||||
* acptr not invisible, and channel not +s/+p
|
||||
*/
|
||||
if (IsMember(sptr, lp->value.chptr) ||
|
||||
!IsInvisible(acptr) && PubChannel(lp->value.chptr))
|
||||
{
|
||||
g2g = 1;
|
||||
ch2ptr = lp->value.chptr;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!acptr->user->channel && (acptr == sptr || !IsInvisible(acptr)))
|
||||
g2g = 1;
|
||||
|
||||
if (g2g &&
|
||||
(!mask ||
|
||||
match(mask, acptr->name) == 0 ||
|
||||
match(mask, acptr->user->username) == 0 ||
|
||||
@@ -2642,6 +2700,7 @@ int m_who(cptr, sptr, parc, parv)
|
||||
do_who(sptr, acptr, ch2ptr);
|
||||
|
||||
}
|
||||
|
||||
sendto_one(sptr, rpl_str(RPL_ENDOFWHO), me.name, parv[0],
|
||||
BadPtr(mask) ? "*" : mask);
|
||||
return 0;
|
||||
@@ -2678,18 +2737,23 @@ int m_whois(cptr, sptr, parc, parv)
|
||||
char *parv[];
|
||||
{
|
||||
static anUser UnknownUser = {
|
||||
NULL, /* nextu */
|
||||
NULL, /* channel */
|
||||
NULL, /* invited */
|
||||
NULL, /* silence */
|
||||
NULL, /* away */
|
||||
0, /* last */
|
||||
0, /* servicestamp */
|
||||
1, /* refcount */
|
||||
0, /* joined */
|
||||
"<Unknown>", /* username */
|
||||
"<Unknown>", /* host */
|
||||
"<Unknown>" /* server */
|
||||
"<Unknown>", /* host */
|
||||
"<Unknown>", /* username */
|
||||
NULL, /* nextu */
|
||||
NULL, /* channel */
|
||||
NULL, /* invited */
|
||||
NULL, /* silence */
|
||||
NULL, /* away */
|
||||
NULL, /* virthost */
|
||||
NULL, /* server */
|
||||
NULL, /* swhois */
|
||||
NULL, /* serv */
|
||||
NULL, /* Lopts */
|
||||
NULL, /* whowas */
|
||||
0, /* last */
|
||||
0, /* servicestamp */
|
||||
0, /* joined */
|
||||
1 /* refcount */
|
||||
};
|
||||
Link *lp;
|
||||
anUser *user;
|
||||
@@ -2822,7 +2886,7 @@ int m_whois(cptr, sptr, parc, parv)
|
||||
mlen = strlen(me.name) + strlen(parv[0]) + 6 +
|
||||
strlen(name);
|
||||
|
||||
if (!IsServices(acptr) || (IsServices(acptr) && IsNetAdmin(sptr)))
|
||||
if (!IsServices(acptr) || IsServices(acptr) && IsNetAdmin(sptr))
|
||||
{
|
||||
for (len = 0, *buf = '\0', lp = user->channel; lp;
|
||||
lp = lp->next)
|
||||
@@ -2842,16 +2906,17 @@ int m_whois(cptr, sptr, parc, parv)
|
||||
len = 0;
|
||||
}
|
||||
#ifdef SHOW_SECRET
|
||||
if (!(acptr == sptr) && IsAnOper(sptr)
|
||||
if (!(acptr == sptr) && IsAnOper(sptr)
|
||||
#else
|
||||
if (!(acptr == sptr) && (IsNetAdmin(sptr))
|
||||
if (!(acptr == sptr)
|
||||
&& IsNetAdmin(sptr)
|
||||
#endif
|
||||
&& (showsecret == 1) && SecretChannel(chptr))
|
||||
*(buf + len++) = '~';
|
||||
&& SecretChannel(chptr))
|
||||
*(buf + len++) = '!';
|
||||
if (is_chanowner(acptr, chptr))
|
||||
*(buf + len++) = '*';
|
||||
*(buf + len++) = '~';
|
||||
else if (is_chanprot(acptr, chptr))
|
||||
*(buf + len++) = '^';
|
||||
*(buf + len++) = '&';
|
||||
else if (is_chan_op(acptr, chptr))
|
||||
*(buf + len++) = '@';
|
||||
else if (is_half_op(acptr, chptr))
|
||||
@@ -2976,7 +3041,7 @@ int m_user(cptr, sptr, parc, parv)
|
||||
if (IsServer(cptr) && !IsUnknown(sptr))
|
||||
return 0;
|
||||
|
||||
if (MyClient(sptr) && (sptr->acpt->umodes & LISTENER_SERVERSONLY)) {
|
||||
if (MyConnect(sptr) && (sptr->acpt->umodes & LISTENER_SERVERSONLY)) {
|
||||
return exit_client(cptr, sptr, sptr, "This port is for servers only");
|
||||
}
|
||||
|
||||
@@ -3132,18 +3197,23 @@ int m_kill(cptr, sptr, parc, parv)
|
||||
char *parv[];
|
||||
{
|
||||
static anUser UnknownUser = {
|
||||
NULL, /* nextu */
|
||||
NULL, /* channel */
|
||||
NULL, /* invited */
|
||||
NULL, /* silence */
|
||||
NULL, /* away */
|
||||
0, /* last */
|
||||
0, /* servicestamp */
|
||||
1, /* refcount */
|
||||
0, /* joined */
|
||||
"<Unknown>", /* username */
|
||||
"<Unknown>", /* host */
|
||||
"<Unknown>" /* server */
|
||||
"<Unknown>", /* host */
|
||||
"<Unknown>", /* username */
|
||||
NULL, /* nextu */
|
||||
NULL, /* channel */
|
||||
NULL, /* invited */
|
||||
NULL, /* silence */
|
||||
NULL, /* away */
|
||||
NULL, /* virthost */
|
||||
NULL, /* server */
|
||||
NULL, /* swhois */
|
||||
NULL, /* serv */
|
||||
NULL, /* Lopts */
|
||||
NULL, /* whowas */
|
||||
0, /* last */
|
||||
0, /* servicestamp */
|
||||
0, /* joined */
|
||||
1 /* refcount */
|
||||
};
|
||||
aClient *acptr;
|
||||
anUser *auser;
|
||||
@@ -3760,124 +3830,52 @@ int m_oper(cptr, sptr, parc, parv)
|
||||
|
||||
s = index(aconf->host, '@');
|
||||
*s++ = '\0';
|
||||
/*if ((aconf->port & OFLAG_AGENT))
|
||||
sptr->umodes |= UMODE_AGENT; */
|
||||
if ((aconf->port & OFLAG_HELPOP))
|
||||
SetHelpOp(sptr);
|
||||
|
||||
if (aconf->port & OFLAG_NETADMIN)
|
||||
{
|
||||
sptr->umodes |= UMODE_HELPOP;
|
||||
}
|
||||
|
||||
if (!(aconf->port & OFLAG_ISGLOBAL))
|
||||
{
|
||||
SetLocOp(sptr);
|
||||
}
|
||||
else if (aconf->port & OFLAG_NETADMIN)
|
||||
{
|
||||
if (aconf->port & OFLAG_SADMIN)
|
||||
{
|
||||
sptr->umodes |=
|
||||
(UMODE_NETADMIN | UMODE_ADMIN |
|
||||
UMODE_SADMIN);
|
||||
SetNetAdmin(sptr);
|
||||
SetSAdmin(sptr);
|
||||
SetAdmin(sptr);
|
||||
|
||||
SetOper(sptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
sptr->umodes |= (UMODE_NETADMIN | UMODE_ADMIN);
|
||||
SetNetAdmin(sptr);
|
||||
SetAdmin(sptr);
|
||||
SetOper(sptr);
|
||||
|
||||
}
|
||||
}
|
||||
else if (aconf->port & OFLAG_COADMIN)
|
||||
{
|
||||
if (aconf->port & OFLAG_SADMIN)
|
||||
{
|
||||
sptr->umodes |=
|
||||
(UMODE_COADMIN | UMODE_ADMIN |
|
||||
UMODE_SADMIN);
|
||||
SetCoAdmin(sptr);
|
||||
SetSAdmin(sptr);
|
||||
SetAdmin(sptr);
|
||||
SetOper(sptr);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
sptr->umodes |= (UMODE_COADMIN | UMODE_ADMIN);
|
||||
SetCoAdmin(sptr);
|
||||
SetAdmin(sptr);
|
||||
SetOper(sptr);
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
if (aconf->port & OFLAG_ADMIN && aconf->port & OFLAG_SADMIN)
|
||||
{
|
||||
sptr->umodes |= (UMODE_ADMIN | UMODE_SADMIN);
|
||||
SetNetAdmin(sptr);
|
||||
SetAdmin(sptr);
|
||||
SetSAdmin(sptr);
|
||||
SetOper(sptr);
|
||||
|
||||
}
|
||||
else if (aconf->port & OFLAG_SADMIN)
|
||||
{
|
||||
sptr->umodes |= (UMODE_SADMIN);
|
||||
SetSAdmin(sptr);
|
||||
SetOper(sptr);
|
||||
|
||||
}
|
||||
else if (aconf->port & OFLAG_ADMIN)
|
||||
{
|
||||
sptr->umodes |= (UMODE_ADMIN);
|
||||
SetAdmin(sptr);
|
||||
SetOper(sptr);
|
||||
|
||||
}
|
||||
else if (aconf->port & OFLAG_COADMIN)
|
||||
{
|
||||
SetCoAdmin(sptr);
|
||||
SetAdmin(sptr);
|
||||
SetOper(sptr);
|
||||
}
|
||||
else if (aconf->port & OFLAG_ISGLOBAL)
|
||||
SetOper(sptr);
|
||||
else
|
||||
{
|
||||
if (aconf->port & OFLAG_SADMIN)
|
||||
{
|
||||
sptr->umodes |= (UMODE_OPER | UMODE_SADMIN);
|
||||
SetSAdmin(sptr);
|
||||
SetOper(sptr);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
sptr->umodes |= (UMODE_OPER);
|
||||
SetOper(sptr);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
SetLocOp(sptr);
|
||||
|
||||
if (aconf->port & OFLAG_SADMIN)
|
||||
SetSAdmin(sptr);
|
||||
|
||||
if (aconf->port & OFLAG_EYES)
|
||||
{
|
||||
sptr->umodes |= (UMODE_EYES);
|
||||
SetEyes(sptr);
|
||||
}
|
||||
|
||||
if (aconf->port & OFLAG_WHOIS)
|
||||
{
|
||||
sptr->umodes |= (UMODE_WHOIS);
|
||||
}
|
||||
SetWhois(sptr);
|
||||
|
||||
if (aconf->port & OFLAG_HIDE)
|
||||
{
|
||||
sptr->umodes |= (UMODE_HIDE);
|
||||
}
|
||||
SetHide(sptr);
|
||||
|
||||
sptr->oflag = aconf->port;
|
||||
|
||||
*--s = '@';
|
||||
|
||||
/* Set useful modes here */
|
||||
sptr->umodes |=
|
||||
(UMODE_SERVNOTICE | UMODE_WALLOP | UMODE_FAILOP |
|
||||
UMODE_FLOOD | UMODE_CLIENT | UMODE_KILLS);
|
||||
|
||||
send_umode_out(cptr, sptr, old);
|
||||
#ifndef NO_FDLIST
|
||||
addto_fdlist(sptr->fd, &oper_fdlist);
|
||||
@@ -3894,12 +3892,6 @@ int m_oper(cptr, sptr, parc, parv)
|
||||
iNAH_host(sptr, locop_host);
|
||||
sptr->umodes &= ~UMODE_OPER;
|
||||
}
|
||||
/* else
|
||||
if ((aconf->port & OFLAG_AGENT))
|
||||
{
|
||||
sendto_ops("%s (%s@%s) is now an IRCd Agent (S)", parv[0],
|
||||
sptr->user->username, IsHidden(sptr) ? sptr->user->virthost : sptr->user->realhost);
|
||||
}*/
|
||||
else if (aconf->port & OFLAG_NETADMIN)
|
||||
{
|
||||
sendto_ops
|
||||
@@ -3927,16 +3919,16 @@ int m_oper(cptr, sptr, parc, parv)
|
||||
realhost);
|
||||
if (MyClient(sptr))
|
||||
{
|
||||
/* sendto_serv_butone(&me, ":%s GLOBOPS :%s (%s@%s) is now a co administrator (C)", me.name, parv[0],
|
||||
sptr->user->username, IsHidden(sptr) ? sptr->user->virthost : sptr->user->realhost);
|
||||
*/
|
||||
sendto_serv_butone(&me, ":%s GLOBOPS :%s (%s@%s) is now a co administrator (C)",
|
||||
me.name, parv[0], sptr->user->username,
|
||||
IsHidden(sptr) ? sptr->user->virthost : sptr->user->realhost);
|
||||
}
|
||||
if (iNAH == 1 && (sptr->oflag & OFLAG_HIDE))
|
||||
iNAH_host(sptr, coadmin_host);
|
||||
}
|
||||
else if (aconf->port & OFLAG_SADMIN)
|
||||
{
|
||||
sendto_ops("%s (%s@%s) is now a services admin (a)",
|
||||
sendto_ops("%s (%s@%s) is now a services administrator (a)",
|
||||
parv[0], sptr->user->username,
|
||||
IsHidden(sptr) ? sptr->user->virthost : sptr->user->
|
||||
realhost);
|
||||
@@ -3953,10 +3945,17 @@ int m_oper(cptr, sptr, parc, parv)
|
||||
}
|
||||
else if (aconf->port & OFLAG_ADMIN)
|
||||
{
|
||||
sendto_ops("%s (%s@%s) is now a server admin (A)",
|
||||
sendto_ops("%s (%s@%s) is now a server administrator (A)",
|
||||
parv[0], sptr->user->username,
|
||||
IsHidden(sptr) ? sptr->user->virthost : sptr->user->
|
||||
realhost);
|
||||
if (MyClient(sptr))
|
||||
{
|
||||
sendto_serv_butone(&me,
|
||||
":%s GLOBOPS :%s (%s@%s) is now a server administrator (A)",
|
||||
me.name, parv[0], sptr->user->username,
|
||||
IsHidden(sptr) ? sptr->user->virthost : sptr->user->realhost);
|
||||
}
|
||||
if (iNAH == 1 && (sptr->oflag & OFLAG_HIDE))
|
||||
iNAH_host(sptr, admin_host);
|
||||
}
|
||||
@@ -3966,6 +3965,13 @@ int m_oper(cptr, sptr, parc, parv)
|
||||
sptr->user->username,
|
||||
IsHidden(sptr) ? sptr->user->virthost : sptr->user->
|
||||
realhost);
|
||||
if (MyClient(sptr))
|
||||
{
|
||||
sendto_serv_butone(&me,
|
||||
":%s GLOBOPS :%s (%s@%s) is now an operator (O)",
|
||||
me.name, parv[0], sptr->user->username,
|
||||
IsHidden(sptr) ? sptr->user->virthost : sptr->user->realhost);
|
||||
}
|
||||
if (iNAH == 1 && (sptr->oflag & OFLAG_HIDE))
|
||||
iNAH_host(sptr, oper_host);
|
||||
}
|
||||
@@ -4100,8 +4106,11 @@ int m_pass(cptr, sptr, parc, parv)
|
||||
return 0;
|
||||
}
|
||||
PassLen = strlen(password);
|
||||
if (cptr->passwd)
|
||||
if (!BadPtr(cptr->passwd))
|
||||
{
|
||||
MyFree(cptr->passwd);
|
||||
cptr->passwd = NULL;
|
||||
}
|
||||
if (PassLen > (PASSWDLEN))
|
||||
PassLen = PASSWDLEN;
|
||||
cptr->passwd = MyMalloc(PassLen + 1);
|
||||
@@ -4154,8 +4163,8 @@ int m_userhost(cptr, sptr, parc, parv)
|
||||
{
|
||||
ircsprintf(response[i], "%s%s=%c%s@%s",
|
||||
acptr->name,
|
||||
(IsAnOper(acptr) && (((acptr != sptr) && IsOper(sptr) && IsHideOper(acptr)))
|
||||
|| (!IsHideOper(acptr)) || (acptr == sptr)) ? "*" : "",
|
||||
(IsAnOper(acptr) && (!IsHideOper(acptr) || sptr == acptr || IsAnOper(sptr)))
|
||||
? "*" : "",
|
||||
(acptr->user->away) ? '-' : '+',
|
||||
acptr->user->username,
|
||||
((acptr != sptr) && !IsOper(sptr)
|
||||
@@ -4329,11 +4338,6 @@ int m_umode(cptr, sptr, parc, parv)
|
||||
&& MyClient(sptr))
|
||||
break;
|
||||
goto def;
|
||||
case 'I':
|
||||
if (NO_OPER_HIDING == 1 && what == MODE_ADD
|
||||
&& MyClient(sptr))
|
||||
break;
|
||||
goto def;
|
||||
case 'B':
|
||||
if (what == MODE_ADD && MyClient(sptr))
|
||||
(void)m_botmotd(sptr, sptr, 1, parv);
|
||||
@@ -4422,9 +4426,6 @@ int m_umode(cptr, sptr, parc, parv)
|
||||
ClearNetAdmin(sptr);
|
||||
if (IsCoAdmin(sptr) && !OPIsCoAdmin(sptr))
|
||||
ClearCoAdmin(sptr);
|
||||
if ((sptr->umodes & UMODE_HIDING)
|
||||
&& !(sptr->oflag & OFLAG_INVISIBLE))
|
||||
sptr->umodes &= ~UMODE_HIDING;
|
||||
if (MyClient(sptr) && (sptr->umodes & UMODE_SECURE)
|
||||
&& !IsSecure(sptr))
|
||||
sptr->umodes &= ~UMODE_SECURE;
|
||||
@@ -4468,45 +4469,11 @@ int m_umode(cptr, sptr, parc, parv)
|
||||
/* Agents
|
||||
if ((sptr->umodes & (UMODE_AGENT)) && !(sptr->oflag & OFLAG_AGENT))
|
||||
sptr->umodes &= ~UMODE_AGENT; */
|
||||
if ((sptr->umodes & UMODE_HIDING) && !IsAnOper(sptr))
|
||||
sptr->umodes &= ~UMODE_HIDING;
|
||||
|
||||
|
||||
if ((sptr->umodes & UMODE_HIDING)
|
||||
&& !(sptr->oflag & OFLAG_INVISIBLE))
|
||||
sptr->umodes &= ~UMODE_HIDING;
|
||||
if (MyClient(sptr) && (sptr->umodes & UMODE_SECURE)
|
||||
&& !IsSecure(sptr))
|
||||
sptr->umodes &= ~UMODE_SECURE;
|
||||
|
||||
if ((sptr->umodes & (UMODE_HIDING))
|
||||
&& !(setflags & UMODE_HIDING))
|
||||
{
|
||||
sendto_umode(UMODE_ADMIN,
|
||||
"[+I] Activated total invisibility mode on %s",
|
||||
sptr->name);
|
||||
sendto_serv_butone(cptr,
|
||||
":%s SMO A :[+I] Activated total invisibility mode on %s",
|
||||
me.name, sptr->name);
|
||||
sendto_channels_inviso_part(sptr);
|
||||
}
|
||||
if ((sptr->umodes & UMODE_JUNK) && !IsOper(sptr))
|
||||
sptr->umodes &= ~UMODE_JUNK;
|
||||
|
||||
if (!(sptr->umodes & (UMODE_HIDING)))
|
||||
{
|
||||
if (setflags & UMODE_HIDING)
|
||||
{
|
||||
sendto_umode(UMODE_ADMIN,
|
||||
"[+I] De-activated total invisibility mode on %s",
|
||||
sptr->name);
|
||||
sendto_serv_butone(cptr,
|
||||
":%s SMO A :[+I] De-activated total invisibility mode on %s",
|
||||
me.name, sptr->name);
|
||||
sendto_channels_inviso_join(sptr);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* If I understand what this code is doing correctly...
|
||||
|
||||
+25
-112
@@ -1311,33 +1311,6 @@ void sendto_umode(int umodes, char *pattern, ...)
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* sendto_conn_hcn
|
||||
*
|
||||
* Send to umode +c && IsHybNotice(cptr)
|
||||
*/
|
||||
void sendto_conn_hcn(char *pattern, ...)
|
||||
{
|
||||
va_list vl;
|
||||
aClient *cptr;
|
||||
int i;
|
||||
char nbuf[1024];
|
||||
|
||||
va_start(vl, pattern);
|
||||
for (i = 0; i <= highest_fd; i++)
|
||||
if ((cptr = local[i]) && !IsServer(cptr) && !IsMe(cptr) &&
|
||||
(cptr->umodes & UMODE_CLIENT) && IsHybNotice(cptr))
|
||||
{
|
||||
(void)ircsprintf(nbuf, ":%s NOTICE %s :",
|
||||
me.name, cptr->name);
|
||||
(void)strncat(nbuf, pattern,
|
||||
sizeof(nbuf) - strlen(nbuf));
|
||||
vsendto_one(cptr, nbuf, vl);
|
||||
}
|
||||
va_end(vl);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* sendto_failops_whoare_opers
|
||||
*
|
||||
@@ -1617,29 +1590,42 @@ void sendto_realops(char *pattern, ...)
|
||||
return;
|
||||
}
|
||||
|
||||
void sendto_connectnotice(nick, user, sptr)
|
||||
void sendto_connectnotice(nick, user, sptr, disconnect, comment)
|
||||
char *nick;
|
||||
anUser *user;
|
||||
aClient *sptr;
|
||||
int disconnect;
|
||||
char *comment;
|
||||
{
|
||||
aClient *cptr;
|
||||
int i;
|
||||
char connectd[1024];
|
||||
char connecth[1024];
|
||||
ircsprintf(connectd,
|
||||
"*** Notice -- Client connecting on port %d: %s (%s@%s) %s%s%s",
|
||||
sptr->acpt->port, nick, user->username, user->realhost,
|
||||
|
||||
if (!disconnect)
|
||||
{
|
||||
ircsprintf(connectd,
|
||||
"*** Notice -- Client connecting on port %d: %s (%s@%s) %s%s%s",
|
||||
sptr->acpt->port, nick, user->username, user->realhost,
|
||||
#ifdef USE_SSL
|
||||
IsSecure(sptr) ? "[secure " : "",
|
||||
IsSecure(sptr) ? SSL_get_cipher((SSL *)sptr->ssl) : "",
|
||||
IsSecure(sptr) ? "]" : "");
|
||||
IsSecure(sptr) ? "[secure " : "",
|
||||
IsSecure(sptr) ? SSL_get_cipher((SSL *)sptr->ssl) : "",
|
||||
IsSecure(sptr) ? "]" : "");
|
||||
#else
|
||||
"", "", "");
|
||||
"", "", "");
|
||||
#endif
|
||||
ircsprintf(connecth,
|
||||
"*** Notice -- Client connecting: %s (%s@%s) [%s] {%d}", nick,
|
||||
user->username, user->realhost, inet_ntoa(sptr->ip),
|
||||
get_client_class(sptr));
|
||||
ircsprintf(connecth,
|
||||
"*** Notice -- Client connecting: %s (%s@%s) [%s] {%d}", nick,
|
||||
user->username, user->realhost, inet_ntoa(sptr->ip),
|
||||
get_client_class(sptr));
|
||||
}
|
||||
else
|
||||
{
|
||||
ircsprintf(connectd, "*** Notice -- Client exiting: %s (%s@%s) [%s]",
|
||||
nick, user->username, user->realhost, comment);
|
||||
ircsprintf(connecth, "*** Notice -- Client exiting: %s (%s@%s) [%s] [%s]",
|
||||
nick, user->username, user->realhost, comment, inet_ntoa(sptr->ip));
|
||||
}
|
||||
|
||||
for (i = 0; i <= highest_fd; i++)
|
||||
if ((cptr = local[i]) && !IsServer(cptr) && !IsMe(cptr) &&
|
||||
@@ -1747,76 +1733,3 @@ void sendto_message_one(aClient *to, aClient *from, char *sender,
|
||||
sendto_prefix_one(to, from, ":%s %s %s :%s",
|
||||
sender, cmd, nick, msg);
|
||||
}
|
||||
|
||||
/* The following functions are for +/-I -- codemastr */
|
||||
|
||||
void sendto_channels_inviso_join(aClient *user)
|
||||
{
|
||||
Link *channels;
|
||||
Link *users;
|
||||
aClient *cptr;
|
||||
|
||||
memset((char *)sentalong, '\0', sizeof(sentalong));
|
||||
if (user->fd >= 0)
|
||||
sentalong[user->fd] = 1;
|
||||
if (user->user)
|
||||
for (channels = user->user->channel; channels; channels = channels->next)
|
||||
for (users = channels->value.chptr->members; users; users = users->next)
|
||||
{
|
||||
cptr = users->value.cptr;
|
||||
if (!MyConnect(cptr) || IsNetAdmin(cptr) || sentalong[cptr->fd] || cptr == user)
|
||||
continue;
|
||||
sentalong[cptr->fd]++;
|
||||
sendto_one(cptr, ":%s!%s@%s JOIN :%s", user->name, user->user->username,
|
||||
(IsHidden(user) ? user->user->virthost : user->user->realhost), channels->value.chptr->chname);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void sendto_channels_inviso_part(aClient *user)
|
||||
{
|
||||
Link *channels;
|
||||
Link *users;
|
||||
aClient *cptr;
|
||||
|
||||
memset((char *)sentalong, '\0', sizeof(sentalong));
|
||||
if (user->fd >= 0)
|
||||
sentalong[user->fd] = 1;
|
||||
if (user->user)
|
||||
for (channels = user->user->channel; channels; channels = channels->next)
|
||||
for (users = channels->value.chptr->members; users; users = users->next)
|
||||
{
|
||||
cptr = users->value.cptr;
|
||||
if (!MyConnect(cptr) || IsNetAdmin(cptr) || sentalong[cptr->fd] || cptr == user)
|
||||
continue;
|
||||
sentalong[cptr->fd]++;
|
||||
sendto_one(cptr, ":%s!%s@%s PART :%s", user->name, user->user->username, (IsHidden(user) ? user->user->virthost : user->user->realhost), channels->value.chptr->chname);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void sendto_channel_ntadmins(aClient *from, aChannel *chptr, char *pattern, ...)
|
||||
{
|
||||
va_list vl;
|
||||
Link *lp;
|
||||
aClient *acptr;
|
||||
int i;
|
||||
|
||||
va_start(vl, pattern);
|
||||
++sentalong_marker;
|
||||
for (lp = chptr->members; lp; lp = lp->next)
|
||||
{
|
||||
acptr = lp->value.cptr;
|
||||
if (acptr->from == from || !IsNetAdmin(acptr) || (IsDeaf(acptr) && !(sendanyways == 1)))
|
||||
continue;
|
||||
if (MyConnect(acptr)) /* (It is always a client) */
|
||||
vsendto_prefix_one(acptr, from, pattern, vl);
|
||||
else if (sentalong[(i = acptr->from->fd)] != sentalong_marker)
|
||||
{
|
||||
sentalong[i] = sentalong_marker;
|
||||
vsendto_prefix_one(acptr, from, pattern, vl);
|
||||
}
|
||||
}
|
||||
va_end(vl);
|
||||
return;
|
||||
}
|
||||
|
||||
+43
-119
@@ -69,126 +69,50 @@ char *infotext[] =
|
||||
char *unrealcredits[] =
|
||||
{
|
||||
"-=-=-=-=-=-=-=-=-=-= [ " IRCDTOTALVERSION " Credits ] -=-=-=-=-",
|
||||
"The people on this list are people who have helped us through",
|
||||
"the development of UnrealIRCd. The Unreal Team would like to thank",
|
||||
"these people by listing them here:",
|
||||
"The people on this list are people who have helped us with the development",
|
||||
"of UnrealIRCd and who have made remarkable contributions to the project.",
|
||||
"People who have helped in previous versions are listed on",
|
||||
"http://unrealircd.com/credits.html - and not forgotten",
|
||||
"-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=",
|
||||
" \2\37The UnrealIRCd Team would like to thank:\2\37",
|
||||
"Nutcais (Phil Hawkins)",
|
||||
"- the original shell for Unreal development, useful comments,",
|
||||
" being a real IRCbrother for me (Stskeeps) :), learning me a lot",
|
||||
" about IRC stuff, getting me more and more into IRCd business",
|
||||
" thanks for the *.tspre.org domain as well :)",
|
||||
"",
|
||||
"Mick and Sp^",
|
||||
"- Amiga port of Unreal (UnrealIRCd/Amiga), continually strange",
|
||||
" comments on #UnrealIRCd, being great supporters of Unreal",
|
||||
" and following Unreal development all the way",
|
||||
"DrBin (Dave) drbin@tspre.org",
|
||||
"- Recoded & made the new UnrealIRCd/32 code, support,"
|
||||
" finding bugs, and tonnes of other stuff:)",
|
||||
"Headbang (Melle Visser)",
|
||||
"- Donation of ircsystems.net, hardware for Stskeeps, and for",
|
||||
" being a great supporter of Unreal, and helping out at the",
|
||||
" support channel",
|
||||
"WonderWal (Alan Wolff)",
|
||||
"- Sending Stskeeps Slackware 7, and Visual Studio",
|
||||
" helping out in the help channel, and a lot of other stuff",
|
||||
"{X} (Laurie) x@tspre.org",
|
||||
"- Making the main code/design of UnrealIRCd/32 gui",
|
||||
" bugfounds, etc",
|
||||
"CC2IS Internet Services (http://www.cc2is.com)",
|
||||
"- Hosting development shells and unrealircd.com, .org - thanks for",
|
||||
" supporting the UnrealIRCd project",
|
||||
"",
|
||||
"noriko noriko@linuxsquare.net",
|
||||
"- Giving us an OpenBSD shell to develop on :)",
|
||||
"llthangel",
|
||||
"- A good job helping with bugs/especially SJ3",
|
||||
"",
|
||||
" \37Donations to Unreal:\37",
|
||||
"BlueFlame^",
|
||||
" - the first UnrealIRCd donation :)",
|
||||
"[Real] from ChatFIRST.com",
|
||||
" - donation to UnrealIRCd project :)",
|
||||
"Thanks to Headbang and WonderWal too for hardware+software",
|
||||
"donations",
|
||||
" (yes your name can be here too;)",
|
||||
"",
|
||||
" \37These people have helped alpha/betatesting\37",
|
||||
"zshack, Headbang, Mick, Sp^, WonderWal, bomb, BullFrog, JacobD,",
|
||||
"SirDeath, l33, EiniD, uo, RevPsych and the subgenius.net network,",
|
||||
"^RavenX^, Mich[a]el, {X}, Fish, Shmad, Killer, BrainSCAN, RevNull,",
|
||||
"GoNiS, Mikey, DrBin, rapta, crow, SevenEagle, Curt|s, Scooter,",
|
||||
"auspice, RaYmAn, Taz, HERZ, Pique, ROXnet, trinity, script0r",
|
||||
"BiGi, [ins4ne]",
|
||||
"",
|
||||
" \2\37Stskeeps would like to thank:\2\37",
|
||||
"Morrigan Julie Frederiksen",
|
||||
" - Being a friend, thinking I was cute, uhm laying on a recycle",
|
||||
" thing.. 'Its the wrong recycle box Julie!', 'you got too cold",
|
||||
" hands *freezing*', etc ;)",
|
||||
"DJBoxy *unknown* *unknown*",
|
||||
" - For getting me up from #wIRCd bringing me to Mp3fansNet and",
|
||||
" after we linked to Global-IRC.net - and made people choose me",
|
||||
" as netadmin/ircd coder - Thanx!",
|
||||
"TC Tabita Clausen (reallife)",
|
||||
" - Making me smile of my life, talking with me, being a friend",
|
||||
" always got a pen sharpener when needed=/, accepting some",
|
||||
" wierdnesses from my side, going to the cinema with me",
|
||||
" and many other stuff. You'll always be in my heart,",
|
||||
" sorry for all the things I did or maybe didn't",
|
||||
" love you :(",
|
||||
"M_Girly Michelle Howie *grin*",
|
||||
" - Always with me, always in my heart, since the very start",
|
||||
" Thanks for being a friend in so many years, I hope I will",
|
||||
" never see your tears..",
|
||||
"SL7 Steve Lake sl7 @ austnet.org",
|
||||
" - Bug testing, comments, lotsa ideas, wierd reactions,",
|
||||
" making Apollo, supporting Unreal and other freakout",
|
||||
" thingies, being a general wierdoe etc. ",
|
||||
"Dark-Prince",
|
||||
" - Systray code, sharing ideas, code, bugs, and a lot of stuff",
|
||||
"Sporty_McFly Cedric",
|
||||
" - Comments, helping me when I got problems with my life and so on",
|
||||
" *toh* to him - Thanks!",
|
||||
"Del_Monte K. Hawkes k.hawkes@zombies.force9.net",
|
||||
" - Is just trying to put the lamer side of things across :cP",
|
||||
" No. I saw 2 moos. - Well having to input in seconds",
|
||||
" is fine if you're real quick at maths - but if not - it's a PAIN",
|
||||
" - Comments, bugfixes, moral support etc.;)",
|
||||
"Skywalker Chris Morley skywalker@irc.ru.ac.za",
|
||||
" - Helping me start up ROXnet at first (which brought me",
|
||||
" into IRCd business.. + Numerous kicks /Kills akills and alike;)",
|
||||
"* Alexander Over alexander@over.de",
|
||||
" - /botserv patch",
|
||||
"zero9000 Kevin Alford",
|
||||
" - UnrealIRCd logo, graphics, null desu ;), ideas etc.",
|
||||
"jfc John Crowhurst",
|
||||
" - For us being able to use his wonder-box to code on and host CVS on",
|
||||
"HERZ",
|
||||
" - For proving me wrong in the beta phases....",
|
||||
" \2\37codemastr would like to thank:\2\37",
|
||||
"CaliMonk Ivo Teel calimonk@axenet.org",
|
||||
" - Getting me started at NeoHorizon which basically got me",
|
||||
" started coding IRCd",
|
||||
"[FBI] Corey Lang fbi@dal.net",
|
||||
" - Being a good IRC friend and getting me started with",
|
||||
" IRC through our old little wIRCd net :)",
|
||||
"",
|
||||
" \2\37Also thanks to:\2\37",
|
||||
"Enforcer, Andy Church, Mick, Sp^, ShadowMastr, Almaris",
|
||||
"}{, Erik/Dr|zzt, Hedge, Kyle, MissKel, jfc, Fish, kore, Syndicate, Bagge,",
|
||||
"#Coder-Com@Undernet, ^NeVeR^, flygirl^, DannyM, JuliuZ, wah-wah^, Lisa,",
|
||||
"Melisa, Dukemaster, NonMortal, Andryan, TomaHawk, Lushes, Skywalker, Merlin, Sporty_McFly,",
|
||||
"zero9000, #wIRCd@DALnet, comstud, dog3, Dianora, Isomer, and others who arent listed here:)",
|
||||
"",
|
||||
"------------------------------------------------------",
|
||||
"Unreal 3.0, 3.1, 3.1.1 and up is dedicated to Morrigan",
|
||||
"------------------------------------------------------",
|
||||
"This IRCd is dedicated to the love that has always been",
|
||||
"and will always be there - Thanks to the girls & friends that kept me up",
|
||||
"when I was down",
|
||||
" The UnrealIRCd Team would like to thank:",
|
||||
"",
|
||||
"Nutcais (Phil Hawkins)",
|
||||
"- the original shell for Unreal development, useful comments,",
|
||||
" and supporting the project all through its life. Thanks for",
|
||||
" helping to get this project to take off.",
|
||||
"",
|
||||
"Thanks for donations to:",
|
||||
"",
|
||||
"BlueFlame^ ",
|
||||
"- The first donation",
|
||||
"",
|
||||
"[Real] from ChatFIRST.com",
|
||||
"Jameno123 & ByteHosting Internet Services",
|
||||
"Interlink Access Corp, Jan Knutar, ThePlayer, Headbang",
|
||||
"noriko, powerstorm.net",
|
||||
"- Hardware, software, or financial donations - Thank you",
|
||||
" for the support.",
|
||||
"",
|
||||
"Phil Veale - email@phillipveale.com - http://www.flame.tiefighter.org",
|
||||
"- Donating webhosting for the project amongst other things",
|
||||
"",
|
||||
"Thanks to the supporter staff:",
|
||||
"apt, TheEggMan, nemesis, Ron885, iDw-badSol, SciFi",
|
||||
"They can be reached at nickname@unrealircd.info",
|
||||
"",
|
||||
"Thanks to former supporters and anyone who has helped",
|
||||
"without officially joining the staff.",
|
||||
"",
|
||||
"Thanks go to all current mirror & DNS hosters. We really",
|
||||
"value your donations.",
|
||||
"",
|
||||
"Stskeeps would primarily like to thank Julie for her",
|
||||
"support through the years. See the page for a more extensive",
|
||||
"list of all the coders' credits.",
|
||||
"",
|
||||
"This IRCd is dedicated to those who have kept us rocking and",
|
||||
"in a good mood all through the years we've struggled with this",
|
||||
"project. Unreal3.0 and up is dedicated to Morrigan.",
|
||||
0
|
||||
};
|
||||
char unreallogo[] =
|
||||
|
||||
+18
-14
@@ -130,18 +130,23 @@ int webtv_parse(aClient *sptr, char *string)
|
||||
int w_whois(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
{
|
||||
static anUser UnknownUser = {
|
||||
NULL, /* nextu */
|
||||
NULL, /* channel */
|
||||
NULL, /* invited */
|
||||
NULL, /* silence */
|
||||
NULL, /* away */
|
||||
0, /* last */
|
||||
0, /* servicestamp */
|
||||
1, /* refcount */
|
||||
0, /* joined */
|
||||
"<Unknown>", /* username */
|
||||
"<Unknown>", /* host */
|
||||
"<Unknown>" /* server */
|
||||
"<Unknown>", /* host */
|
||||
"<Unknown>", /* username */
|
||||
NULL, /* nextu */
|
||||
NULL, /* channel */
|
||||
NULL, /* invited */
|
||||
NULL, /* silence */
|
||||
NULL, /* away */
|
||||
NULL, /* virthost */
|
||||
NULL, /* server */
|
||||
NULL, /* swhois */
|
||||
NULL, /* serv */
|
||||
NULL, /* Lopts */
|
||||
NULL, /* whowas */
|
||||
0, /* last */
|
||||
0, /* servicestamp */
|
||||
0, /* joined */
|
||||
1 /* refcount */
|
||||
};
|
||||
Link *lp;
|
||||
anUser *user;
|
||||
@@ -299,8 +304,7 @@ int w_whois(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
}
|
||||
}
|
||||
|
||||
if (buf[0] != '\0' && !IsULine(acptr) && (!IsHiding(acptr) ||
|
||||
IsNetAdmin(sptr) || sptr == acptr))
|
||||
if (buf[0] != '\0' && !IsULine(acptr))
|
||||
sendto_one(sptr,
|
||||
":IRC PRIVMSG %s :%s is on %s",
|
||||
sptr->name, name, buf);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
# or included in any package without permission from the author.
|
||||
#
|
||||
# NO WARRANTY IS INCLUDED
|
||||
CURRENT_VERSION="Unreal3.1.4-Meadows"
|
||||
CURRENT_VERSION="Unreal3.1.6-Noon"
|
||||
WHATYAWANT="wget"
|
||||
clear
|
||||
cat .UPDATE
|
||||
@@ -21,13 +21,13 @@ TMP=`which wget`
|
||||
TMP2=`echo $TMP | cut -c1`
|
||||
|
||||
if [ "$TMP2" == "/" ] ; then
|
||||
wget http://unreal.tspre.org/update.sh
|
||||
wget http://update.unrealircd.com/update.sh
|
||||
else
|
||||
echo "wget not found trying lynx"
|
||||
lynx -source http://unreal.tspre.org/update.sh > update.sh
|
||||
lynx -source http://update.unrealircd.com/update.sh > update.sh
|
||||
fi
|
||||
else
|
||||
lynx -source http://unreal.tspre.org/update.sh > update.sh
|
||||
lynx -source http://update.unrealircd.com/update.sh > update.sh
|
||||
fi
|
||||
|
||||
chmod +x update.sh
|
||||
|
||||
Reference in New Issue
Block a user