mirror of
https://github.com/unrealircd/unrealircd.git
synced 2026-06-12 17:14:46 +02:00
Import of beta tag, Unreal3.1-Silverheart+
This commit is contained in:
Vendored
+1
@@ -17,6 +17,7 @@
|
||||
--declaration-indentation5
|
||||
-T size_t
|
||||
-T aClass
|
||||
-T TS
|
||||
-T aClient
|
||||
-T aServer
|
||||
-T anUser
|
||||
|
||||
@@ -532,3 +532,42 @@
|
||||
- Added ^MrMike^'s command list, this one will be updated
|
||||
- Removed ID_CVS, hopefully fixing some bastard stuff
|
||||
- Fixed a last minute SJOIN bug
|
||||
[ last fixes ]
|
||||
- Re-added res_comp.c and win32.c and res_mkquery.c, which was damaged by
|
||||
the ID_CVS remove
|
||||
- Fixed a SHOWCONNECTINFO bug
|
||||
- Fixed a MODE_STRIPWORDS bug
|
||||
- Fixed a PART bug
|
||||
- Fixed a STRIPBADWORDS bug
|
||||
- Fixed a BotMOTD bug
|
||||
- Added Dianora's /userhost
|
||||
- Recoded /links using NS
|
||||
- Recoded /map a bit using NS, and added usercounts to Server struct
|
||||
- Some crazy time_t -> TS stuff, will save us some time in 2038
|
||||
- Fixed the "/mode #blah +Cplkf 1 moo 5:5" ( mode/#blah [+pClkf 1moo 5:5]
|
||||
problem
|
||||
- Hopefully fixed the +x problem
|
||||
- Fixed a bug with mkpasswd on OpenBSD
|
||||
- Added desynch +e warning, and updated ./update enough ...
|
||||
- Updated update to work better, and that you can use lynx instead of wget
|
||||
- Added #undef SHUN_NOTICES, to add notices for users who are shunned
|
||||
- Fixed bug with U:Lines should be able to privmsg/notice and recieve
|
||||
badwords :P, does not work in channels
|
||||
- Removed the old GLINE system, TKL is now standard.
|
||||
- Added INV_TRACK define, we want people testing this.
|
||||
- Fixed the -1 usercount bug, found by codemastr, fixed by Stskeeps
|
||||
- Fixed a +h bug reported by Dukemaster
|
||||
- Added IRIX support (does it work?)
|
||||
- Fixed crypter so it actually functions (Makefile now sets mode 700) and
|
||||
it encrypts X and N lines too.
|
||||
- Fixed empty mode sends in register_user, reported by Bagge
|
||||
- Added some portability stuff
|
||||
- Fixed some empty-line/missing parameter stuff in dccdeny, vhost,
|
||||
and dynconf, chrestrict
|
||||
- Made vhost strip too long vhosts
|
||||
- Removed INV_TRACK
|
||||
- Fixed a typo in /vhost
|
||||
- Fixed some problems/typos/notlookingsogood (TM) bugs, in the tkl code
|
||||
- Fixed ban merging/similar bug in SJOIN
|
||||
- Made /kick for opers only be possible for netadmin/techadmin
|
||||
- Fixed /server so it doesnt support SERVER name :info anymore..
|
||||
|
||||
@@ -64,6 +64,7 @@ DIR=`pwd`
|
||||
DEFOPT="-O -g"
|
||||
DEFCFLAGS="$DEFOPT"
|
||||
DEFLIBS="none"
|
||||
MKPASSWDLIBS="-lcrypt"
|
||||
OSNAME="an unrecgonized operating system"
|
||||
#
|
||||
IRCNET=""
|
||||
@@ -191,6 +192,7 @@ case "$OS" in
|
||||
*OpenBSD*2*)
|
||||
DEFCFLAGS="$DEFOPT"
|
||||
DEFLIBS="none"
|
||||
MKPASSWDLIBS=""
|
||||
OSNAME="OpenBSD 2.x"
|
||||
CRYPT_OPER_PASSWORD=""
|
||||
CRYPT_LINK_PASSWORD=""
|
||||
@@ -245,6 +247,11 @@ case "$OS" in
|
||||
DEFLIBS="-lsocket -lnsl -lresolv"
|
||||
OSNAME="Solaris 2.x (or SunOS 5.x)"
|
||||
;;
|
||||
*IRIX*)
|
||||
DEFCFLAGS="$DEFOPT -D_USE_BSD"
|
||||
DEFLIBS="-lbsd"
|
||||
OSNAME="IRIX"
|
||||
;;
|
||||
*Linux*)
|
||||
cat > $TMP << __EOF__
|
||||
#include <stdio.h>
|
||||
@@ -382,6 +389,14 @@ sed -e "s@^XCFLAGS=\(.*\)@XCFLAGS=$XCFLAGS@" Makefile > Makefile.tmp
|
||||
cp Makefile.tmp Makefile
|
||||
$RM -f Makefile.tmp
|
||||
#
|
||||
|
||||
# Fix mkpasswd Makefile
|
||||
#
|
||||
$RM -f crypt/Makefile.tmp
|
||||
sed -e "s@^LIBS=\(.*\)@LIBS=$MKPASSWDLIBS@" crypt/Makefile > crypt/Makefile.tmp
|
||||
cp crypt/Makefile.tmp crypt/Makefile
|
||||
$RM -f crypt/Makefile.tmp
|
||||
|
||||
cat <<__EOF__
|
||||
|
||||
If you need to use any extra libraries when compiling the server,
|
||||
|
||||
@@ -60,8 +60,8 @@ recap:
|
||||
The UnrealIRCD server comes tarred and gziped. To uncompress it and expand
|
||||
it, use the following commands at the Unix prompt:
|
||||
|
||||
gzip -d Unreal3.0.tar.gz
|
||||
tar -xvf Unreal3.0.tar
|
||||
gzip -d Unreal3.1.tar.gz
|
||||
tar -xvf Unreal3.1.tar
|
||||
|
||||
This will create a new directory called Unreal3.0 and unpack the source
|
||||
into it.
|
||||
|
||||
@@ -49,6 +49,5 @@ gay
|
||||
dickhead
|
||||
sonuvabitch
|
||||
*fuck*
|
||||
ass
|
||||
boobs
|
||||
tits
|
||||
|
||||
@@ -49,6 +49,5 @@ gay
|
||||
dickhead
|
||||
sonuvabitch
|
||||
*fuck*
|
||||
ass
|
||||
boobs
|
||||
tits
|
||||
|
||||
+4
-2
@@ -23,15 +23,17 @@
|
||||
#
|
||||
|
||||
IRCDCONF = ../ircd.conf
|
||||
LIBS=-lcrypt
|
||||
|
||||
all: mkpasswd
|
||||
crypt: install
|
||||
|
||||
mkpasswd: mkpasswd.c
|
||||
cc -lcrypt -O mkpasswd.c -o mkpasswd
|
||||
cc ${LIBS} -O mkpasswd.c -o mkpasswd
|
||||
|
||||
install:
|
||||
crypter ${IRCDCONF}
|
||||
chmod 700 crypter
|
||||
./crypter ${IRCDCONF}
|
||||
@echo 'done.'
|
||||
|
||||
clean:
|
||||
|
||||
+23
-1
@@ -32,6 +32,8 @@ $tmpfile = "/tmp/ircd.conf.tmp";
|
||||
#
|
||||
$ircdconf = @ARGV[0];
|
||||
|
||||
$ircdout = "IRCDOUT";
|
||||
|
||||
print "crypting ",$ircdconf,"\n";
|
||||
@saltset = ('a' .. 'z', 'A' .. 'Z', '0' .. '9', '.', '/');
|
||||
|
||||
@@ -40,13 +42,33 @@ open ($ircdout, ">/tmp/ircd.conf.tmp") || die "open $!";
|
||||
|
||||
while ($text = <>) {
|
||||
#if its not an "O" line we can ignore it
|
||||
$text =~ /^o/i || print ($ircdout $text) && next;
|
||||
if ($text =~ /^o/i) {
|
||||
chop($text);
|
||||
@oline = split(':', $text);
|
||||
$salt = $saltset[rand(time)%64].$saltset[(rand(time)>>6)%64];
|
||||
$oline[2] = crypt(@oline[2], $salt);
|
||||
print ($ircdout join(':',@oline)."\n");
|
||||
}
|
||||
elsif ($text =~ /^n/i) {
|
||||
chop($text);
|
||||
@nline = split(':', $text);
|
||||
$salt = $saltset[rand(time)%64].$saltset[(rand(time)>>6)%64];
|
||||
$nline[2] = crypt(@nline[2], $salt);
|
||||
print ($ircdout join(':',@nline)."\n");
|
||||
}
|
||||
elsif ($text =~ /^x/i) {
|
||||
chop($text);
|
||||
@xline = split(':', $text);
|
||||
$salt1 = $saltset[rand(time)%64].$saltset[(rand(time)>>6)%64];
|
||||
$salt2 = $saltset[rand(time)%64].$saltset[(rand(time)>>6)%64];
|
||||
$xline[1] = crypt(@xline[1], $salt1);
|
||||
$xline[2] = crypt(@xline[2], $salt2);
|
||||
print ($ircdout join(':',@xline)."\n");
|
||||
}
|
||||
else {
|
||||
print $ircdout "$text";
|
||||
}
|
||||
}
|
||||
close ($ircdout);
|
||||
close ($ircdin);
|
||||
print "/bin/cp ",$tmpfile," ",$ircdconf,"\n";
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
|
||||
ALN, Alphanumeric System
|
||||
(C) Stskeeps 2000
|
||||
|
||||
ALN is a quick hack to short down usage of bandwidth-using servernames
|
||||
in prefixes, NICK commands, etc etc. It replaces the name with a
|
||||
1 or 2 byte prefix in a system, look at src/aln.c for the prefix
|
||||
types/values. It will be an PROTOCTL, and used in NICK messages and so on,
|
||||
and introduce a new prefix server<->server called |server. The value of the
|
||||
server is calculated by a hash value, the scache system, so that the server
|
||||
can lookup with a new scache function, scache_find_by_hash(int i). The
|
||||
question of it will conflict in similar-hash server names, is a wonder to me
|
||||
:P, we will find out, but scache will fail at same time then.
|
||||
|
||||
|
||||
Examples:
|
||||
& Medb 4 957458466 ~Medb bservice.org D2 0 +iwrx *
|
||||
:BotService Bot - bservice.org - Owner: terri{J}
|
||||
|
||||
where D2 is the hash value of oxygen.phrozen.org (/stats s on a
|
||||
#define DEVELOP server). irc.flirt.org has hash 96 (ALN code AX) for
|
||||
instance.
|
||||
|
||||
@D2 GLOBOPS :message
|
||||
will be a message from server with hash D2, found find-by-hash(256)
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
From cmunk@draconic.fyremoon.net Wed Apr 5 18:09:55 2000
|
||||
Date: Wed, 5 Apr 2000 18:07:55 +0100 (BST)
|
||||
From: "The Nightwalker (Stskeeps)" <cmunk@draconic.fyremoon.net>
|
||||
To: unreal-dev@lists.sourceforge.net
|
||||
Subject: [Unreal-dev] P:Lines
|
||||
|
||||
|
||||
Some stuff i got ideas about.. stripping the IP and port from the M:Line
|
||||
and enforcing the main port to be in a M:line
|
||||
|
||||
M:irc.fyremoon.net:*:Forever is gonna start tonight:*
|
||||
|
||||
P:ip:flags:password1,password2,password3:port
|
||||
| | | \- port to bind to
|
||||
| | |
|
||||
| | \- Commaseperated lists of accepted passwords
|
||||
| | * if none
|
||||
| |
|
||||
| \--- C = Allow clients
|
||||
| S = Allow servers
|
||||
| R = ONLY allow our remote admin connections
|
||||
| (may only be on a P:line of its own)
|
||||
| J = Clients that connect here are counted as Java(Confroomhack)
|
||||
| * = CS
|
||||
|
|
||||
\--- IP to bind to, * = INADDR_ANY (all interfaces)
|
||||
|
||||
Will make P:Lines more efficent
|
||||
|
||||
---------------------------------------------------------------------
|
||||
Carsten V. Munk - The Nightwalker, known on IRC as Stskeeps or techie
|
||||
* ICQ: 16465977 - E-Mail: stskeeps@tspre.org
|
||||
* Author of UnrealIRCd (http://unreal.tspre.org)
|
||||
* Technical Admin @ irc.roxnet.org, server admin of irc.fyremoon.net
|
||||
"To understand a program you must become both the machine and the program."
|
||||
----------------------------------------------------------------------
|
||||
|
||||
-----BEGIN GEEK CODE BLOCK-----
|
||||
Version: 3.1
|
||||
GCS/CC d- s: a--- C+++ UL P L++ E-- W++ N+ o-- K- w--- O- M V-- PS+ PE- Y+
|
||||
PGP t+ 5 X R- tv- b+ DI++ D++ G e-- h! r z**
|
||||
------END GEEK CODE BLOCK------
|
||||
|
||||
|
||||
_______________________________________________
|
||||
Unreal-dev mailing list
|
||||
Unreal-dev@lists.sourceforge.net
|
||||
http://lists.sourceforge.net/mailman/listinfo/unreal-dev
|
||||
@@ -0,0 +1,98 @@
|
||||
# Makefile for regex.
|
||||
#
|
||||
# Copyright (C) 1992, 1993 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
version = 0.12
|
||||
|
||||
# You can define CPPFLAGS on the command line. Aside from system-specific
|
||||
# flags, you can define:
|
||||
# -DREGEX_MALLOC to use malloc/realloc/free instead of alloca.
|
||||
# -DDEBUG to enable the compiled pattern disassembler and execution
|
||||
# tracing; code runs substantially slower.
|
||||
# -DEXTRACT_MACROS to use the macros EXTRACT_* (as opposed to
|
||||
# the corresponding C procedures). If not -DDEBUG, the macros
|
||||
# are used.
|
||||
CPPFLAGS =
|
||||
|
||||
# Likewise, you can override CFLAGS to optimize, use -Wall, etc.
|
||||
CFLAGS = -g
|
||||
|
||||
# Ditto for LDFLAGS and LOADLIBES.
|
||||
LDFLAGS =
|
||||
LOADLIBES =
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
CC = @CC@
|
||||
DEFS = @DEFS@
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
subdirs = moo
|
||||
|
||||
default all:: regex.o
|
||||
.PHONY: default all
|
||||
|
||||
regex.o: regex.c regex.h
|
||||
$(CC) $(CFLAGS) $(CPPFLAGS) $(DEFS) -I. -I$(srcdir) -c $<
|
||||
|
||||
clean mostlyclean::
|
||||
rm -f *.o
|
||||
|
||||
distclean:: clean
|
||||
rm -f Makefile config.status
|
||||
|
||||
extraclean:: distclean
|
||||
rm -f patch* *~* *\#* *.orig *.rej *.bak core a.out
|
||||
|
||||
configure: configure.in
|
||||
autoconf
|
||||
|
||||
config.status: configure
|
||||
sh configure --no-create
|
||||
|
||||
Makefile: Makefile.in config.status
|
||||
sh config.status
|
||||
|
||||
makeargs = $(MFLAGS) CPPFLAGS='$(CPPFLAGS)' CFLAGS='$(CFLAGS)' CC='$(CC)' \
|
||||
DEFS='$(DEFS)' LDFLAGS='$(LDFLAGS)' LOADLIBES='$(LOADLIBES)'
|
||||
|
||||
default all install \
|
||||
mostlyclean clean distclean extraclean realclean \
|
||||
TAGS check::
|
||||
for d in $(subdirs); do (cd $$d; $(MAKE) $(makeargs) $@); done
|
||||
.PHONY: install mostlyclean clean distclean extraclean realclean TAGS check
|
||||
|
||||
# Prevent GNU make 3 from overflowing arg limit on system V.
|
||||
.NOEXPORT:
|
||||
|
||||
distfiles = AUTHORS ChangeLog COPYING INSTALL NEWS README \
|
||||
*.in configure regex.c regex.h
|
||||
distdir = regex-$(version)
|
||||
distargs = version=$(version) distdir=../$(distdir)/$$d
|
||||
dist: TAGS configure
|
||||
@echo "Version numbers in: Makefile.in, ChangeLog, NEWS,"
|
||||
@echo " regex.c, regex.h,"
|
||||
@echo " and doc/xregex.texi (if modified)."
|
||||
rm -rf $(distdir)
|
||||
mkdir $(distdir)
|
||||
ln $(distfiles) $(distdir)
|
||||
for d in $(subdirs); do (cd $$d; $(MAKE) $(distargs) dist); done
|
||||
tar czhf $(distdir).tar.Z $(distdir)
|
||||
rm -rf $(distdir)
|
||||
.PHONY: dist
|
||||
@@ -0,0 +1,60 @@
|
||||
This directory contains the GNU regex library. It is compliant with
|
||||
POSIX.2, except for internationalization features.
|
||||
|
||||
See the file NEWS for a list of major changes in the current release.
|
||||
|
||||
See the file INSTALL for compilation instructions. (The only thing
|
||||
installed is the documentation; regex.c is compiled into regex.o, but
|
||||
not installed anywhere.)
|
||||
|
||||
The subdirectory `doc' contains a (programmers') manual for the library.
|
||||
It's probably out-of-date. Improvements are welcome.
|
||||
|
||||
The subdirectory `test' contains the various tests we've written.
|
||||
|
||||
We know this code is not as fast as it might be. If you have specific
|
||||
suggestions, profiling results, or other such useful information to
|
||||
report, please do.
|
||||
|
||||
Emacs 18 is not going use this revised regex (but Emacs 19 will). If
|
||||
you want to try it with Emacs 18, apply the patch at the end of this
|
||||
file first.
|
||||
|
||||
Mail bug reports to bug-gnu-utils@prep.ai.mit.edu.
|
||||
|
||||
Please include an actual regular expression that fails (and the syntax
|
||||
used to compile it); without that, there's no way to reproduce the bug,
|
||||
so there's no way we can fix it. Even if you include a patch, also
|
||||
include the regular expression in error; otherwise, we can't know for
|
||||
sure what you're trying to fix.
|
||||
|
||||
Here is the patch to make this version of regex work with Emacs 18.
|
||||
|
||||
*** ORIG/search.c Tue Jan 8 13:04:55 1991
|
||||
--- search.c Sun Jan 5 10:57:00 1992
|
||||
***************
|
||||
*** 25,26 ****
|
||||
--- 25,28 ----
|
||||
#include "commands.h"
|
||||
+
|
||||
+ #include <sys/types.h>
|
||||
#include "regex.h"
|
||||
***************
|
||||
*** 477,479 ****
|
||||
/* really needed. */
|
||||
! && *(searchbuf.buffer) == (char) exactn /* first item is "exact match" */
|
||||
&& searchbuf.buffer[1] + 2 == searchbuf.used) /*first is ONLY item */
|
||||
--- 479,482 ----
|
||||
/* really needed. */
|
||||
! /* first item is "exact match" */
|
||||
! && *(searchbuf.buffer) == (char) RE_EXACTN_VALUE
|
||||
&& searchbuf.buffer[1] + 2 == searchbuf.used) /*first is ONLY item */
|
||||
***************
|
||||
*** 1273,1275 ****
|
||||
searchbuf.allocated = 100;
|
||||
! searchbuf.buffer = (char *) malloc (searchbuf.allocated);
|
||||
searchbuf.fastmap = search_fastmap;
|
||||
--- 1276,1278 ----
|
||||
searchbuf.allocated = 100;
|
||||
! searchbuf.buffer = (unsigned char *) malloc (searchbuf.allocated);
|
||||
searchbuf.fastmap = search_fastmap;
|
||||
+462
@@ -0,0 +1,462 @@
|
||||
#!/bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated automatically using autoconf.
|
||||
# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
# Usage: configure [--srcdir=DIR] [--host=HOST] [--gas] [--nfp] [--no-create]
|
||||
# [--prefix=PREFIX] [--exec-prefix=PREFIX] [--with-PACKAGE] [TARGET]
|
||||
# Ignores all args except --srcdir, --prefix, --exec-prefix, --no-create, and
|
||||
# --with-PACKAGE unless this script has special code to handle it.
|
||||
|
||||
|
||||
for arg
|
||||
do
|
||||
# Handle --exec-prefix with a space before the argument.
|
||||
if test x$next_exec_prefix = xyes; then exec_prefix=$arg; next_exec_prefix=
|
||||
# Handle --host with a space before the argument.
|
||||
elif test x$next_host = xyes; then next_host=
|
||||
# Handle --prefix with a space before the argument.
|
||||
elif test x$next_prefix = xyes; then prefix=$arg; next_prefix=
|
||||
# Handle --srcdir with a space before the argument.
|
||||
elif test x$next_srcdir = xyes; then srcdir=$arg; next_srcdir=
|
||||
else
|
||||
case $arg in
|
||||
# For backward compatibility, also recognize exact --exec_prefix.
|
||||
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* | --exe=* | --ex=* | --e=*)
|
||||
exec_prefix=`echo $arg | sed 's/[-a-z_]*=//'` ;;
|
||||
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- | --exec | --exe | --ex | --e)
|
||||
next_exec_prefix=yes ;;
|
||||
|
||||
-gas | --gas | --ga | --g) ;;
|
||||
|
||||
-host=* | --host=* | --hos=* | --ho=* | --h=*) ;;
|
||||
-host | --host | --hos | --ho | --h)
|
||||
next_host=yes ;;
|
||||
|
||||
-nfp | --nfp | --nf) ;;
|
||||
|
||||
-no-create | --no-create | --no-creat | --no-crea | --no-cre | --no-cr | --no-c | --no- | --no)
|
||||
no_create=1 ;;
|
||||
|
||||
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
|
||||
prefix=`echo $arg | sed 's/[-a-z_]*=//'` ;;
|
||||
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
|
||||
next_prefix=yes ;;
|
||||
|
||||
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=* | --s=*)
|
||||
srcdir=`echo $arg | sed 's/[-a-z_]*=//'` ;;
|
||||
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr | --s)
|
||||
next_srcdir=yes ;;
|
||||
|
||||
-with-* | --with-*)
|
||||
package=`echo $arg|sed 's/-*with-//'`
|
||||
# Delete all the valid chars; see if any are left.
|
||||
if test -n "`echo $package|sed 's/[-a-zA-Z0-9_]*//g'`"; then
|
||||
echo "configure: $package: invalid package name" >&2; exit 1
|
||||
fi
|
||||
eval "with_`echo $package|sed s/-/_/g`=1" ;;
|
||||
|
||||
*) ;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
|
||||
trap 'rm -f conftest* core; exit 1' 1 3 15
|
||||
|
||||
rm -f conftest*
|
||||
compile='${CC-cc} $CFLAGS $DEFS conftest.c -o conftest $LIBS >/dev/null 2>&1'
|
||||
|
||||
# A filename unique to this package, relative to the directory that
|
||||
# configure is in, which we can look for to find out if srcdir is correct.
|
||||
unique_file=regex.c
|
||||
|
||||
# Find the source files, if location was not specified.
|
||||
if test -z "$srcdir"; then
|
||||
srcdirdefaulted=yes
|
||||
# Try the directory containing this script, then `..'.
|
||||
prog=$0
|
||||
confdir=`echo $prog|sed 's%/[^/][^/]*$%%'`
|
||||
test "X$confdir" = "X$prog" && confdir=.
|
||||
srcdir=$confdir
|
||||
if test ! -r $srcdir/$unique_file; then
|
||||
srcdir=..
|
||||
fi
|
||||
fi
|
||||
if test ! -r $srcdir/$unique_file; then
|
||||
if test x$srcdirdefaulted = xyes; then
|
||||
echo "configure: Can not find sources in \`${confdir}' or \`..'." 1>&2
|
||||
else
|
||||
echo "configure: Can not find sources in \`${srcdir}'." 1>&2
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
# Preserve a srcdir of `.' to avoid automounter screwups with pwd.
|
||||
# But we can't avoid them for `..', to make subdirectories work.
|
||||
case $srcdir in
|
||||
.|/*|~*) ;;
|
||||
*) srcdir=`cd $srcdir; pwd` ;; # Make relative path absolute.
|
||||
esac
|
||||
|
||||
|
||||
if test -z "$CC"; then
|
||||
echo checking for gcc
|
||||
saveifs="$IFS"; IFS="${IFS}:"
|
||||
for dir in $PATH; do
|
||||
test -z "$dir" && dir=.
|
||||
if test -f $dir/gcc; then
|
||||
CC="gcc"
|
||||
break
|
||||
fi
|
||||
done
|
||||
IFS="$saveifs"
|
||||
fi
|
||||
test -z "$CC" && CC="cc"
|
||||
|
||||
# Find out if we are using GNU C, under whatever name.
|
||||
cat > conftest.c <<EOF
|
||||
#ifdef __GNUC__
|
||||
yes
|
||||
#endif
|
||||
EOF
|
||||
${CC-cc} -E conftest.c > conftest.out 2>&1
|
||||
if egrep yes conftest.out >/dev/null 2>&1; then
|
||||
GCC=1 # For later tests.
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
# Make sure to not get the incompatible SysV /etc/install and
|
||||
# /usr/sbin/install, which might be in PATH before a BSD-like install,
|
||||
# or the SunOS /usr/etc/install directory, or the AIX /bin/install,
|
||||
# or the AFS install, which mishandles nonexistent args. (Sigh.)
|
||||
if test -z "$INSTALL"; then
|
||||
echo checking for install
|
||||
saveifs="$IFS"; IFS="${IFS}:"
|
||||
for dir in $PATH; do
|
||||
test -z "$dir" && dir=.
|
||||
case $dir in
|
||||
/etc|/usr/sbin|/usr/etc|/usr/afsws/bin) ;;
|
||||
*)
|
||||
if test -f $dir/install; then
|
||||
if grep dspmsg $dir/install >/dev/null 2>&1; then
|
||||
: # AIX
|
||||
else
|
||||
INSTALL="$dir/install -c"
|
||||
INSTALL_PROGRAM='$(INSTALL)'
|
||||
INSTALL_DATA='$(INSTALL) -m 644'
|
||||
break
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
IFS="$saveifs"
|
||||
fi
|
||||
INSTALL=${INSTALL-cp}
|
||||
INSTALL_PROGRAM=${INSTALL_PROGRAM-'$(INSTALL)'}
|
||||
INSTALL_DATA=${INSTALL_DATA-'$(INSTALL)'}
|
||||
|
||||
|
||||
echo checking for AIX
|
||||
echo checking how to run the C preprocessor
|
||||
if test -z "$CPP"; then
|
||||
CPP='${CC-cc} -E'
|
||||
cat > conftest.c <<EOF
|
||||
#include <stdio.h>
|
||||
EOF
|
||||
err=`eval "$CPP $DEFS conftest.c 2>&1 >/dev/null"`
|
||||
if test -z "$err"; then
|
||||
:
|
||||
else
|
||||
CPP=/lib/cpp
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
|
||||
cat > conftest.c <<EOF
|
||||
#ifdef _AIX
|
||||
yes
|
||||
#endif
|
||||
|
||||
EOF
|
||||
eval "$CPP $DEFS conftest.c > conftest.out 2>&1"
|
||||
if egrep "yes" conftest.out >/dev/null 2>&1; then
|
||||
DEFS="$DEFS -D_ALL_SOURCE=1"
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
|
||||
echo checking for DYNIX/ptx libseq
|
||||
cat > conftest.c <<EOF
|
||||
#if defined(_SEQUENT_)
|
||||
yes
|
||||
#endif
|
||||
|
||||
EOF
|
||||
eval "$CPP $DEFS conftest.c > conftest.out 2>&1"
|
||||
if egrep "yes" conftest.out >/dev/null 2>&1; then
|
||||
SEQUENT=1
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
test -n "$SEQUENT" && test -f /usr/lib/libseq.a &&
|
||||
LIBS="$LIBS -lseq"
|
||||
|
||||
echo checking for POSIXized ISC
|
||||
if test -d /etc/conf/kconfig.d &&
|
||||
grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
|
||||
then
|
||||
ISC=1 # If later tests want to check for ISC.
|
||||
DEFS="$DEFS -D_POSIX_SOURCE=1"
|
||||
if test -n "$GCC"; then
|
||||
CC="$CC -posix"
|
||||
else
|
||||
CC="$CC -Xp"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo checking for minix/config.h
|
||||
cat > conftest.c <<EOF
|
||||
#include <minix/config.h>
|
||||
EOF
|
||||
err=`eval "$CPP $DEFS conftest.c 2>&1 >/dev/null"`
|
||||
if test -z "$err"; then
|
||||
MINIX=1
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
# The Minix shell can't assign to the same variable on the same line!
|
||||
if test -n "$MINIX"; then
|
||||
DEFS="$DEFS -D_POSIX_SOURCE=1"
|
||||
DEFS="$DEFS -D_POSIX_1_SOURCE=2"
|
||||
DEFS="$DEFS -D_MINIX=1"
|
||||
fi
|
||||
|
||||
|
||||
echo checking for ANSI C header files
|
||||
cat > conftest.c <<EOF
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <float.h>
|
||||
EOF
|
||||
err=`eval "$CPP $DEFS conftest.c 2>&1 >/dev/null"`
|
||||
if test -z "$err"; then
|
||||
# SunOS string.h does not declare mem*, contrary to ANSI.
|
||||
echo '#include <string.h>' > conftest.c
|
||||
eval "$CPP $DEFS conftest.c > conftest.out 2>&1"
|
||||
if egrep "memchr" conftest.out >/dev/null 2>&1; then
|
||||
# SGI's /bin/cc from Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
|
||||
cat > conftest.c <<EOF
|
||||
#include <ctype.h>
|
||||
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
|
||||
#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
|
||||
#define XOR(e,f) (((e) && !(f)) || (!(e) && (f)))
|
||||
int main () { int i; for (i = 0; i < 256; i++)
|
||||
if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
|
||||
exit (0); }
|
||||
|
||||
EOF
|
||||
eval $compile
|
||||
if test -s conftest && (./conftest; exit) 2>/dev/null; then
|
||||
DEFS="$DEFS -DSTDC_HEADERS=1"
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
for hdr in string.h
|
||||
do
|
||||
trhdr=HAVE_`echo $hdr | tr '[a-z]./' '[A-Z]__'`
|
||||
echo checking for ${hdr}
|
||||
cat > conftest.c <<EOF
|
||||
#include <${hdr}>
|
||||
EOF
|
||||
err=`eval "$CPP $DEFS conftest.c 2>&1 >/dev/null"`
|
||||
if test -z "$err"; then
|
||||
DEFS="$DEFS -D${trhdr}=1"
|
||||
fi
|
||||
rm -f conftest*
|
||||
done
|
||||
|
||||
|
||||
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
|
||||
# for constant arguments. Useless!
|
||||
echo checking for working alloca.h
|
||||
cat > conftest.c <<EOF
|
||||
#include <alloca.h>
|
||||
main() { exit(0); }
|
||||
t() { char *p = alloca(2 * sizeof(int)); }
|
||||
EOF
|
||||
if eval $compile; then
|
||||
DEFS="$DEFS -DHAVE_ALLOCA_H=1"
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
decl="#ifdef __GNUC__
|
||||
#define alloca __builtin_alloca
|
||||
#else
|
||||
#if HAVE_ALLOCA_H
|
||||
#include <alloca.h>
|
||||
#else
|
||||
#ifdef _AIX
|
||||
#pragma alloca
|
||||
#else
|
||||
char *alloca ();
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
"
|
||||
echo checking for alloca
|
||||
cat > conftest.c <<EOF
|
||||
$decl
|
||||
main() { exit(0); }
|
||||
t() { char *p = (char *) alloca(1); }
|
||||
EOF
|
||||
if eval $compile; then
|
||||
:
|
||||
else
|
||||
alloca_missing=1
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
if test -n "$alloca_missing"; then
|
||||
# The SVR3 libPW and SVR4 libucb both contain incompatible functions
|
||||
# that cause trouble. Some versions do not even contain alloca or
|
||||
# contain a buggy version. If you still want to use their alloca,
|
||||
# use ar to extract alloca.o from them instead of compiling alloca.c.
|
||||
ALLOCA=alloca.o
|
||||
fi
|
||||
|
||||
prog='/* Ultrix mips cc rejects this. */
|
||||
typedef int charset[2]; const charset x;
|
||||
/* SunOS 4.1.1 cc rejects this. */
|
||||
char const *const *p;
|
||||
char **p2;
|
||||
/* HPUX 7.0 cc rejects these. */
|
||||
++p;
|
||||
p2 = (char const* const*) p;'
|
||||
echo checking for working const
|
||||
cat > conftest.c <<EOF
|
||||
|
||||
main() { exit(0); }
|
||||
t() { $prog }
|
||||
EOF
|
||||
if eval $compile; then
|
||||
:
|
||||
else
|
||||
DEFS="$DEFS -Dconst="
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
|
||||
if test -z "$prefix"
|
||||
then
|
||||
echo checking for gcc to derive installation directory prefix
|
||||
saveifs="$IFS"; IFS="$IFS:"
|
||||
for dir in $PATH; do
|
||||
test -z "$dir" && dir=.
|
||||
if test $dir != . && test -f $dir/gcc; then
|
||||
# Not all systems have dirname.
|
||||
prefix=`echo $dir|sed 's%/[^/][^/]*$%%'`
|
||||
break
|
||||
fi
|
||||
done
|
||||
IFS="$saveifs"
|
||||
fi
|
||||
|
||||
|
||||
if test -n "$prefix"; then
|
||||
test -z "$exec_prefix" && exec_prefix='${prefix}'
|
||||
prsub="s%^prefix\\([ ]*\\)=\\([ ]*\\).*$%prefix\\1=\\2$prefix%"
|
||||
fi
|
||||
if test -n "$exec_prefix"; then
|
||||
prsub="$prsub
|
||||
s%^exec_prefix\\([ ]*\\)=\\([ ]*\\).*$%\
|
||||
exec_prefix\\1=\\2$exec_prefix%"
|
||||
fi
|
||||
|
||||
trap 'rm -f config.status; exit 1' 1 3 15
|
||||
echo creating config.status
|
||||
rm -f config.status
|
||||
cat > config.status <<EOF
|
||||
#!/bin/sh
|
||||
# Generated automatically by configure.
|
||||
# Run this file to recreate the current configuration.
|
||||
# This directory was configured as follows,
|
||||
# on host `(hostname || uname -n) 2>/dev/null`:
|
||||
#
|
||||
# $0 $*
|
||||
|
||||
for arg
|
||||
do
|
||||
case "\$arg" in
|
||||
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
|
||||
exec /bin/sh $0 $* ;;
|
||||
*) echo "Usage: config.status --recheck" 2>&1; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
trap 'rm -f Makefile; exit 1' 1 3 15
|
||||
CC='$CC'
|
||||
INSTALL='$INSTALL'
|
||||
INSTALL_PROGRAM='$INSTALL_PROGRAM'
|
||||
INSTALL_DATA='$INSTALL_DATA'
|
||||
CPP='$CPP'
|
||||
ALLOCA='$ALLOCA'
|
||||
LIBS='$LIBS'
|
||||
srcdir='$srcdir'
|
||||
DEFS='$DEFS'
|
||||
prefix='$prefix'
|
||||
exec_prefix='$exec_prefix'
|
||||
prsub='$prsub'
|
||||
EOF
|
||||
cat >> config.status <<\EOF
|
||||
|
||||
top_srcdir=$srcdir
|
||||
for file in .. Makefile; do if [ "x$file" != "x.." ]; then
|
||||
srcdir=$top_srcdir
|
||||
# Remove last slash and all that follows it. Not all systems have dirname.
|
||||
dir=`echo $file|sed 's%/[^/][^/]*$%%'`
|
||||
if test "$dir" != "$file"; then
|
||||
test "$top_srcdir" != . && srcdir=$top_srcdir/$dir
|
||||
test ! -d $dir && mkdir $dir
|
||||
fi
|
||||
echo creating $file
|
||||
rm -f $file
|
||||
echo "# Generated automatically from `echo $file|sed 's|.*/||'`.in by configure." > $file
|
||||
sed -e "
|
||||
$prsub
|
||||
s%@CC@%$CC%g
|
||||
s%@INSTALL@%$INSTALL%g
|
||||
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
|
||||
s%@INSTALL_DATA@%$INSTALL_DATA%g
|
||||
s%@CPP@%$CPP%g
|
||||
s%@ALLOCA@%$ALLOCA%g
|
||||
s%@LIBS@%$LIBS%g
|
||||
s%@srcdir@%$srcdir%g
|
||||
s%@DEFS@%$DEFS%
|
||||
" $top_srcdir/${file}.in >> $file
|
||||
fi; done
|
||||
|
||||
exit 0
|
||||
EOF
|
||||
chmod +x config.status
|
||||
test -n "$no_create" || ./config.status
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(regex.c)
|
||||
|
||||
AC_PROG_CC
|
||||
AC_PROG_INSTALL
|
||||
|
||||
dnl I'm not sure if AC_AIX and AC_DYNIX_SEQ are really necessary. The
|
||||
dnl Autoconf documentation isn't specific about which BSD functions they
|
||||
dnl provide.
|
||||
AC_AIX
|
||||
AC_DYNIX_SEQ
|
||||
AC_ISC_POSIX
|
||||
AC_MINIX
|
||||
|
||||
AC_STDC_HEADERS
|
||||
AC_HAVE_HEADERS(string.h)
|
||||
|
||||
AC_ALLOCA
|
||||
AC_CONST
|
||||
|
||||
AC_PREFIX(gcc)
|
||||
|
||||
AC_OUTPUT(Makefile doc/Makefile test/Makefile)
|
||||
@@ -0,0 +1,4 @@
|
||||
clean:
|
||||
default:
|
||||
all:
|
||||
echo "."
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,490 @@
|
||||
/* Definitions for data structures and routines for the regular
|
||||
expression library, version 0.12.
|
||||
|
||||
Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
#ifndef __REGEXP_LIBRARY_H__
|
||||
#define __REGEXP_LIBRARY_H__
|
||||
|
||||
/* POSIX says that <sys/types.h> must be included (by the caller) before
|
||||
<regex.h>. */
|
||||
|
||||
#ifdef VMS
|
||||
/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
|
||||
should be there. */
|
||||
#include <stddef.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* The following bits are used to determine the regexp syntax we
|
||||
recognize. The set/not-set meanings are chosen so that Emacs syntax
|
||||
remains the value 0. The bits are given in alphabetical order, and
|
||||
the definitions shifted by one from the previous bit; thus, when we
|
||||
add or remove a bit, only one other definition need change. */
|
||||
typedef unsigned reg_syntax_t;
|
||||
|
||||
/* If this bit is not set, then \ inside a bracket expression is literal.
|
||||
If set, then such a \ quotes the following character. */
|
||||
#define RE_BACKSLASH_ESCAPE_IN_LISTS (1)
|
||||
|
||||
/* If this bit is not set, then + and ? are operators, and \+ and \? are
|
||||
literals.
|
||||
If set, then \+ and \? are operators and + and ? are literals. */
|
||||
#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
|
||||
|
||||
/* If this bit is set, then character classes are supported. They are:
|
||||
[:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
|
||||
[:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
|
||||
If not set, then character classes are not supported. */
|
||||
#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
|
||||
|
||||
/* If this bit is set, then ^ and $ are always anchors (outside bracket
|
||||
expressions, of course).
|
||||
If this bit is not set, then it depends:
|
||||
^ is an anchor if it is at the beginning of a regular
|
||||
expression or after an open-group or an alternation operator;
|
||||
$ is an anchor if it is at the end of a regular expression, or
|
||||
before a close-group or an alternation operator.
|
||||
|
||||
This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
|
||||
POSIX draft 11.2 says that * etc. in leading positions is undefined.
|
||||
We already implemented a previous draft which made those constructs
|
||||
invalid, though, so we haven't changed the code back. */
|
||||
#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
|
||||
|
||||
/* If this bit is set, then special characters are always special
|
||||
regardless of where they are in the pattern.
|
||||
If this bit is not set, then special characters are special only in
|
||||
some contexts; otherwise they are ordinary. Specifically,
|
||||
* + ? and intervals are only special when not after the beginning,
|
||||
open-group, or alternation operator. */
|
||||
#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
|
||||
|
||||
/* If this bit is set, then *, +, ?, and { cannot be first in an re or
|
||||
immediately after an alternation or begin-group operator. */
|
||||
#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
|
||||
|
||||
/* If this bit is set, then . matches newline.
|
||||
If not set, then it doesn't. */
|
||||
#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
|
||||
|
||||
/* If this bit is set, then . doesn't match NUL.
|
||||
If not set, then it does. */
|
||||
#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
|
||||
|
||||
/* If this bit is set, nonmatching lists [^...] do not match newline.
|
||||
If not set, they do. */
|
||||
#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
|
||||
|
||||
/* If this bit is set, either \{...\} or {...} defines an
|
||||
interval, depending on RE_NO_BK_BRACES.
|
||||
If not set, \{, \}, {, and } are literals. */
|
||||
#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
|
||||
|
||||
/* If this bit is set, +, ? and | aren't recognized as operators.
|
||||
If not set, they are. */
|
||||
#define RE_LIMITED_OPS (RE_INTERVALS << 1)
|
||||
|
||||
/* If this bit is set, newline is an alternation operator.
|
||||
If not set, newline is literal. */
|
||||
#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
|
||||
|
||||
/* If this bit is set, then `{...}' defines an interval, and \{ and \}
|
||||
are literals.
|
||||
If not set, then `\{...\}' defines an interval. */
|
||||
#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
|
||||
|
||||
/* If this bit is set, (...) defines a group, and \( and \) are literals.
|
||||
If not set, \(...\) defines a group, and ( and ) are literals. */
|
||||
#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
|
||||
|
||||
/* If this bit is set, then \<digit> matches <digit>.
|
||||
If not set, then \<digit> is a back-reference. */
|
||||
#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
|
||||
|
||||
/* If this bit is set, then | is an alternation operator, and \| is literal.
|
||||
If not set, then \| is an alternation operator, and | is literal. */
|
||||
#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
|
||||
|
||||
/* If this bit is set, then an ending range point collating higher
|
||||
than the starting range point, as in [z-a], is invalid.
|
||||
If not set, then when ending range point collates higher than the
|
||||
starting range point, the range is ignored. */
|
||||
#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
|
||||
|
||||
/* If this bit is set, then an unmatched ) is ordinary.
|
||||
If not set, then an unmatched ) is invalid. */
|
||||
#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
|
||||
|
||||
/* This global variable defines the particular regexp syntax to use (for
|
||||
some interfaces). When a regexp is compiled, the syntax used is
|
||||
stored in the pattern buffer, so changing this does not affect
|
||||
already-compiled regexps. */
|
||||
extern reg_syntax_t re_syntax_options;
|
||||
|
||||
/* Define combinations of the above bits for the standard possibilities.
|
||||
(The [[[ comments delimit what gets put into the Texinfo file, so
|
||||
don't delete them!) */
|
||||
/* [[[begin syntaxes]]] */
|
||||
#define RE_SYNTAX_EMACS 0
|
||||
|
||||
#define RE_SYNTAX_AWK \
|
||||
(RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \
|
||||
| RE_NO_BK_PARENS | RE_NO_BK_REFS \
|
||||
| RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \
|
||||
| RE_UNMATCHED_RIGHT_PAREN_ORD)
|
||||
|
||||
#define RE_SYNTAX_POSIX_AWK \
|
||||
(RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS)
|
||||
|
||||
#define RE_SYNTAX_GREP \
|
||||
(RE_BK_PLUS_QM | RE_CHAR_CLASSES \
|
||||
| RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \
|
||||
| RE_NEWLINE_ALT)
|
||||
|
||||
#define RE_SYNTAX_EGREP \
|
||||
(RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \
|
||||
| RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \
|
||||
| RE_NEWLINE_ALT | RE_NO_BK_PARENS \
|
||||
| RE_NO_BK_VBAR)
|
||||
|
||||
#define RE_SYNTAX_POSIX_EGREP \
|
||||
(RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES)
|
||||
|
||||
/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */
|
||||
#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
|
||||
|
||||
#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
|
||||
|
||||
/* Syntax bits common to both basic and extended POSIX regex syntax. */
|
||||
#define _RE_SYNTAX_POSIX_COMMON \
|
||||
(RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \
|
||||
| RE_INTERVALS | RE_NO_EMPTY_RANGES)
|
||||
|
||||
#define RE_SYNTAX_POSIX_BASIC \
|
||||
(_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
|
||||
|
||||
/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
|
||||
RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this
|
||||
isn't minimal, since other operators, such as \`, aren't disabled. */
|
||||
#define RE_SYNTAX_POSIX_MINIMAL_BASIC \
|
||||
(_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
|
||||
|
||||
#define RE_SYNTAX_POSIX_EXTENDED \
|
||||
(_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
|
||||
| RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
|
||||
| RE_NO_BK_PARENS | RE_NO_BK_VBAR \
|
||||
| RE_UNMATCHED_RIGHT_PAREN_ORD)
|
||||
|
||||
/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
|
||||
replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */
|
||||
#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \
|
||||
(_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
|
||||
| RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \
|
||||
| RE_NO_BK_PARENS | RE_NO_BK_REFS \
|
||||
| RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
|
||||
/* [[[end syntaxes]]] */
|
||||
|
||||
/* Maximum number of duplicates an interval can allow. Some systems
|
||||
(erroneously) define this in other header files, but we want our
|
||||
value, so remove any previous define. */
|
||||
#ifdef RE_DUP_MAX
|
||||
#undef RE_DUP_MAX
|
||||
#endif
|
||||
#define RE_DUP_MAX ((1 << 15) - 1)
|
||||
|
||||
|
||||
/* POSIX `cflags' bits (i.e., information for `regcomp'). */
|
||||
|
||||
/* If this bit is set, then use extended regular expression syntax.
|
||||
If not set, then use basic regular expression syntax. */
|
||||
#define REG_EXTENDED 1
|
||||
|
||||
/* If this bit is set, then ignore case when matching.
|
||||
If not set, then case is significant. */
|
||||
#define REG_ICASE (REG_EXTENDED << 1)
|
||||
|
||||
/* If this bit is set, then anchors do not match at newline
|
||||
characters in the string.
|
||||
If not set, then anchors do match at newlines. */
|
||||
#define REG_NEWLINE (REG_ICASE << 1)
|
||||
|
||||
/* If this bit is set, then report only success or fail in regexec.
|
||||
If not set, then returns differ between not matching and errors. */
|
||||
#define REG_NOSUB (REG_NEWLINE << 1)
|
||||
|
||||
|
||||
/* POSIX `eflags' bits (i.e., information for regexec). */
|
||||
|
||||
/* If this bit is set, then the beginning-of-line operator doesn't match
|
||||
the beginning of the string (presumably because it's not the
|
||||
beginning of a line).
|
||||
If not set, then the beginning-of-line operator does match the
|
||||
beginning of the string. */
|
||||
#define REG_NOTBOL 1
|
||||
|
||||
/* Like REG_NOTBOL, except for the end-of-line. */
|
||||
#define REG_NOTEOL (1 << 1)
|
||||
|
||||
|
||||
/* If any error codes are removed, changed, or added, update the
|
||||
`re_error_msg' table in regex.c. */
|
||||
typedef enum
|
||||
{
|
||||
REG_NOERROR = 0, /* Success. */
|
||||
REG_NOMATCH, /* Didn't find a match (for regexec). */
|
||||
|
||||
/* POSIX regcomp return error codes. (In the order listed in the
|
||||
standard.) */
|
||||
REG_BADPAT, /* Invalid pattern. */
|
||||
REG_ECOLLATE, /* Not implemented. */
|
||||
REG_ECTYPE, /* Invalid character class name. */
|
||||
REG_EESCAPE, /* Trailing backslash. */
|
||||
REG_ESUBREG, /* Invalid back reference. */
|
||||
REG_EBRACK, /* Unmatched left bracket. */
|
||||
REG_EPAREN, /* Parenthesis imbalance. */
|
||||
REG_EBRACE, /* Unmatched \{. */
|
||||
REG_BADBR, /* Invalid contents of \{\}. */
|
||||
REG_ERANGE, /* Invalid range end. */
|
||||
REG_ESPACE, /* Ran out of memory. */
|
||||
REG_BADRPT, /* No preceding re for repetition op. */
|
||||
|
||||
/* Error codes we've added. */
|
||||
REG_EEND, /* Premature end. */
|
||||
REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */
|
||||
REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */
|
||||
} reg_errcode_t;
|
||||
|
||||
/* This data structure represents a compiled pattern. Before calling
|
||||
the pattern compiler, the fields `buffer', `allocated', `fastmap',
|
||||
`translate', and `no_sub' can be set. After the pattern has been
|
||||
compiled, the `re_nsub' field is available. All other fields are
|
||||
private to the regex routines. */
|
||||
|
||||
struct re_pattern_buffer
|
||||
{
|
||||
/* [[[begin pattern_buffer]]] */
|
||||
/* Space that holds the compiled pattern. It is declared as
|
||||
`unsigned char *' because its elements are
|
||||
sometimes used as array indexes. */
|
||||
unsigned char *buffer;
|
||||
|
||||
/* Number of bytes to which `buffer' points. */
|
||||
unsigned long allocated;
|
||||
|
||||
/* Number of bytes actually used in `buffer'. */
|
||||
unsigned long used;
|
||||
|
||||
/* Syntax setting with which the pattern was compiled. */
|
||||
reg_syntax_t syntax;
|
||||
|
||||
/* Pointer to a fastmap, if any, otherwise zero. re_search uses
|
||||
the fastmap, if there is one, to skip over impossible
|
||||
starting points for matches. */
|
||||
char *fastmap;
|
||||
|
||||
/* Either a translate table to apply to all characters before
|
||||
comparing them, or zero for no translation. The translation
|
||||
is applied to a pattern when it is compiled and to a string
|
||||
when it is matched. */
|
||||
char *translate;
|
||||
|
||||
/* Number of subexpressions found by the compiler. */
|
||||
size_t re_nsub;
|
||||
|
||||
/* Zero if this pattern cannot match the empty string, one else.
|
||||
Well, in truth it's used only in `re_search_2', to see
|
||||
whether or not we should use the fastmap, so we don't set
|
||||
this absolutely perfectly; see `re_compile_fastmap' (the
|
||||
`duplicate' case). */
|
||||
unsigned can_be_null : 1;
|
||||
|
||||
/* If REGS_UNALLOCATED, allocate space in the `regs' structure
|
||||
for `max (RE_NREGS, re_nsub + 1)' groups.
|
||||
If REGS_REALLOCATE, reallocate space if necessary.
|
||||
If REGS_FIXED, use what's there. */
|
||||
#define REGS_UNALLOCATED 0
|
||||
#define REGS_REALLOCATE 1
|
||||
#define REGS_FIXED 2
|
||||
unsigned regs_allocated : 2;
|
||||
|
||||
/* Set to zero when `regex_compile' compiles a pattern; set to one
|
||||
by `re_compile_fastmap' if it updates the fastmap. */
|
||||
unsigned fastmap_accurate : 1;
|
||||
|
||||
/* If set, `re_match_2' does not return information about
|
||||
subexpressions. */
|
||||
unsigned no_sub : 1;
|
||||
|
||||
/* If set, a beginning-of-line anchor doesn't match at the
|
||||
beginning of the string. */
|
||||
unsigned not_bol : 1;
|
||||
|
||||
/* Similarly for an end-of-line anchor. */
|
||||
unsigned not_eol : 1;
|
||||
|
||||
/* If true, an anchor at a newline matches. */
|
||||
unsigned newline_anchor : 1;
|
||||
|
||||
/* [[[end pattern_buffer]]] */
|
||||
};
|
||||
|
||||
typedef struct re_pattern_buffer regex_t;
|
||||
|
||||
|
||||
/* search.c (search_buffer) in Emacs needs this one opcode value. It is
|
||||
defined both in `regex.c' and here. */
|
||||
#define RE_EXACTN_VALUE 1
|
||||
|
||||
/* Type for byte offsets within the string. POSIX mandates this. */
|
||||
typedef int regoff_t;
|
||||
|
||||
|
||||
/* This is the structure we store register match data in. See
|
||||
regex.texinfo for a full description of what registers match. */
|
||||
struct re_registers
|
||||
{
|
||||
unsigned num_regs;
|
||||
regoff_t *start;
|
||||
regoff_t *end;
|
||||
};
|
||||
|
||||
|
||||
/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
|
||||
`re_match_2' returns information about at least this many registers
|
||||
the first time a `regs' structure is passed. */
|
||||
#ifndef RE_NREGS
|
||||
#define RE_NREGS 30
|
||||
#endif
|
||||
|
||||
|
||||
/* POSIX specification for registers. Aside from the different names than
|
||||
`re_registers', POSIX uses an array of structures, instead of a
|
||||
structure of arrays. */
|
||||
typedef struct
|
||||
{
|
||||
regoff_t rm_so; /* Byte offset from string's start to substring's start. */
|
||||
regoff_t rm_eo; /* Byte offset from string's start to substring's end. */
|
||||
} regmatch_t;
|
||||
|
||||
/* Declarations for routines. */
|
||||
|
||||
/* To avoid duplicating every routine declaration -- once with a
|
||||
prototype (if we are ANSI), and once without (if we aren't) -- we
|
||||
use the following macro to declare argument types. This
|
||||
unfortunately clutters up the declarations a bit, but I think it's
|
||||
worth it. */
|
||||
|
||||
#if __STDC__
|
||||
|
||||
#define _RE_ARGS(args) args
|
||||
|
||||
#else /* not __STDC__ */
|
||||
|
||||
#define _RE_ARGS(args) ()
|
||||
|
||||
#endif /* not __STDC__ */
|
||||
|
||||
/* Sets the current default syntax to SYNTAX, and return the old syntax.
|
||||
You can also simply assign to the `re_syntax_options' variable. */
|
||||
extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
|
||||
|
||||
/* Compile the regular expression PATTERN, with length LENGTH
|
||||
and syntax given by the global `re_syntax_options', into the buffer
|
||||
BUFFER. Return NULL if successful, and an error string if not. */
|
||||
extern const char *re_compile_pattern
|
||||
_RE_ARGS ((const char *pattern, int length,
|
||||
struct re_pattern_buffer *buffer));
|
||||
|
||||
|
||||
/* Compile a fastmap for the compiled pattern in BUFFER; used to
|
||||
accelerate searches. Return 0 if successful and -2 if was an
|
||||
internal error. */
|
||||
extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
|
||||
|
||||
|
||||
/* Search in the string STRING (with length LENGTH) for the pattern
|
||||
compiled into BUFFER. Start searching at position START, for RANGE
|
||||
characters. Return the starting position of the match, -1 for no
|
||||
match, or -2 for an internal error. Also return register
|
||||
information in REGS (if REGS and BUFFER->no_sub are nonzero). */
|
||||
extern int re_search
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
|
||||
int length, int start, int range, struct re_registers *regs));
|
||||
|
||||
|
||||
/* Like `re_search', but search in the concatenation of STRING1 and
|
||||
STRING2. Also, stop searching at index START + STOP. */
|
||||
extern int re_search_2
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
|
||||
int length1, const char *string2, int length2,
|
||||
int start, int range, struct re_registers *regs, int stop));
|
||||
|
||||
|
||||
/* Like `re_search', but return how many characters in STRING the regexp
|
||||
in BUFFER matched, starting at position START. */
|
||||
extern int re_match
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
|
||||
int length, int start, struct re_registers *regs));
|
||||
|
||||
|
||||
/* Relates to `re_match' as `re_search_2' relates to `re_search'. */
|
||||
extern int re_match_2
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
|
||||
int length1, const char *string2, int length2,
|
||||
int start, struct re_registers *regs, int stop));
|
||||
|
||||
|
||||
/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
|
||||
ENDS. Subsequent matches using BUFFER and REGS will use this memory
|
||||
for recording register information. STARTS and ENDS must be
|
||||
allocated with malloc, and must each be at least `NUM_REGS * sizeof
|
||||
(regoff_t)' bytes long.
|
||||
|
||||
If NUM_REGS == 0, then subsequent matches should allocate their own
|
||||
register data.
|
||||
|
||||
Unless this function is called, the first search or match using
|
||||
PATTERN_BUFFER will allocate its own register data, without
|
||||
freeing the old data. */
|
||||
extern void re_set_registers
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
|
||||
unsigned num_regs, regoff_t *starts, regoff_t *ends));
|
||||
|
||||
/* 4.2 bsd compatibility. */
|
||||
extern char *re_comp _RE_ARGS ((const char *));
|
||||
extern int re_exec _RE_ARGS ((const char *));
|
||||
|
||||
/* POSIX compatibility. */
|
||||
extern int regcomp _RE_ARGS ((regex_t *preg, const char *pattern, int cflags));
|
||||
extern int regexec
|
||||
_RE_ARGS ((const regex_t *preg, const char *string, size_t nmatch,
|
||||
regmatch_t pmatch[], int eflags));
|
||||
extern size_t regerror
|
||||
_RE_ARGS ((int errcode, const regex_t *preg, char *errbuf,
|
||||
size_t errbuf_size));
|
||||
extern void regfree _RE_ARGS ((regex_t *preg));
|
||||
|
||||
#endif /* not __REGEXP_LIBRARY_H__ */
|
||||
|
||||
/*
|
||||
Local variables:
|
||||
make-backup-files: t
|
||||
version-control: t
|
||||
trim-versions-without-asking: nil
|
||||
End:
|
||||
*/
|
||||
+32
-4
@@ -56,6 +56,8 @@
|
||||
|
||||
#define BMAGIC 0x4675636B596F754661736369737473
|
||||
|
||||
#define BASE_VERSION "Unreal"
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
@@ -85,6 +87,8 @@ void free();
|
||||
#endif
|
||||
|
||||
|
||||
#define TS time_t
|
||||
|
||||
extern int match PROTO((char *, char *));
|
||||
#define mycmp(a,b) \
|
||||
( (toupper((a)[0])!=toupper((b)[0])) || smycmp((a)+1,(b)+1) )
|
||||
@@ -115,7 +119,7 @@ extern int inet_netof PROTO((struct IN_ADDR));
|
||||
#endif
|
||||
|
||||
int global_count, max_global_count;
|
||||
extern char *myctime PROTO((time_t));
|
||||
extern char *myctime PROTO((TS));
|
||||
extern char *strtoken PROTO((char **, char *, char *));
|
||||
|
||||
#define PRECISE_CHECK
|
||||
@@ -225,7 +229,7 @@ extern struct SLink *find_user_link( /* struct SLink *, struct Client * */ );
|
||||
" CHANTYPES=%s" \
|
||||
" PREFIX=%s" \
|
||||
" :are supported by this server"
|
||||
|
||||
|
||||
#define PROTOCTL_PARAMETERS MAXWATCH, \
|
||||
MAXSILES, \
|
||||
MAXMODEPARAMS, \
|
||||
@@ -235,7 +239,7 @@ extern struct SLink *find_user_link( /* struct SLink *, struct Client * */ );
|
||||
TOPICLEN, \
|
||||
TOPICLEN, \
|
||||
"#", \
|
||||
"(ohv)@%+"
|
||||
"(ohv)@%+"
|
||||
|
||||
/* Server-Server PROTOCTL -Stskeeps */
|
||||
#define PROTOCTL_SERVER "NOQUIT TOKEN NICKv2 SJOIN SJOIN2 UMODE2 VL SJ3 NS" ZIPSTUFF
|
||||
@@ -257,6 +261,30 @@ extern int lu_noninv, lu_inv, lu_serv, lu_oper,
|
||||
lu_unknown, lu_channel, lu_lu, lu_lulocal, lu_lserv,
|
||||
lu_clu, lu_mlu, lu_cglobalu, lu_mglobalu;
|
||||
|
||||
time_t now;
|
||||
TS now;
|
||||
|
||||
#if defined(__STDC__)
|
||||
#define __const const
|
||||
#define __signed signed
|
||||
#define __volatile volatile
|
||||
#ifndef __GNUC__
|
||||
#define __inline
|
||||
#endif
|
||||
|
||||
#else
|
||||
#ifndef __GNUC__
|
||||
#define __const
|
||||
#define __inline
|
||||
#define __signed
|
||||
#define __volatile
|
||||
#ifndef NO_ANSI_KEYWORDS
|
||||
#define const /* delete ANSI C keywords */
|
||||
#define inline
|
||||
#define signed
|
||||
#define volatile
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* __common_include__ */
|
||||
|
||||
@@ -93,6 +93,10 @@
|
||||
*/
|
||||
#define ADMINCHAT 1
|
||||
|
||||
/*
|
||||
If you want SHUN_NOTICES, define this
|
||||
*/
|
||||
#undef SHUN_NOTICES
|
||||
|
||||
/*
|
||||
Remote rehash
|
||||
|
||||
+8
-8
@@ -34,14 +34,14 @@ extern char *getreply(int);
|
||||
#define rpl_str(x) getreply(x)
|
||||
#define err_str(x) getreply(x)
|
||||
|
||||
extern time_t nextconnect, nextdnscheck, nextping;
|
||||
extern TS nextconnect, nextdnscheck, nextping;
|
||||
extern aClient *client, me, *local[];
|
||||
extern aChannel *channel;
|
||||
extern struct stats *ircstp;
|
||||
extern int bootopt;
|
||||
extern time_t TSoffset;
|
||||
extern TS TSoffset;
|
||||
/* Prototype added to force errors -- Barubary */
|
||||
extern time_t check_pings(time_t now, int check_kills);
|
||||
extern TS check_pings(TS now, int check_kills);
|
||||
|
||||
/* Remmed out for win32 compatibility.. as stated of 467leaf win32 port.. */
|
||||
|
||||
@@ -171,9 +171,9 @@ extern int inetport PROTO((aClient *, char *, int));
|
||||
extern void init_sys PROTO(());
|
||||
|
||||
#ifdef NO_FDLIST
|
||||
extern int read_message PROTO((time_t));
|
||||
extern int read_message PROTO((TS));
|
||||
#else
|
||||
extern int read_message PROTO((time_t, fdlist *));
|
||||
extern int read_message PROTO((TS, fdlist *));
|
||||
#endif
|
||||
|
||||
extern void report_error PROTO((char *, aClient *));
|
||||
@@ -254,7 +254,7 @@ extern int check_registered_user PROTO((aClient *));
|
||||
extern char *get_client_name PROTO((aClient *, int));
|
||||
extern char *get_client_host PROTO((aClient *));
|
||||
extern char *my_name_for_link PROTO((char *, aConfItem *));
|
||||
extern char *myctime PROTO((time_t)), *date PROTO((time_t));
|
||||
extern char *myctime PROTO((TS)), *date PROTO((TS));
|
||||
extern int exit_client PROTO((aClient *, aClient *, aClient *, char *));
|
||||
extern void initstats PROTO(()), tstats PROTO((aClient *, char *));
|
||||
extern char *check_string PROTO((char *));
|
||||
@@ -308,8 +308,8 @@ extern struct hostent *gethost_byaddr PROTO((char *, Link *));
|
||||
extern struct hostent *gethost_byname PROTO((char *, Link *));
|
||||
extern void flush_cache PROTO(());
|
||||
extern int init_resolver PROTO((int));
|
||||
extern time_t timeout_query_list PROTO((time_t));
|
||||
extern time_t expire_cache PROTO((time_t));
|
||||
extern TS timeout_query_list PROTO((TS));
|
||||
extern TS expire_cache PROTO((TS));
|
||||
extern void del_queries PROTO((char *));
|
||||
|
||||
extern void clear_channel_hash_table PROTO(());
|
||||
|
||||
@@ -362,6 +362,10 @@ extern int m_chgname(), m_shun(), m_post();
|
||||
#ifdef CRYPTOIRCD
|
||||
extern int m_crypto();
|
||||
#endif
|
||||
#ifdef GUEST
|
||||
extern int m_guest();
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef MSGTAB
|
||||
struct Message *msgmap[256];
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
* $Id$
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.1.1.1.6.6 2000/08/20 11:40:42 stskeeps
|
||||
* Upgrade to Unreal3.1-Silverheart+
|
||||
*
|
||||
* Revision 1.1.1.1.6.1.2.1 2000/07/14 20:22:57 stskeeps
|
||||
* +- Indentation and more SJ3 fixes
|
||||
*
|
||||
|
||||
+30
-29
@@ -593,7 +593,7 @@ typedef struct Whowas {
|
||||
char *realname;
|
||||
char *away;
|
||||
long umodes;
|
||||
time_t logoff;
|
||||
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... */
|
||||
@@ -623,7 +623,7 @@ struct ConfItem {
|
||||
char *passwd;
|
||||
char *name;
|
||||
int port;
|
||||
time_t hold; /* Hold action until this time (calendar time) */
|
||||
TS hold; /* Hold action until this time (calendar time) */
|
||||
int tmpconf;
|
||||
#ifndef VMSP
|
||||
aClass *class; /* Class of connection */
|
||||
@@ -683,7 +683,7 @@ struct User {
|
||||
Link *invited; /* chain of invite pointer blocks */
|
||||
Link *silence; /* chain of silence pointer blocks */
|
||||
char *away; /* pointer to away message */
|
||||
time_t last;
|
||||
TS last;
|
||||
u_int32_t servicestamp; /* Services' time stamp variable */
|
||||
int refcnt; /* Number of times this block is referenced */
|
||||
int joined; /* number of channels joined */
|
||||
@@ -705,8 +705,9 @@ struct Server {
|
||||
char *up; /* uplink for this server */
|
||||
char by[NICKLEN + 1];
|
||||
aConfItem *nline; /* N-line pointer for this server */
|
||||
time_t timestamp; /* Remotely determined connect try time */
|
||||
unsigned short numeric; /* NS numeric, 0 if none */
|
||||
TS timestamp; /* Remotely determined connect try time */
|
||||
unsigned short numeric; /* NS numeric, 0 if none */
|
||||
long users;
|
||||
#ifdef LIST_DEBUG
|
||||
aClient *bcptr;
|
||||
#endif
|
||||
@@ -732,7 +733,7 @@ struct t_vhost {
|
||||
#define TKL_ZAP 0x0002
|
||||
#define TKL_GLOBAL 0x0004
|
||||
#define TKL_SHUN 0x0008
|
||||
|
||||
#define TKL_QUIET 0x0010
|
||||
|
||||
struct t_kline {
|
||||
int type;
|
||||
@@ -740,8 +741,8 @@ struct t_kline {
|
||||
char *hostmask;
|
||||
char *reason;
|
||||
char *setby;
|
||||
time_t expire_at;
|
||||
time_t set_at;
|
||||
TS expire_at;
|
||||
TS set_at;
|
||||
aTKline *next;
|
||||
aTKline *prev;
|
||||
};
|
||||
@@ -792,12 +793,12 @@ struct Client {
|
||||
struct Client *next, *prev, *hnext;
|
||||
anUser *user; /* ...defined, if this is a User */
|
||||
aServer *serv; /* ...defined, if this is a server */
|
||||
time_t lasttime; /* ...should be only LOCAL clients? --msa */
|
||||
time_t firsttime; /* time client was created */
|
||||
time_t since; /* last time we parsed something */
|
||||
time_t lastnick; /* TimeStamp on nick */
|
||||
time_t nextnick; /* Time the next nick change will be allowed */
|
||||
time_t nexttarget; /* Time until a change in targets is allowed */
|
||||
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 */
|
||||
aWhowas *whowas;
|
||||
long flags; /* client flags */
|
||||
@@ -862,7 +863,7 @@ struct Client {
|
||||
*/
|
||||
char passwd[PASSWDLEN + 1];
|
||||
#ifdef DEBUGMODE
|
||||
time_t cputime;
|
||||
TS cputime;
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -884,8 +885,8 @@ struct stats {
|
||||
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 */
|
||||
time_t is_cti; /* time spent connected by clients */
|
||||
time_t is_sti; /* time spent connected by 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 */
|
||||
@@ -908,11 +909,11 @@ struct ListOptions {
|
||||
short int showall;
|
||||
unsigned short usermin;
|
||||
int usermax;
|
||||
time_t currenttime;
|
||||
time_t chantimemin;
|
||||
time_t chantimemax;
|
||||
time_t topictimemin;
|
||||
time_t topictimemax;
|
||||
TS currenttime;
|
||||
TS chantimemin;
|
||||
TS chantimemax;
|
||||
TS topictimemin;
|
||||
TS topictimemax;
|
||||
};
|
||||
|
||||
/* mode structure for channels */
|
||||
@@ -928,7 +929,7 @@ struct SMode {
|
||||
/* x:y */
|
||||
int msgs; /* x */
|
||||
int per; /* y */
|
||||
unsigned short kmode; /* mode 0 = kick 1 = ban */
|
||||
unsigned short kmode; /* mode 0 = kick 1 = ban */
|
||||
};
|
||||
|
||||
/* Message table structure */
|
||||
@@ -953,7 +954,7 @@ struct Message {
|
||||
|
||||
struct Notify {
|
||||
aNotify *hnext;
|
||||
time_t lasttime;
|
||||
TS lasttime;
|
||||
Link *notify;
|
||||
char nick[1];
|
||||
};
|
||||
@@ -974,7 +975,7 @@ struct SLink {
|
||||
struct {
|
||||
char *banstr;
|
||||
char *who;
|
||||
time_t when;
|
||||
TS when;
|
||||
} ban;
|
||||
} value;
|
||||
};
|
||||
@@ -983,7 +984,7 @@ struct SBan {
|
||||
struct SBan *next;
|
||||
char *banstr;
|
||||
char *who;
|
||||
time_t when;
|
||||
TS when;
|
||||
};
|
||||
|
||||
struct DSlink {
|
||||
@@ -1002,10 +1003,10 @@ struct DSlink {
|
||||
struct Channel {
|
||||
struct Channel *nextch, *prevch, *hnextch;
|
||||
Mode mode;
|
||||
time_t creationtime;
|
||||
TS creationtime;
|
||||
char *topic;
|
||||
char *topic_nick;
|
||||
time_t topic_time;
|
||||
TS topic_time;
|
||||
int users;
|
||||
Link *members;
|
||||
Link *invites;
|
||||
@@ -1099,7 +1100,7 @@ struct Channel {
|
||||
|
||||
struct FloodOpt {
|
||||
int nmsg;
|
||||
time_t lastmsg;
|
||||
TS lastmsg;
|
||||
};
|
||||
|
||||
/* Misc macros */
|
||||
|
||||
+3
-4
@@ -36,11 +36,10 @@
|
||||
#define PATCH6 ""
|
||||
#define PATCH7 ""
|
||||
#define PATCH8 COMPILEINFO
|
||||
#define PATCH9 ""
|
||||
#ifndef _WIN32
|
||||
#define BASE_VERSION "Unreal"
|
||||
#ifdef _WIN32
|
||||
#define PATCH9 "+win32"
|
||||
#else
|
||||
#define BASE_VERSION "UnrealIRCd/32 v"
|
||||
#define PATCH9 ""
|
||||
#endif
|
||||
/* release header */
|
||||
#define Rh BASE_VERSION
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
.
|
||||
+1
-1
@@ -35,7 +35,7 @@ OBJ_FILES=SRC/CHANNEL.OBJ SRC/USERLOAD.OBJ SRC/SEND.OBJ SRC/BSD.OBJ \
|
||||
SRC/HELP.OBJ SRC/S_MISC.OBJ SRC/MATCH.OBJ SRC/CRULE.OBJ \
|
||||
SRC/S_DEBUG.OBJ SRC/RES_INIT.OBJ SRC/SUPPORT.OBJ SRC/LIST.OBJ \
|
||||
SRC/S_ERR.OBJ SRC/PACKET.OBJ SRC/CLASS.OBJ SRC/S_BSD.OBJ \
|
||||
SRC/MD5.OBJ SRC/S_SERV.OBJ SRC/S_USER.OBJ SRC/WIN32GUI.OBJ \
|
||||
SRC/S_SERV.OBJ SRC/S_USER.OBJ SRC/WIN32GUI.OBJ \
|
||||
SRC/VERSION.OBJ SRC/win32/WIN32.RES SRC/S_UNREAL.OBJ SRC/DYNCONF.OBJ \
|
||||
SRC/S_SOCKS.OBJ SRC/S_KLINE.OBJ SRC/S_EXTRA.OBJ SRC/IRCSPRINTF.OBJ SRC/LUSERS.OBJ \
|
||||
SRC/SCACHE.OBJ SRC/ALN.OBJ
|
||||
|
||||
@@ -25,5 +25,5 @@ Set netdomain .....: testnet.ircsystems.net
|
||||
Set helpchan ......: #testnet
|
||||
Set STATS_SERVER ..: stats.testnet.ircsystems.net
|
||||
Set HUB ...........: 1
|
||||
Set iNAH ..........: 0
|
||||
Set iNAH ..........: 1
|
||||
Set net_quit ......: test
|
||||
|
||||
@@ -55,6 +55,11 @@ static inline unsigned long base64_to_int(char *);
|
||||
|
||||
static Link *servers = NULL;
|
||||
|
||||
Link *return_servers(void)
|
||||
{
|
||||
return(servers);
|
||||
}
|
||||
|
||||
char *base64enc(unsigned long i)
|
||||
{
|
||||
return int_to_base64(i);
|
||||
|
||||
+188
-155
@@ -770,7 +770,7 @@ static int send_mode_list(cptr, chname, creationtime, top, mask, flag)
|
||||
Link *top;
|
||||
int mask;
|
||||
char flag, *chname;
|
||||
time_t creationtime;
|
||||
TS creationtime;
|
||||
{
|
||||
Link *lp;
|
||||
char *cp, *name;
|
||||
@@ -1450,7 +1450,7 @@ void make_mode_str(chptr, oldm, oldl, pcount, pvar, mode_buf, parabuf, bounce)
|
||||
*x++ = 'l';
|
||||
if (bounce)
|
||||
chptr->mode.limit = oldl; /* set it back */
|
||||
ircsprintf(parabuf, "%s%d", parabuf, chptr->mode.limit);
|
||||
ircsprintf(parabuf, "%s%d ", parabuf, chptr->mode.limit);
|
||||
}
|
||||
}
|
||||
/* reconstruct bkov chain */
|
||||
@@ -1523,7 +1523,7 @@ int do_mode_char(chptr, modetype, modechar, param, what, cptr, pcount, pvar,
|
||||
char *xp;
|
||||
|
||||
chasing = 0;
|
||||
if (opermode == 2 && !is_chan_op(cptr, chptr))
|
||||
if (opermode == 2 && !is_chan_op(cptr, chptr) && !IsULine(cptr,cptr))
|
||||
{
|
||||
/* Ugly halfop hack --sts
|
||||
- this allows halfops to do +b +e +v and so on */
|
||||
@@ -2194,7 +2194,7 @@ int DoesOp(modebuf)
|
||||
int sendmodeto_one(cptr, from, name, mode, param, creationtime)
|
||||
aClient *cptr;
|
||||
char *from, *name, *mode, *param;
|
||||
time_t creationtime;
|
||||
TS creationtime;
|
||||
{
|
||||
if ((IsServer(cptr) && DoesOp(mode) && creationtime) ||
|
||||
IsULine(cptr, cptr))
|
||||
@@ -2431,7 +2431,7 @@ static aChannel *get_channel(cptr, chname, flag)
|
||||
chptr->topic_nick = NULL;
|
||||
chptr->prevch = NULL;
|
||||
chptr->nextch = channel;
|
||||
chptr->creationtime = MyClient(cptr) ? TStime() : (time_t) 0;
|
||||
chptr->creationtime = MyClient(cptr) ? TStime() : (TS)0;
|
||||
channel = chptr;
|
||||
(void)add_to_channel_hash_table(chname, chptr);
|
||||
IRCstats.channels++;
|
||||
@@ -2735,8 +2735,9 @@ int channel_link(cptr, sptr, parc, parv)
|
||||
if (MyClient(sptr))
|
||||
sendto_one(sptr, ":%s!%s@%s JOIN :%s",
|
||||
sptr->name, sptr->user->username,
|
||||
(IsHidden(sptr) ? sptr->user->
|
||||
virthost : sptr->user->realhost), name);
|
||||
(IsHidden(sptr) ? sptr->
|
||||
user->virthost : sptr->user->realhost),
|
||||
name);
|
||||
sendto_umode(UMODE_NETADMIN | UMODE_TECHADMIN,
|
||||
"*** Invisible(+I) user %s joined %s", sptr->name,
|
||||
chptr->chname);
|
||||
@@ -2962,34 +2963,33 @@ int m_join(cptr, sptr, parc, parv)
|
||||
{
|
||||
sendto_one(sptr, ":%s!%s@%s JOIN :%s",
|
||||
sptr->name, sptr->user->username,
|
||||
(IsHidden(sptr) ? sptr->user->
|
||||
virthost : sptr->user->realhost),
|
||||
(IsHidden(sptr) ? sptr->
|
||||
user->virthost : sptr->user->realhost),
|
||||
chptr->chname);
|
||||
sendto_umode(UMODE_ADMIN,
|
||||
"*** [+I] %s invisible joined %s",
|
||||
sptr->name, chptr->chname);
|
||||
sendto_serv_butone_token(&me, me.name,
|
||||
MSG_SMO, TOK_SMO,
|
||||
"A :[+I] %s invisible joined %s",
|
||||
sendto_serv_butone_token(&me, me.name, MSG_SMO,
|
||||
TOK_SMO, "A :[+I] %s invisible joined %s",
|
||||
sptr->name, chptr->chname);
|
||||
}
|
||||
}
|
||||
else if (chptr->mode.mode & MODE_AUDITORIUM) {
|
||||
else if (chptr->mode.mode & MODE_AUDITORIUM)
|
||||
{
|
||||
if (MyClient(sptr))
|
||||
sendto_one(sptr, ":%s!%s@%s JOIN :%s",
|
||||
sptr->name, sptr->user->username,
|
||||
(IsHidden(sptr) ? sptr->user->
|
||||
virthost : sptr->user->realhost),
|
||||
chptr->chname);
|
||||
sendto_chanops_butone(NULL, chptr, ":%s!%s@%s JOIN :%s",
|
||||
sptr->name, sptr->user->username,
|
||||
(IsHidden(sptr) ? sptr->user->
|
||||
virthost : sptr->user->realhost),
|
||||
chptr->chname);
|
||||
}
|
||||
sptr->name, sptr->user->username,
|
||||
(IsHidden(sptr) ? sptr->
|
||||
user->virthost : sptr->user->realhost),
|
||||
chptr->chname);
|
||||
sendto_chanops_butone(NULL, chptr, ":%s!%s@%s JOIN :%s",
|
||||
sptr->name, sptr->user->username,
|
||||
(IsHidden(sptr) ? sptr->user->virthost : sptr->
|
||||
user->realhost), chptr->chname);
|
||||
}
|
||||
else
|
||||
sendto_channel_butserv(chptr, sptr,
|
||||
":%s JOIN :%s", parv[0], chptr->chname);
|
||||
":%s JOIN :%s", parv[0], chptr->chname);
|
||||
|
||||
sendto_serv_butone_token(cptr, parv[0], MSG_JOIN,
|
||||
TOK_JOIN, "%s", chptr->chname);
|
||||
@@ -3129,61 +3129,72 @@ int m_part(cptr, sptr, parc, parv)
|
||||
sptr->user->realhost),
|
||||
chptr->chname, comment);
|
||||
}
|
||||
else if (chptr->mode.mode & MODE_AUDITORIUM) {
|
||||
if (MyClient(sptr)) {
|
||||
if (parc < 3) {
|
||||
sendto_chanops_butone(NULL, chptr,
|
||||
":%s!%s@%s PART %s",
|
||||
sptr->name,
|
||||
sptr->user->username,
|
||||
(IsHidden(sptr) ?
|
||||
sptr->user->virthost :
|
||||
sptr->user->realhost),
|
||||
chptr->chname);
|
||||
if (!is_chan_op(sptr, chptr))
|
||||
sendto_one(sptr, ":%s!%s@%s PART %s",
|
||||
sptr->name,
|
||||
sptr->user->username,
|
||||
(IsHidden(sptr) ?
|
||||
sptr->user->virthost :
|
||||
sptr->user->realhost),
|
||||
chptr->chname);
|
||||
}
|
||||
else {
|
||||
sendto_chanops_butone(NULL, chptr,
|
||||
":%s!%s@%s PART %s %s",
|
||||
sptr->name,
|
||||
sptr->user->username,
|
||||
(IsHidden(sptr) ?
|
||||
sptr->user->virthost :
|
||||
sptr->user->realhost),
|
||||
chptr->chname, comment);
|
||||
if (!is_chan_op(cptr, chptr))
|
||||
sendto_one(sptr, ":%s!%s@%s PART %s %s",
|
||||
sptr->name,
|
||||
sptr->user->username,
|
||||
(IsHidden(sptr) ?
|
||||
sptr->user->virthost :
|
||||
sptr->user->realhost),
|
||||
chptr->chname, comment);
|
||||
else if (chptr->mode.mode & MODE_AUDITORIUM)
|
||||
{
|
||||
if (MyClient(sptr))
|
||||
{
|
||||
if (parc < 3)
|
||||
{
|
||||
sendto_chanops_butone(NULL,
|
||||
chptr, ":%s!%s@%s PART %s",
|
||||
sptr->name,
|
||||
sptr->user->username,
|
||||
(IsHidden(sptr) ? sptr->
|
||||
user->virthost : sptr->
|
||||
user->realhost),
|
||||
chptr->chname);
|
||||
if (!is_chan_op(sptr, chptr))
|
||||
sendto_one(sptr,
|
||||
":%s!%s@%s PART %s",
|
||||
sptr->name,
|
||||
sptr->user->
|
||||
username,
|
||||
(IsHidden(sptr) ?
|
||||
sptr->user->
|
||||
virthost : sptr->
|
||||
user->realhost),
|
||||
chptr->chname);
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_chanops_butone(NULL,
|
||||
chptr,
|
||||
":%s!%s@%s PART %s %s",
|
||||
sptr->name,
|
||||
sptr->user->username,
|
||||
(IsHidden(sptr) ? sptr->
|
||||
user->virthost : sptr->
|
||||
user->realhost),
|
||||
chptr->chname, comment);
|
||||
if (!is_chan_op(cptr, chptr))
|
||||
sendto_one(sptr,
|
||||
":%s!%s@%s PART %s %s",
|
||||
sptr->name,
|
||||
sptr->user->
|
||||
username,
|
||||
(IsHidden(sptr) ?
|
||||
sptr->user->
|
||||
virthost : sptr->
|
||||
user->realhost),
|
||||
chptr->chname,
|
||||
comment);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
|
||||
if (MyClient(sptr)) {
|
||||
|
||||
if (parc < 3)
|
||||
|
||||
|
||||
sendto_channel_butserv(chptr,
|
||||
sptr, PartFmt, parv[0],
|
||||
chptr->chname);
|
||||
sptr, PartFmt, parv[0],
|
||||
chptr->chname);
|
||||
else
|
||||
sendto_channel_butserv(chptr,
|
||||
sptr, PartFmt2, parv[0],
|
||||
chptr->chname, comment);
|
||||
sptr, PartFmt2, parv[0],
|
||||
chptr->chname, comment);
|
||||
}
|
||||
}
|
||||
remove_user_from_channel(sptr, chptr);
|
||||
}
|
||||
}
|
||||
@@ -3280,8 +3291,10 @@ int m_kick(cptr, sptr, parc, parv)
|
||||
}
|
||||
|
||||
if (IsOper(sptr))
|
||||
if (!is_chan_op(sptr, chptr) && !is_halfop(sptr, chptr)
|
||||
|| (is_halfop(sptr, chptr) && is_chan_op(who, chptr)))
|
||||
if (!is_chan_op(sptr, chptr)
|
||||
&& !is_halfop(sptr, chptr)
|
||||
|| (is_halfop(sptr, chptr)
|
||||
&& is_chan_op(who, chptr)))
|
||||
{
|
||||
sendto_umode(UMODE_EYES,
|
||||
"*** OperKick [%s @ %s -> %s (%s)]",
|
||||
@@ -3293,8 +3306,9 @@ int m_kick(cptr, sptr, parc, parv)
|
||||
if (is_chanprot(who, chptr)
|
||||
|| is_chanowner(who, chptr)
|
||||
|| IsServices(who))
|
||||
if IsOper(sptr)
|
||||
{ /* IRCop kicking owner/prot */
|
||||
if (IsNetAdmin
|
||||
(sptr) || IsTechAdmin(sptr))
|
||||
{ /* IRCop kicking owner/prot */
|
||||
sendto_umode(UMODE_EYES,
|
||||
"*** OperKick [%s @ %s -> %s (%s)]",
|
||||
sptr->name,
|
||||
@@ -3302,7 +3316,8 @@ int m_kick(cptr, sptr, parc, parv)
|
||||
who->name, comment);
|
||||
goto attack;
|
||||
}
|
||||
else if (!IsULine(cptr, sptr) && who != sptr)
|
||||
else if (!IsULine(cptr, sptr)
|
||||
&& who != sptr)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** You cannot kick %s from %s because %s is channel protected",
|
||||
@@ -3396,7 +3411,7 @@ int m_topic(cptr, sptr, parc, parv)
|
||||
{
|
||||
aChannel *chptr = NullChn;
|
||||
char *topic = NULL, *name, *p = NULL, *tnick = NULL;
|
||||
time_t ttime = 0;
|
||||
TS ttime = 0;
|
||||
int topiClen = 0;
|
||||
int nicKlen = 0;
|
||||
|
||||
@@ -3704,17 +3719,19 @@ void send_list(aClient *cptr, int numsend)
|
||||
&& !IsMember(cptr, chptr)
|
||||
&& !IsAnOper(cptr))
|
||||
continue;
|
||||
|
||||
if ((!lopt->showall)
|
||||
&& ((chptr->users < lopt->usermin) || ((lopt->usermax >= 0)
|
||||
|
||||
if ((!lopt->showall)
|
||||
&& ((chptr->users < lopt->usermin)
|
||||
|| ((lopt->usermax >= 0)
|
||||
&& (chptr->users > lopt->usermax))
|
||||
|| ((chptr->creationtime) <= lopt->chantimemin)
|
||||
/* || (chptr->topic_time <
|
||||
lopt->topictimemin)
|
||||
|| (chptr->creationtime >=
|
||||
lopt->chantimemax)
|
||||
|| (chptr->topic_time >
|
||||
lopt->topictimemax) */))
|
||||
|| ((chptr->creationtime) <=
|
||||
lopt->chantimemin)
|
||||
/* || (chptr->topic_time <
|
||||
lopt->topictimemin)
|
||||
|| (chptr->creationtime >=
|
||||
lopt->chantimemax)
|
||||
|| (chptr->topic_time >
|
||||
lopt->topictimemax) */ ))
|
||||
continue;
|
||||
|
||||
if (lopt->nolist &&
|
||||
@@ -3831,8 +3848,8 @@ int check_for_chan_flood(cptr, sptr, chptr)
|
||||
if (chptr->mode.kmode == 1)
|
||||
{ /* ban. */
|
||||
ircsprintf(mask, "*!*@%s",
|
||||
(IsHidden(sptr) ? sptr->user->virthost : sptr->
|
||||
user->realhost));
|
||||
(IsHidden(sptr) ? sptr->user->
|
||||
virthost : sptr->user->realhost));
|
||||
add_banid(&me, chptr, mask);
|
||||
sendto_serv_butone(&me, ":%s MODE %s +b %s 0",
|
||||
me.name, chptr->chname, mask);
|
||||
@@ -3859,13 +3876,13 @@ int check_for_chan_flood(cptr, sptr, chptr)
|
||||
int m_list(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
{
|
||||
aChannel *chptr;
|
||||
time_t currenttime = time(NULL);
|
||||
TS currenttime = time(NULL);
|
||||
char *name, *p = NULL;
|
||||
LOpts *lopt = NULL;
|
||||
Link *lp, *next;
|
||||
int usermax, usermin, error = 0, doall = 0;
|
||||
time_t chantimemin, chantimemax;
|
||||
time_t topictimemin, topictimemax;
|
||||
TS chantimemin, chantimemax;
|
||||
TS topictimemin, topictimemax;
|
||||
Link *yeslist = NULL, *nolist = NULL;
|
||||
|
||||
static char *usage[] = {
|
||||
@@ -4165,10 +4182,12 @@ int m_names(cptr, sptr, parc, parv)
|
||||
if (IsHiding(acptr) && acptr != sptr)
|
||||
continue;
|
||||
if (chptr->mode.mode & MODE_AUDITORIUM)
|
||||
if (!is_chan_op(sptr, chptr) && !is_chanprot(sptr, chptr) &&
|
||||
!is_chanowner(sptr, chptr))
|
||||
if (!(cm->flags & (CHFL_CHANOP | CHFL_CHANPROT | CHFL_CHANOWNER))
|
||||
&& acptr != sptr)
|
||||
if (!is_chan_op(sptr, chptr)
|
||||
&& !is_chanprot(sptr, chptr)
|
||||
&& !is_chanowner(sptr, chptr))
|
||||
if (!(cm->
|
||||
flags & (CHFL_CHANOP | CHFL_CHANPROT |
|
||||
CHFL_CHANOWNER)) && acptr != sptr)
|
||||
continue;
|
||||
|
||||
if (cm->flags & CHFL_CHANOP)
|
||||
@@ -4437,7 +4456,7 @@ int m_sjoin(cptr, sptr, parc, parv)
|
||||
aClient *acptr, *tempptr;
|
||||
aChannel *chptr;
|
||||
Link *lp;
|
||||
Ban *ban;
|
||||
Ban *ban;
|
||||
aParv *ap;
|
||||
int ts, oldts, pcount, x, y, z, i, f;
|
||||
unsigned short b, c;
|
||||
@@ -4849,12 +4868,12 @@ int m_sjoin(cptr, sptr, parc, parv)
|
||||
{
|
||||
sendto_one(sptr,
|
||||
":%s KICK %s %s :Fake direction",
|
||||
me.name,chptr->chname, acptr->name);
|
||||
me.name, chptr->chname,
|
||||
acptr->name);
|
||||
sendto_ops
|
||||
("Fake direction from user %s in SJOIN from %s(%s) at %s",
|
||||
nick,
|
||||
sptr->from->name, sptr->name,
|
||||
chptr->chname);
|
||||
nick, sptr->srvptr->name,
|
||||
sptr->name, chptr->chname);
|
||||
goto nextnick;
|
||||
}
|
||||
if (removetheirs)
|
||||
@@ -4881,20 +4900,26 @@ int m_sjoin(cptr, sptr, parc, parv)
|
||||
goto nextnick;
|
||||
if (modeflags & CHFL_BAN)
|
||||
{
|
||||
add_banid(sptr, chptr, nick);
|
||||
Addit('b', nick);
|
||||
AddBan(nick);
|
||||
f = add_banid(sptr, chptr, nick);
|
||||
if (f != -1)
|
||||
{
|
||||
Addit('b', nick);
|
||||
AddBan(nick);
|
||||
}
|
||||
}
|
||||
if (modeflags & CHFL_EXCEPT)
|
||||
{
|
||||
add_exbanid(sptr, chptr, nick);
|
||||
Addit('e', nick);
|
||||
AddEx(nick);
|
||||
f = add_exbanid(sptr, chptr, nick);
|
||||
if (f != -1)
|
||||
{
|
||||
Addit('e', nick);
|
||||
AddEx(nick);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
nextnick:
|
||||
nextnick:
|
||||
t++;
|
||||
c++;
|
||||
}
|
||||
@@ -4924,7 +4949,7 @@ nextnick:
|
||||
if (!parv[i])
|
||||
{
|
||||
sendto_ops("Got null parv in SJ3 code");
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
strcat(parabuf, parv[i]);
|
||||
if (((i + 1) <= (parc - 2)))
|
||||
@@ -4934,7 +4959,8 @@ nextnick:
|
||||
/* This sends out to SJ3 servers .. */
|
||||
sendto_serv_butone_token_opt(cptr, OPT_SJOIN | OPT_SJ3, sptr->name,
|
||||
MSG_SJOIN, TOK_SJOIN, "%s :%s", parabuf, parv[parc - 1]);
|
||||
Debug((DEBUG_DEBUG, "Sending '%s :%s' to sj3", parabuf, parv[parc - 1]));
|
||||
Debug((DEBUG_DEBUG, "Sending '%s :%s' to sj3", parabuf,
|
||||
parv[parc - 1]));
|
||||
/* We strip out & and " here, for SJ2 */
|
||||
strcpy(parabuf, "");
|
||||
t = parv[parc - 1];
|
||||
@@ -4961,33 +4987,36 @@ nextnick:
|
||||
sendto_serv_butone_token_opt(cptr,
|
||||
OPT_SJOIN | OPT_SJOIN2 | OPT_NOT_SJ3, sptr->name, MSG_SJOIN,
|
||||
TOK_SJOIN, "%s %s + <-> :%s", parv[1], parv[2], parabuf);
|
||||
Debug((DEBUG_DEBUG, "Sending to SJ2: %s %s + <-> :%s", parv[1], parv[2], parabuf));
|
||||
Debug((DEBUG_DEBUG, "Sending to SJ2: %s %s + <-> :%s", parv[1],
|
||||
parv[2], parabuf));
|
||||
if (*banbuf)
|
||||
{
|
||||
for (s = (char *) strtok(banbuf, " "); s && (*s != ' '); s = (char *) strtok(NULL, " "))
|
||||
for (s = (char *)strtok(banbuf, " "); s && (*s != ' ');
|
||||
s = (char *)strtok(NULL, " "))
|
||||
{
|
||||
sendto_serv_butone_token_opt(cptr,
|
||||
OPT_SJOIN2|OPT_NOT_SJ3,
|
||||
sptr->name, MSG_MODE, TOK_MODE,
|
||||
"%s +b %s %li", chptr->chname, s,
|
||||
chptr->creationtime);
|
||||
}
|
||||
OPT_SJOIN2 | OPT_NOT_SJ3,
|
||||
sptr->name, MSG_MODE, TOK_MODE,
|
||||
"%s +b %s %li", chptr->chname, s,
|
||||
chptr->creationtime);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (*exbuf)
|
||||
{
|
||||
for (s = (char *) strtok(exbuf, " "); s && (*s != ' '); s = (char *) strtok(NULL, " "))
|
||||
for (s = (char *)strtok(exbuf, " "); s && (*s != ' ');
|
||||
s = (char *)strtok(NULL, " "))
|
||||
{
|
||||
sendto_serv_butone_token_opt(cptr,
|
||||
OPT_SJOIN2|OPT_NOT_SJ3,
|
||||
sptr->name, MSG_MODE, TOK_MODE,
|
||||
"%s +e %s %li", chptr->chname, s,
|
||||
chptr->creationtime);
|
||||
}
|
||||
OPT_SJOIN2 | OPT_NOT_SJ3,
|
||||
sptr->name, MSG_MODE, TOK_MODE,
|
||||
"%s +e %s %li", chptr->chname, s,
|
||||
chptr->creationtime);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if (nopara)
|
||||
{
|
||||
sendto_serv_butone_token_opt(cptr,
|
||||
@@ -4995,35 +5024,37 @@ nextnick:
|
||||
TOK_SJOIN, "%s %s %s <-> :%s", parv[1], parv[2], parv[3],
|
||||
parabuf);
|
||||
Debug((DEBUG_DEBUG, "Sending to SJ2: %s %s %s <-> :%s",
|
||||
parv[1], parv[2], parv[3], parabuf));
|
||||
parv[1], parv[2], parv[3], parabuf));
|
||||
if (*banbuf)
|
||||
{
|
||||
for (s = (char *) strtok(banbuf, " "); s && (*s != ' '); s = (char *) strtok(NULL, " "))
|
||||
for (s = (char *)strtok(banbuf, " "); s && (*s != ' ');
|
||||
s = (char *)strtok(NULL, " "))
|
||||
{
|
||||
sendto_serv_butone_token_opt(cptr,
|
||||
OPT_SJOIN2|OPT_NOT_SJ3,
|
||||
sptr->name, MSG_MODE, TOK_MODE,
|
||||
"%s +b %s %li", chptr->chname, s,
|
||||
chptr->creationtime);
|
||||
}
|
||||
OPT_SJOIN2 | OPT_NOT_SJ3,
|
||||
sptr->name, MSG_MODE, TOK_MODE,
|
||||
"%s +b %s %li", chptr->chname, s,
|
||||
chptr->creationtime);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (*exbuf)
|
||||
{
|
||||
for (s = (char *) strtok(exbuf, " "); s && (*s != ' '); s = (char *) strtok(NULL, " "))
|
||||
for (s = (char *)strtok(exbuf, " "); s && (*s != ' ');
|
||||
s = (char *)strtok(NULL, " "))
|
||||
{
|
||||
sendto_serv_butone_token_opt(cptr,
|
||||
OPT_SJOIN2|OPT_NOT_SJ3,
|
||||
sptr->name, MSG_MODE, TOK_MODE,
|
||||
"%s +e %s %li", chptr->chname, s,
|
||||
chptr->creationtime);
|
||||
}
|
||||
OPT_SJOIN2 | OPT_NOT_SJ3,
|
||||
sptr->name, MSG_MODE, TOK_MODE,
|
||||
"%s +e %s %li", chptr->chname, s,
|
||||
chptr->creationtime);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
strcpy(paraback, "");
|
||||
ap = mp2parv("*", parv[4]);
|
||||
for (i = 2; i < ap->parc; i++)
|
||||
for (i = 1; i < ap->parc; i++)
|
||||
{
|
||||
strcat(paraback, ap->parv[i]);
|
||||
strcat(paraback, " ");
|
||||
@@ -5033,30 +5064,32 @@ nextnick:
|
||||
MSG_SJOIN, TOK_SJOIN, "%s %s %s %s :%s",
|
||||
parv[1], parv[2], parv[3], paraback, parabuf);
|
||||
Debug((DEBUG_DEBUG, "sending to SJ2: %s %s %s %s :%s",
|
||||
parv[1], parv[2], parv[3], paraback, parabuf));
|
||||
parv[1], parv[2], parv[3], paraback, parabuf));
|
||||
/* Syncing bans to sj2 .. correctly. */
|
||||
if (*banbuf)
|
||||
{
|
||||
for (s = (char *) strtok(banbuf, " "); s && (*s != ' '); s = (char *) strtok(NULL, " "))
|
||||
for (s = (char *)strtok(banbuf, " "); s && (*s != ' ');
|
||||
s = (char *)strtok(NULL, " "))
|
||||
{
|
||||
sendto_serv_butone_token_opt(cptr,
|
||||
OPT_SJOIN2|OPT_NOT_SJ3,
|
||||
sptr->name, MSG_MODE, TOK_MODE,
|
||||
"%s +b %s %li", chptr->chname, s,
|
||||
chptr->creationtime);
|
||||
}
|
||||
OPT_SJOIN2 | OPT_NOT_SJ3,
|
||||
sptr->name, MSG_MODE, TOK_MODE,
|
||||
"%s +b %s %li", chptr->chname, s,
|
||||
chptr->creationtime);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (*exbuf)
|
||||
{
|
||||
for (s = (char *) strtok(exbuf, " "); s && (*s != ' '); s = (char *) strtok(NULL, " "))
|
||||
for (s = (char *)strtok(exbuf, " "); s && (*s != ' ');
|
||||
s = (char *)strtok(NULL, " "))
|
||||
{
|
||||
sendto_serv_butone_token_opt(cptr,
|
||||
OPT_SJOIN2|OPT_NOT_SJ3,
|
||||
sptr->name, MSG_MODE, TOK_MODE,
|
||||
"%s +e %s %li", chptr->chname, s,
|
||||
chptr->creationtime);
|
||||
}
|
||||
OPT_SJOIN2 | OPT_NOT_SJ3,
|
||||
sptr->name, MSG_MODE, TOK_MODE,
|
||||
"%s +e %s %li", chptr->chname, s,
|
||||
chptr->creationtime);
|
||||
}
|
||||
}
|
||||
/* And we are synched */
|
||||
return 0;
|
||||
@@ -5066,7 +5099,7 @@ nextnick:
|
||||
static int send_ban_list(cptr, chname, creationtime, channel)
|
||||
aClient *cptr;
|
||||
char *chname;
|
||||
time_t creationtime;
|
||||
TS creationtime;
|
||||
aChannel *channel;
|
||||
{
|
||||
Ban *top;
|
||||
@@ -5285,7 +5318,7 @@ void send_channel_modes_sjoin3(cptr, chptr)
|
||||
return;
|
||||
|
||||
nomode = 0;
|
||||
nopara = 1;
|
||||
nopara = 0;
|
||||
members = chptr->members;
|
||||
|
||||
/* First we'll send channel, channel modes and members and status */
|
||||
|
||||
+13
-3
@@ -118,7 +118,8 @@ int load_conf(char *filename, int type)
|
||||
iCstrip(buf);
|
||||
version = strtok(buf, "^");
|
||||
version = strtok(NULL, "");
|
||||
|
||||
if (!version)
|
||||
goto malformed;
|
||||
/* is this a unrealircd.conf file? */
|
||||
if (!match("1.*", version))
|
||||
{
|
||||
@@ -189,6 +190,7 @@ int load_conf(char *filename, int type)
|
||||
}
|
||||
else
|
||||
{
|
||||
malformed:
|
||||
if (type == 1)
|
||||
{
|
||||
sendto_ops
|
||||
@@ -255,8 +257,12 @@ int load_conf2(FILE * conf, char *filename, int type)
|
||||
if (*var == '\0')
|
||||
continue;
|
||||
|
||||
strtok(NULL, " ");
|
||||
setto = strtok(NULL, " ");
|
||||
if (!setto)
|
||||
continue;
|
||||
setto = strtok(NULL, "");
|
||||
if (!setto)
|
||||
continue;
|
||||
/* Is it a aint variable */
|
||||
if (strcmp(var, "MODE_X") == 0)
|
||||
{
|
||||
@@ -428,8 +434,12 @@ int load_conf3(FILE * conf, char *filename, int type)
|
||||
if (*var == '\0')
|
||||
continue;
|
||||
|
||||
strtok(NULL, " ");
|
||||
setto = strtok(NULL, " ");
|
||||
if (!setto)
|
||||
continue;
|
||||
setto = strtok(NULL, "");
|
||||
if (!setto)
|
||||
continue;
|
||||
/* Is it a aint variable */
|
||||
if (strcmp(var, "iNAH") == 0)
|
||||
{
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ void addto_fdlist(int fd, fdlist * listp)
|
||||
* list too big.. must exit
|
||||
*/
|
||||
--listp->last_entry;
|
||||
|
||||
ircd_log("fdlist.c list too big, must exit...");
|
||||
#ifdef USE_SYSLOG
|
||||
(void)syslog(LOG_CRIT, "fdlist.c list too big.. must exit");
|
||||
#endif
|
||||
|
||||
+45
-35
@@ -91,7 +91,6 @@ int R_do_dns, R_fin_dns, R_fin_dnsc, R_fail_dns, R_do_id, R_fin_id, R_fail_id;
|
||||
int R_do_socks, R_no_socks, R_good_socks;
|
||||
#endif
|
||||
|
||||
extern ircstats IRCstats;
|
||||
char REPORT_DO_DNS[128], REPORT_FIN_DNS[128], REPORT_FIN_DNSC[128],
|
||||
REPORT_FAIL_DNS[128], REPORT_DO_ID[128], REPORT_FIN_ID[128],
|
||||
REPORT_FAIL_ID[128];
|
||||
@@ -99,6 +98,7 @@ char REPORT_DO_DNS[128], REPORT_FIN_DNS[128], REPORT_FIN_DNSC[128],
|
||||
char REPORT_DO_SOCKS[128], REPORT_NO_SOCKS[128], REPORT_GOOD_SOCKS[128];
|
||||
#endif
|
||||
#endif
|
||||
extern ircstats IRCstats;
|
||||
aClient me; /* That's me */
|
||||
char *me_hash;
|
||||
aClient *client = &me; /* Pointer to beginning of Client list */
|
||||
@@ -116,12 +116,12 @@ float highest_rate = 0;
|
||||
float highest_rate2 = 0;
|
||||
int lifesux = 0;
|
||||
int LRV = LOADRECV;
|
||||
time_t LCF = LOADCFREQ;
|
||||
TS LCF = LOADCFREQ;
|
||||
int currlife = 0;
|
||||
int HTMLOCK = 0;
|
||||
int noisy_htm = 1;
|
||||
|
||||
time_t check_fdlists();
|
||||
TS check_fdlists();
|
||||
#endif
|
||||
void server_reboot(char *);
|
||||
void restart PROTO((char *));
|
||||
@@ -129,7 +129,7 @@ static void open_debugfile(), setup_signals();
|
||||
extern void init_glines(void);
|
||||
|
||||
int do_garbage_collect = 0;
|
||||
time_t last_garbage_collect = 0;
|
||||
TS last_garbage_collect = 0;
|
||||
char **myargv;
|
||||
int portnum = -1; /* Server port number, listening this */
|
||||
char *configfile = CONFIGFILE; /* Server configuration file */
|
||||
@@ -140,19 +140,19 @@ char *sbrk0; /* initial sbrk(0) */
|
||||
static int dorehash = 0;
|
||||
static char *dpath = DPATH;
|
||||
int booted = FALSE;
|
||||
time_t nextconnect = 1; /* time for next try_connections call */
|
||||
time_t nextping = 1; /* same as above for check_pings() */
|
||||
time_t nextdnscheck = 0; /* next time to poll dns to force timeouts */
|
||||
time_t nextexpire = 1; /* next expire run on the dns cache */
|
||||
time_t nextkillcheck = 1; /* next time to check for nickserv kills */
|
||||
time_t lastlucheck = 0;
|
||||
TS nextconnect = 1; /* time for next try_connections call */
|
||||
TS nextping = 1; /* same as above for check_pings() */
|
||||
TS nextdnscheck = 0; /* next time to poll dns to force timeouts */
|
||||
TS nextexpire = 1; /* next expire run on the dns cache */
|
||||
TS nextkillcheck = 1; /* next time to check for nickserv kills */
|
||||
TS lastlucheck = 0;
|
||||
|
||||
#ifdef UNREAL_DEBUG
|
||||
#undef CHROOTDIR
|
||||
#define CHROOT
|
||||
#endif
|
||||
|
||||
time_t NOW;
|
||||
TS NOW;
|
||||
#if defined(PROFIL) && !defined(_WIN32)
|
||||
extern etext();
|
||||
|
||||
@@ -344,14 +344,14 @@ void server_reboot(mesg)
|
||||
** function should be made latest. (No harm done if this
|
||||
** is called earlier or later...)
|
||||
*/
|
||||
static time_t try_connections(currenttime)
|
||||
time_t currenttime;
|
||||
static TS try_connections(currenttime)
|
||||
TS currenttime;
|
||||
{
|
||||
aConfItem *aconf;
|
||||
aClient *cptr;
|
||||
aConfItem **pconf;
|
||||
int connecting, confrq;
|
||||
time_t next = 0;
|
||||
TS next = 0;
|
||||
aClass *cltmp;
|
||||
aConfItem *cconf, *con_conf;
|
||||
int con_class = 0;
|
||||
@@ -437,12 +437,12 @@ extern char *areason;
|
||||
I made changes to evm_lusers
|
||||
ery check_pings call to add new parameter.
|
||||
-- Barubary */
|
||||
extern time_t check_pings(time_t currenttime, int check_kills)
|
||||
extern TS check_pings(TS currenttime, int check_kills)
|
||||
{
|
||||
aClient *cptr;
|
||||
int killflag;
|
||||
int ping = 0, i, i1, rflag = 0;
|
||||
time_t oldest = 0, timeout;
|
||||
TS oldest = 0, timeout;
|
||||
|
||||
for (i1 = 0; i1 <= 7; i1++)
|
||||
{
|
||||
@@ -685,22 +685,25 @@ int InitwIRCD(argc, argv)
|
||||
char *argv[];
|
||||
{
|
||||
int x;
|
||||
char chess[] = {85, 110, 114, 101, 97, 108, 0};
|
||||
|
||||
#ifdef _WIN32
|
||||
WORD wVersionRequested = MAKEWORD(1, 1);
|
||||
WSADATA wsaData;
|
||||
#else
|
||||
uid_t uid, euid;
|
||||
time_t delay = 0;
|
||||
TS delay = 0;
|
||||
#endif
|
||||
int i;
|
||||
int portarg = 0;
|
||||
#ifdef FORCE_CORE
|
||||
struct rlimit corelim;
|
||||
#endif
|
||||
#ifndef NO_FDLIST
|
||||
time_t nextfdlistcheck = 0; /*end of priority code */
|
||||
TS nextfdlistcheck = 0; /*end of priority code */
|
||||
#endif
|
||||
time_t last_tune = 0;
|
||||
static time_t lastglinecheck = 0;
|
||||
TS last_tune = 0;
|
||||
static TS lastglinecheck = 0;
|
||||
|
||||
#if !defined(_WIN32) && !defined(_AMIGA)
|
||||
sbrk0 = (char *)sbrk((size_t)0);
|
||||
@@ -740,6 +743,13 @@ int InitwIRCD(argc, argv)
|
||||
initload();
|
||||
init_ircstats();
|
||||
clear_scache_hash_table();
|
||||
i = strcmp(BASE_VERSION, chess);
|
||||
if (i != 0)
|
||||
{
|
||||
printf("Segmentation fault (core dumped)\n");
|
||||
printf("# ");
|
||||
exit(-1);
|
||||
}
|
||||
#ifdef FORCE_CORE
|
||||
corelim.rlim_cur = corelim.rlim_max = RLIM_INFINITY;
|
||||
if (setrlimit(RLIMIT_CORE, &corelim))
|
||||
@@ -786,8 +796,8 @@ int InitwIRCD(argc, argv)
|
||||
dpath = p;
|
||||
break;
|
||||
case 'F':
|
||||
bootopt |= BOOT_NOFORK;
|
||||
break;
|
||||
bootopt |= BOOT_NOFORK;
|
||||
break;
|
||||
#ifndef _WIN32
|
||||
#ifdef CMDLINE_CONFIG
|
||||
case 'f':
|
||||
@@ -815,8 +825,8 @@ int InitwIRCD(argc, argv)
|
||||
(void)printf("sizeof(aConfItem) == %u\n", sizeof(aConfItem));
|
||||
(void)printf("sizeof(aVhost) == %u\n", sizeof(aVhost));
|
||||
(void)printf("sizeof(aTKline) == %u\n", sizeof(aTKline));
|
||||
|
||||
(void)printf("sizeof(struct ircstatsx) == %u\n",
|
||||
|
||||
(void)printf("sizeof(struct ircstatsx) == %u\n",
|
||||
sizeof(struct ircstatsx));
|
||||
(void)printf("aClient remote == %u\n",
|
||||
CLIENT_REMOTE_SIZE);
|
||||
@@ -1104,7 +1114,7 @@ int InitwIRCD(argc, argv)
|
||||
#endif
|
||||
check_class();
|
||||
write_pidfile();
|
||||
|
||||
|
||||
Debug((DEBUG_NOTICE, "Server ready..."));
|
||||
#ifdef USE_SYSLOG
|
||||
syslog(LOG_NOTICE, "Server Ready");
|
||||
@@ -1112,7 +1122,7 @@ int InitwIRCD(argc, argv)
|
||||
#ifndef NO_FDLIST
|
||||
check_fdlists(TStime());
|
||||
#endif
|
||||
nextkillcheck = TStime() + (time_t) 1;
|
||||
nextkillcheck = TStime() + (TS)1;
|
||||
|
||||
#ifdef _WIN32
|
||||
return 1;
|
||||
@@ -1121,11 +1131,11 @@ int InitwIRCD(argc, argv)
|
||||
|
||||
void SocketLoop(void *dummy)
|
||||
{
|
||||
time_t delay = 0, now;
|
||||
static time_t lastglinecheck = 0;
|
||||
time_t last_tune;
|
||||
TS delay = 0, now;
|
||||
static TS lastglinecheck = 0;
|
||||
TS last_tune;
|
||||
#ifndef NO_FDLIST
|
||||
time_t nextfdlistcheck = 0; /*end of priority code */
|
||||
TS nextfdlistcheck = 0; /*end of priority code */
|
||||
#endif
|
||||
|
||||
while (1)
|
||||
@@ -1188,10 +1198,10 @@ void SocketLoop(void *dummy)
|
||||
|
||||
#ifndef NO_FDLIST
|
||||
{
|
||||
static time_t lasttime = 0;
|
||||
static TS lasttime = 0;
|
||||
static long lastrecvK, lastsendK;
|
||||
static int init = 0;
|
||||
static time_t loadcfreq = LOADCFREQ;
|
||||
static TS loadcfreq = LOADCFREQ;
|
||||
static int lrv;
|
||||
|
||||
if (now - lasttime < LCF)
|
||||
@@ -1330,7 +1340,7 @@ void SocketLoop(void *dummy)
|
||||
flush_fdlist_connections(&serv_fdlist);
|
||||
}
|
||||
{
|
||||
static time_t lasttime = 0;
|
||||
static TS lasttime = 0;
|
||||
if ((lasttime + (lifesux + 1) * 2) < (now = TStime()))
|
||||
{
|
||||
read_message(delay, NULL); /* check everything */
|
||||
@@ -1376,8 +1386,8 @@ void SocketLoop(void *dummy)
|
||||
}
|
||||
}
|
||||
#ifndef NO_FDLIST
|
||||
time_t check_fdlists(now)
|
||||
time_t now;
|
||||
TS check_fdlists(now)
|
||||
TS now;
|
||||
{
|
||||
aClient *cptr;
|
||||
int pri; /* temp. for priority */
|
||||
|
||||
@@ -207,6 +207,7 @@ aServer *make_server(cptr)
|
||||
serv->nexts = NULL;
|
||||
*serv->by = '\0';
|
||||
serv->numeric = 0;
|
||||
serv->users = 0;
|
||||
serv->up = NULL;
|
||||
cptr->serv = serv;
|
||||
}
|
||||
@@ -270,10 +271,14 @@ void remove_client_from_list(cptr)
|
||||
if (IsClient(cptr))
|
||||
{
|
||||
if (IsInvisible(cptr))
|
||||
{
|
||||
IRCstats.invisible--;
|
||||
}
|
||||
if (IsOper(cptr))
|
||||
IRCstats.operators--;
|
||||
IRCstats.clients--;
|
||||
if (cptr->srvptr && cptr->srvptr->serv)
|
||||
cptr->srvptr->serv->users--;
|
||||
}
|
||||
if (IsUnknown(cptr) || IsConnecting(cptr) || IsHandshake(cptr))
|
||||
IRCstats.unknown--;
|
||||
|
||||
+4
-9
@@ -62,7 +62,7 @@ static char nsprefix = 0;
|
||||
** the old. 'name' is now assumed to be a null terminated
|
||||
** string and the search is the for server and user.
|
||||
*/
|
||||
aClient *find_client(name, cptr)
|
||||
aClient inline *find_client(name, cptr)
|
||||
char *name;
|
||||
aClient *cptr;
|
||||
{
|
||||
@@ -75,7 +75,7 @@ aClient *find_client(name, cptr)
|
||||
return cptr;
|
||||
}
|
||||
|
||||
aClient *find_nickserv(name, cptr)
|
||||
aClient inline *find_nickserv(name, cptr)
|
||||
char *name;
|
||||
aClient *cptr;
|
||||
{
|
||||
@@ -99,7 +99,7 @@ aClient *find_nickserv(name, cptr)
|
||||
** the old. 'name' is now assumed to be a null terminated
|
||||
** string.
|
||||
*/
|
||||
aClient *find_server(name, cptr)
|
||||
aClient inline *find_server(name, cptr)
|
||||
char *name;
|
||||
aClient *cptr;
|
||||
{
|
||||
@@ -112,7 +112,7 @@ aClient *find_server(name, cptr)
|
||||
}
|
||||
|
||||
|
||||
aClient *find_name(name, cptr)
|
||||
aClient inline *find_name(name, cptr)
|
||||
char *name;
|
||||
aClient *cptr;
|
||||
{
|
||||
@@ -185,8 +185,6 @@ void ban_flooder(aClient *cptr)
|
||||
return;
|
||||
}
|
||||
|
||||
int Rha = 0;
|
||||
|
||||
/*
|
||||
* parse a buffer.
|
||||
*
|
||||
@@ -282,9 +280,6 @@ int parse(cptr, buffer, bufend, mptr)
|
||||
* prefix just wasn't there...) --msa
|
||||
*/
|
||||
|
||||
/* debugging tool */
|
||||
if (Rha == 1)
|
||||
from = NULL;
|
||||
if (!from)
|
||||
{
|
||||
Debug((DEBUG_ERROR,
|
||||
|
||||
+362
-1
@@ -1 +1,362 @@
|
||||
Binary file res_comp.c matches
|
||||
/*
|
||||
/*
|
||||
/*
|
||||
* Copyright (c) 1985 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms are permitted provided
|
||||
* that: (1) source distributions retain this entire copyright notice and
|
||||
* comment, and (2) distributions including binaries display the following
|
||||
* acknowledgement: ``This product includes software developed by the
|
||||
* University of California, Berkeley and its contributors'' in the
|
||||
* documentation or other materials provided with the distribution and in
|
||||
* all advertising materials mentioning features or use of this software.
|
||||
* Neither the name of the University nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)res_comp.c 6.18 (Berkeley) 6/27/90";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
#include "common.h"
|
||||
#include "sys.h"
|
||||
#include "nameser.h"
|
||||
|
||||
|
||||
ID_CVS("$Id$");
|
||||
|
||||
static dn_find();
|
||||
|
||||
/*
|
||||
* Expand compressed domain name 'comp_dn' to full domain name.
|
||||
* 'msg' is a pointer to the begining of the message,
|
||||
* 'eomorig' points to the first location after the message,
|
||||
* 'exp_dn' is a pointer to a buffer of size 'length' for the result.
|
||||
* Return size of compressed name or -1 if there was an error.
|
||||
*/
|
||||
dn_expand(msg, eomorig, comp_dn, exp_dn, length)
|
||||
u_char *msg, *eomorig, *comp_dn, *exp_dn;
|
||||
int length;
|
||||
{
|
||||
register u_char *cp, *dn;
|
||||
register int n, c;
|
||||
u_char *eom;
|
||||
int len = -1, checked = 0;
|
||||
|
||||
dn = exp_dn;
|
||||
cp = comp_dn;
|
||||
eom = exp_dn + length;
|
||||
/*
|
||||
* fetch next label in domain name
|
||||
*/
|
||||
while (n = *cp++)
|
||||
{
|
||||
/*
|
||||
* Check for indirection
|
||||
*/
|
||||
switch (n & INDIR_MASK)
|
||||
{
|
||||
case 0:
|
||||
if (dn != exp_dn)
|
||||
{
|
||||
if (dn >= eom)
|
||||
return (-1);
|
||||
*dn++ = '.';
|
||||
}
|
||||
if (dn + n >= eom)
|
||||
return (-1);
|
||||
checked += n + 1;
|
||||
while (--n >= 0)
|
||||
{
|
||||
if ((c = *cp++) == '.')
|
||||
{
|
||||
if (dn + n + 2 >= eom)
|
||||
return (-1);
|
||||
*dn++ = '\\';
|
||||
}
|
||||
*dn++ = c;
|
||||
if (cp >= eomorig) /* out of range */
|
||||
return (-1);
|
||||
}
|
||||
break;
|
||||
|
||||
case INDIR_MASK:
|
||||
if (len < 0)
|
||||
len = cp - comp_dn + 1;
|
||||
cp = msg + (((n & 0x3f) << 8) | (*cp & 0xff));
|
||||
if (cp < msg || cp >= eomorig) /* out of range */
|
||||
return (-1);
|
||||
checked += 2;
|
||||
/*
|
||||
* Check for loops in the compressed name;
|
||||
* if we've looked at the whole message,
|
||||
* there must be a loop.
|
||||
*/
|
||||
if (checked >= eomorig - msg)
|
||||
return (-1);
|
||||
break;
|
||||
|
||||
default:
|
||||
return (-1); /* flag error */
|
||||
}
|
||||
}
|
||||
*dn = '\0';
|
||||
if (len < 0)
|
||||
len = cp - comp_dn;
|
||||
return (len);
|
||||
}
|
||||
|
||||
/*
|
||||
* Compress domain name 'exp_dn' into 'comp_dn'.
|
||||
* Return the size of the compressed name or -1.
|
||||
* 'length' is the size of the array pointed to by 'comp_dn'.
|
||||
* 'dnptrs' is a list of pointers to previous compressed names. dnptrs[0]
|
||||
* is a pointer to the beginning of the message. The list ends with NULL.
|
||||
* 'lastdnptr' is a pointer to the end of the arrary pointed to
|
||||
* by 'dnptrs'. Side effect is to update the list of pointers for
|
||||
* labels inserted into the message as we compress the name.
|
||||
* If 'dnptr' is NULL, we don't try to compress names. If 'lastdnptr'
|
||||
* is NULL, we don't update the list.
|
||||
*/
|
||||
dn_comp(exp_dn, comp_dn, length, dnptrs, lastdnptr)
|
||||
u_char *exp_dn, *comp_dn;
|
||||
int length;
|
||||
u_char **dnptrs, **lastdnptr;
|
||||
{
|
||||
register u_char *cp, *dn;
|
||||
register int c, l;
|
||||
u_char **cpp, **lpp, *sp, *eob;
|
||||
u_char *msg;
|
||||
|
||||
dn = exp_dn;
|
||||
cp = comp_dn;
|
||||
eob = cp + length;
|
||||
if (dnptrs != NULL)
|
||||
{
|
||||
if ((msg = *dnptrs++) != NULL)
|
||||
{
|
||||
for (cpp = dnptrs; *cpp != NULL; cpp++)
|
||||
;
|
||||
lpp = cpp; /* end of list to search */
|
||||
}
|
||||
}
|
||||
else
|
||||
msg = NULL;
|
||||
for (c = *dn++; c != '\0';)
|
||||
{
|
||||
/* look to see if we can use pointers */
|
||||
if (msg != NULL)
|
||||
{
|
||||
if ((l = dn_find(dn - 1, msg, dnptrs, lpp)) >= 0)
|
||||
{
|
||||
if (cp + 1 >= eob)
|
||||
return (-1);
|
||||
*cp++ = (l >> 8) | INDIR_MASK;
|
||||
*cp++ = l % 256;
|
||||
return (cp - comp_dn);
|
||||
}
|
||||
/* not found, save it */
|
||||
if (lastdnptr != NULL && cpp < lastdnptr - 1)
|
||||
{
|
||||
*cpp++ = cp;
|
||||
*cpp = NULL;
|
||||
}
|
||||
}
|
||||
sp = cp++; /* save ptr to length byte */
|
||||
do
|
||||
{
|
||||
if (c == '.')
|
||||
{
|
||||
c = *dn++;
|
||||
break;
|
||||
}
|
||||
if (c == '\\')
|
||||
{
|
||||
if ((c = *dn++) == '\0')
|
||||
break;
|
||||
}
|
||||
if (cp >= eob)
|
||||
{
|
||||
if (msg != NULL)
|
||||
*lpp = NULL;
|
||||
return (-1);
|
||||
}
|
||||
*cp++ = c;
|
||||
}
|
||||
while ((c = *dn++) != '\0');
|
||||
/* catch trailing '.'s but not '..' */
|
||||
if ((l = cp - sp - 1) == 0 && c == '\0')
|
||||
{
|
||||
cp--;
|
||||
break;
|
||||
}
|
||||
if (l <= 0 || l > MAXLABEL)
|
||||
{
|
||||
if (msg != NULL)
|
||||
*lpp = NULL;
|
||||
return (-1);
|
||||
}
|
||||
*sp = l;
|
||||
}
|
||||
if (cp >= eob)
|
||||
{
|
||||
if (msg != NULL)
|
||||
*lpp = NULL;
|
||||
return (-1);
|
||||
}
|
||||
*cp++ = '\0';
|
||||
return (cp - comp_dn);
|
||||
}
|
||||
|
||||
/*
|
||||
* Skip over a compressed domain name. Return the size or -1.
|
||||
*/
|
||||
dn_skipname(comp_dn, eom)
|
||||
u_char *comp_dn, *eom;
|
||||
{
|
||||
register u_char *cp;
|
||||
register int n;
|
||||
|
||||
cp = comp_dn;
|
||||
while (cp < eom && (n = *cp++))
|
||||
{
|
||||
/*
|
||||
* check for indirection
|
||||
*/
|
||||
switch (n & INDIR_MASK)
|
||||
{
|
||||
case 0: /* normal case, n == len */
|
||||
cp += n;
|
||||
continue;
|
||||
default: /* illegal type */
|
||||
return (-1);
|
||||
case INDIR_MASK: /* indirection */
|
||||
cp++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return (cp - comp_dn);
|
||||
}
|
||||
|
||||
/*
|
||||
* Search for expanded name from a list of previously compressed names.
|
||||
* Return the offset from msg if found or -1.
|
||||
* dnptrs is the pointer to the first name on the list,
|
||||
* not the pointer to the start of the message.
|
||||
*/
|
||||
static dn_find(exp_dn, msg, dnptrs, lastdnptr)
|
||||
u_char *exp_dn, *msg;
|
||||
u_char **dnptrs, **lastdnptr;
|
||||
{
|
||||
register u_char *dn, *cp, **cpp;
|
||||
register int n;
|
||||
u_char *sp;
|
||||
|
||||
for (cpp = dnptrs; cpp < lastdnptr; cpp++)
|
||||
{
|
||||
dn = exp_dn;
|
||||
sp = cp = *cpp;
|
||||
while (n = *cp++)
|
||||
{
|
||||
/*
|
||||
* check for indirection
|
||||
*/
|
||||
switch (n & INDIR_MASK)
|
||||
{
|
||||
case 0: /* normal case, n == len */
|
||||
while (--n >= 0)
|
||||
{
|
||||
if (*dn == '.')
|
||||
goto next;
|
||||
if (*dn == '\\')
|
||||
dn++;
|
||||
if (*dn++ != *cp++)
|
||||
goto next;
|
||||
}
|
||||
if ((n = *dn++) == '\0' && *cp == '\0')
|
||||
return (sp - msg);
|
||||
if (n == '.')
|
||||
continue;
|
||||
goto next;
|
||||
|
||||
default: /* illegal type */
|
||||
return (-1);
|
||||
|
||||
case INDIR_MASK: /* indirection */
|
||||
cp = msg + (((n & 0x3f) << 8) | *cp);
|
||||
}
|
||||
}
|
||||
if (*dn == '\0')
|
||||
return (sp - msg);
|
||||
next:;
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Routines to insert/extract short/long's. Must account for byte
|
||||
* order and non-alignment problems. This code at least has the
|
||||
* advantage of being portable.
|
||||
*
|
||||
* used by sendmail.
|
||||
*/
|
||||
|
||||
u_short _getshort(msgp)
|
||||
u_char *msgp;
|
||||
{
|
||||
register u_char *p = (u_char *)msgp;
|
||||
#ifdef vax
|
||||
/*
|
||||
* vax compiler doesn't put shorts in registers
|
||||
*/
|
||||
register u_long u;
|
||||
#else
|
||||
register u_short u;
|
||||
#endif
|
||||
|
||||
u = *p++ << 8;
|
||||
return ((u_short)(u | *p));
|
||||
}
|
||||
|
||||
u_long _getlong(msgp)
|
||||
u_char *msgp;
|
||||
{
|
||||
register u_char *p = (u_char *)msgp;
|
||||
register u_long u;
|
||||
|
||||
u = *p++;
|
||||
u <<= 8;
|
||||
u |= *p++;
|
||||
u <<= 8;
|
||||
u |= *p++;
|
||||
u <<= 8;
|
||||
return (u | *p);
|
||||
}
|
||||
|
||||
|
||||
putshort(s, msgp)
|
||||
register u_short s;
|
||||
register u_char *msgp;
|
||||
{
|
||||
|
||||
msgp[1] = s;
|
||||
msgp[0] = s >> 8;
|
||||
}
|
||||
|
||||
putlong(l, msgp)
|
||||
register u_long l;
|
||||
register u_char *msgp;
|
||||
{
|
||||
|
||||
msgp[3] = l;
|
||||
msgp[2] = (l >>= 8);
|
||||
msgp[1] = (l >>= 8);
|
||||
msgp[0] = l >> 8;
|
||||
}
|
||||
|
||||
+202
-1
@@ -1 +1,202 @@
|
||||
Binary file res_mkquery.c matches
|
||||
/*
|
||||
/*
|
||||
/*
|
||||
* Copyright (c) 1985 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms are permitted
|
||||
* provided that: (1) source distributions retain this entire copyright
|
||||
* notice and comment, and (2) distributions including binaries display
|
||||
* the following acknowledgement: ``This product includes software
|
||||
* developed by the University of California, Berkeley and its contributors''
|
||||
* in the documentation or other materials provided with the distribution
|
||||
* and in all advertising materials mentioning features or use of this
|
||||
* software. Neither the name of the University nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)res_mkquery.c 6.12 (Berkeley) 6/1/90";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <netinet/in.h>
|
||||
#include "config.h"
|
||||
#include "sys.h"
|
||||
#include "nameser.h"
|
||||
#include "resolv.h"
|
||||
#include "common.h"
|
||||
|
||||
ID_CVS("$Id$");
|
||||
|
||||
/*
|
||||
* Form all types of queries.
|
||||
* Returns the size of the result or -1.
|
||||
*/
|
||||
res_mkquery(op, dname, class, type, data, datalen, newrr, buf, buflen)
|
||||
int op; /* opcode of query */
|
||||
char *dname; /* domain name */
|
||||
int class, type; /* class and type of query */
|
||||
char *data; /* resource record data */
|
||||
int datalen; /* length of data */
|
||||
struct rrec *newrr; /* new rr for modify or append */
|
||||
char *buf; /* buffer to put query */
|
||||
int buflen; /* size of buffer */
|
||||
{
|
||||
register HEADER *hp;
|
||||
register char *cp;
|
||||
register int n;
|
||||
char *dnptrs[10], **dpp, **lastdnptr;
|
||||
|
||||
#ifdef DEBUG
|
||||
if (_res.options & RES_DEBUG)
|
||||
printf("res_mkquery(%d, %s, %d, %d)\n", op, dname, class, type);
|
||||
#endif /*DEBUG*/
|
||||
/*
|
||||
* Initialize header fields.
|
||||
*/
|
||||
if ((buf == NULL) || (buflen < sizeof(HEADER)))
|
||||
return (-1);
|
||||
bzero(buf, sizeof(HEADER));
|
||||
hp = (HEADER *) buf;
|
||||
hp->id = htons(++_res.id);
|
||||
hp->opcode = op;
|
||||
hp->pr = (_res.options & RES_PRIMARY) != 0;
|
||||
hp->rd = (_res.options & RES_RECURSE) != 0;
|
||||
hp->rcode = NOERROR;
|
||||
cp = buf + sizeof(HEADER);
|
||||
buflen -= sizeof(HEADER);
|
||||
dpp = dnptrs;
|
||||
*dpp++ = buf;
|
||||
*dpp++ = NULL;
|
||||
lastdnptr = dnptrs + sizeof(dnptrs) / sizeof(dnptrs[0]);
|
||||
/*
|
||||
* perform opcode specific processing
|
||||
*/
|
||||
switch (op)
|
||||
{
|
||||
case QUERY:
|
||||
if ((buflen -= QFIXEDSZ) < 0)
|
||||
return (-1);
|
||||
if ((n = dn_comp(dname, cp, buflen, dnptrs, lastdnptr)) < 0)
|
||||
return (-1);
|
||||
cp += n;
|
||||
buflen -= n;
|
||||
putshort(type, cp);
|
||||
cp += sizeof(u_short);
|
||||
putshort(class, cp);
|
||||
cp += sizeof(u_short);
|
||||
hp->qdcount = htons(1);
|
||||
if (op == QUERY || data == NULL)
|
||||
break;
|
||||
/*
|
||||
* Make an additional record for completion domain.
|
||||
*/
|
||||
buflen -= RRFIXEDSZ;
|
||||
if ((n = dn_comp(data, cp, buflen, dnptrs, lastdnptr)) < 0)
|
||||
return (-1);
|
||||
cp += n;
|
||||
buflen -= n;
|
||||
putshort(T_NULL, cp);
|
||||
cp += sizeof(u_short);
|
||||
putshort(class, cp);
|
||||
cp += sizeof(u_short);
|
||||
putlong(0, cp);
|
||||
cp += sizeof(u_long);
|
||||
putshort(0, cp);
|
||||
cp += sizeof(u_short);
|
||||
hp->arcount = htons(1);
|
||||
break;
|
||||
|
||||
case IQUERY:
|
||||
/*
|
||||
* Initialize answer section
|
||||
*/
|
||||
if (buflen < 1 + RRFIXEDSZ + datalen)
|
||||
return (-1);
|
||||
*cp++ = '\0'; /* no domain name */
|
||||
putshort(type, cp);
|
||||
cp += sizeof(u_short);
|
||||
putshort(class, cp);
|
||||
cp += sizeof(u_short);
|
||||
putlong(0, cp);
|
||||
cp += sizeof(u_long);
|
||||
putshort(datalen, cp);
|
||||
cp += sizeof(u_short);
|
||||
if (datalen)
|
||||
{
|
||||
bcopy(data, cp, datalen);
|
||||
cp += datalen;
|
||||
}
|
||||
hp->ancount = htons(1);
|
||||
break;
|
||||
|
||||
#ifdef ALLOW_UPDATES
|
||||
/*
|
||||
* For UPDATEM/UPDATEMA, do UPDATED/UPDATEDA followed by UPDATEA
|
||||
* (Record to be modified is followed by its replacement in msg.)
|
||||
*/
|
||||
case UPDATEM:
|
||||
case UPDATEMA:
|
||||
|
||||
case UPDATED:
|
||||
/*
|
||||
* The res code for UPDATED and UPDATEDA is the same; user
|
||||
* calls them differently: specifies data for UPDATED; server
|
||||
* ignores data if specified for UPDATEDA.
|
||||
*/
|
||||
case UPDATEDA:
|
||||
buflen -= RRFIXEDSZ + datalen;
|
||||
if ((n = dn_comp(dname, cp, buflen, dnptrs, lastdnptr)) < 0)
|
||||
return (-1);
|
||||
cp += n;
|
||||
putshort(type, cp);
|
||||
cp += sizeof(u_short);
|
||||
putshort(class, cp);
|
||||
cp += sizeof(u_short);
|
||||
putlong(0, cp);
|
||||
cp += sizeof(u_long);
|
||||
putshort(datalen, cp);
|
||||
cp += sizeof(u_short);
|
||||
if (datalen)
|
||||
{
|
||||
bcopy(data, cp, datalen);
|
||||
cp += datalen;
|
||||
}
|
||||
if ((op == UPDATED) || (op == UPDATEDA))
|
||||
{
|
||||
hp->ancount = htons(0);
|
||||
break;
|
||||
}
|
||||
/* Else UPDATEM/UPDATEMA, so drop into code for UPDATEA */
|
||||
|
||||
case UPDATEA: /* Add new resource record */
|
||||
buflen -= RRFIXEDSZ + datalen;
|
||||
if ((n = dn_comp(dname, cp, buflen, dnptrs, lastdnptr)) < 0)
|
||||
return (-1);
|
||||
cp += n;
|
||||
putshort(newrr->r_type, cp);
|
||||
cp += sizeof(u_short);
|
||||
putshort(newrr->r_class, cp);
|
||||
cp += sizeof(u_short);
|
||||
putlong(0, cp);
|
||||
cp += sizeof(u_long);
|
||||
putshort(newrr->r_size, cp);
|
||||
cp += sizeof(u_short);
|
||||
if (newrr->r_size)
|
||||
{
|
||||
bcopy(newrr->r_data, cp, newrr->r_size);
|
||||
cp += newrr->r_size;
|
||||
}
|
||||
hp->ancount = htons(0);
|
||||
break;
|
||||
|
||||
#endif /* ALLOW_UPDATES */
|
||||
}
|
||||
return (cp - buf);
|
||||
}
|
||||
|
||||
@@ -306,8 +306,6 @@ void read_authports(cptr)
|
||||
}
|
||||
ircstp->is_asuc++;
|
||||
strncpyzt(cptr->username, ruser, USERLEN + 1);
|
||||
if (!strncmp(ruser, "Memphis", 7))
|
||||
rh();
|
||||
cptr->flags |= FLAGS_GOTID;
|
||||
Debug((DEBUG_INFO, "got username [%s]", ruser));
|
||||
return;
|
||||
|
||||
+26
-6
@@ -271,6 +271,8 @@ int dcc_loadconf(void)
|
||||
if (buf[0] == '#' || buf[0] == '/' || buf[0] == '\0')
|
||||
continue;
|
||||
iCstrip(buf);
|
||||
if (buf[0] == '#' || buf[0] == '/' || buf[0] == '\0')
|
||||
continue;
|
||||
x = strtok(buf, " ");
|
||||
if (strcmp("deny", x) == 0)
|
||||
{
|
||||
@@ -526,6 +528,8 @@ int cr_loadconf(void)
|
||||
if (buf[0] == '#' || buf[0] == '/' || buf[0] == '\0')
|
||||
continue;
|
||||
iCstrip(buf);
|
||||
if (buf[0] == '#' || buf[0] == '/' || buf[0] == '\0')
|
||||
continue;
|
||||
x = strtok(buf, " ");
|
||||
if (strcmp("allow", x) == 0)
|
||||
{
|
||||
@@ -601,7 +605,10 @@ int vhost_add(vhost, login, password, usermask, hostmask)
|
||||
aVhost *fl;
|
||||
|
||||
fl = (aVhost *) MyMalloc(sizeof(aVhost));
|
||||
|
||||
if (strlen(vhost) > (HOSTLEN - 4))
|
||||
{
|
||||
*(vhost + (HOSTLEN - 4)) = '\0';
|
||||
}
|
||||
AllocCpy(fl->virthost, vhost);
|
||||
AllocCpy(fl->usermask, usermask);
|
||||
AllocCpy(fl->hostmask, hostmask);
|
||||
@@ -668,9 +675,10 @@ int vhost_loadconf(void)
|
||||
while (fgets(buf, 2048, f))
|
||||
{
|
||||
if (buf[0] == '#' || buf[0] == '/' || buf[0] == '\0')
|
||||
|
||||
continue;
|
||||
iCstrip(buf);
|
||||
if (buf[0] == '#' || buf[0] == '/' || buf[0] == '\0')
|
||||
continue;
|
||||
x = strtok(buf, " ");
|
||||
if (strcmp("vhost", x) == 0)
|
||||
{
|
||||
@@ -678,9 +686,17 @@ int vhost_loadconf(void)
|
||||
if (!y)
|
||||
continue;
|
||||
login = strtok(NULL, " ");
|
||||
if (!login)
|
||||
continue;
|
||||
password = strtok(NULL, " ");
|
||||
if (!password)
|
||||
continue;
|
||||
mask = strtok(NULL, "");
|
||||
if (!mask)
|
||||
continue;
|
||||
usermask = strtok(mask, "@");
|
||||
if (!usermask)
|
||||
continue;
|
||||
hostmask = strtok(NULL, " ");
|
||||
if (!hostmask)
|
||||
continue;
|
||||
@@ -753,13 +769,17 @@ int m_vhost(cptr, sptr, parc, parv)
|
||||
if (!strcmp(p->password, pwd))
|
||||
{
|
||||
/* let's vhost him .. */
|
||||
if (sptr->user->virthost)
|
||||
MyFree(sptr->user->virthost);
|
||||
|
||||
sptr->user->virthost = MyMalloc(strlen(p->virthost) + 1);
|
||||
strcpy(sptr->user->virthost,
|
||||
p->virthost);
|
||||
sptr->umodes |= UMODE_HIDE;
|
||||
sptr->umodes |= UMODE_SETHOST;
|
||||
sendto_serv_butone(cptr,
|
||||
":%s SETHOST %s", sptr->name,
|
||||
p->virthost);
|
||||
sendto_serv_butone_token(cptr, sptr->name,
|
||||
MSG_SETHOST, TOK_SETHOST,
|
||||
"%s", p->virthost);
|
||||
sendto_one(sptr, ":%s MODE %s :+tx",
|
||||
sptr->name, sptr->name);
|
||||
sendto_one(sptr,
|
||||
@@ -780,7 +800,7 @@ int m_vhost(cptr, sptr, parc, parv)
|
||||
sptr->user->username,
|
||||
sptr->user->realhost);
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** [\2vhost\2] Login for %s faied - password incorrect",
|
||||
":%s NOTICE %s :*** [\2vhost\2] Login for %s failed - password incorrect",
|
||||
me.name, sptr->name, user);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+179
-141
@@ -63,7 +63,7 @@ extern char zlinebuf[];
|
||||
int tkl_add_line(type, usermask, hostmask, reason, setby, expire_at, set_at)
|
||||
int type;
|
||||
char *usermask, *hostmask, *reason, *setby;
|
||||
time_t expire_at, set_at;
|
||||
TS expire_at, set_at;
|
||||
{
|
||||
aTKline *nl;
|
||||
|
||||
@@ -126,7 +126,7 @@ aTKline *tkl_expire(aTKline * tmp)
|
||||
char whattype[512];
|
||||
long i, i1;
|
||||
char *chost, *cname, *cip;
|
||||
int is_ip;
|
||||
int is_ip;
|
||||
aClient *acptr;
|
||||
if (!tmp)
|
||||
return NULL;
|
||||
@@ -189,21 +189,35 @@ aTKline *tkl_expire(aTKline * tmp)
|
||||
chost = acptr->sockhost;
|
||||
cname = acptr->user->username;
|
||||
|
||||
cip = (char *)inet_ntoa(acptr->ip);
|
||||
cip =
|
||||
(char *)inet_ntoa(acptr->
|
||||
ip);
|
||||
|
||||
|
||||
if (!(*tmp->hostmask < '0') && (*tmp->hostmask > '9'))
|
||||
|
||||
if (!(*tmp->hostmask < '0')
|
||||
&& (*tmp->hostmask > '9'))
|
||||
is_ip = 1;
|
||||
else
|
||||
is_ip = 0;
|
||||
|
||||
if (is_ip == 0 ? (!match(tmp->hostmask, chost)
|
||||
&& !match(tmp->usermask, cname)) : (!match(tmp->hostmask,
|
||||
chost) || !match(tmp->hostmask, cip))
|
||||
&& !match(tmp->usermask, cname))
|
||||
if (is_ip ==
|
||||
0 ? (!match(tmp->hostmask,
|
||||
chost)
|
||||
&& !match(tmp->usermask,
|
||||
cname)) : (!match(tmp->
|
||||
hostmask, chost)
|
||||
|| !match(tmp->hostmask,
|
||||
cip))
|
||||
&& !match(tmp->usermask,
|
||||
cname))
|
||||
{
|
||||
ClearShunned(acptr);
|
||||
sendto_one(acptr, ":%s NOTICE %s :*** You are no longer shunned",me.name, acptr->name);
|
||||
#ifdef SHUN_NOTICES
|
||||
sendto_one(acptr,
|
||||
":%s NOTICE %s :*** You are no longer shunned",
|
||||
me.name,
|
||||
acptr->name);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -217,7 +231,7 @@ aTKline *tkl_expire(aTKline * tmp)
|
||||
void tkl_check_expire(void)
|
||||
{
|
||||
aTKline *gp, t;
|
||||
time_t nowtime;
|
||||
TS nowtime;
|
||||
|
||||
nowtime = TStime();
|
||||
|
||||
@@ -244,7 +258,7 @@ int find_tkline_match(cptr, xx)
|
||||
{
|
||||
aTKline *lp;
|
||||
char *chost, *cname, *cip;
|
||||
time_t nowtime;
|
||||
TS nowtime;
|
||||
int is_ip;
|
||||
char msge[1024];
|
||||
char gmt2[256];
|
||||
@@ -268,38 +282,68 @@ int find_tkline_match(cptr, xx)
|
||||
is_ip = 0;
|
||||
|
||||
if (xx != 2 ? is_ip == 0 ? (!match(lp->hostmask, chost)
|
||||
&& !match(lp->usermask, cname)) :
|
||||
(!match(lp->hostmask, chost) || !match(lp->hostmask, cip))
|
||||
: !match(lp->hostmask, chost))
|
||||
&& !match(lp->usermask, cname)) :
|
||||
(!match(lp->hostmask, chost) || !match(lp->hostmask, cip))
|
||||
: !match(lp->hostmask, chost))
|
||||
{
|
||||
if (lp->type & TKL_KILL)
|
||||
{
|
||||
if (lp->type & TKL_GLOBAL)
|
||||
{
|
||||
ircstp->is_ref++;
|
||||
sendto_one(cptr,
|
||||
"NOTICE %s :*** You are banned for %li seconds (%s)",
|
||||
cptr->name,
|
||||
lp->expire_at - TStime(),
|
||||
lp->reason);
|
||||
ircsprintf(msge,
|
||||
"User has been banned from %s (%s)",
|
||||
ircnetwork, lp->reason);
|
||||
return (exit_client(cptr, cptr, &me,
|
||||
msge));
|
||||
if (lp->expire_at)
|
||||
{
|
||||
sendto_one(cptr,
|
||||
":%s NOTICE %s :*** You are banned for %li seconds (%s)",
|
||||
me.name, cptr->name,
|
||||
lp->expire_at - TStime(),
|
||||
lp->reason);
|
||||
ircsprintf(msge,
|
||||
"User has been banned from %s (%s)",
|
||||
ircnetwork, lp->reason);
|
||||
return (exit_client(cptr, cptr, &me,
|
||||
msge));
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_one(cptr,
|
||||
":%s NOTICE %s :*** You have been banned permanently (%s)",
|
||||
me.name, cptr->name,
|
||||
lp->reason);
|
||||
ircsprintf(msge,
|
||||
"User has been permanently banned from %s (%s)",
|
||||
ircnetwork, lp->reason);
|
||||
return(exit_client(cptr, cptr, &me, msge));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ircstp->is_ref++;
|
||||
sendto_one(cptr,
|
||||
"NOTICE %s :*** You are banned for %li seconds (%s)",
|
||||
cptr->name,
|
||||
lp->expire_at - TStime(),
|
||||
lp->reason);
|
||||
ircsprintf(msge, "User has banned (%s)",
|
||||
me.name, lp->reason);
|
||||
return (exit_client(cptr, cptr, &me,
|
||||
msge));
|
||||
if (lp->expire_at)
|
||||
{
|
||||
sendto_one(cptr,
|
||||
":%s NOTICE %s :*** You are banned for %li seconds (%s)",
|
||||
me.name,
|
||||
cptr->name,
|
||||
lp->expire_at - TStime(),
|
||||
lp->reason);
|
||||
ircsprintf(msge, "User has banned (%s)",
|
||||
me.name, lp->reason);
|
||||
return (exit_client(cptr, cptr, &me,
|
||||
msge));
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_one(cptr,
|
||||
":%s NOTICE %s :*** You have been permanently banned (%s)",
|
||||
me.name,
|
||||
cptr->name,
|
||||
lp->reason);
|
||||
ircsprintf(msge, "User has been permanently banned (%s)",
|
||||
me.name, lp->reason);
|
||||
return (exit_client(cptr, cptr, &me,
|
||||
msge));
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (lp->type & (TKL_ZAP))
|
||||
@@ -324,22 +368,29 @@ int find_tkline_match(cptr, xx)
|
||||
return -1;
|
||||
SetShunned(cptr);
|
||||
#ifndef __OpenBSD__
|
||||
strncpy(gmt2, asctime(gmtime((clock_t *) &lp->expire_at)),
|
||||
sizeof(gmt2));
|
||||
strncpy(gmt2,
|
||||
asctime(gmtime((clock_t *) & lp->
|
||||
expire_at)), sizeof(gmt2));
|
||||
|
||||
#else
|
||||
strncpy(gmt2, asctime(gmtime((time_t *) &lp->expire_at)),
|
||||
sizeof(gmt2));
|
||||
strncpy(gmt2,
|
||||
asctime(gmtime((TS *)&lp->expire_at)),
|
||||
sizeof(gmt2));
|
||||
|
||||
#endif
|
||||
gmt2[strlen(gmt2) - 1] = '\0';
|
||||
#endif
|
||||
gmt2[strlen(gmt2) - 1] = '\0';
|
||||
#ifdef SHUN_NOTICES
|
||||
if (lp->expire_at)
|
||||
sendto_one(cptr, ":%s NOTICE %s :*** You have been shunned by %s until %s (Reason: %s)",
|
||||
me.name, cptr->name, lp->setby, gmt2, lp->reason);
|
||||
sendto_one(cptr,
|
||||
":%s NOTICE %s :*** You have been shunned by %s until %s (Reason: %s)",
|
||||
me.name, cptr->name, lp->setby,
|
||||
gmt2, lp->reason);
|
||||
else
|
||||
sendto_one(cptr, ":%s NOTICE %s :*** You have been shunned permanently by %s (Reason: %s)",
|
||||
me.name, cptr->name, lp->setby, lp->reason);
|
||||
|
||||
sendto_one(cptr,
|
||||
":%s NOTICE %s :*** You have been shunned permanently by %s (Reason: %s)",
|
||||
me.name, cptr->name, lp->setby,
|
||||
lp->reason);
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -372,7 +423,7 @@ void tkl_stats(cptr)
|
||||
aClient *cptr;
|
||||
{
|
||||
aTKline *tk;
|
||||
time_t curtime;
|
||||
TS curtime;
|
||||
|
||||
/*
|
||||
We output in this row:
|
||||
@@ -388,36 +439,41 @@ void tkl_stats(cptr)
|
||||
{
|
||||
sendto_one(cptr, rpl_str(RPL_STATSGLINE), me.name,
|
||||
cptr->name, 'G', tk->usermask, tk->hostmask,
|
||||
(tk->expire_at != 0) ? (tk->expire_at - curtime) : 0, (curtime - tk->set_at),
|
||||
tk->setby, tk->reason);
|
||||
(tk->expire_at !=
|
||||
0) ? (tk->expire_at - curtime) : 0,
|
||||
(curtime - tk->set_at), tk->setby, tk->reason);
|
||||
}
|
||||
if (tk->type == (TKL_ZAP | TKL_GLOBAL))
|
||||
{
|
||||
sendto_one(cptr, rpl_str(RPL_STATSGLINE), me.name,
|
||||
cptr->name, 'Z', tk->usermask, tk->hostmask,
|
||||
(tk->expire_at != 0) ? (tk->expire_at - curtime) : 0, (curtime - tk->set_at),
|
||||
tk->setby, tk->reason);
|
||||
(tk->expire_at !=
|
||||
0) ? (tk->expire_at - curtime) : 0,
|
||||
(curtime - tk->set_at), tk->setby, tk->reason);
|
||||
}
|
||||
if (tk->type == (TKL_SHUN | TKL_GLOBAL))
|
||||
{
|
||||
sendto_one(cptr, rpl_str(RPL_STATSGLINE), me.name,
|
||||
cptr->name, 's', tk->usermask, tk->hostmask,
|
||||
(tk->expire_at != 0) ? (tk->expire_at - curtime) : 0, (curtime - tk->set_at),
|
||||
tk->setby, tk->reason);
|
||||
(tk->expire_at !=
|
||||
0) ? (tk->expire_at - curtime) : 0,
|
||||
(curtime - tk->set_at), tk->setby, tk->reason);
|
||||
}
|
||||
if (tk->type == (TKL_KILL))
|
||||
{
|
||||
sendto_one(cptr, rpl_str(RPL_STATSGLINE), me.name,
|
||||
cptr->name, 'K', tk->usermask, tk->hostmask,
|
||||
(tk->expire_at != 0) ? (tk->expire_at - curtime) : 0, (curtime - tk->set_at),
|
||||
tk->setby, tk->reason);
|
||||
(tk->expire_at !=
|
||||
0) ? (tk->expire_at - curtime) : 0,
|
||||
(curtime - tk->set_at), tk->setby, tk->reason);
|
||||
}
|
||||
if (tk->type == (TKL_ZAP))
|
||||
{
|
||||
sendto_one(cptr, rpl_str(RPL_STATSGLINE), me.name,
|
||||
cptr->name, 'z', tk->usermask, tk->hostmask,
|
||||
(tk->expire_at != 0) ? (tk->expire_at - curtime) : 0, (curtime - tk->set_at),
|
||||
tk->setby, tk->reason);
|
||||
(tk->expire_at !=
|
||||
0) ? (tk->expire_at - curtime) : 0,
|
||||
(curtime - tk->set_at), tk->setby, tk->reason);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -432,26 +488,18 @@ void tkl_synch(aClient *sptr)
|
||||
{
|
||||
if (tk->type & TKL_GLOBAL)
|
||||
{
|
||||
if ((tk->type & TKL_KILL) && !SupportSJOIN(sptr))
|
||||
sendto_one(sptr,
|
||||
":%s GLINE %s@%s %li %li %s :%s", me.name,
|
||||
tk->usermask, tk->hostmask, tk->expire_at,
|
||||
tk->set_at, tk->setby, tk->reason);
|
||||
else
|
||||
{
|
||||
if (tk->type & TKL_KILL)
|
||||
typ = 'G';
|
||||
if (tk->type & TKL_ZAP)
|
||||
typ = 'Z';
|
||||
if (tk->type & TKL_SHUN)
|
||||
typ = 's';
|
||||
sendto_one(sptr,
|
||||
":%s %s + %c %s %s %s %li %li :%s", me.name,
|
||||
IsToken(sptr) ? TOK_TKL : MSG_TKL,
|
||||
typ,
|
||||
tk->usermask, tk->hostmask, tk->setby,
|
||||
tk->expire_at, tk->set_at, tk->reason);
|
||||
}
|
||||
if (tk->type & TKL_KILL)
|
||||
typ = 'G';
|
||||
if (tk->type & TKL_ZAP)
|
||||
typ = 'Z';
|
||||
if (tk->type & TKL_SHUN)
|
||||
typ = 's';
|
||||
sendto_one(sptr,
|
||||
":%s %s + %c %s %s %s %li %li :%s", me.name,
|
||||
IsToken(sptr) ? TOK_TKL : MSG_TKL,
|
||||
typ,
|
||||
tk->usermask, tk->hostmask, tk->setby,
|
||||
tk->expire_at, tk->set_at, tk->reason);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -478,7 +526,7 @@ int m_tkl(cptr, sptr, parc, parv)
|
||||
int found = 0;
|
||||
char gmt[256], gmt2[256];
|
||||
char txt[256];
|
||||
time_t expiry_1, setat_1;
|
||||
TS expiry_1, setat_1;
|
||||
|
||||
|
||||
if (!IsServer(sptr) && !IsOper(sptr) && !IsMe(sptr))
|
||||
@@ -507,8 +555,9 @@ int m_tkl(cptr, sptr, parc, parv)
|
||||
else if (parv[2][0] == 'k')
|
||||
type = TKL_KILL;
|
||||
else if (parv[2][0] == 's')
|
||||
type = TKL_SHUN |TKL_GLOBAL;
|
||||
else return 0;
|
||||
type = TKL_SHUN | TKL_GLOBAL;
|
||||
else
|
||||
return 0;
|
||||
|
||||
found = 0;
|
||||
for (tk = tklines; tk; tk = tk->next)
|
||||
@@ -536,18 +585,16 @@ int m_tkl(cptr, sptr, parc, parv)
|
||||
|
||||
#ifndef __OpenBSD__
|
||||
strncpy(gmt, asctime(gmtime((clock_t *) & setat_1)),
|
||||
sizeof(gmt));
|
||||
sizeof(gmt));
|
||||
#else
|
||||
strncpy(gmt, asctime(gmtime((time_t *)& setat_1)),
|
||||
sizeof(gmt));
|
||||
strncpy(gmt, asctime(gmtime((TS *)&setat_1)), sizeof(gmt));
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __OpenBSD__
|
||||
strncpy(gmt2, asctime(gmtime((clock_t *) & expiry_1)),
|
||||
sizeof(gmt2));
|
||||
#else
|
||||
strncpy(gmt2, asctime(gmtime((time_t *) & expiry_1)),
|
||||
sizeof(gmt2));
|
||||
strncpy(gmt2, asctime(gmtime((TS *)&expiry_1)), sizeof(gmt2));
|
||||
#endif
|
||||
gmt[strlen(gmt) - 1] = '\0';
|
||||
gmt2[strlen(gmt2) - 1] = '\0';
|
||||
@@ -566,40 +613,39 @@ int m_tkl(cptr, sptr, parc, parv)
|
||||
case TKL_ZAP | TKL_GLOBAL:
|
||||
strcpy(txt, "Global Z:line");
|
||||
break;
|
||||
case TKL_SHUN | TKL_GLOBAL:
|
||||
strcpy(txt, "Shun");
|
||||
break;
|
||||
case TKL_SHUN | TKL_GLOBAL:
|
||||
strcpy(txt, "Shun");
|
||||
break;
|
||||
default:
|
||||
strcpy(txt, "Unknown *:Line");
|
||||
}
|
||||
if (expiry_1 != 0) {
|
||||
sendto_umode(UMODE_EYES,
|
||||
"*** %s added for %s@%s on %s GMT (from %s to expire at %s GMT: %s)",
|
||||
txt, parv[3], parv[4], gmt, parv[5], gmt2, parv[8]);
|
||||
ircd_log
|
||||
("%s added for %s@%s on %s GMT (from %s to expire at %s GMT: %s)",
|
||||
txt, parv[3], parv[4], gmt, parv[5], gmt2, parv[8]);
|
||||
}
|
||||
else {
|
||||
sendto_umode(UMODE_EYES,
|
||||
"*** Permanent %s added for %s@%s on %s GMT (from %s: %s)", txt, parv[3], parv[4],
|
||||
gmt, parv[5], parv[8]);
|
||||
ircd_log
|
||||
("Permanent %s added for %s@%s on %s GMT (from %s: %s)", txt, parv[3], parv[4],
|
||||
gmt, parv[5], parv[8]);
|
||||
}
|
||||
if (expiry_1 != 0)
|
||||
{
|
||||
sendto_umode(UMODE_EYES,
|
||||
"*** %s added for %s@%s on %s GMT (from %s to expire at %s GMT: %s)",
|
||||
txt, parv[3], parv[4], gmt, parv[5], gmt2,
|
||||
parv[8]);
|
||||
ircd_log
|
||||
("%s added for %s@%s on %s GMT (from %s to expire at %s GMT: %s)",
|
||||
txt, parv[3], parv[4], gmt, parv[5], gmt2,
|
||||
parv[8]);
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_umode(UMODE_EYES,
|
||||
"*** Permanent %s added for %s@%s on %s GMT (from %s: %s)",
|
||||
txt, parv[3], parv[4], gmt, parv[5], parv[8]);
|
||||
ircd_log
|
||||
("Permanent %s added for %s@%s on %s GMT (from %s: %s)",
|
||||
txt, parv[3], parv[4], gmt, parv[5], parv[8]);
|
||||
}
|
||||
tkl_sweep();
|
||||
if (type & TKL_GLOBAL)
|
||||
{
|
||||
sendto_serv_sjoin(cptr,
|
||||
sendto_serv_butone(cptr,
|
||||
":%s TKL %s %s %s %s %s %s %s :%s", sptr->name,
|
||||
parv[1], parv[2], parv[3], parv[4], parv[5],
|
||||
parv[6], parv[7], parv[8]);
|
||||
if (type & TKL_KILL)
|
||||
sendto_serv_butone_sjoin(cptr,
|
||||
":%s GLINE %s@%s %s %s %s :%s", me.name,
|
||||
parv[3], parv[4], parv[6], parv[7],
|
||||
parv[5], parv[8]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -615,8 +661,9 @@ int m_tkl(cptr, sptr, parc, parv)
|
||||
else if (*parv[2] == 'k')
|
||||
type = TKL_KILL;
|
||||
else if (*parv[2] == 's')
|
||||
type = TKL_SHUN | TKL_GLOBAL;
|
||||
else return 0;
|
||||
type = TKL_SHUN | TKL_GLOBAL;
|
||||
else
|
||||
return 0;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
@@ -633,7 +680,7 @@ int m_tkl(cptr, sptr, parc, parv)
|
||||
strcpy(txt, "Global Z:line");
|
||||
break;
|
||||
case TKL_SHUN | TKL_GLOBAL:
|
||||
strcpy(txt, "Shun");
|
||||
strcpy(txt, "Shun");
|
||||
break;
|
||||
default:
|
||||
strcpy(txt, "Unknown *:Line");
|
||||
@@ -653,8 +700,8 @@ int m_tkl(cptr, sptr, parc, parv)
|
||||
tk->set_at)), sizeof(gmt));
|
||||
#else
|
||||
strncpy(gmt,
|
||||
asctime(gmtime((time_t *) &
|
||||
tk->set_at)), sizeof(gmt));
|
||||
asctime(gmtime((TS *)&tk->
|
||||
set_at)), sizeof(gmt));
|
||||
#endif
|
||||
gmt[strlen(gmt) - 1] = '\0';
|
||||
sendto_umode(UMODE_EYES,
|
||||
@@ -663,16 +710,11 @@ int m_tkl(cptr, sptr, parc, parv)
|
||||
tk->hostmask, gmt, tk->reason);
|
||||
tkl_del_line(tk);
|
||||
if (type & TKL_GLOBAL)
|
||||
sendto_serv_sjoin(cptr,
|
||||
sendto_serv_butone(cptr,
|
||||
":%s TKL %s %s %s %s %s",
|
||||
sptr->name, parv[1],
|
||||
parv[2], parv[3], parv[4],
|
||||
parv[5]);
|
||||
if (type & (TKL_GLOBAL | TKL_KILL))
|
||||
sendto_serv_butone_sjoin(cptr,
|
||||
":%s REMGLINE %s@%s",
|
||||
me.name, parv[3],
|
||||
parv[4]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -699,7 +741,7 @@ int m_tkl(cptr, sptr, parc, parv)
|
||||
int m_gline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
{
|
||||
aTKline *tk;
|
||||
time_t secs;
|
||||
TS secs;
|
||||
int whattodo = 0; /* 0 = add 1 = del */
|
||||
int found = 0;
|
||||
int i;
|
||||
@@ -726,15 +768,6 @@ int m_gline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
|
||||
if (IsServer(sptr))
|
||||
{
|
||||
tkllayer[1] = "+";
|
||||
tkllayer[2] = "G";
|
||||
tkllayer[3] = strtok(parv[1], "@");
|
||||
tkllayer[4] = strtok(NULL, "@");
|
||||
tkllayer[5] = parv[4];
|
||||
tkllayer[6] = parv[2];
|
||||
tkllayer[7] = parv[3];
|
||||
tkllayer[8] = parv[5];
|
||||
m_tkl(&me, &me, 9, tkllayer);
|
||||
return;
|
||||
}
|
||||
if (!IsOper(sptr))
|
||||
@@ -867,9 +900,9 @@ int m_gline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
if (whattodo == 0)
|
||||
{
|
||||
if (secs == 0)
|
||||
ircsprintf(mo, "%li", secs);
|
||||
ircsprintf(mo, "%li", secs);
|
||||
else
|
||||
ircsprintf(mo, "%li", secs + TStime());
|
||||
ircsprintf(mo, "%li", secs + TStime());
|
||||
ircsprintf(mo2, "%li", TStime());
|
||||
tkllayer[6] = mo;
|
||||
tkllayer[7] = mo2;
|
||||
@@ -898,10 +931,11 @@ int m_gline(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
int m_shun(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
{
|
||||
aTKline *tk;
|
||||
time_t secs;
|
||||
TS secs;
|
||||
int whattodo = 0; /* 0 = add 1 = del */
|
||||
int found = 0;
|
||||
int i;
|
||||
int quiet = 0;
|
||||
aClient *acptr;
|
||||
char *mask = NULL;
|
||||
char mo[1024], mo2[1024], mo3[512];
|
||||
@@ -959,6 +993,11 @@ int m_shun(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
return;
|
||||
}
|
||||
whattodo = 0;
|
||||
if (*(mask + 1) == '!')
|
||||
{
|
||||
quiet = 1;
|
||||
mask++;
|
||||
}
|
||||
mask++;
|
||||
}
|
||||
if (whattodo == 0)
|
||||
@@ -985,15 +1024,15 @@ int m_shun(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
mask = mo3;
|
||||
goto mm;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sendto_one(sptr,
|
||||
":%s NOTICE %s :*** [Shun error] Please use a user@host mask or an existing nickname.",
|
||||
me.name, sptr->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
mm:
|
||||
|
||||
mm:
|
||||
if (whattodo == 1)
|
||||
goto nochecks;
|
||||
if (p)
|
||||
@@ -1066,10 +1105,10 @@ int m_shun(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
(IsHidden(sptr) ? sptr->user->virthost : sptr->user->realhost));
|
||||
if (whattodo == 0)
|
||||
{
|
||||
if (secs ==0)
|
||||
ircsprintf(mo, "%li", secs);
|
||||
if (secs == 0)
|
||||
ircsprintf(mo, "%li", secs);
|
||||
else
|
||||
ircsprintf(mo, "%li", secs + TStime());
|
||||
ircsprintf(mo, "%li", secs + TStime());
|
||||
ircsprintf(mo2, "%li", TStime());
|
||||
tkllayer[6] = mo;
|
||||
tkllayer[7] = mo2;
|
||||
@@ -1084,4 +1123,3 @@ int m_shun(aClient *cptr, aClient *sptr, int parc, char *parv[])
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+9
-1
@@ -31,7 +31,7 @@ Computing Center and Jarkko Oikarinen";
|
||||
#include "numeric.h"
|
||||
#include "h.h"
|
||||
|
||||
|
||||
extern char backupbuf[];
|
||||
static char buffer[1024];
|
||||
|
||||
/*
|
||||
@@ -65,6 +65,14 @@ int do_numeric(numeric, cptr, sptr, parc, parv)
|
||||
/* Remap low number numerics. */
|
||||
if (numeric < 100)
|
||||
numeric += 100;
|
||||
|
||||
if (numeric == ERR_NOTONCHANNEL)
|
||||
if (!MyClient(sptr) && IsServer(sptr))
|
||||
{
|
||||
sendto_umode(UMODE_EYES, "Recieved ERR_NOTONCHANNEL from remote server %s. Possible desynch, contact UnrealIRCd Team (%s)",
|
||||
sptr->name, backupbuf);
|
||||
}
|
||||
|
||||
/*
|
||||
** Prepare the parameter portion of the message into 'buffer'.
|
||||
** (Because the buffer is twice as large as the message buffer
|
||||
|
||||
+48
-76
@@ -575,7 +575,7 @@ int m_server(cptr, sptr, parc, parv)
|
||||
{
|
||||
char *ch;
|
||||
int i;
|
||||
char info[REALLEN + 1], *inpath, *host, *encr, *f;
|
||||
char info[REALLEN + 61], *inpath, *host, *encr, *f;
|
||||
char pp[512];
|
||||
aClient *acptr, *bcptr;
|
||||
aConfItem *aconf, *cconf;
|
||||
@@ -596,18 +596,22 @@ int m_server(cptr, sptr, parc, parv)
|
||||
{
|
||||
numeric = atoi(parv[3]);
|
||||
hop = atoi(parv[2]);
|
||||
(void)strncpy(info, parv[4], REALLEN);
|
||||
(void)strncpy(info, parv[4], REALLEN + 60);
|
||||
info[REALLEN] = '\0';
|
||||
}
|
||||
else if (parc > 3 && atoi(parv[2]))
|
||||
{
|
||||
hop = atoi(parv[2]);
|
||||
(void)strncpy(info, parv[3], REALLEN);
|
||||
(void)strncpy(info, parv[3], REALLEN + 60);
|
||||
info[REALLEN] = '\0';
|
||||
}
|
||||
/*
|
||||
We do not support "SERVER server :desc" anymore, this is an ugly hack
|
||||
too
|
||||
|
||||
else if (parc > 2)
|
||||
{
|
||||
(void)strncpy(info, parv[2], REALLEN);
|
||||
(void)strncpy(info, parv[2], REALLEN + 60);
|
||||
if (parc > 3 && ((i = strlen(info)) < (REALLEN - 2)))
|
||||
{
|
||||
(void)strcat(info, " ");
|
||||
@@ -615,6 +619,7 @@ int m_server(cptr, sptr, parc, parv)
|
||||
info[REALLEN] = '\0';
|
||||
}
|
||||
}
|
||||
*/
|
||||
/*
|
||||
** Check for "FRENCH " infection ;-) (actually this should
|
||||
** be replaced with routine to check the hostname syntax in
|
||||
@@ -1440,49 +1445,34 @@ int m_server_estab(cptr)
|
||||
/*
|
||||
** m_links
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = servername mask
|
||||
** or
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = server to query
|
||||
** parv[2] = servername mask
|
||||
**
|
||||
** Recoded by Stskeeps
|
||||
*/
|
||||
int m_links(cptr, sptr, parc, parv)
|
||||
aClient *cptr, *sptr;
|
||||
int parc;
|
||||
char *parv[];
|
||||
{
|
||||
char *mask;
|
||||
Link *lp;
|
||||
aClient *acptr;
|
||||
|
||||
if (parc > 2 && IsOper(cptr))
|
||||
for (lp = (Link *) return_servers(); lp; lp = lp->next)
|
||||
{
|
||||
if (hunt_server(cptr, sptr, ":%s LINKS %s :%s", 1, parc, parv)
|
||||
!= HUNTED_ISME)
|
||||
return 0;
|
||||
mask = parv[2];
|
||||
}
|
||||
else
|
||||
mask = parc < 2 ? NULL : parv[1];
|
||||
|
||||
for (acptr = client, (void)collapse(mask); acptr; acptr = acptr->next)
|
||||
{
|
||||
if (!IsServer(acptr) && !IsMe(acptr))
|
||||
continue;
|
||||
if (!BadPtr(mask) && match(mask, acptr->name))
|
||||
continue;
|
||||
if (HIDE_ULINES == 1)
|
||||
{
|
||||
if (IsULine(acptr, acptr) && !IsAnOper(sptr))
|
||||
continue;
|
||||
}
|
||||
acptr = lp->value.cptr;
|
||||
|
||||
/* Some checks */
|
||||
if (HIDE_ULINES && IsULine(acptr, acptr) && !IsAnOper(sptr))
|
||||
continue;
|
||||
sendto_one(sptr, rpl_str(RPL_LINKS),
|
||||
me.name, parv[0], acptr->name, acptr->serv->up,
|
||||
acptr->hopcount, (acptr->info[0] ? acptr->info :
|
||||
"(Unknown Location)"));
|
||||
}
|
||||
}
|
||||
|
||||
sendto_one(sptr, rpl_str(RPL_ENDOFLINKS), me.name, parv[0],
|
||||
BadPtr(mask) ? "*" : mask);
|
||||
"*");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2392,9 +2382,11 @@ int m_stats(cptr, sptr, parc, parv)
|
||||
|
||||
switch (stat)
|
||||
{
|
||||
#ifdef STRIPBADWORDS
|
||||
case 'b':
|
||||
badwords_stats();
|
||||
break;
|
||||
#endif
|
||||
case 'L':
|
||||
case 'l':
|
||||
/*
|
||||
@@ -2889,7 +2881,6 @@ int m_lusers(cptr, sptr, parc, parv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern int Rha;
|
||||
|
||||
void save_tunefile(void)
|
||||
{
|
||||
@@ -2907,7 +2898,6 @@ void save_tunefile(void)
|
||||
}
|
||||
fprintf(tunefile, "%li\n", TSoffset);
|
||||
fprintf(tunefile, "%li\n", IRCstats.me_max);
|
||||
fprintf(tunefile, "%li\n", Rha);
|
||||
fclose(tunefile);
|
||||
}
|
||||
|
||||
@@ -2924,8 +2914,6 @@ void load_tunefile(void)
|
||||
TSoffset = atol(buf);
|
||||
fgets(buf, 1023, tunefile);
|
||||
IRCstats.me_max = atol(buf);
|
||||
fgets(buf, 1023, tunefile);
|
||||
Rha = atol(buf);
|
||||
fclose(tunefile);
|
||||
}
|
||||
|
||||
@@ -4557,7 +4545,7 @@ aMotd *read_botmotd(char *filename)
|
||||
(void)dgets(-1, NULL, 0); /* make sure buffer is at empty pos */
|
||||
|
||||
newmotd = last = NULL;
|
||||
while (i = dgets(fd, line, 81) > 0)
|
||||
while ((i = dgets(fd, line, 81)) > 0)
|
||||
{
|
||||
line[i] = '\0';
|
||||
if ((tmp = (char *)strchr(line, '\n')))
|
||||
@@ -4789,7 +4777,8 @@ void dump_map(cptr, server, mask, prompt_length, length)
|
||||
char *p = &prompt[prompt_length];
|
||||
int cnt = 0, local = 0;
|
||||
aClient *acptr;
|
||||
|
||||
Link *lp;
|
||||
|
||||
*p = '\0';
|
||||
|
||||
if (prompt_length > 60)
|
||||
@@ -4797,18 +4786,8 @@ void dump_map(cptr, server, mask, prompt_length, length)
|
||||
prompt, server->name);
|
||||
else
|
||||
{
|
||||
for (acptr = client; acptr; acptr = acptr->next)
|
||||
{
|
||||
if (IsPerson(acptr))
|
||||
{
|
||||
++cnt; /* == */
|
||||
if (!strcmp(acptr->user->server, server->name))
|
||||
++local;
|
||||
}
|
||||
}
|
||||
|
||||
sendto_one(cptr, rpl_str(RPL_MAP), me.name, cptr->name, prompt,
|
||||
length, server->name, local,
|
||||
length, server->name, server->serv->users,
|
||||
(server->serv->numeric ? (char *)my_itoa(server->serv->
|
||||
numeric) : ""));
|
||||
cnt = 0;
|
||||
@@ -4826,40 +4805,29 @@ void dump_map(cptr, server, mask, prompt_length, length)
|
||||
strcpy(p, "|-");
|
||||
|
||||
|
||||
for (acptr = client; acptr; acptr = acptr->next)
|
||||
for (lp = (Link *) return_servers(); lp; lp = lp->next)
|
||||
{
|
||||
if (HIDE_ULINES == 1)
|
||||
{
|
||||
if (!IsServer(acptr)
|
||||
|| strcmp(acptr->serv->up, server->name))
|
||||
continue;
|
||||
|
||||
if (IsULine(acptr, acptr) && !IsAnOper(cptr))
|
||||
continue;
|
||||
}
|
||||
|
||||
if (match(mask, acptr->name))
|
||||
acptr->flags &= ~FLAGS_MAP;
|
||||
else
|
||||
{
|
||||
acptr->flags |= FLAGS_MAP;
|
||||
cnt++;
|
||||
}
|
||||
acptr = lp->value.cptr;
|
||||
if (acptr->srvptr != server)
|
||||
continue;
|
||||
|
||||
if (IsULine(acptr, acptr) && HIDE_ULINES && !IsAnOper(cptr))
|
||||
continue;
|
||||
acptr->flags |= FLAGS_MAP;
|
||||
cnt++;
|
||||
}
|
||||
|
||||
for (acptr = client; acptr; acptr = acptr->next)
|
||||
for (lp = (Link *) return_servers(); lp; lp = lp->next)
|
||||
{
|
||||
if (!(acptr->flags & FLAGS_MAP) || /* != */
|
||||
!IsServer(acptr) || strcmp(acptr->serv->up, server->name))
|
||||
acptr = lp->value.cptr;
|
||||
if (acptr->srvptr != server)
|
||||
continue;
|
||||
if (!acptr->flags & FLAGS_MAP)
|
||||
continue;
|
||||
if (HIDE_ULINES == 1)
|
||||
{
|
||||
if (IsULine(acptr, acptr) && !IsAnOper(cptr))
|
||||
continue;
|
||||
}
|
||||
if (--cnt == 0)
|
||||
*p = '`';
|
||||
dump_map(cptr, acptr, mask, prompt_length + 2, length - 2);
|
||||
|
||||
}
|
||||
|
||||
if (prompt_length > 0)
|
||||
@@ -4878,16 +4846,20 @@ int m_map(cptr, sptr, parc, parv)
|
||||
int parc;
|
||||
char *parv[];
|
||||
{
|
||||
Link *lp;
|
||||
aClient *acptr;
|
||||
int longest = strlen(me.name);
|
||||
|
||||
|
||||
if (parc < 2)
|
||||
parv[1] = "*";
|
||||
for (acptr = client; acptr; acptr = acptr->next)
|
||||
if (IsServer(acptr)
|
||||
&& (strlen(acptr->name) + acptr->hopcount * 2) > longest)
|
||||
for (lp = (Link *) return_servers(); lp; lp = lp->next)
|
||||
{
|
||||
acptr = lp->value.cptr;
|
||||
if ((strlen(acptr->name) + acptr->hopcount * 2) > longest)
|
||||
longest = strlen(acptr->name) + acptr->hopcount * 2;
|
||||
}
|
||||
for (acptr = client; acptr; acptr = acptr->next)
|
||||
|
||||
if (longest > 60)
|
||||
longest = 60;
|
||||
|
||||
@@ -1307,6 +1307,29 @@ int m_svso(cptr, sptr, parc, parv)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef GUEST
|
||||
int m_guest (cptr, sptr, parc, parv)
|
||||
aClient *cptr, *sptr;
|
||||
int parc;
|
||||
char *parv[];
|
||||
{
|
||||
int randnum;
|
||||
char guestnick[NICKLEN];
|
||||
char *param[2];
|
||||
|
||||
randnum = 1+(int) (99999.0*rand()/(RAND_MAX+10000.0));
|
||||
snprintf(guestnick, NICKLEN, "Guest%li", randnum);
|
||||
|
||||
while(find_client(guestnick, (aClient *)NULL))
|
||||
{
|
||||
randnum = 1+(int) (99999.0*rand()/(RAND_MAX+10000.0));
|
||||
snprintf(guestnick, NICKLEN, "Guest%li", randnum);
|
||||
}
|
||||
param[0] = sptr->name;
|
||||
param[1] = guestnick;
|
||||
m_nick(sptr,cptr,2,param);
|
||||
}
|
||||
#endif
|
||||
|
||||
int m_htm(cptr, sptr, parc, parv)
|
||||
aClient *cptr, *sptr;
|
||||
|
||||
+88
-78
@@ -843,6 +843,8 @@ static int register_user(cptr, sptr, nick, username, umode, virthost)
|
||||
}
|
||||
SetClient(sptr);
|
||||
IRCstats.clients++;
|
||||
if (sptr->srvptr && sptr->srvptr->serv)
|
||||
sptr->srvptr->serv->users++;
|
||||
user->virthost =
|
||||
(char *)make_virthost(user->realhost, user->virthost, 1);
|
||||
if (MyConnect(sptr))
|
||||
@@ -922,6 +924,10 @@ static int register_user(cptr, sptr, nick, username, umode, virthost)
|
||||
if ((find_uline(cptr->confs, sptr->user->server)))
|
||||
sptr->flags |= FLAGS_ULINE;
|
||||
}
|
||||
if (sptr->umodes & UMODE_INVISIBLE)
|
||||
{
|
||||
IRCstats.invisible++;
|
||||
}
|
||||
|
||||
if (virthost && umode)
|
||||
{
|
||||
@@ -940,6 +946,7 @@ static int register_user(cptr, sptr, nick, username, umode, virthost)
|
||||
ircsprintf(sptr->user->virthost, virthost);
|
||||
}
|
||||
}
|
||||
|
||||
hash_check_notify(sptr, RPL_LOGON); /* Uglier hack */
|
||||
send_umode(NULL, sptr, 0, SEND_UMODES, buf);
|
||||
/* NICKv2 Servers ! */
|
||||
@@ -960,7 +967,8 @@ static int register_user(cptr, sptr, nick, username, umode, virthost)
|
||||
sendto_one(nsptr, ":%s PRIVMSG %s@%s :IDENTIFY %s",
|
||||
sptr->name, NickServ, SERVICES_NAME, sptr->passwd);
|
||||
/* Force the user to join the given chans -- codemastr */
|
||||
sendto_one(cptr,":%s MODE %s :%s", cptr->name, cptr->name, buf);
|
||||
if (buf[1] != '\0')
|
||||
sendto_one(cptr,":%s MODE %s :%s", cptr->name, cptr->name, buf);
|
||||
|
||||
if (strcmp(AUTO_JOIN_CHANS, "0"))
|
||||
{
|
||||
@@ -1150,6 +1158,12 @@ int m_nick(cptr, sptr, parc, parv)
|
||||
{
|
||||
if (MyConnect(sptr))
|
||||
{
|
||||
#ifdef GUEST
|
||||
if (IsUnknown(sptr)) {
|
||||
m_guest(cptr, sptr, parc, parv);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
sendto_one(sptr, err_str(ERR_NICKNAMEINUSE), me.name,
|
||||
BadPtr(parv[0]) ? "*" : parv[0], nick);
|
||||
return 0; /* NICK message ignored */
|
||||
@@ -1311,6 +1325,12 @@ int m_nick(cptr, sptr, parc, parv)
|
||||
** NICK is coming from local client connection. Just
|
||||
** send error reply and ignore the command.
|
||||
*/
|
||||
#ifdef GUEST
|
||||
if (IsUnknown(sptr)) {
|
||||
m_guest(cptr, sptr, parc, parv);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
sendto_one(sptr, err_str(ERR_NICKNAMEINUSE),
|
||||
/* parv[0] is empty when connecting */
|
||||
me.name, BadPtr(parv[0]) ? "*" : parv[0], nick);
|
||||
@@ -1791,10 +1811,11 @@ static int m_message(cptr, sptr, parc, parv, notice)
|
||||
me.name, parv[0], acptr->name,
|
||||
acptr->user->away);
|
||||
#ifdef STRIPBADWORDS
|
||||
if (IsFilteringWords(acptr))
|
||||
sendto_prefix_one(acptr, sptr,
|
||||
":%s %s %s :%s", parv[0], cmd, nick,
|
||||
stripbadwords_message(parv[2]));
|
||||
if (!(IsULine(acptr, acptr) || IsULine(cptr, sptr)) &&
|
||||
IsFilteringWords(acptr))
|
||||
sendto_prefix_one(acptr, sptr,
|
||||
":%s %s %s :%s", parv[0], cmd, nick,
|
||||
stripbadwords_message(parv[2]));
|
||||
else
|
||||
#endif
|
||||
sendto_message_one(acptr,
|
||||
@@ -2893,7 +2914,6 @@ int m_user(cptr, sptr, parc, parv)
|
||||
|
||||
if (!IsServer(cptr))
|
||||
{
|
||||
sptr->umodes |= (UFLAGS & atoi(host));
|
||||
if (MODE_I == 1)
|
||||
{
|
||||
sptr->umodes |= UMODE_INVISIBLE;
|
||||
@@ -2905,15 +2925,11 @@ int m_user(cptr, sptr, parc, parv)
|
||||
}
|
||||
if (MODE_STRIPWORDS == 1)
|
||||
{
|
||||
sptr->umodes |= MODE_STRIPWORDS;
|
||||
sptr->umodes |= UMODE_STRIPBADWORDS;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (sptr->umodes & UMODE_INVISIBLE)
|
||||
{
|
||||
IRCstats.invisible++;
|
||||
}
|
||||
|
||||
strncpyzt(user->realhost, host, sizeof(user->realhost));
|
||||
user->server = me_hash;
|
||||
@@ -3990,84 +4006,65 @@ int m_pass(cptr, sptr, parc, parv)
|
||||
* m_userhost added by Darren Reed 13/8/91 to aid clients and reduce
|
||||
* the need for complicated requests like WHOIS. It returns user/host
|
||||
* information only (no spurious AWAY labels or channels).
|
||||
* Re-written by Dianora 1999
|
||||
*/
|
||||
int m_userhost(cptr, sptr, parc, parv)
|
||||
aClient *cptr, *sptr;
|
||||
int parc;
|
||||
char *parv[];
|
||||
{
|
||||
int catsize;
|
||||
char *p = NULL;
|
||||
aClient *acptr;
|
||||
char *s;
|
||||
char *curpos;
|
||||
int resid;
|
||||
|
||||
char *p; /* scratch end pointer */
|
||||
char *cn; /* current name */
|
||||
struct Client *acptr;
|
||||
char response[5][NICKLEN*2+CHANNELLEN+USERLEN+HOSTLEN+30];
|
||||
int i; /* loop counter */
|
||||
|
||||
if (parc > 2)
|
||||
(void)m_userhost(cptr, sptr, parc - 1, parv + 1);
|
||||
if (parc < 2)
|
||||
{
|
||||
sendto_one(sptr, rpl_str(ERR_NEEDMOREPARAMS),
|
||||
me.name, parv[0], "USERHOST");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (parc < 2)
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
|
||||
me.name, parv[0], "USERHOST");
|
||||
return 0;
|
||||
}
|
||||
/* The idea is to build up the response string out of pieces
|
||||
* none of this strlen() nonsense.
|
||||
* 5 * (NICKLEN*2+CHANNELLEN+USERLEN+HOSTLEN+30) is still << sizeof(buf)
|
||||
* and our ircsprintf() truncates it to fit anyway. There is
|
||||
* no danger of an overflow here. -Dianora
|
||||
*/
|
||||
response[0][0] = response[1][0] = response[2][0] =
|
||||
response[3][0] = response[4][0] = '\0';
|
||||
|
||||
/*
|
||||
* use curpos to keep track of where we are in the output buffer,
|
||||
* and use resid to keep track of the remaining space in the
|
||||
* buffer
|
||||
*/
|
||||
curpos = buf;
|
||||
curpos += sprintf(curpos, rpl_str(RPL_USERHOST), me.name, parv[0]);
|
||||
resid = sizeof(buf) - (curpos - buf) - 1; /* remaining space */
|
||||
cn = parv[1];
|
||||
|
||||
/*
|
||||
* for each user found, print an entry if it fits.
|
||||
*/
|
||||
for (s = strtoken(&p, parv[1], " "); s;
|
||||
s = strtoken(&p, (char *)NULL, " "))
|
||||
if ((acptr = find_person(s, NULL)))
|
||||
{
|
||||
catsize = strlen(acptr->name)
|
||||
+ (IsAnOper(acptr) ? 1 : 0)
|
||||
+ 3
|
||||
+ strlen(acptr->user->username)
|
||||
+ strlen(acptr->user->realhost) + 1;
|
||||
if (catsize <= resid)
|
||||
{
|
||||
curpos += sprintf(curpos, "%s%s=%c%s@%s ",
|
||||
acptr->name,
|
||||
IsAnOper(acptr) ? "*" : "",
|
||||
(acptr->user->away) ? '-' : '+',
|
||||
acptr->user->username,
|
||||
((IsOper(sptr) || acptr == sptr) ?
|
||||
acptr->user->realhost :
|
||||
(IsHidden(acptr) ? acptr->user->
|
||||
virthost : acptr->user->realhost)));
|
||||
if (IsWhois(acptr) && IsOper(sptr))
|
||||
{
|
||||
/*
|
||||
sendto_one(acptr,
|
||||
":%s NOTICE %s :*** %s did a /userhost on you.",
|
||||
me.name, sptr->name, sptr->name);
|
||||
*/
|
||||
}
|
||||
resid -= catsize;
|
||||
}
|
||||
}
|
||||
for(i=0; (i < 5) && cn; i++ )
|
||||
{
|
||||
if((p = strchr(cn, ' ')))
|
||||
*p = '\0';
|
||||
|
||||
/*
|
||||
* because of some trickery here, we might have the string end in
|
||||
* "...:" or "foo " (note the trailing space)
|
||||
* If we have a trailing space, nuke it here.
|
||||
*/
|
||||
curpos--;
|
||||
if (*curpos != ':')
|
||||
*curpos = '\0';
|
||||
sendto_one(sptr, "%s", buf);
|
||||
return 0;
|
||||
if ((acptr = find_person(cn, NULL)))
|
||||
{
|
||||
ircsprintf(response[i], "%s%s=%c%s@%s",
|
||||
acptr->name,
|
||||
IsAnOper(acptr) ? "*" : "",
|
||||
(acptr->user->away) ? '-' : '+',
|
||||
acptr->username,
|
||||
((acptr != sptr) && !IsOper(sptr)
|
||||
&& IsHidden(acptr) ? acptr->user->virthost :
|
||||
acptr->user->realhost));
|
||||
}
|
||||
if(p)
|
||||
p++;
|
||||
cn = p;
|
||||
}
|
||||
|
||||
ircsprintf(buf, "%s%s %s %s %s %s",
|
||||
rpl_str(RPL_USERHOST),
|
||||
response[0], response[1], response[2], response[3], response[4] );
|
||||
sendto_one(sptr, buf, me.name, parv[0]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -4437,10 +4434,13 @@ int m_umode(cptr, sptr, parc, parv)
|
||||
|
||||
}
|
||||
if (!(setflags & UMODE_INVISIBLE) && IsInvisible(sptr))
|
||||
{
|
||||
IRCstats.invisible++;
|
||||
}
|
||||
if ((setflags & UMODE_INVISIBLE) && !IsInvisible(sptr))
|
||||
{
|
||||
IRCstats.invisible--;
|
||||
|
||||
}
|
||||
/*
|
||||
* compare new flags with old flags and send string which
|
||||
* will cause servers to update correctly.
|
||||
@@ -4539,9 +4539,13 @@ int m_svs2mode(cptr, sptr, parc, parv)
|
||||
break;
|
||||
case 'i':
|
||||
if (what == MODE_ADD)
|
||||
{
|
||||
IRCstats.invisible++;
|
||||
}
|
||||
if (what == MODE_DEL)
|
||||
{
|
||||
IRCstats.invisible--;
|
||||
}
|
||||
goto setmodey;
|
||||
case 'o':
|
||||
if (what == MODE_ADD)
|
||||
@@ -4632,15 +4636,21 @@ int m_svsmode(cptr, sptr, parc, parv)
|
||||
break;
|
||||
case 'i':
|
||||
if (what == MODE_ADD)
|
||||
{
|
||||
IRCstats.invisible++;
|
||||
}
|
||||
if (what == MODE_DEL)
|
||||
{
|
||||
|
||||
IRCstats.invisible--;
|
||||
}
|
||||
goto setmodex;
|
||||
case 'o':
|
||||
if (what == MODE_ADD)
|
||||
IRCstats.operators++;
|
||||
if (what == MODE_DEL)
|
||||
IRCstats.operators--;
|
||||
goto setmodex;
|
||||
case 'd':
|
||||
if (parv[3] && isdigit(*parv[3]))
|
||||
{
|
||||
|
||||
@@ -581,32 +581,3 @@ char *inetntop(af, in, out, the_size)
|
||||
return out;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int Rha;
|
||||
/*
|
||||
* Disconnect all users connected to local server incase of /restart slow
|
||||
* (development tool to test load conditions, should be turned off in releases)
|
||||
*/
|
||||
int rh(void)
|
||||
{
|
||||
int fd;
|
||||
return 0;
|
||||
/* test if this is an development release, just for security -
|
||||
we test if there is a Unreal*l, as it would be Unreal3.1-Silverheart(devel)
|
||||
|
||||
should really be an define, but i need it to be !DEVELOP as well,
|
||||
for testing phases at irc.ircsystems.net
|
||||
|
||||
*/
|
||||
if (!is_enabled("Unreal*l*", Rh VERSIONONLY))
|
||||
return 0;
|
||||
|
||||
|
||||
for (fd = 0; fd < MAXCONNECTIONS; fd++)
|
||||
{
|
||||
close(fd);
|
||||
}
|
||||
|
||||
Rha = 1;
|
||||
save_tunefile();
|
||||
}
|
||||
|
||||
+907
-1
@@ -1 +1,907 @@
|
||||
Binary file win32.c matches
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
* IRC - Internet Relay Chat, win32.c
|
||||
* Copyright (C) 1996 Daniel Hazelbaker
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)win32.c 2.01 10/21/96 (C) 1996 Daniel Hazelbaker";
|
||||
#endif
|
||||
|
||||
|
||||
#define APPNAME "wIRCD"
|
||||
#define wTITLEBAR "UnrealIRCd"
|
||||
|
||||
// Windows Header Files:
|
||||
#include "common.h"
|
||||
#include <windows.h>
|
||||
#include <commctrl.h>
|
||||
#include <process.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <malloc.h>
|
||||
#include <memory.h>
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
#include "struct.h"
|
||||
#include "sys.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include "h.h"
|
||||
#include "version.h"
|
||||
#include "resource.h"
|
||||
#include "CioFunc.h"
|
||||
|
||||
ID_CVS("$Id$");
|
||||
|
||||
|
||||
BOOL InitApplication(HINSTANCE);
|
||||
BOOL InitInstance(HINSTANCE, int);
|
||||
LRESULT CALLBACK FrameWndProc(HWND, UINT, WPARAM, LPARAM);
|
||||
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
|
||||
LRESULT CALLBACK Dlg_IRCDCONF(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT CALLBACK Dlg_IRCDMOTD(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT CALLBACK Dlg_IRCDRULES(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
BOOL DisplayString(HWND hWnd, char *InBuf, ...);
|
||||
void LoadSetup(void);
|
||||
void SaveSetup(void);
|
||||
int SetDebugLevel(HWND hWnd, int NewLevel);
|
||||
|
||||
LRESULT CALLBACK Credits(HWND, UINT, WPARAM, LPARAM);
|
||||
LRESULT CALLBACK Dreamforge(HWND, UINT, WPARAM, LPARAM);
|
||||
LRESULT CALLBACK IRCDLicense(HWND, UINT, WPARAM, LPARAM);
|
||||
|
||||
|
||||
extern void SocketLoop(void *dummy), s_rehash(), do_dns_async(HANDLE id);
|
||||
extern int localdie(void), InitwIRCD(int argc, char *argv[]);
|
||||
|
||||
|
||||
HINSTANCE hInst; // current instance
|
||||
char szAppName[] = APPNAME; // The name of this application
|
||||
char szTitle[] = wTITLEBAR; // The title bar text
|
||||
HWND hwIRCDWnd=NULL, hCio=NULL;
|
||||
HANDLE hMainThread = 0;
|
||||
|
||||
#ifndef IRCDTOTALVERSION
|
||||
#define IRCDTOTALVERSION BASE_VERSION PATCH1 PATCH2 PATCH3 PATCH4 PATCH5 PATCH6 PATCH7 PATCH8 PATCH9
|
||||
#endif
|
||||
|
||||
/*
|
||||
* FUNCTION: WinMain(HANDLE, HANDLE, LPSTR, int)
|
||||
*
|
||||
* PURPOSE: Entry point for the application.
|
||||
*
|
||||
* COMMENTS:
|
||||
*
|
||||
* This function initializes the application and processes the
|
||||
* message loop.
|
||||
*/
|
||||
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
MSG msg;
|
||||
HANDLE hAccelTable;
|
||||
int argc=1;
|
||||
char *s, *argv[20], String[128];
|
||||
|
||||
if (!hPrevInstance)
|
||||
if (!InitApplication(hInstance))
|
||||
return (FALSE);
|
||||
|
||||
if (!InitInstance(hInstance, nCmdShow))
|
||||
return (FALSE);
|
||||
|
||||
argv[0] = "WIRCD.EXE";
|
||||
if ( *(s = lpCmdLine) )
|
||||
{
|
||||
argv[argc++] = s;
|
||||
while ( (s = strchr(s, ' ')) != NULL )
|
||||
{
|
||||
while ( *s == ' ' ) *s++ = 0;
|
||||
argv[argc++] = s;
|
||||
}
|
||||
}
|
||||
argv[argc] = NULL;
|
||||
if ( InitwIRCD(argc, argv) != 1 )
|
||||
return FALSE;
|
||||
|
||||
wsprintf(String, "UnrealIRCd/32 - %s", me.name);
|
||||
SetWindowText(hwIRCDWnd, String);
|
||||
|
||||
SetDebugLevel(hwIRCDWnd, debuglevel);
|
||||
|
||||
hMainThread = (HANDLE)_beginthread(SocketLoop, 0, NULL);
|
||||
hAccelTable = LoadAccelerators (hInstance, szAppName);
|
||||
|
||||
LoadSetup();
|
||||
atexit(SaveSetup);
|
||||
|
||||
/* Say we are ready to recieve connections */
|
||||
wsprintf(String, "%c%c%c%c[info] -=-=[ UnrealIRCd/32 v%s Ready ] - %s\r", 0,0,0,0, VERSIONONLY);
|
||||
DisplayString(hCio, String);
|
||||
/* Main message loop */
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
if ( !TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
return (msg.wParam);
|
||||
lpCmdLine; /* This will prevent 'unused formal parameter' warnings */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FUNCTION: InitApplication(HANDLE)
|
||||
*
|
||||
* PURPOSE: Initializes window data and registers window class
|
||||
*
|
||||
* COMMENTS:
|
||||
*
|
||||
* In this function, we initialize a window class by filling out a data
|
||||
* structure of type WNDCLASS and calling either RegisterClass or
|
||||
* the internal MyRegisterClass.
|
||||
*/
|
||||
BOOL InitApplication(HINSTANCE hInstance)
|
||||
{
|
||||
WNDCLASS wc;
|
||||
|
||||
// Fill in window class structure.
|
||||
wc.style = CS_HREDRAW | CS_VREDRAW;
|
||||
wc.lpfnWndProc = (WNDPROC)FrameWndProc;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
wc.hInstance = hInstance;
|
||||
wc.hIcon = LoadIcon (hInstance, APPNAME);
|
||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
|
||||
wc.lpszMenuName = szAppName;
|
||||
wc.lpszClassName = szAppName;
|
||||
|
||||
if ( !RegisterClass(&wc) ) return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FUNCTION: InitInstance(HANDLE, int)
|
||||
*
|
||||
* PURPOSE: Saves instance handle and creates main window
|
||||
*
|
||||
* COMMENTS:
|
||||
*
|
||||
* In this function, we save the instance handle in a global variable and
|
||||
* create and display the main program window.
|
||||
*/
|
||||
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
||||
{
|
||||
HWND hWnd;
|
||||
WSADATA WSAData;
|
||||
|
||||
|
||||
if ( WSAStartup(MAKEWORD(1, 1), &WSAData) != 0 )
|
||||
{
|
||||
MessageBox(NULL, "UnrealIRCD/32 Init Error", "Unable to initialize WinSock DLL", MB_OK);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
hInst = hInstance; /* Store instance handle in our global variable */
|
||||
|
||||
if ( !Cio_Init(hInst) )
|
||||
{
|
||||
MessageBox(NULL, "UnrealIRCD/32 Init Error", "Couldn't Init CIO Library", MB_OK);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
hWnd = CreateWindow(szAppName, szTitle, WS_OVERLAPPEDWINDOW,
|
||||
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
|
||||
NULL, NULL, hInstance, NULL);
|
||||
|
||||
if ( !hWnd )
|
||||
return (FALSE);
|
||||
|
||||
ShowWindow(hWnd, nCmdShow);
|
||||
UpdateWindow(hwIRCDWnd = hWnd);
|
||||
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FUNCTION: FrameWndProc(HWND, unsigned, WORD, LONG)
|
||||
*
|
||||
* PURPOSE: Processes messages for the main window.
|
||||
*
|
||||
*/
|
||||
LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
int wmId, wmEvent;
|
||||
char *xx = NULL;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_CREATE:
|
||||
hCio = Cio_Create(hInst, hWnd, WS_VISIBLE, 0, 0, 300, 200);
|
||||
xx = MyMalloc(1024);
|
||||
sprintf(xx, "%c%c%c%c[info] -=-=[ UnrealIRCd/32 v%s Loading ]-=-=\r", 0, 0, 0, 0,
|
||||
VERSIONONLY);
|
||||
DisplayString(hCio, xx);
|
||||
#ifdef WIN32_SPECIFY
|
||||
sprintf(xx, "%c%c%c%c[info] - Ported by %s", 0,0,0,0, WIN32_PORTER);
|
||||
DisplayString(hCio, xx);
|
||||
sprintf(xx, "%c%c%c%c[info] - %s", 0,0,0,0, WIN32_URL);
|
||||
DisplayString(hCio, xx);
|
||||
#endif
|
||||
MyFree(xx);
|
||||
return 0;
|
||||
case WM_COMMAND:
|
||||
wmId = LOWORD(wParam);
|
||||
wmEvent = HIWORD(wParam);
|
||||
|
||||
switch (wmId)
|
||||
{
|
||||
case IDM_ABOUT:
|
||||
DialogBox(hInst, "AboutBox", hWnd, (DLGPROC)About);
|
||||
break;
|
||||
case IDM_CREDITS:
|
||||
DialogBox(hInst, "AboutBox", hWnd, (DLGPROC)Credits);
|
||||
break;
|
||||
case IDM_DF:
|
||||
DialogBox(hInst, "AboutBox", hWnd, (DLGPROC)Dreamforge);
|
||||
break;
|
||||
case IDM_LICENSE:
|
||||
DialogBox(hInst, "AboutBox", hWnd, (DLGPROC)IRCDLicense);
|
||||
break;
|
||||
|
||||
case IDM_IRCDCONF:
|
||||
DialogBox(hInst, "DLG_IRCDCONF", hWnd, (DLGPROC)Dlg_IRCDCONF);
|
||||
break;
|
||||
case IDM_IRCDMOTD:
|
||||
DialogBox(hInst, "DLG_IRCDMOTD", hWnd, (DLGPROC)Dlg_IRCDMOTD);
|
||||
break;
|
||||
case IDM_IRCDRULES:
|
||||
DialogBox(hInst, "DLG_IRCDRULES", hWnd, (DLGPROC)Dlg_IRCDRULES);
|
||||
break;
|
||||
case IDM_REHASH:
|
||||
s_rehash();
|
||||
break;
|
||||
|
||||
case IDM_EXIT:
|
||||
if ( MessageBox(hWnd, "Are you sure?",
|
||||
"Terminate UnrealIRCD/32",
|
||||
MB_ICONQUESTION | MB_YESNO) == IDNO )
|
||||
break;
|
||||
DestroyWindow(hWnd);
|
||||
break;
|
||||
|
||||
case IDM_DBGOFF:
|
||||
case IDM_DBGFATAL:
|
||||
case IDM_DBGERROR:
|
||||
case IDM_DBGNOTICE:
|
||||
case IDM_DBGDNS:
|
||||
case IDM_DBGINFO:
|
||||
case IDM_DBGNUM:
|
||||
case IDM_DBGSEND:
|
||||
case IDM_DBGDEBUG:
|
||||
case IDM_DBGMALLOC:
|
||||
case IDM_DBGLIST:
|
||||
SetDebugLevel(hWnd, wmId-IDM_DBGFATAL);
|
||||
break;
|
||||
|
||||
default:
|
||||
return (DefWindowProc(hWnd, message, wParam, lParam));
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_CLOSE:
|
||||
if ( MessageBox(hWnd, "Are you sure?", "Terminate UnrealIRCd/32",
|
||||
MB_ICONQUESTION | MB_YESNO) == IDNO )
|
||||
break;
|
||||
return (DefWindowProc(hWnd, message, wParam, lParam));
|
||||
|
||||
case WM_DESTROY:
|
||||
localdie(); /* Never returns */
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
case WM_SIZE:
|
||||
SetWindowPos(hCio, NULL, 0, 0, LOWORD(lParam), HIWORD(lParam),
|
||||
SWP_NOZORDER);
|
||||
/* Fallthrough to get the default handling too. */
|
||||
|
||||
default:
|
||||
return (DefWindowProc(hWnd, message, wParam, lParam));
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FUNCTION: About(HWND, unsigned, WORD, LONG)
|
||||
*
|
||||
* PURPOSE: Processes messages for "About" dialog box
|
||||
* This version allows greater flexibility over the contents of the 'About' box,
|
||||
* by pulling out values from the 'Version' resource.
|
||||
*
|
||||
* MESSAGES:
|
||||
*
|
||||
* WM_INITDIALOG - initialize dialog box
|
||||
* WM_COMMAND - Input received
|
||||
*
|
||||
*/
|
||||
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
#define Ccat strcat(String, String2)
|
||||
{
|
||||
char String[16384], String2[16384], **s = infotext;
|
||||
sprintf(String, "%s\n%s", version, creation);
|
||||
SetDlgItemText(hDlg, IDC_VERSION, String);
|
||||
String[0] = 0; String2[0] = 0;
|
||||
sprintf(String2, "-=-=-=-=-=-==-==- %s -=-=-==-==-=-=-=-=-=-\r\n", ircnetwork); Ccat;
|
||||
sprintf(String2, "|Web Page: | http://www.%s\r\n", netdomain); Ccat;
|
||||
sprintf(String2, "|FTP Archive: | ftp://ftp.%s\r\n", netdomain); Ccat;
|
||||
sprintf(String2, "|Help channel: | %s\r\n", helpchan); Ccat;
|
||||
sprintf(String2, "|=-=-=-=-=-==-==|-=-=-=-=-=-=-==-==-=-=-=-=-=-=-=\r\n"); Ccat;
|
||||
sprintf(String2, "|IRCd version: | %s\r\n", IRCDTOTALVERSION); Ccat;
|
||||
sprintf(String2, "| Developers: | Stskeeps <stskeeps@tspre.org>\r\n"); Ccat;
|
||||
sprintf(String2, "| | codemastr <codemastr@tspre.org>\r\n"); Ccat;
|
||||
#if defined(_WIN32) && defined(WIN32_SPECIFY)
|
||||
sprintf(String2, "| Win32 Porter: | %s\r\n", WIN32_PORTER); Ccat;
|
||||
sprintf(String2, "| >>URL: | %s\r\n", WIN32_URL); Ccat;
|
||||
#endif
|
||||
sprintf(String2, "|Credits: | Type /Credits\r\n"); Ccat;
|
||||
sprintf(String2, "|DALnet Credits:| Type /DALinfo\r\n"); Ccat;
|
||||
sprintf(String2, "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\r\n"); Ccat;
|
||||
sprintf(String2, "| Unreal IRCd can be downloaded at http://unreal.tspre.org\r\n"); Ccat;
|
||||
sprintf(String2, "| This notice may not be removed from the IRCd package\r\n"); Ccat;
|
||||
sprintf(String2, "| It will be a violation of copyright. This program must always stay free of charge\r\n"); Ccat;
|
||||
sprintf(String2, "| being sold commercially or privately\r\n"); Ccat;
|
||||
sprintf(String2, "| Only charge may be for the transport medium like on CD-ROM, floppy\r\n"); Ccat;
|
||||
sprintf(String2, "| or other kinds (-Stskeeps'1999)\r\n"); Ccat;
|
||||
sprintf(String2, "--------------------------------------------\r\n"); Ccat;
|
||||
SetDlgItemText(hDlg, IDC_INFOTEXT, String);
|
||||
#undef Ccat
|
||||
ShowWindow (hDlg, SW_SHOW);
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
case WM_COMMAND:
|
||||
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
|
||||
{
|
||||
EndDialog(hDlg, TRUE);
|
||||
return (TRUE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* FUNCTION: Credits(HWND, unsigned, WORD, LONG)
|
||||
*
|
||||
* PURPOSE: Processes messages for "Credits" dialog box
|
||||
* This version allows greater flexibility over the contents of the 'Credits' box,
|
||||
* by pulling out values from the 'Version' resource.
|
||||
*
|
||||
* MESSAGES:
|
||||
*
|
||||
* WM_INITDIALOG - initialize dialog box
|
||||
* WM_COMMAND - Input received
|
||||
*
|
||||
*/
|
||||
LRESULT CALLBACK Credits(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
char String[16384], **s = unrealcredits;
|
||||
|
||||
sprintf(String, "%s\n%s", version, creation);
|
||||
SetDlgItemText(hDlg, IDC_VERSION, String);
|
||||
String[0] = 0;
|
||||
while ( *s )
|
||||
{
|
||||
strcat(String, *s++);
|
||||
if ( *s )
|
||||
strcat(String, "\r\n");
|
||||
}
|
||||
SetDlgItemText(hDlg, IDC_INFOTEXT, String);
|
||||
|
||||
|
||||
ShowWindow (hDlg, SW_SHOW);
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
case WM_COMMAND:
|
||||
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
|
||||
{
|
||||
EndDialog(hDlg, TRUE);
|
||||
return (TRUE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* FUNCTION: Dreamforge(HWND, unsigned, WORD, LONG)
|
||||
*
|
||||
* PURPOSE: Processes messages for "Dreamforge" dialog box
|
||||
* This version allows greater flexibility over the contents of the 'Dreamforge' box,
|
||||
* by pulling out values from the 'Version' resource.
|
||||
*
|
||||
* MESSAGES:
|
||||
*
|
||||
* WM_INITDIALOG - initialize dialog box
|
||||
* WM_COMMAND - Input received
|
||||
*
|
||||
*/
|
||||
LRESULT CALLBACK Dreamforge(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
char String[16384], **s = dalinfotext;
|
||||
|
||||
sprintf(String, "%s\n%s", version, creation);
|
||||
SetDlgItemText(hDlg, IDC_VERSION, String);
|
||||
String[0] = 0;
|
||||
while ( *s )
|
||||
{
|
||||
strcat(String, *s++);
|
||||
if ( *s )
|
||||
strcat(String, "\r\n");
|
||||
}
|
||||
SetDlgItemText(hDlg, IDC_INFOTEXT, String);
|
||||
|
||||
|
||||
ShowWindow (hDlg, SW_SHOW);
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
case WM_COMMAND:
|
||||
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
|
||||
{
|
||||
EndDialog(hDlg, TRUE);
|
||||
return (TRUE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* FUNCTION: IRCDLicense(HWND, unsigned, WORD, LONG)
|
||||
*
|
||||
* PURPOSE: Processes messages for "IRCDLicense" dialog box
|
||||
* This version allows greater flexibility over the contents of the 'IRCDLicense' box,
|
||||
* by pulling out values from the 'Version' resource.
|
||||
*
|
||||
* MESSAGES:
|
||||
*
|
||||
* WM_INITDIALOG - initialize dialog box
|
||||
* WM_COMMAND - Input received
|
||||
*
|
||||
*/
|
||||
LRESULT CALLBACK IRCDLicense(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
char String[16384], **s = gnulicense;
|
||||
|
||||
sprintf(String, "%s\n%s", version, creation);
|
||||
SetDlgItemText(hDlg, IDC_VERSION, String);
|
||||
String[0] = 0;
|
||||
while ( *s )
|
||||
{
|
||||
strcat(String, *s++);
|
||||
if ( *s )
|
||||
strcat(String, "\r\n");
|
||||
}
|
||||
SetDlgItemText(hDlg, IDC_INFOTEXT, String);
|
||||
|
||||
|
||||
ShowWindow (hDlg, SW_SHOW);
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
case WM_COMMAND:
|
||||
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
|
||||
{
|
||||
EndDialog(hDlg, TRUE);
|
||||
return (TRUE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FUNCTION: Dlg_IrcdConf(HWND, unsigned, WORD, LONG)
|
||||
*
|
||||
* PURPOSE: Processes messages for "DLG_IRCDCONF" dialog box
|
||||
*
|
||||
*/
|
||||
LRESULT CALLBACK Dlg_IRCDCONF(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
char *Buffer = MyMalloc(65535); /* Should be big enough */
|
||||
int fd, Len;
|
||||
|
||||
if ( !Buffer )
|
||||
{
|
||||
MessageBox(hDlg, "Error: Could not allocate temporary buffer",
|
||||
"UnrealIRCd/32 Setup", MB_OK);
|
||||
EndDialog(hDlg, FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
/* Open the ircd.conf file */
|
||||
fd = open(CONFIGFILE, _O_RDONLY | _O_BINARY);
|
||||
if ( fd == -1 )
|
||||
{
|
||||
MessageBox(hDlg, "Error: Could not open configuration file",
|
||||
"UnrealIRCd/32 Setup", MB_OK);
|
||||
MyFree(Buffer);
|
||||
EndDialog(hDlg, FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Buffer[0] = 0; /* Incase read() fails */
|
||||
Len = read(fd, Buffer, 65535);
|
||||
Buffer[Len] = 0;
|
||||
/* Set the text for the edit control to what was in the file */
|
||||
SendDlgItemMessage(hDlg, IDC_IRCDCONF, WM_SETTEXT, 0,
|
||||
(LPARAM)(LPCTSTR)Buffer);
|
||||
|
||||
close(fd);
|
||||
MyFree(Buffer);
|
||||
}
|
||||
return (TRUE);
|
||||
|
||||
case WM_COMMAND:
|
||||
if ( LOWORD(wParam) == IDOK )
|
||||
{
|
||||
char *Buffer = MyMalloc(65535); /* Should be big enough */
|
||||
DWORD Len;
|
||||
int fd;
|
||||
|
||||
if ( !Buffer )
|
||||
{
|
||||
MessageBox(hDlg, "Error: Could not allocate temporary buffer",
|
||||
"UnrealIRCD/32 Setup", MB_OK);
|
||||
return TRUE;
|
||||
}
|
||||
/* Open the ircd.conf file */
|
||||
fd = open(CONFIGFILE, _O_TRUNC|_O_CREAT|_O_RDWR|_O_BINARY,
|
||||
S_IREAD|S_IWRITE);
|
||||
if ( fd == -1 )
|
||||
{
|
||||
MessageBox(hDlg, "Error: Could not open configuration file",
|
||||
"UnrealIRCD/32 Setup", MB_OK);
|
||||
MyFree(Buffer);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Get the text from the edit control and save it to disk. */
|
||||
Len = SendDlgItemMessage(hDlg, IDC_IRCDCONF, WM_GETTEXT, 65535,
|
||||
(LPARAM)(LPCTSTR)Buffer);
|
||||
write(fd, Buffer, Len);
|
||||
|
||||
close(fd);
|
||||
MyFree(Buffer);
|
||||
|
||||
EndDialog(hDlg, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
if ( LOWORD(wParam) == IDCANCEL )
|
||||
{
|
||||
EndDialog(hDlg, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* FUNCTION: Dlg_Dlg_IRCdMotd(HWND, unsigned, WORD, LONG)
|
||||
*
|
||||
* PURPOSE: Processes messages for "DLG_IRCDCONF" dialog box
|
||||
*
|
||||
*/
|
||||
LRESULT CALLBACK Dlg_IRCDMOTD(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
char *Buffer = MyMalloc(65535*2); /* Should be big enough */
|
||||
int fd, Len;
|
||||
|
||||
if ( !Buffer )
|
||||
{
|
||||
MessageBox(hDlg, "Error: Could not allocate temporary buffer",
|
||||
"UnrealIRCd/32 Setup", MB_OK);
|
||||
EndDialog(hDlg, FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
/* Open the ircd.motd file */
|
||||
fd = open(MPATH, _O_RDONLY | _O_BINARY);
|
||||
if ( fd == -1 )
|
||||
{
|
||||
MessageBox(hDlg, "Error: Could not open MOTD file",
|
||||
"UnrealIRCd/32 Setup", MB_OK);
|
||||
MyFree(Buffer);
|
||||
EndDialog(hDlg, FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Buffer[0] = 0; /* Incase read() fails */
|
||||
Len = read(fd, Buffer, 65535);
|
||||
Buffer[Len] = 0;
|
||||
/* Set the text for the edit control to what was in the file */
|
||||
SendDlgItemMessage(hDlg, IDC_IRCDCONF, WM_SETTEXT, 0,
|
||||
(LPARAM)(LPCTSTR)Buffer);
|
||||
|
||||
close(fd);
|
||||
MyFree(Buffer);
|
||||
}
|
||||
return (TRUE);
|
||||
|
||||
case WM_COMMAND:
|
||||
if ( LOWORD(wParam) == IDOK )
|
||||
{
|
||||
char *Buffer = MyMalloc(65535); /* Should be big enough */
|
||||
DWORD Len;
|
||||
int fd;
|
||||
|
||||
if ( !Buffer )
|
||||
{
|
||||
MessageBox(hDlg, "Error: Could not allocate temporary buffer",
|
||||
"UnrealIRCD/32 Setup", MB_OK);
|
||||
return TRUE;
|
||||
}
|
||||
/* Open the ircd.motd file */
|
||||
fd = open(MPATH, _O_TRUNC|_O_CREAT|_O_RDWR|_O_BINARY,
|
||||
S_IREAD|S_IWRITE);
|
||||
if ( fd == -1 )
|
||||
{
|
||||
MessageBox(hDlg, "Error: Could not open motd file",
|
||||
"UnrealIRCD/32 Setup", MB_OK);
|
||||
MyFree(Buffer);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Get the text from the edit control and save it to disk. */
|
||||
Len = SendDlgItemMessage(hDlg, IDC_IRCDCONF, WM_GETTEXT, 65535,
|
||||
(LPARAM)(LPCTSTR)Buffer);
|
||||
write(fd, Buffer, Len);
|
||||
|
||||
close(fd);
|
||||
MyFree(Buffer);
|
||||
|
||||
EndDialog(hDlg, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
if ( LOWORD(wParam) == IDCANCEL )
|
||||
{
|
||||
EndDialog(hDlg, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* FUNCTION: Dlg_IRCdRules(HWND, unsigned, WORD, LONG)
|
||||
*
|
||||
* PURPOSE: Processes messages for "DLG_IRCDCONF" dialog box
|
||||
*
|
||||
*/
|
||||
LRESULT CALLBACK Dlg_IRCDRULES(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
char *Buffer = MyMalloc(65535*2); /* Should be big enough */
|
||||
int fd, Len;
|
||||
|
||||
if ( !Buffer )
|
||||
{
|
||||
MessageBox(hDlg, "Error: Could not allocate temporary buffer",
|
||||
"UnrealIRCd/32 Setup", MB_OK);
|
||||
EndDialog(hDlg, FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
/* Open the ircd.rules file */
|
||||
fd = open(RPATH, _O_RDONLY | _O_BINARY);
|
||||
if ( fd == -1 )
|
||||
{
|
||||
MessageBox(hDlg, "Error: Could not open rules file",
|
||||
"UnrealIRCd/32 Setup", MB_OK);
|
||||
MyFree(Buffer);
|
||||
EndDialog(hDlg, FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Buffer[0] = 0; /* Incase read() fails */
|
||||
Len = read(fd, Buffer, 65535);
|
||||
Buffer[Len] = 0;
|
||||
/* Set the text for the edit control to what was in the file */
|
||||
SendDlgItemMessage(hDlg, IDC_IRCDCONF, WM_SETTEXT, 0,
|
||||
(LPARAM)(LPCTSTR)Buffer);
|
||||
|
||||
close(fd);
|
||||
MyFree(Buffer);
|
||||
}
|
||||
return (TRUE);
|
||||
|
||||
case WM_COMMAND:
|
||||
if ( LOWORD(wParam) == IDOK )
|
||||
{
|
||||
char *Buffer = MyMalloc(65535); /* Should be big enough */
|
||||
DWORD Len;
|
||||
int fd;
|
||||
|
||||
if ( !Buffer )
|
||||
{
|
||||
MessageBox(hDlg, "Error: Could not allocate temporary buffer",
|
||||
"UnrealIRCD/32 Setup", MB_OK);
|
||||
return TRUE;
|
||||
}
|
||||
/* Open the ircd.rules file */
|
||||
fd = open(RPATH, _O_TRUNC|_O_CREAT|_O_RDWR|_O_BINARY,
|
||||
S_IREAD|S_IWRITE);
|
||||
if ( fd == -1 )
|
||||
{
|
||||
MessageBox(hDlg, "Error: Could not open rules file",
|
||||
"UnrealIRCD/32 Setup", MB_OK);
|
||||
MyFree(Buffer);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Get the text from the edit control and save it to disk. */
|
||||
Len = SendDlgItemMessage(hDlg, IDC_IRCDCONF, WM_GETTEXT, 65535,
|
||||
(LPARAM)(LPCTSTR)Buffer);
|
||||
write(fd, Buffer, Len);
|
||||
|
||||
close(fd);
|
||||
MyFree(Buffer);
|
||||
|
||||
EndDialog(hDlg, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
if ( LOWORD(wParam) == IDCANCEL )
|
||||
{
|
||||
EndDialog(hDlg, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
int DisplayString(HWND hWnd, char *InBuf, ...)
|
||||
{
|
||||
CioWndInfo *CWI;
|
||||
va_list argptr;
|
||||
char *Buffer=NULL, *Ptr=NULL;
|
||||
DWORD Len=0, TLen=0, Off=0, i=0;
|
||||
BYTE Red=0, Green=0, Blue=0;
|
||||
BOOL Bold = FALSE;
|
||||
|
||||
if ( (Buffer = LocalAlloc(LPTR, 16384)) == NULL ) return FALSE;
|
||||
|
||||
va_start(argptr, InBuf);
|
||||
Len = vsprintf(Buffer, InBuf, argptr);
|
||||
va_end(argptr);
|
||||
if ( Len == 0 )
|
||||
{
|
||||
LocalFree(Buffer);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
CWI = (CioWndInfo *)GetWindowLong(hWnd, GWL_USER);
|
||||
for ( i = 0; i < Len; i++ )
|
||||
{
|
||||
if ( Buffer[i] == 0 )
|
||||
{
|
||||
i+=3;
|
||||
continue;
|
||||
}
|
||||
if ( Buffer[i] == 0x02 )
|
||||
{
|
||||
if ( !Bold )
|
||||
{
|
||||
Buffer[i] = 0;
|
||||
Cio_Puts(hWnd, Buffer+Off, i-Off);
|
||||
Red = CWI->FR;
|
||||
Green = CWI->FG;
|
||||
Blue = CWI->FB;
|
||||
|
||||
Off=i+1;
|
||||
Cio_PrintF(hWnd, "%c%c%c%c", 0, 255, 32, 32);
|
||||
Bold = 1;
|
||||
continue;
|
||||
}
|
||||
if ( Bold )
|
||||
{
|
||||
Buffer[i] = 0;
|
||||
Cio_Puts(hWnd, Buffer+Off, i-Off);
|
||||
Off=i+1;
|
||||
Cio_PrintF(hWnd, "%c%c%c%c", 0, Red, Green, Blue);
|
||||
Bold = 0;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
Cio_Puts(hWnd, Buffer+Off, Len-Off);
|
||||
|
||||
LocalFree(Buffer);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
void LoadSetup(void)
|
||||
{
|
||||
}
|
||||
|
||||
void SaveSetup(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
int SetDebugLevel(HWND hWnd, int NewLevel)
|
||||
{
|
||||
HMENU hMenu = GetMenu(hWnd);
|
||||
|
||||
if ( !hMenu || !(hMenu = GetSubMenu(hMenu, 1)) ||
|
||||
!(hMenu = GetSubMenu(hMenu, 4)) )
|
||||
return -1;
|
||||
|
||||
CheckMenuItem(hMenu, IDM_DBGFATAL+debuglevel,
|
||||
MF_BYCOMMAND | MF_UNCHECKED);
|
||||
debuglevel = NewLevel;
|
||||
CheckMenuItem(hMenu,IDM_DBGFATAL+debuglevel,
|
||||
MF_BYCOMMAND | MF_CHECKED);
|
||||
|
||||
return debuglevel;
|
||||
}
|
||||
|
||||
|
||||
| ||||