mirror of
https://github.com/matrix-construct/construct
synced 2024-11-29 02:02:38 +01:00
Merge branch 'master' of git.atheme.org:/gitroot/charybdis
This commit is contained in:
commit
dd2654fadb
55 changed files with 3034 additions and 2195 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -34,6 +34,7 @@ src/y.tab.c
|
|||
ssld/ssld
|
||||
tools/convertilines
|
||||
tools/convertklines
|
||||
tools/genssl.sh
|
||||
tools/mkpasswd
|
||||
tools/viconf
|
||||
include/serno.h
|
||||
|
|
2
CREDITS
2
CREDITS
|
@ -8,6 +8,7 @@ network configurations.
|
|||
The charybdis core team is listed in nick-alphabetical order:
|
||||
|
||||
jilles, Jilles Tjoelker <jilles -at- stack.nl>
|
||||
mr_flea, Keith Buck <mr_flea -at- esper.net>
|
||||
nenolod, William Pitcock <nenolod -at- nenolod.net>
|
||||
spb, Stephen Bennett <spb -at- attenuate.org>
|
||||
|
||||
|
@ -22,7 +23,6 @@ Elizacat, Elizabeth Myers <elizabeth -at- sporksmoo.net>
|
|||
Entrope, Michael Poole <mdpoole -at- trolius.org>
|
||||
gxti, Michael Tharp <gxti -at- partiallystapled.com>
|
||||
jdhore, JD Horelick <jdhore1 -at- gmail.com>
|
||||
mr_flea, Keith Buck <mr_flea -at- esper.net>
|
||||
Taros, Brett Greenham <taros -at- shadowircd.net>
|
||||
ThaPrince, Jon Christopherson <jon -at- vile.com>
|
||||
twincest, River Tarnell <river -at- attenuate.org>
|
||||
|
|
36
Makefile.in
36
Makefile.in
|
@ -24,10 +24,17 @@ prefix = @prefix@
|
|||
exec_prefix = @exec_prefix@
|
||||
bindir = @bindir@
|
||||
mandir = @mandir@
|
||||
libdir = @libdir@
|
||||
pkglibdir = @pkglibdir@
|
||||
moduledir = @moduledir@
|
||||
helpdir = @helpdir@
|
||||
confdir = @confdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
logdir = @logdir@
|
||||
rundir = @rundir@
|
||||
pkgrundir = @pkgrundir@
|
||||
localstatedir = @localstatedir@
|
||||
pkglocalstatedir= @pkglocalstatedir@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
|
||||
# Default CFLAGS
|
||||
# CFLAGS = -g -O2 -DNDEBUG
|
||||
|
@ -46,6 +53,7 @@ CFLAGS = @CFLAGS@
|
|||
# the system one.
|
||||
#CFLAGS= -DNDEBUG -g -O2 -D"FD_SETSIZE=1024"
|
||||
SHELL=/bin/sh
|
||||
# `extensions' must be after `modules' for proper creation of $(moduledir).
|
||||
SUBDIRS=libratbox modules extensions src tools ssld bandb doc help
|
||||
CLEANDIRS = ${SUBDIRS}
|
||||
RSA_FILES=rsa_respond/README rsa_respond/respond.c rsa_respond/Makefile
|
||||
|
@ -117,27 +125,27 @@ lint:
|
|||
install-mkdirs:
|
||||
@echo "ircd: setting up ircd directory structure"
|
||||
-@if test ! -d $(DESTDIR)$(prefix); then \
|
||||
mkdir $(DESTDIR)$(prefix); \
|
||||
mkdir -p -m 755 $(DESTDIR)$(prefix); \
|
||||
fi
|
||||
-@if test ! -d $(DESTDIR)$(bindir); then \
|
||||
mkdir $(DESTDIR)$(bindir); \
|
||||
mkdir -p -m 755 $(DESTDIR)$(bindir); \
|
||||
fi
|
||||
-@if test ! -d $(DESTDIR)$(confdir); then \
|
||||
mkdir $(DESTDIR)$(confdir); \
|
||||
-@if test ! -d $(DESTDIR)$(sysconfdir); then \
|
||||
mkdir -p -m 755 $(DESTDIR)$(sysconfdir); \
|
||||
fi
|
||||
-@if test ! -d $(DESTDIR)$(mandir); then \
|
||||
mkdir $(DESTDIR)$(mandir); \
|
||||
fi
|
||||
-@if test ! -d $(DESTDIR)$(moduledir); then \
|
||||
mkdir $(DESTDIR)$(moduledir); \
|
||||
fi
|
||||
-@if test ! -d $(DESTDIR)$(helpdir); then \
|
||||
mkdir $(DESTDIR)$(helpdir); \
|
||||
mkdir -p -m 755 $(DESTDIR)$(mandir); \
|
||||
fi
|
||||
-@if test ! -d $(DESTDIR)$(logdir); then \
|
||||
mkdir $(DESTDIR)$(logdir); \
|
||||
mkdir -p -m 755 $(DESTDIR)$(logdir); \
|
||||
fi
|
||||
|
||||
-@if test ! -d '$(DESTDIR)$(pkgrundir)'; then \
|
||||
mkdir -p -m 755 '$(DESTDIR)$(pkgrundir)'; \
|
||||
fi
|
||||
-@if test ! -d '$(DESTDIR)$(pkglocalstatedir)'; then \
|
||||
mkdir -p -m 755 '$(DESTDIR)$(pkglocalstatedir)'; \
|
||||
fi
|
||||
|
||||
install: install-mkdirs all
|
||||
@for i in $(SUBDIRS); do \
|
||||
echo "install ==> $$i";\
|
||||
|
|
13
aclocal.m4
vendored
13
aclocal.m4
vendored
|
@ -2,8 +2,17 @@
|
|||
AC_DEFUN([AC_DEFINE_DIR], [
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
ac_define_dir=`eval echo [$]$2`
|
||||
ac_define_dir=`eval echo [$]ac_define_dir`
|
||||
last_ac_define_dir=`eval echo [$]$2`
|
||||
ac_define_dir=`eval echo [$]last_ac_define_dir`
|
||||
ac_define_dir_counter=0
|
||||
while test "x[$]last_ac_define_dir" != "x[$]ac_define_dir"; do
|
||||
last_ac_define_dir="[$]ac_define_dir"
|
||||
ac_define_dir=`eval echo [$]last_ac_define_dir`
|
||||
AS_VAR_ARITH([ac_define_dir_counter], [$ac_define_dir_counter + 1])
|
||||
AS_VAR_IF([ac_define_dir_counter], [128],
|
||||
[AC_MSG_ERROR([detected recusive directory expansion when expanding $1=[$]$2: [$]ac_define_dir])
|
||||
break])
|
||||
done
|
||||
$1="$ac_define_dir"
|
||||
AC_SUBST($1)
|
||||
ifelse($3, ,
|
||||
|
|
|
@ -22,8 +22,12 @@ exec_prefix = @exec_prefix@
|
|||
bindir = @bindir@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
confdir = @confdir@
|
||||
pkglibexecdir = @pkglibexecdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
localstatedir = @localstatedir@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
|
||||
PROGRAM_PREFIX = @PROGRAM_PREFIX@
|
||||
|
||||
ZIP_LIB = @ZLIB_LD@
|
||||
|
||||
|
@ -34,7 +38,9 @@ CPPFLAGS = ${INCLUDES} @CPPFLAGS@
|
|||
|
||||
CFLAGS += -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION=1
|
||||
|
||||
PROGS = bandb bantool
|
||||
pkglibexec_PROGS = bandb
|
||||
bin_PROGS = bantool
|
||||
PROGS = $(pkglibexec_PROGS) $(bin_PROGS)
|
||||
|
||||
BANDB_SOURCES = \
|
||||
bandb.c \
|
||||
|
@ -64,12 +70,18 @@ bantool: ${BANTOOL_OBJECTS}
|
|||
|
||||
install: build
|
||||
@echo "ircd: installing bandb ($(PROGS))"
|
||||
@for i in $(PROGS); do \
|
||||
if test -f $(DESTDIR)$(bindir)/$$i; then \
|
||||
$(MV) $(DESTDIR)$(bindir)/$$i $(DESTDIR)$(bindir)/$$i.old; \
|
||||
@for i in $(bin_PROGS); do \
|
||||
if test -f $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i; then \
|
||||
$(MV) $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i.old; \
|
||||
fi; \
|
||||
$(INSTALL_BIN) $$i $(DESTDIR)$(bindir); \
|
||||
$(INSTALL_BIN) $$i $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i; \
|
||||
done
|
||||
@for i in $(pkglibexec_PROGS); do \
|
||||
if test -f '$(DESTDIR)$(pkglibexecdir)/'$$i; then \
|
||||
$(MV) '$(DESTDIR)$(pkglibexecdir)/'$$i '$(DESTDIR)$(pkglibexecdir)/'$$i.old; \
|
||||
fi; \
|
||||
$(INSTALL_BIN) $$i '$(DESTDIR)$(pkglibexecdir)/'$$i; \
|
||||
done
|
||||
|
||||
.c.o:
|
||||
${CC} ${CPPFLAGS} ${CFLAGS} -c $<
|
||||
|
|
|
@ -58,19 +58,19 @@ mlog(const char *errstr, ...)
|
|||
int
|
||||
rsdb_init(rsdb_error_cb * ecb)
|
||||
{
|
||||
const char *bandb_dpath;
|
||||
const char *bandb_dbpath_env;
|
||||
char dbpath[PATH_MAX];
|
||||
char errbuf[128];
|
||||
error_cb = ecb;
|
||||
|
||||
/* try a path from the environment first, useful for basedir overrides */
|
||||
bandb_dpath = getenv("BANDB_DPATH");
|
||||
bandb_dbpath_env = getenv("BANDB_DBPATH");
|
||||
|
||||
if(bandb_dpath != NULL)
|
||||
rb_snprintf(dbpath, sizeof(dbpath), "%s/etc/ban.db", bandb_dpath);
|
||||
if(bandb_dbpath_env != NULL)
|
||||
rb_strlcpy(dbpath, bandb_dbpath_env, sizeof(dbpath));
|
||||
else
|
||||
rb_strlcpy(dbpath, DBPATH, sizeof(dbpath));
|
||||
|
||||
|
||||
if(sqlite3_open(dbpath, &rb_bandb) != SQLITE_OK)
|
||||
{
|
||||
rb_snprintf(errbuf, sizeof(errbuf), "Unable to open sqlite database: %s",
|
||||
|
|
384
configure
vendored
384
configure
vendored
|
@ -613,19 +613,27 @@ SSL_SRCS_ENABLE
|
|||
MOD_TARGET
|
||||
MODULES_LIBS
|
||||
SELECT_TYPE
|
||||
PROGRAM_PREFIX
|
||||
PKGRUNDIR
|
||||
moduledir
|
||||
MODULE_DIR
|
||||
helpdir
|
||||
HELP_DIR
|
||||
logdir
|
||||
LOG_DIR
|
||||
confdir
|
||||
ETC_DIR
|
||||
ZLIB_LD
|
||||
ENCSPEED
|
||||
ALLOCA
|
||||
VICONF
|
||||
CRYPT_LIB
|
||||
PKGLIBEXECDIR
|
||||
pkglibexecdir
|
||||
PKGLOCALSTATEDIR
|
||||
pkglocalstatedir
|
||||
pkgrundir
|
||||
rundir
|
||||
pkglibdir
|
||||
LEXLIB
|
||||
LEX_OUTPUT_ROOT
|
||||
LEX
|
||||
|
@ -699,6 +707,7 @@ SHELL'
|
|||
ac_subst_files=''
|
||||
ac_user_opts='
|
||||
enable_option_checking
|
||||
enable_fhs_paths
|
||||
enable_ipv6
|
||||
enable_openssl
|
||||
with_zlib_path
|
||||
|
@ -712,6 +721,8 @@ with_confdir
|
|||
with_logdir
|
||||
with_helpdir
|
||||
with_moduledir
|
||||
with_rundir
|
||||
with_program_prefix
|
||||
with_custom_branding
|
||||
with_custom_version
|
||||
enable_assert
|
||||
|
@ -1345,6 +1356,7 @@ Optional Features:
|
|||
--disable-option-checking ignore unrecognized --enable/--with options
|
||||
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
|
||||
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
|
||||
--enable-fhs-paths Use more FHS-like pathnames (for packagers).
|
||||
--enable-ipv6 Enable IPv6 support
|
||||
--enable-openssl=DIR Enable OpenSSL support (DIR optional).
|
||||
--disable-openssl Disable OpenSSL support.
|
||||
|
@ -1366,10 +1378,14 @@ Optional Packages:
|
|||
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
||||
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
|
||||
--with-zlib-path=DIR Path to libz.so for ziplinks support.
|
||||
--with-confdir=DIR Directory to install config files.
|
||||
--with-confdir=DIR Directory to install config files [deprecated, use
|
||||
--sysconfdir instead].
|
||||
--with-logdir=DIR Directory where to write logfiles.
|
||||
--with-helpdir=DIR Directory to install help files.
|
||||
--with-moduledir=DIR Directory to install modules.
|
||||
--with-rundir=DIR Directory in which to store pidfile.
|
||||
--with-program-prefix= If set, programs installed into PATH will be
|
||||
installed with names prefixed by this prefix.
|
||||
--with-custom-branding=NAME
|
||||
Custom branding name.
|
||||
--with-custom-version=NAME
|
||||
|
@ -5355,12 +5371,86 @@ if test "$LEX" = ":"; then
|
|||
as_fn_error $? "could not locate a suitable lexical generator, install flex or lex." "$LINENO" 5
|
||||
fi
|
||||
|
||||
if test "$libexecdir" = '${exec_prefix}/libexec' &&
|
||||
test "$localstatedir" = '${prefix}/var'; then
|
||||
libexecdir='${bindir}'
|
||||
localstatedir='${prefix}'
|
||||
# Check whether --enable-fhs-paths was given.
|
||||
if test "${enable_fhs_paths+set}" = set; then :
|
||||
enableval=$enable_fhs_paths;
|
||||
else
|
||||
if test "$libexecdir" = '${exec_prefix}/libexec' && \
|
||||
test "$localstatedir" = '${prefix}/var' && \
|
||||
test "$libdir" = '${exec_prefix}/lib'; then :
|
||||
enable_fhs_paths=no
|
||||
else
|
||||
enable_fhs_paths=yes
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
if test "x$enable_fhs_paths" = "xyes"; then :
|
||||
pkglibexecdir='${libexecdir}/${PACKAGE_TARNAME}'
|
||||
rundir=${rundir-'${prefix}/run'}
|
||||
pkgrundir='${rundir}/${PACKAGE_TARNAME}'
|
||||
pkglocalstatedir='${localstatedir}/${PACKAGE_TARNAME}'
|
||||
else
|
||||
libexecdir='${bindir}'
|
||||
pkglibexecdir='${libexecdir}'
|
||||
rundir='${sysconfdir}'
|
||||
pkgrundir='${rundir}'
|
||||
localstatedir='${prefix}'
|
||||
pkglocalstatedir='${sysconfdir}'
|
||||
fi
|
||||
pkglibdir='${libdir}/${PACKAGE_TARNAME}'
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
last_ac_define_dir=`eval echo $pkglocalstatedir`
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
ac_define_dir_counter=0
|
||||
while test "x$last_ac_define_dir" != "x$ac_define_dir"; do
|
||||
last_ac_define_dir="$ac_define_dir"
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
as_fn_arith $ac_define_dir_counter + 1 && ac_define_dir_counter=$as_val
|
||||
if test "x$ac_define_dir_counter" = x128; then :
|
||||
as_fn_error $? "detected recusive directory expansion when expanding PKGLOCALSTATEDIR=$pkglocalstatedir: $ac_define_dir" "$LINENO" 5
|
||||
break
|
||||
fi
|
||||
done
|
||||
PKGLOCALSTATEDIR="$ac_define_dir"
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define PKGLOCALSTATEDIR "$ac_define_dir"
|
||||
_ACEOF
|
||||
|
||||
|
||||
|
||||
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
last_ac_define_dir=`eval echo $pkglibexecdir`
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
ac_define_dir_counter=0
|
||||
while test "x$last_ac_define_dir" != "x$ac_define_dir"; do
|
||||
last_ac_define_dir="$ac_define_dir"
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
as_fn_arith $ac_define_dir_counter + 1 && ac_define_dir_counter=$as_val
|
||||
if test "x$ac_define_dir_counter" = x128; then :
|
||||
as_fn_error $? "detected recusive directory expansion when expanding PKGLIBEXECDIR=$pkglibexecdir: $ac_define_dir" "$LINENO" 5
|
||||
break
|
||||
fi
|
||||
done
|
||||
PKGLIBEXECDIR="$ac_define_dir"
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define PKGLIBEXECDIR "$ac_define_dir"
|
||||
_ACEOF
|
||||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
|
||||
$as_echo_n "checking for ANSI C header files... " >&6; }
|
||||
if ${ac_cv_header_stdc+:} false; then :
|
||||
|
@ -7204,45 +7294,29 @@ fi
|
|||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to modify confdir" >&5
|
||||
$as_echo_n "checking whether to modify confdir... " >&6; }
|
||||
|
||||
# Check whether --with-confdir was given.
|
||||
if test "${with_confdir+set}" = set; then :
|
||||
withval=$with_confdir; confdir=`echo $withval | sed 's/\/$//'`
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
ac_define_dir=`eval echo $confdir`
|
||||
ac_define_dir=`eval echo $ac_define_dir`
|
||||
ETC_DIR="$ac_define_dir"
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define ETC_DIR "$ac_define_dir"
|
||||
_ACEOF
|
||||
|
||||
|
||||
|
||||
|
||||
confdir=`(
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
|
||||
eval echo \""$confdir"\"
|
||||
)`
|
||||
|
||||
|
||||
withval=$with_confdir; sysconfdir=`echo $withval | sed 's/\/$//'`
|
||||
else
|
||||
confdir='${prefix}/etc'
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
confdir='${sysconfdir}'
|
||||
fi
|
||||
|
||||
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
ac_define_dir=`eval echo $confdir`
|
||||
ac_define_dir=`eval echo $ac_define_dir`
|
||||
last_ac_define_dir=`eval echo $sysconfdir`
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
ac_define_dir_counter=0
|
||||
while test "x$last_ac_define_dir" != "x$ac_define_dir"; do
|
||||
last_ac_define_dir="$ac_define_dir"
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
as_fn_arith $ac_define_dir_counter + 1 && ac_define_dir_counter=$as_val
|
||||
if test "x$ac_define_dir_counter" = x128; then :
|
||||
as_fn_error $? "detected recusive directory expansion when expanding ETC_DIR=$sysconfdir: $ac_define_dir" "$LINENO" 5
|
||||
break
|
||||
fi
|
||||
done
|
||||
ETC_DIR="$ac_define_dir"
|
||||
|
||||
|
||||
|
@ -7253,18 +7327,6 @@ _ACEOF
|
|||
|
||||
|
||||
|
||||
confdir=`(
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
|
||||
eval echo \""$confdir"\"
|
||||
)`
|
||||
|
||||
|
||||
|
||||
fi
|
||||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to modify logdir" >&5
|
||||
$as_echo_n "checking whether to modify logdir... " >&6; }
|
||||
|
||||
|
@ -7273,37 +7335,31 @@ if test "${with_logdir+set}" = set; then :
|
|||
withval=$with_logdir; logdir=`echo $withval | sed 's/\/$//'`
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
ac_define_dir=`eval echo $logdir`
|
||||
ac_define_dir=`eval echo $ac_define_dir`
|
||||
LOG_DIR="$ac_define_dir"
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define LOG_DIR "$ac_define_dir"
|
||||
_ACEOF
|
||||
|
||||
|
||||
|
||||
|
||||
logdir=`(
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
|
||||
eval echo \""$logdir"\"
|
||||
)`
|
||||
|
||||
|
||||
else
|
||||
logdir='${prefix}/logs'
|
||||
if test "x$enable_fhs_paths" = "xyes"; then :
|
||||
logdir='${localstatedir}/log/${PACKAGE_TARNAME}'
|
||||
else
|
||||
logdir='${prefix}/logs'
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
ac_define_dir=`eval echo $logdir`
|
||||
ac_define_dir=`eval echo $ac_define_dir`
|
||||
last_ac_define_dir=`eval echo $logdir`
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
ac_define_dir_counter=0
|
||||
while test "x$last_ac_define_dir" != "x$ac_define_dir"; do
|
||||
last_ac_define_dir="$ac_define_dir"
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
as_fn_arith $ac_define_dir_counter + 1 && ac_define_dir_counter=$as_val
|
||||
if test "x$ac_define_dir_counter" = x128; then :
|
||||
as_fn_error $? "detected recusive directory expansion when expanding LOG_DIR=$logdir: $ac_define_dir" "$LINENO" 5
|
||||
break
|
||||
fi
|
||||
done
|
||||
LOG_DIR="$ac_define_dir"
|
||||
|
||||
|
||||
|
@ -7322,9 +7378,6 @@ _ACEOF
|
|||
|
||||
|
||||
|
||||
fi
|
||||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to modify helpdir" >&5
|
||||
$as_echo_n "checking whether to modify helpdir... " >&6; }
|
||||
|
@ -7334,37 +7387,31 @@ if test "${with_helpdir+set}" = set; then :
|
|||
withval=$with_helpdir; helpdir=`echo $withval | sed 's/\/$//'`
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
ac_define_dir=`eval echo $helpdir`
|
||||
ac_define_dir=`eval echo $ac_define_dir`
|
||||
HELP_DIR="$ac_define_dir"
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HELP_DIR "$ac_define_dir"
|
||||
_ACEOF
|
||||
|
||||
|
||||
|
||||
|
||||
helpdir=`(
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
|
||||
eval echo \""$helpdir"\"
|
||||
)`
|
||||
|
||||
|
||||
else
|
||||
helpdir='${prefix}/help'
|
||||
if test "x$enable_fhs_paths" = "xyes"; then :
|
||||
helpdir='${datadir}/${PACKAGE_TARNAME}/help'
|
||||
else
|
||||
helpdir='${prefix}/help'
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
ac_define_dir=`eval echo $helpdir`
|
||||
ac_define_dir=`eval echo $ac_define_dir`
|
||||
last_ac_define_dir=`eval echo $helpdir`
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
ac_define_dir_counter=0
|
||||
while test "x$last_ac_define_dir" != "x$ac_define_dir"; do
|
||||
last_ac_define_dir="$ac_define_dir"
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
as_fn_arith $ac_define_dir_counter + 1 && ac_define_dir_counter=$as_val
|
||||
if test "x$ac_define_dir_counter" = x128; then :
|
||||
as_fn_error $? "detected recusive directory expansion when expanding HELP_DIR=$helpdir: $ac_define_dir" "$LINENO" 5
|
||||
break
|
||||
fi
|
||||
done
|
||||
HELP_DIR="$ac_define_dir"
|
||||
|
||||
|
||||
|
@ -7383,9 +7430,6 @@ _ACEOF
|
|||
|
||||
|
||||
|
||||
fi
|
||||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to modify moduledir" >&5
|
||||
$as_echo_n "checking whether to modify moduledir... " >&6; }
|
||||
|
@ -7395,37 +7439,32 @@ if test "${with_moduledir+set}" = set; then :
|
|||
withval=$with_moduledir; moduledir=`echo $withval | sed 's/\/$//'`
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
ac_define_dir=`eval echo $moduledir`
|
||||
ac_define_dir=`eval echo $ac_define_dir`
|
||||
MODULE_DIR="$ac_define_dir"
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define MODULE_DIR "$ac_define_dir"
|
||||
_ACEOF
|
||||
|
||||
|
||||
|
||||
|
||||
moduledir=`(
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
|
||||
eval echo \""$moduledir"\"
|
||||
)`
|
||||
|
||||
|
||||
else
|
||||
moduledir='${prefix}/modules'
|
||||
if test "x$enable_fhs_paths" = "xyes"; then :
|
||||
moduledir='${pkglibdir}/modules'
|
||||
else
|
||||
moduledir='${prefix}/modules'
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
|
||||
fi
|
||||
|
||||
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
ac_define_dir=`eval echo $moduledir`
|
||||
ac_define_dir=`eval echo $ac_define_dir`
|
||||
last_ac_define_dir=`eval echo $moduledir`
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
ac_define_dir_counter=0
|
||||
while test "x$last_ac_define_dir" != "x$ac_define_dir"; do
|
||||
last_ac_define_dir="$ac_define_dir"
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
as_fn_arith $ac_define_dir_counter + 1 && ac_define_dir_counter=$as_val
|
||||
if test "x$ac_define_dir_counter" = x128; then :
|
||||
as_fn_error $? "detected recusive directory expansion when expanding MODULE_DIR=$moduledir: $ac_define_dir" "$LINENO" 5
|
||||
break
|
||||
fi
|
||||
done
|
||||
MODULE_DIR="$ac_define_dir"
|
||||
|
||||
|
||||
|
@ -7444,7 +7483,68 @@ _ACEOF
|
|||
|
||||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether or modify rundir" >&5
|
||||
$as_echo_n "checking whether or modify rundir... " >&6; }
|
||||
|
||||
# Check whether --with-rundir was given.
|
||||
if test "${with_rundir+set}" = set; then :
|
||||
withval=$with_rundir; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
rundir=`echo $withval | sed 's/\/$//'`
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
if test "x$enable_fhs_paths" = "xyes"; then :
|
||||
rundir='${prefix}/run'
|
||||
else
|
||||
rundir='${sysconfdir}'
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
last_ac_define_dir=`eval echo $pkgrundir`
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
ac_define_dir_counter=0
|
||||
while test "x$last_ac_define_dir" != "x$ac_define_dir"; do
|
||||
last_ac_define_dir="$ac_define_dir"
|
||||
ac_define_dir=`eval echo $last_ac_define_dir`
|
||||
as_fn_arith $ac_define_dir_counter + 1 && ac_define_dir_counter=$as_val
|
||||
if test "x$ac_define_dir_counter" = x128; then :
|
||||
as_fn_error $? "detected recusive directory expansion when expanding PKGRUNDIR=$pkgrundir: $ac_define_dir" "$LINENO" 5
|
||||
break
|
||||
fi
|
||||
done
|
||||
PKGRUNDIR="$ac_define_dir"
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define PKGRUNDIR "$ac_define_dir"
|
||||
_ACEOF
|
||||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for program prefix" >&5
|
||||
$as_echo_n "checking for program prefix... " >&6; }
|
||||
|
||||
# Check whether --with-program-prefix was given.
|
||||
if test "${with_program_prefix+set}" = set; then :
|
||||
withval=$with_program_prefix; test "x$with_program_prefix" = "xno" && with_program_prefix=
|
||||
else
|
||||
with_program_prefix=
|
||||
fi
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$with_program_prefix\"" >&5
|
||||
$as_echo "\"$with_program_prefix\"" >&6; }
|
||||
PROGRAM_PREFIX="$with_program_prefix"
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define PROGRAM_PREFIX "$with_program_prefix"
|
||||
_ACEOF
|
||||
|
||||
|
||||
|
||||
|
@ -9528,7 +9628,9 @@ _ACEOF
|
|||
|
||||
fi
|
||||
|
||||
ac_config_files="$ac_config_files Makefile bandb/Makefile ssld/Makefile extensions/Makefile src/Makefile modules/Makefile tools/Makefile doc/Makefile help/Makefile"
|
||||
ac_config_files="$ac_config_files Makefile bandb/Makefile ssld/Makefile extensions/Makefile src/Makefile modules/Makefile tools/Makefile tools/genssl.sh doc/Makefile help/Makefile"
|
||||
|
||||
ac_config_commands="$ac_config_commands tools/genssl.sh_chmod"
|
||||
|
||||
|
||||
cat >confcache <<\_ACEOF
|
||||
|
@ -10078,6 +10180,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
|||
# Files that config.status was made for.
|
||||
config_files="$ac_config_files"
|
||||
config_headers="$ac_config_headers"
|
||||
config_commands="$ac_config_commands"
|
||||
|
||||
_ACEOF
|
||||
|
||||
|
@ -10107,6 +10210,9 @@ $config_files
|
|||
Configuration headers:
|
||||
$config_headers
|
||||
|
||||
Configuration commands:
|
||||
$config_commands
|
||||
|
||||
Report bugs to the package provider."
|
||||
|
||||
_ACEOF
|
||||
|
@ -10243,8 +10349,10 @@ do
|
|||
"src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
|
||||
"modules/Makefile") CONFIG_FILES="$CONFIG_FILES modules/Makefile" ;;
|
||||
"tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
|
||||
"tools/genssl.sh") CONFIG_FILES="$CONFIG_FILES tools/genssl.sh" ;;
|
||||
"doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
|
||||
"help/Makefile") CONFIG_FILES="$CONFIG_FILES help/Makefile" ;;
|
||||
"tools/genssl.sh_chmod") CONFIG_COMMANDS="$CONFIG_COMMANDS tools/genssl.sh_chmod" ;;
|
||||
|
||||
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
|
||||
esac
|
||||
|
@ -10258,6 +10366,7 @@ done
|
|||
if $ac_need_defaults; then
|
||||
test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
|
||||
test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
|
||||
test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
|
||||
fi
|
||||
|
||||
# Have a temporary directory for convenience. Make it in the build tree
|
||||
|
@ -10554,7 +10663,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||
fi # test -n "$CONFIG_HEADERS"
|
||||
|
||||
|
||||
eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS "
|
||||
eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
|
||||
shift
|
||||
for ac_tag
|
||||
do
|
||||
|
@ -10792,9 +10901,16 @@ $as_echo "$as_me: $ac_file is unchanged" >&6;}
|
|||
fi
|
||||
;;
|
||||
|
||||
|
||||
:C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
|
||||
$as_echo "$as_me: executing $ac_file commands" >&6;}
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
case $ac_file$ac_mode in
|
||||
"tools/genssl.sh_chmod":C) chmod 755 tools/genssl.sh ;;
|
||||
|
||||
esac
|
||||
done # for ac_tag
|
||||
|
||||
|
||||
|
|
131
configure.ac
131
configure.ac
|
@ -225,12 +225,37 @@ if test "$LEX" = ":"; then
|
|||
AC_MSG_ERROR([could not locate a suitable lexical generator, install flex or lex.])
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE([fhs-paths],
|
||||
[AS_HELP_STRING([--enable-fhs-paths], [Use more FHS-like pathnames (for packagers).])],
|
||||
[],
|
||||
[dnl detect if the user appears to want --enable-fhs-paths
|
||||
AS_IF([test "$libexecdir" = '${exec_prefix}/libexec' && \
|
||||
test "$localstatedir" = '${prefix}/var' && \
|
||||
test "$libdir" = '${exec_prefix}/lib'],
|
||||
[enable_fhs_paths=no],
|
||||
[enable_fhs_paths=yes])
|
||||
])
|
||||
dnl use directory structure of cached as default (hack)
|
||||
if test "$libexecdir" = '${exec_prefix}/libexec' &&
|
||||
test "$localstatedir" = '${prefix}/var'; then
|
||||
libexecdir='${bindir}'
|
||||
AS_IF([test "x$enable_fhs_paths" = "xyes"],
|
||||
[dnl Avoid name collisions.
|
||||
pkglibexecdir='${libexecdir}/${PACKAGE_TARNAME}'
|
||||
rundir=${rundir-'${prefix}/run'}
|
||||
pkgrundir='${rundir}/${PACKAGE_TARNAME}'
|
||||
pkglocalstatedir='${localstatedir}/${PACKAGE_TARNAME}'],
|
||||
[libexecdir='${bindir}'
|
||||
pkglibexecdir='${libexecdir}'
|
||||
rundir='${sysconfdir}'
|
||||
pkgrundir='${rundir}'
|
||||
localstatedir='${prefix}'
|
||||
fi
|
||||
pkglocalstatedir='${sysconfdir}'])
|
||||
pkglibdir='${libdir}/${PACKAGE_TARNAME}'
|
||||
AC_SUBST([pkglibdir])
|
||||
AC_SUBST([rundir])
|
||||
AC_SUBST([pkgrundir])
|
||||
AC_SUBST([pkglocalstatedir])
|
||||
AC_DEFINE_DIR([PKGLOCALSTATEDIR], [pkglocalstatedir], [[Directory in which to store state, such as band database]])
|
||||
AC_SUBST([pkglibexecdir])
|
||||
AC_DEFINE_DIR([PKGLIBEXECDIR], [pkglibexecdir], [Directory where binaries the IRCd itself spawns live])
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
|
@ -584,22 +609,15 @@ AC_ARG_ENABLE(epoll, AC_HELP_STRING([--enable-epoll],[Force sys_epoll usage (Lin
|
|||
],)
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for --with-confdir
|
||||
dnl Check for --with-confdir [deprecated, use --sysconfdir instead]
|
||||
dnl **********************************************************************
|
||||
|
||||
AC_MSG_CHECKING([whether to modify confdir])
|
||||
AC_ARG_WITH(confdir,
|
||||
AC_HELP_STRING([--with-confdir=DIR],
|
||||
[Directory to install config files.]),
|
||||
[ confdir=`echo $withval | sed 's/\/$//'`
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE_DIR(ETC_DIR, confdir, [Prefix where config files are installed.])
|
||||
AC_SUBST_DIR([confdir]) ],
|
||||
[ confdir='${prefix}/etc'
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE_DIR(ETC_DIR, confdir, [Prefix where config files are installed.])
|
||||
AC_SUBST_DIR([confdir])]
|
||||
)
|
||||
AC_ARG_WITH([confdir],
|
||||
[AC_HELP_STRING([--with-confdir=DIR],
|
||||
[Directory to install config files [deprecated, use --sysconfdir instead].])],
|
||||
[ sysconfdir=`echo $withval | sed 's/\/$//'` ],
|
||||
[ confdir='${sysconfdir}' ])
|
||||
AC_DEFINE_DIR([ETC_DIR], [sysconfdir], [Prefix where config files are installed.])
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for --with-logdir
|
||||
|
@ -610,14 +628,13 @@ AC_ARG_WITH(logdir,
|
|||
AC_HELP_STRING([--with-logdir=DIR],
|
||||
[Directory where to write logfiles.]),
|
||||
[ logdir=`echo $withval | sed 's/\/$//'`
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE_DIR(LOG_DIR, logdir, [Prefix where to write logfiles.])
|
||||
AC_SUBST_DIR([logdir]) ],
|
||||
[ logdir='${prefix}/logs'
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE_DIR(LOG_DIR, logdir, [Prefix where to write logfiles.])
|
||||
AC_SUBST_DIR([logdir])]
|
||||
)
|
||||
AC_MSG_RESULT(yes)],
|
||||
[ AS_IF([test "x$enable_fhs_paths" = "xyes"],
|
||||
[logdir='${localstatedir}/log/${PACKAGE_TARNAME}'],
|
||||
[logdir='${prefix}/logs'])
|
||||
AC_MSG_RESULT(no)])
|
||||
AC_DEFINE_DIR([LOG_DIR], [logdir], [Prefix where to write logfiles.])
|
||||
AC_SUBST_DIR([logdir])
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for --with-helpdir
|
||||
|
@ -628,14 +645,13 @@ AC_ARG_WITH(helpdir,
|
|||
AC_HELP_STRING([--with-helpdir=DIR],
|
||||
[Directory to install help files.]),
|
||||
[ helpdir=`echo $withval | sed 's/\/$//'`
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE_DIR(HELP_DIR, helpdir, [Prefix where help files are installed.])
|
||||
AC_SUBST_DIR([helpdir]) ],
|
||||
[ helpdir='${prefix}/help'
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE_DIR(HELP_DIR, helpdir, [Prefix where help file are installed.])
|
||||
AC_SUBST_DIR([helpdir])]
|
||||
)
|
||||
AC_MSG_RESULT(yes) ],
|
||||
[ AS_IF([test "x$enable_fhs_paths" = "xyes"],
|
||||
[helpdir='${datadir}/${PACKAGE_TARNAME}/help'],
|
||||
[helpdir='${prefix}/help'])
|
||||
AC_MSG_RESULT(no) ])
|
||||
AC_DEFINE_DIR([HELP_DIR], [helpdir], [Prefix where help files are installed.])
|
||||
AC_SUBST_DIR([helpdir])
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for --with-moduledir
|
||||
|
@ -643,17 +659,44 @@ dnl **********************************************************************
|
|||
|
||||
AC_MSG_CHECKING([whether to modify moduledir])
|
||||
AC_ARG_WITH(moduledir,
|
||||
AC_HELP_STRING([--with-moduledir=DIR],
|
||||
[Directory to install modules.]),
|
||||
[AC_HELP_STRING([--with-moduledir=DIR],
|
||||
[Directory to install modules.])],
|
||||
[ moduledir=`echo $withval | sed 's/\/$//'`
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
|
||||
AC_SUBST_DIR([moduledir]) ],
|
||||
[ moduledir='${prefix}/modules'
|
||||
AC_MSG_RESULT(yes)],
|
||||
[ AS_IF([test "x$enable_fhs_paths" = "xyes"],
|
||||
[moduledir='${pkglibdir}/modules'],
|
||||
[moduledir='${prefix}/modules'])
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
|
||||
AC_SUBST_DIR([moduledir])]
|
||||
)
|
||||
])
|
||||
AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
|
||||
AC_SUBST_DIR([moduledir])
|
||||
|
||||
dnl Check for --with-rundir
|
||||
|
||||
AC_MSG_CHECKING([whether or modify rundir])
|
||||
AC_ARG_WITH([rundir],
|
||||
[AC_HELP_STRING([--with-rundir=DIR],
|
||||
[Directory in which to store pidfile.])],
|
||||
[AC_MSG_RESULT([yes])
|
||||
rundir=`echo $withval | sed 's/\/$//'`],
|
||||
[AC_MSG_RESULT([no])
|
||||
AS_IF([test "x$enable_fhs_paths" = "xyes"],
|
||||
[rundir='${prefix}/run'],
|
||||
[rundir='${sysconfdir}'])])
|
||||
AC_SUBST([rundir])
|
||||
AC_DEFINE_DIR([PKGRUNDIR], [pkgrundir], [Directory to store pidfile in.])
|
||||
|
||||
dnl Installed utility program prefixes (does not affect binaries
|
||||
dnl installed into pkglibexecdir)
|
||||
AC_MSG_CHECKING([for program prefix])
|
||||
AC_ARG_WITH([program-prefix],
|
||||
[AS_HELP_STRING([--with-program-prefix=], [If set, programs installed into PATH will be installed with names prefixed by this prefix.])],
|
||||
[test "x$with_program_prefix" = "xno" && with_program_prefix=],
|
||||
[with_program_prefix=])
|
||||
AC_MSG_RESULT(["$with_program_prefix"])
|
||||
PROGRAM_PREFIX="$with_program_prefix"
|
||||
AC_SUBST([PROGRAM_PREFIX])
|
||||
AC_DEFINE_UNQUOTED([PROGRAM_PREFIX], ["$with_program_prefix"], [String with which all programs intended to be in PATH are prefixed.])
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Branding
|
||||
|
@ -1197,9 +1240,11 @@ AC_CONFIG_FILES( \
|
|||
src/Makefile \
|
||||
modules/Makefile \
|
||||
tools/Makefile \
|
||||
tools/genssl.sh \
|
||||
doc/Makefile \
|
||||
help/Makefile \
|
||||
)
|
||||
AC_CONFIG_COMMANDS([tools/genssl.sh_chmod], [chmod 755 tools/genssl.sh])
|
||||
|
||||
AC_OUTPUT
|
||||
|
||||
|
|
|
@ -15,12 +15,14 @@ RM = @RM@
|
|||
CP = @CP@
|
||||
TOUCH = @TOUCH@
|
||||
|
||||
PROGRAM_PREFIX = @PROGRAM_PREFIX@
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
exec_suffix = @exec_suffix@
|
||||
bindir = @bindir@
|
||||
libexecdir = @libexecdir@
|
||||
confdir = @confdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
localstatedir = @localstatedir@
|
||||
# Change this later! -- adrian
|
||||
moduledir = @moduledir@
|
||||
|
@ -43,9 +45,9 @@ CPPFLAGS = ${INCLUDES} @CPPFLAGS@
|
|||
all: build
|
||||
|
||||
install-mkdirs:
|
||||
-@if test ! -d $(DESTDIR)$(confdir); then \
|
||||
echo "mkdir -p $(confdir)"; \
|
||||
mkdir -p $(DESTDIR)$(confdir); \
|
||||
-@if test ! -d $(DESTDIR)$(sysconfdir); then \
|
||||
echo "mkdir -p $(sysconfdir)"; \
|
||||
mkdir -p $(DESTDIR)$(sysconfdir); \
|
||||
fi
|
||||
|
||||
-@if test ! -d $(DESTDIR)$(mandir); then \
|
||||
|
@ -56,25 +58,25 @@ install-mkdirs:
|
|||
install: install-mkdirs build
|
||||
@echo "ircd: installing example config files ($(CONFS))"
|
||||
@for i in $(CONFS); do \
|
||||
if test -f $(DESTDIR)$(confdir)/$$i; then \
|
||||
$(MV) $(DESTDIR)$(confdir)/$$i $(DESTDIR)$(confdir)/$$i.old; \
|
||||
if test -f $(DESTDIR)$(sysconfdir)/$$i; then \
|
||||
$(MV) $(DESTDIR)$(sysconfdir)/$$i $(DESTDIR)$(sysconfdir)/$$i.old; \
|
||||
fi; \
|
||||
$(INSTALL_DATA) $$i $(DESTDIR)$(confdir); \
|
||||
$(INSTALL_DATA) $$i $(DESTDIR)$(sysconfdir); \
|
||||
done
|
||||
|
||||
-@if test ! -f $(DESTDIR)$(confdir)/ircd.motd; then \
|
||||
-@if test ! -f $(DESTDIR)$(sysconfdir)/ircd.motd; then \
|
||||
echo "ircd: installing motd file (ircd.motd)"; \
|
||||
$(INSTALL_DATA) ircd.motd $(DESTDIR)$(confdir); \
|
||||
$(INSTALL_DATA) ircd.motd $(DESTDIR)$(sysconfdir); \
|
||||
fi
|
||||
|
||||
-@if test -f $(DESTDIR)$(confdir)/links.txt; then \
|
||||
$(RM) $(DESTDIR)$(confdir)/links.txt; \
|
||||
-@if test -f $(DESTDIR)$(sysconfdir)/links.txt; then \
|
||||
$(RM) $(DESTDIR)$(sysconfdir)/links.txt; \
|
||||
fi
|
||||
|
||||
@echo "ircd: installing manpage"
|
||||
@for i in $(MANPAGES); do \
|
||||
if test ! -f $(DESTDIR)$(mandir)/$$i; then \
|
||||
$(INSTALL_DATA) $$i $(DESTDIR)$(mandir); \
|
||||
if test ! -f $(DESTDIR)$(mandir)/$(PROGRAM_PREFIX)$$i; then \
|
||||
$(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/$(PROGRAM_PREFIX)$$i; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
|
|
43
doc/away-notify.txt
Normal file
43
doc/away-notify.txt
Normal file
|
@ -0,0 +1,43 @@
|
|||
away-notify client capability specification
|
||||
----------------------------------------------
|
||||
|
||||
Copyright (c) 2012 Keith Buck <mr_flea@esper.net>.
|
||||
|
||||
Unlimited redistribution and modification of this document is allowed
|
||||
provided that the above copyright notice and this permission notice
|
||||
remains in tact.
|
||||
|
||||
The away-notify client capability allows a client to specify that it
|
||||
would like to be notified when users are marked/unmarked as away. This
|
||||
capability is referred to as 'away-notify' at capability negotiation
|
||||
time.
|
||||
|
||||
This capability is designed to replace polling of WHO as a more
|
||||
efficient method of tracking the away state of users in a channel. The
|
||||
away-notify capability both conserves bandwidth as WHO requests are
|
||||
not continually sent and allows the client to be notified immediately
|
||||
upon a user setting or removing their away state (as opposed to when
|
||||
WHO is next polled).
|
||||
|
||||
When this capability is enabled, clients will be sent an AWAY message
|
||||
when a user sharing a channel with them sets or removes their away
|
||||
state, as well as when a user joins and has an away message set.
|
||||
(Note that AWAY will not be sent for joining users with no away
|
||||
message set.)
|
||||
|
||||
The format of the AWAY message is as follows:
|
||||
|
||||
:nick!user@host AWAY [:message]
|
||||
|
||||
If the message is present, the user (specified by the nick!user@host
|
||||
mask) is going away. If the message is not present, the user is
|
||||
removing their away message/state.
|
||||
|
||||
To fully track the away state of users, clients should:
|
||||
|
||||
1) Enable the away-notify capability at negotiation time.
|
||||
|
||||
2) Execute WHO when joining a channel to capture the current away
|
||||
state of all users in that channel.
|
||||
|
||||
3) Update state appropriately upon receiving an AWAY message.
|
|
@ -514,6 +514,8 @@ general {
|
|||
reject_duration = 5 minutes;
|
||||
throttle_duration = 60;
|
||||
throttle_count = 4;
|
||||
max_ratelimit_tokens = 30;
|
||||
away_interval = 30;
|
||||
};
|
||||
|
||||
modules {
|
||||
|
|
|
@ -1264,6 +1264,19 @@ general {
|
|||
client_flood_burst_max = 5;
|
||||
client_flood_message_time = 1;
|
||||
client_flood_message_num = 2;
|
||||
|
||||
/* max_ratelimit_tokens: the maximum number of ratelimit tokens that one
|
||||
* user can accumulate. This attempts to limit the amount of outbound
|
||||
* bandwidth one user can consume. Do not change unless you know what
|
||||
* you're doing.
|
||||
*/
|
||||
max_ratelimit_tokens = 30;
|
||||
|
||||
/* away_interval: the minimum interval between AWAY commands. One
|
||||
* additional AWAY command is allowed, and only marking as away
|
||||
* counts.
|
||||
*/
|
||||
away_interval = 30;
|
||||
};
|
||||
|
||||
modules {
|
||||
|
|
|
@ -16,7 +16,14 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SUID = @INSTALL_PROGRAM@ -o root -m 4755
|
||||
SHELL = /bin/sh
|
||||
AUTOMODULEDIR = @moduledir@/extensions
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
libdir = @libdir@
|
||||
pkglibdir = @pkglibdir@
|
||||
moduledir = @moduledir@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
AUTOMODULEDIR = $(moduledir)/extensions
|
||||
|
||||
SSL_LIBS = @SSL_LIBS@
|
||||
SSL_INCLUDES = @SSL_INCLUDES@
|
||||
|
@ -98,7 +105,7 @@ install: all
|
|||
.SUFFIXES: .so
|
||||
|
||||
.c.so:
|
||||
${CC} ${PICFLAGS} ${CPPFLAGS} ${CFLAGS} $< -o $@
|
||||
${CC} ${PICFLAGS} ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} $< -o $@
|
||||
|
||||
.PHONY: depend clean distclean
|
||||
depend:
|
||||
|
|
|
@ -47,25 +47,28 @@ DECLARE_MODULE_AV1(ip_cloaking, _modinit, _moddeinit, NULL, NULL,
|
|||
ip_cloaking_hfnlist, "$Revision: 3526 $");
|
||||
|
||||
static void
|
||||
distribute_hostchange(struct Client *client)
|
||||
distribute_hostchange(struct Client *client_p, char *newhost)
|
||||
{
|
||||
if (irccmp(client->host, client->orighost))
|
||||
sendto_one_numeric(client, RPL_HOSTHIDDEN, "%s :is now your hidden host",
|
||||
client->host);
|
||||
if (newhost != client_p->orighost)
|
||||
sendto_one_numeric(client_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
|
||||
client_p->host);
|
||||
else
|
||||
sendto_one_numeric(client, RPL_HOSTHIDDEN, "%s :hostname reset",
|
||||
client->host);
|
||||
sendto_one_numeric(client_p, RPL_HOSTHIDDEN, "%s :hostname reset",
|
||||
client_p->host);
|
||||
|
||||
sendto_server(NULL, NULL,
|
||||
CAP_EUID | CAP_TS6, NOCAPS, ":%s CHGHOST %s :%s",
|
||||
use_id(&me), use_id(client), client->host);
|
||||
use_id(&me), use_id(client_p), client_p->host);
|
||||
sendto_server(NULL, NULL,
|
||||
CAP_TS6, CAP_EUID, ":%s ENCAP * CHGHOST %s :%s",
|
||||
use_id(&me), use_id(client), client->host);
|
||||
if (irccmp(client->host, client->orighost))
|
||||
SetDynSpoof(client);
|
||||
use_id(&me), use_id(client_p), client_p->host);
|
||||
|
||||
change_nick_user_host(client_p, client_p->name, client_p->username, newhost, 0, "Changing host");
|
||||
|
||||
if (newhost != client_p->orighost)
|
||||
SetDynSpoof(client_p);
|
||||
else
|
||||
ClearDynSpoof(client);
|
||||
ClearDynSpoof(client_p);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -179,8 +182,7 @@ check_umode_change(void *vdata)
|
|||
}
|
||||
if (strcmp(source_p->host, source_p->localClient->mangledhost))
|
||||
{
|
||||
rb_strlcpy(source_p->host, source_p->localClient->mangledhost, HOSTLEN + 1);
|
||||
distribute_hostchange(source_p);
|
||||
distribute_hostchange(source_p, source_p->localClient->mangledhost);
|
||||
}
|
||||
else /* not really nice, but we need to send this numeric here */
|
||||
sendto_one_numeric(source_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
|
||||
|
@ -191,8 +193,7 @@ check_umode_change(void *vdata)
|
|||
if (source_p->localClient->mangledhost != NULL &&
|
||||
!strcmp(source_p->host, source_p->localClient->mangledhost))
|
||||
{
|
||||
rb_strlcpy(source_p->host, source_p->orighost, HOSTLEN + 1);
|
||||
distribute_hostchange(source_p);
|
||||
distribute_hostchange(source_p, source_p->orighost);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,25 +44,28 @@ DECLARE_MODULE_AV1(ip_cloaking, _modinit, _moddeinit, NULL, NULL,
|
|||
ip_cloaking_hfnlist, "$Revision: 3526 $");
|
||||
|
||||
static void
|
||||
distribute_hostchange(struct Client *client)
|
||||
distribute_hostchange(struct Client *client_p, char *newhost)
|
||||
{
|
||||
if (irccmp(client->host, client->orighost))
|
||||
sendto_one_numeric(client, RPL_HOSTHIDDEN, "%s :is now your hidden host",
|
||||
client->host);
|
||||
if (newhost != client_p->orighost)
|
||||
sendto_one_numeric(client_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
|
||||
client_p->host);
|
||||
else
|
||||
sendto_one_numeric(client, RPL_HOSTHIDDEN, "%s :hostname reset",
|
||||
client->host);
|
||||
sendto_one_numeric(client_p, RPL_HOSTHIDDEN, "%s :hostname reset",
|
||||
client_p->host);
|
||||
|
||||
sendto_server(NULL, NULL,
|
||||
CAP_EUID | CAP_TS6, NOCAPS, ":%s CHGHOST %s :%s",
|
||||
use_id(&me), use_id(client), client->host);
|
||||
use_id(&me), use_id(client_p), client_p->host);
|
||||
sendto_server(NULL, NULL,
|
||||
CAP_TS6, CAP_EUID, ":%s ENCAP * CHGHOST %s :%s",
|
||||
use_id(&me), use_id(client), client->host);
|
||||
if (irccmp(client->host, client->orighost))
|
||||
SetDynSpoof(client);
|
||||
use_id(&me), use_id(client_p), client_p->host);
|
||||
|
||||
change_nick_user_host(client_p, client_p->name, client_p->username, newhost, 0, "Changing host");
|
||||
|
||||
if (newhost != client_p->orighost)
|
||||
SetDynSpoof(client_p);
|
||||
else
|
||||
ClearDynSpoof(client);
|
||||
ClearDynSpoof(client_p);
|
||||
}
|
||||
|
||||
#define Nval 0x8c3a48ac
|
||||
|
@ -186,8 +189,7 @@ check_umode_change(void *vdata)
|
|||
}
|
||||
if (strcmp(source_p->host, source_p->localClient->mangledhost))
|
||||
{
|
||||
rb_strlcpy(source_p->host, source_p->localClient->mangledhost, HOSTLEN);
|
||||
distribute_hostchange(source_p);
|
||||
distribute_hostchange(source_p, source_p->localClient->mangledhost);
|
||||
}
|
||||
else /* not really nice, but we need to send this numeric here */
|
||||
sendto_one_numeric(source_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
|
||||
|
@ -198,8 +200,7 @@ check_umode_change(void *vdata)
|
|||
if (source_p->localClient->mangledhost != NULL &&
|
||||
!strcmp(source_p->host, source_p->localClient->mangledhost))
|
||||
{
|
||||
rb_strlcpy(source_p->host, source_p->orighost, HOSTLEN);
|
||||
distribute_hostchange(source_p);
|
||||
distribute_hostchange(source_p, source_p->orighost);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,25 +47,28 @@ DECLARE_MODULE_AV1(ip_cloaking, _modinit, _moddeinit, NULL, NULL,
|
|||
ip_cloaking_hfnlist, "$Revision: 3526 $");
|
||||
|
||||
static void
|
||||
distribute_hostchange(struct Client *client)
|
||||
distribute_hostchange(struct Client *client_p, char *newhost)
|
||||
{
|
||||
if (irccmp(client->host, client->orighost))
|
||||
sendto_one_numeric(client, RPL_HOSTHIDDEN, "%s :is now your hidden host",
|
||||
client->host);
|
||||
if (newhost != client_p->orighost)
|
||||
sendto_one_numeric(client_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
|
||||
client_p->host);
|
||||
else
|
||||
sendto_one_numeric(client, RPL_HOSTHIDDEN, "%s :hostname reset",
|
||||
client->host);
|
||||
sendto_one_numeric(client_p, RPL_HOSTHIDDEN, "%s :hostname reset",
|
||||
client_p->host);
|
||||
|
||||
sendto_server(NULL, NULL,
|
||||
CAP_EUID | CAP_TS6, NOCAPS, ":%s CHGHOST %s :%s",
|
||||
use_id(&me), use_id(client), client->host);
|
||||
use_id(&me), use_id(client_p), client_p->host);
|
||||
sendto_server(NULL, NULL,
|
||||
CAP_TS6, CAP_EUID, ":%s ENCAP * CHGHOST %s :%s",
|
||||
use_id(&me), use_id(client), client->host);
|
||||
if (irccmp(client->host, client->orighost))
|
||||
SetDynSpoof(client);
|
||||
use_id(&me), use_id(client_p), client_p->host);
|
||||
|
||||
change_nick_user_host(client_p, client_p->name, client_p->username, newhost, 0, "Changing host");
|
||||
|
||||
if (newhost != client_p->orighost)
|
||||
SetDynSpoof(client_p);
|
||||
else
|
||||
ClearDynSpoof(client);
|
||||
ClearDynSpoof(client_p);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -179,8 +182,7 @@ check_umode_change(void *vdata)
|
|||
}
|
||||
if (strcmp(source_p->host, source_p->localClient->mangledhost))
|
||||
{
|
||||
rb_strlcpy(source_p->host, source_p->localClient->mangledhost, HOSTLEN + 1);
|
||||
distribute_hostchange(source_p);
|
||||
distribute_hostchange(source_p, source_p->localClient->mangledhost);
|
||||
}
|
||||
else /* not really nice, but we need to send this numeric here */
|
||||
sendto_one_numeric(source_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
|
||||
|
@ -191,8 +193,7 @@ check_umode_change(void *vdata)
|
|||
if (source_p->localClient->mangledhost != NULL &&
|
||||
!strcmp(source_p->host, source_p->localClient->mangledhost))
|
||||
{
|
||||
rb_strlcpy(source_p->host, source_p->orighost, HOSTLEN + 1);
|
||||
distribute_hostchange(source_p);
|
||||
distribute_hostchange(source_p, source_p->orighost);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,25 +44,28 @@ DECLARE_MODULE_AV1(ip_cloaking, _modinit, _moddeinit, NULL, NULL,
|
|||
ip_cloaking_hfnlist, "$Revision: 3522 $");
|
||||
|
||||
static void
|
||||
distribute_hostchange(struct Client *client)
|
||||
distribute_hostchange(struct Client *client_p, char *newhost)
|
||||
{
|
||||
if (irccmp(client->host, client->orighost))
|
||||
sendto_one_numeric(client, RPL_HOSTHIDDEN, "%s :is now your hidden host",
|
||||
client->host);
|
||||
if (newhost != client_p->orighost)
|
||||
sendto_one_numeric(client_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
|
||||
client_p->host);
|
||||
else
|
||||
sendto_one_numeric(client, RPL_HOSTHIDDEN, "%s :hostname reset",
|
||||
client->host);
|
||||
sendto_one_numeric(client_p, RPL_HOSTHIDDEN, "%s :hostname reset",
|
||||
client_p->host);
|
||||
|
||||
sendto_server(NULL, NULL,
|
||||
CAP_EUID | CAP_TS6, NOCAPS, ":%s CHGHOST %s :%s",
|
||||
use_id(&me), use_id(client), client->host);
|
||||
use_id(&me), use_id(client_p), client_p->host);
|
||||
sendto_server(NULL, NULL,
|
||||
CAP_TS6, CAP_EUID, ":%s ENCAP * CHGHOST %s :%s",
|
||||
use_id(&me), use_id(client), client->host);
|
||||
if (irccmp(client->host, client->orighost))
|
||||
SetDynSpoof(client);
|
||||
use_id(&me), use_id(client_p), client_p->host);
|
||||
|
||||
change_nick_user_host(client_p, client_p->name, client_p->username, newhost, 0, "Changing host");
|
||||
|
||||
if (newhost != client_p->orighost)
|
||||
SetDynSpoof(client_p);
|
||||
else
|
||||
ClearDynSpoof(client);
|
||||
ClearDynSpoof(client_p);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -128,8 +131,7 @@ check_umode_change(void *vdata)
|
|||
}
|
||||
if (strcmp(source_p->host, source_p->localClient->mangledhost))
|
||||
{
|
||||
rb_strlcpy(source_p->host, source_p->localClient->mangledhost, HOSTLEN);
|
||||
distribute_hostchange(source_p);
|
||||
distribute_hostchange(source_p, source_p->localClient->mangledhost);
|
||||
}
|
||||
else /* not really nice, but we need to send this numeric here */
|
||||
sendto_one_numeric(source_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
|
||||
|
@ -140,8 +142,7 @@ check_umode_change(void *vdata)
|
|||
if (source_p->localClient->mangledhost != NULL &&
|
||||
!strcmp(source_p->host, source_p->localClient->mangledhost))
|
||||
{
|
||||
rb_strlcpy(source_p->host, source_p->orighost, HOSTLEN);
|
||||
distribute_hostchange(source_p);
|
||||
distribute_hostchange(source_p, source_p->orighost);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,9 @@ INSTALL_DATA= @INSTALL_DATA@
|
|||
RM= @RM@
|
||||
|
||||
prefix= @prefix@
|
||||
exec_prefix= @execprefix@
|
||||
exec_prefix= @exec_prefix@
|
||||
datarootdir = @datarootdir@
|
||||
datadir = @datadir@
|
||||
helpdir= @helpdir@
|
||||
uhelpdir= ${helpdir}/users
|
||||
ohelpdir= ${helpdir}/opers
|
||||
|
|
|
@ -237,7 +237,7 @@ struct LocalUser
|
|||
|
||||
struct DNSQuery *dnsquery; /* for outgoing server's name lookup */
|
||||
|
||||
time_t last_away; /* Away since... */
|
||||
time_t next_away; /* Don't allow next away before... */
|
||||
time_t last;
|
||||
|
||||
/* clients allowed to talk through +g */
|
||||
|
@ -252,8 +252,6 @@ struct LocalUser
|
|||
* to avoid flooding.
|
||||
* -- adrian
|
||||
*/
|
||||
int dummy1;
|
||||
int dummy0;
|
||||
int sent_parsed; /* how many messages we've parsed in this second */
|
||||
time_t last_knock; /* time of last knock */
|
||||
unsigned long random_ping;
|
||||
|
@ -268,6 +266,10 @@ struct LocalUser
|
|||
unsigned int targets_free; /* free targets */
|
||||
time_t target_last; /* last time we cleared a slot */
|
||||
|
||||
/* ratelimit items */
|
||||
time_t ratelimit;
|
||||
unsigned int join_who_credits;
|
||||
|
||||
struct ListClient *safelist_data;
|
||||
|
||||
char *mangledhost; /* non-NULL if host mangling module loaded and
|
||||
|
@ -444,6 +446,7 @@ struct ListClient
|
|||
#define CLICAP_SASL 0x0002
|
||||
#define CLICAP_ACCOUNT_NOTIFY 0x0004
|
||||
#define CLICAP_EXTENDED_JOIN 0x0008
|
||||
#define CLICAP_AWAY_NOTIFY 0x0010
|
||||
|
||||
/*
|
||||
* flags macros.
|
||||
|
|
|
@ -59,14 +59,13 @@
|
|||
#define HPATH HELP_DIR "/opers"
|
||||
|
||||
/* files */
|
||||
#define SPATH BINPATH "/ircd" /* ircd executable */
|
||||
#define LIPATH LIBPATH "/libircd" SHARED_SUFFIX /* ircd library */
|
||||
#define SPATH BINPATH "/" PROGRAM_PREFIX "ircd" /* ircd executable */
|
||||
#define CPATH ETCPATH "/ircd.conf" /* ircd.conf file */
|
||||
#define MPATH ETCPATH "/ircd.motd" /* MOTD file */
|
||||
#define LPATH LOGPATH "/ircd.log" /* ircd logfile */
|
||||
#define PPATH ETCPATH "/ircd.pid" /* pid file */
|
||||
#define PPATH PKGRUNDIR "/ircd.pid" /* pid file */
|
||||
#define OPATH ETCPATH "/opers.motd" /* oper MOTD file */
|
||||
#define DBPATH ETCPATH "/ban.db" /* bandb file */
|
||||
#define DBPATH PKGLOCALSTATEDIR "/ban.db" /* bandb file */
|
||||
|
||||
/* IGNORE_BOGUS_TS
|
||||
* Ignore bogus timestamps from other servers. Yes this will desync
|
||||
|
|
|
@ -380,6 +380,7 @@ extern const char *form_str(int);
|
|||
#define ERR_SASLTOOLONG 905
|
||||
#define ERR_SASLABORTED 906
|
||||
#define ERR_SASLALREADY 907
|
||||
#define RPL_SASLMECHS 908
|
||||
|
||||
#define ERR_LAST_ERR_MSG 999
|
||||
|
||||
|
|
30
include/ratelimit.h
Normal file
30
include/ratelimit.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* charybdis: an advanced Internet Relay Chat Daemon(ircd).
|
||||
*
|
||||
* Copyright (C) 2012 Keith Buck <mr_flea@esper.net>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice is present in all copies.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_ratelimit_h
|
||||
#define INCLUDED_ratelimit_h
|
||||
|
||||
int ratelimit_client(struct Client *client_p, unsigned int penalty);
|
||||
int ratelimit_client_who(struct Client *client_p, unsigned int penalty);
|
||||
void credit_client_join(struct Client *client_p);
|
||||
|
||||
#endif /* INCLUDED_ratelimit_h */
|
|
@ -224,6 +224,8 @@ struct config_file_entry
|
|||
int global_snotices;
|
||||
int operspy_dont_care_user_info;
|
||||
int use_propagated_bans;
|
||||
int max_ratelimit_tokens;
|
||||
int away_interval;
|
||||
|
||||
int client_flood_max_lines;
|
||||
int client_flood_burst_rate;
|
||||
|
|
|
@ -67,6 +67,7 @@ struct ServerStatistics
|
|||
unsigned int is_ssuc; /* successful sasl authentications */
|
||||
unsigned int is_sbad; /* failed sasl authentications */
|
||||
unsigned int is_tgch; /* messages blocked due to target change */
|
||||
unsigned int is_rl; /* commands blocked due to ratelimit */
|
||||
};
|
||||
|
||||
extern struct ServerStatistics ServerStats;
|
||||
|
|
|
@ -183,7 +183,7 @@
|
|||
/* Define to 1 if you have the <wait.h> header file. */
|
||||
#undef HAVE_WAIT_H
|
||||
|
||||
/* Prefix where help file are installed. */
|
||||
/* Prefix where help files are installed. */
|
||||
#undef HELP_DIR
|
||||
|
||||
/* Prefix where the ircd is installed. */
|
||||
|
@ -246,6 +246,18 @@
|
|||
/* Size of the pre-client heap. */
|
||||
#undef PCLIENT_HEAP_SIZE
|
||||
|
||||
/* Directory where binaries the IRCd itself spawns live */
|
||||
#undef PKGLIBEXECDIR
|
||||
|
||||
/* Directory in which to store state, such as band database */
|
||||
#undef PKGLOCALSTATEDIR
|
||||
|
||||
/* Directory to store pidfile in. */
|
||||
#undef PKGRUNDIR
|
||||
|
||||
/* String with which all programs intended to be in PATH are prefixed. */
|
||||
#undef PROGRAM_PREFIX
|
||||
|
||||
/* This is the type of IO loop we are using */
|
||||
#undef SELECT_TYPE
|
||||
|
||||
|
|
|
@ -2,8 +2,17 @@
|
|||
AC_DEFUN([AC_DEFINE_DIR], [
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
ac_define_dir=`eval echo [$]$2`
|
||||
ac_define_dir=`eval echo [$]ac_define_dir`
|
||||
last_ac_define_dir=`eval echo [$]$2`
|
||||
ac_define_dir=`eval echo [$]last_ac_define_dir`
|
||||
ac_define_dir_counter=0
|
||||
while test "x[$]last_ac_define_dir" != "x[$]ac_define_dir"; do
|
||||
last_ac_define_dir="[$]ac_define_dir"
|
||||
ac_define_dir=`eval echo [$]last_ac_define_dir`
|
||||
AS_VAR_ARITH([ac_define_dir_counter], [$ac_define_dir_counter + 1])
|
||||
AS_VAR_IF([ac_define_dir_counter], [128],
|
||||
[AC_MSG_ERROR([detected recusive directory expansion when expanding $1=[$]$2: [$]ac_define_dir])
|
||||
break])
|
||||
done
|
||||
$1="$ac_define_dir"
|
||||
AC_SUBST($1)
|
||||
ifelse($3, ,
|
||||
|
|
2592
modules/.depend
2592
modules/.depend
File diff suppressed because it is too large
Load diff
|
@ -28,7 +28,11 @@ SSL_INCLUDES = @SSL_INCLUDES@
|
|||
IRCDLIBS = @LIBS@ $(SSL_LIBS)
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
libdir = @libdir@
|
||||
pkglibdir = @pkglibdir@
|
||||
moduledir = @moduledir@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
# Change this later! -- adrian
|
||||
automoduledir = @moduledir@/autoload
|
||||
|
||||
|
@ -152,9 +156,6 @@ libmodules.a: $(S_OBJS) static_modules.o
|
|||
|
||||
install-mkdirs:
|
||||
@echo "ircd: setting up modular directory structure"
|
||||
-@if test ! -d $(DESTDIR)$(moduledir); then \
|
||||
mkdir $(DESTDIR)$(moduledir); \
|
||||
fi
|
||||
-@if test -d $(DESTDIR)$(moduledir)-old; then \
|
||||
rm -rf $(DESTDIR)$(moduledir)-old; \
|
||||
fi
|
||||
|
@ -195,7 +196,7 @@ install_hpux_shared: install-mkdirs
|
|||
${CC} ${CPPFLAGS} ${CFLAGS} -DMODNAME=`basename $< .c`_mheader -c $< -o $@
|
||||
|
||||
.c.so:
|
||||
${CC} ${PICFLAGS} ${CPPFLAGS} ${CFLAGS} $< -o $@
|
||||
${CC} ${PICFLAGS} ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} $< -o $@
|
||||
|
||||
.so.sl:
|
||||
$(LD) -b $< -o $@
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
#include "modules.h"
|
||||
#include "packet.h"
|
||||
#include "chmode.h"
|
||||
#include "ratelimit.h"
|
||||
|
||||
static int m_join(struct Client *, struct Client *, int, const char **);
|
||||
static int ms_join(struct Client *, struct Client *, int, const char **);
|
||||
|
@ -325,6 +326,9 @@ m_join(struct Client *client_p, struct Client *source_p, int parc, const char *p
|
|||
}
|
||||
chptr->join_count++;
|
||||
|
||||
/* credit user for join */
|
||||
credit_client_join(source_p);
|
||||
|
||||
/* we send the user their join here, because we could have to
|
||||
* send a mode out next.
|
||||
*/
|
||||
|
@ -1268,7 +1272,8 @@ remove_ban_list(struct Channel *chptr, struct Client *source_p,
|
|||
banptr = ptr->data;
|
||||
|
||||
/* trailing space, and the mode letter itself */
|
||||
plen = strlen(banptr->banstr) + 2;
|
||||
plen = strlen(banptr->banstr) +
|
||||
(banptr->forward ? strlen(banptr->forward) + 1 : 0) + 2;
|
||||
|
||||
if(count >= MAXMODEPARAMS || (cur_len + plen) > BUFSIZE - 4)
|
||||
{
|
||||
|
@ -1286,7 +1291,10 @@ remove_ban_list(struct Channel *chptr, struct Client *source_p,
|
|||
|
||||
*mbuf++ = c;
|
||||
cur_len += plen;
|
||||
pbuf += rb_sprintf(pbuf, "%s ", banptr->banstr);
|
||||
if (banptr->forward)
|
||||
pbuf += rb_sprintf(pbuf, "%s$%s ", banptr->banstr, banptr->forward);
|
||||
else
|
||||
pbuf += rb_sprintf(pbuf, "%s ", banptr->banstr);
|
||||
count++;
|
||||
|
||||
free_ban(banptr);
|
||||
|
|
|
@ -240,6 +240,35 @@ ms_mlock(struct Client *client_p, struct Client *source_p, int parc, const char
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
possibly_remove_lower_forward(struct Client *fakesource_p, int mems,
|
||||
struct Channel *chptr, rb_dlink_list *banlist, int mchar,
|
||||
const char *mask, const char *forward)
|
||||
{
|
||||
struct Ban *actualBan;
|
||||
rb_dlink_node *ptr;
|
||||
|
||||
RB_DLINK_FOREACH(ptr, banlist->head)
|
||||
{
|
||||
actualBan = ptr->data;
|
||||
if(!irccmp(actualBan->banstr, mask) &&
|
||||
(actualBan->forward == NULL ||
|
||||
irccmp(actualBan->forward, forward) < 0))
|
||||
{
|
||||
sendto_channel_local(mems, chptr, ":%s MODE %s -%c %s%s%s",
|
||||
fakesource_p->name,
|
||||
chptr->chname,
|
||||
mchar,
|
||||
actualBan->banstr,
|
||||
actualBan->forward ? "$" : "",
|
||||
actualBan->forward ? actualBan->forward : "");
|
||||
rb_dlinkDelete(&actualBan->node, banlist);
|
||||
free_ban(actualBan);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
ms_bmask(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
|
@ -346,7 +375,9 @@ ms_bmask(struct Client *client_p, struct Client *source_p, int parc, const char
|
|||
{
|
||||
*forward++ = '\0';
|
||||
if(*forward == '\0')
|
||||
forward = NULL;
|
||||
tlen--, forward = NULL;
|
||||
possibly_remove_lower_forward(fakesource_p, mems,
|
||||
chptr, banlist, parv[3][0], s, forward);
|
||||
}
|
||||
|
||||
if(add_id(fakesource_p, chptr, s, forward, banlist, mode_type))
|
||||
|
@ -358,14 +389,15 @@ ms_bmask(struct Client *client_p, struct Client *source_p, int parc, const char
|
|||
*mbuf = '\0';
|
||||
*(pbuf - 1) = '\0';
|
||||
sendto_channel_local(mems, chptr, "%s %s", modebuf, parabuf);
|
||||
sendto_server(client_p, chptr, needcap, CAP_TS6,
|
||||
"%s %s", modebuf, parabuf);
|
||||
|
||||
mbuf = modebuf + mlen;
|
||||
pbuf = parabuf;
|
||||
plen = modecount = 0;
|
||||
}
|
||||
|
||||
if (forward != NULL)
|
||||
forward[-1] = '$';
|
||||
|
||||
*mbuf++ = parv[3][0];
|
||||
arglen = rb_sprintf(pbuf, "%s ", s);
|
||||
pbuf += arglen;
|
||||
|
@ -393,7 +425,6 @@ ms_bmask(struct Client *client_p, struct Client *source_p, int parc, const char
|
|||
*mbuf = '\0';
|
||||
*(pbuf - 1) = '\0';
|
||||
sendto_channel_local(mems, chptr, "%s %s", modebuf, parabuf);
|
||||
sendto_server(client_p, chptr, needcap, CAP_TS6, "%s %s", modebuf, parabuf);
|
||||
}
|
||||
|
||||
sendto_server(client_p, chptr, CAP_TS6 | needcap, NOCAPS, ":%s BMASK %ld %s %s :%s",
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
#include "s_serv.h"
|
||||
#include "packet.h"
|
||||
|
||||
|
||||
static int m_away(struct Client *, struct Client *, int, const char **);
|
||||
|
||||
struct Message away_msgtab = {
|
||||
|
@ -69,7 +68,8 @@ DECLARE_MODULE_AV1(away, NULL, NULL, away_clist, NULL, NULL, "$Revision: 3370 $"
|
|||
static int
|
||||
m_away(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
if(MyClient(source_p) && !IsFloodDone(source_p))
|
||||
if(MyClient(source_p) && source_p->localClient->next_away &&
|
||||
!IsFloodDone(source_p))
|
||||
flood_endgrace(source_p);
|
||||
|
||||
if(!IsClient(source_p))
|
||||
|
@ -84,12 +84,33 @@ m_away(struct Client *client_p, struct Client *source_p, int parc, const char *p
|
|||
sendto_server(client_p, NULL, CAP_TS6, NOCAPS,
|
||||
":%s AWAY", use_id(source_p));
|
||||
free_away(source_p);
|
||||
|
||||
sendto_common_channels_local_butone(source_p, CLICAP_AWAY_NOTIFY, ":%s!%s@%s AWAY",
|
||||
source_p->name, source_p->username, source_p->host);
|
||||
}
|
||||
if(MyConnect(source_p))
|
||||
sendto_one_numeric(source_p, RPL_UNAWAY, form_str(RPL_UNAWAY));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Rate limit this because it is sent to common channels. */
|
||||
if (MyClient(source_p))
|
||||
{
|
||||
if(!IsOper(source_p) &&
|
||||
source_p->localClient->next_away > rb_current_time())
|
||||
{
|
||||
sendto_one(source_p, form_str(RPL_LOAD2HI),
|
||||
me.name, source_p->name, "AWAY");
|
||||
return;
|
||||
}
|
||||
if(source_p->localClient->next_away < rb_current_time() -
|
||||
ConfigFileEntry.away_interval)
|
||||
source_p->localClient->next_away = rb_current_time();
|
||||
else
|
||||
source_p->localClient->next_away = rb_current_time() +
|
||||
ConfigFileEntry.away_interval;
|
||||
}
|
||||
|
||||
if(source_p->user->away == NULL)
|
||||
allocate_away(source_p);
|
||||
if(strncmp(source_p->user->away, parv[1], AWAYLEN - 1))
|
||||
|
@ -97,8 +118,15 @@ m_away(struct Client *client_p, struct Client *source_p, int parc, const char *p
|
|||
rb_strlcpy(source_p->user->away, parv[1], AWAYLEN);
|
||||
sendto_server(client_p, NULL, CAP_TS6, NOCAPS,
|
||||
":%s AWAY :%s", use_id(source_p), source_p->user->away);
|
||||
sendto_common_channels_local_butone(source_p,
|
||||
CLICAP_AWAY_NOTIFY,
|
||||
":%s!%s@%s AWAY :%s",
|
||||
source_p->name,
|
||||
source_p->username,
|
||||
source_p->host,
|
||||
source_p->user->away);
|
||||
}
|
||||
|
||||
|
||||
if(MyConnect(source_p))
|
||||
sendto_one_numeric(source_p, RPL_NOWAWAY, form_str(RPL_NOWAWAY));
|
||||
|
||||
|
|
|
@ -72,6 +72,7 @@ static struct clicap
|
|||
_CLICAP("sasl", CLICAP_SASL, 0, 0),
|
||||
_CLICAP("account-notify", CLICAP_ACCOUNT_NOTIFY, 0, 0),
|
||||
_CLICAP("extended-join", CLICAP_EXTENDED_JOIN, 0, 0),
|
||||
_CLICAP("away-notify", CLICAP_AWAY_NOTIFY, 0, 0),
|
||||
};
|
||||
|
||||
#define CLICAP_LIST_LEN (sizeof(clicap_list) / sizeof(struct clicap))
|
||||
|
|
|
@ -518,6 +518,18 @@ static struct InfoStruct info_table[] = {
|
|||
&ConfigFileEntry.use_propagated_bans,
|
||||
"KLINE sets fully propagated bans"
|
||||
},
|
||||
{
|
||||
"max_ratelimit_tokens",
|
||||
OUTPUT_DECIMAL,
|
||||
&ConfigFileEntry.max_ratelimit_tokens,
|
||||
"The maximum number of tokens that can be accumulated for executing rate-limited commands",
|
||||
},
|
||||
{
|
||||
"away_interval",
|
||||
OUTPUT_DECIMAL,
|
||||
&ConfigFileEntry.away_interval,
|
||||
"The minimum time between aways",
|
||||
},
|
||||
{
|
||||
"default_split_server_count",
|
||||
OUTPUT_DECIMAL,
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "modules.h"
|
||||
#include "s_conf.h"
|
||||
#include "cache.h"
|
||||
#include "ratelimit.h"
|
||||
|
||||
static int m_motd(struct Client *, struct Client *, int, const char **);
|
||||
static int mo_motd(struct Client *, struct Client *, int, const char **);
|
||||
|
@ -66,7 +67,7 @@ m_motd(struct Client *client_p, struct Client *source_p, int parc, const char *p
|
|||
{
|
||||
static time_t last_used = 0;
|
||||
|
||||
if((last_used + ConfigFileEntry.pace_wait) > rb_current_time())
|
||||
if((last_used + ConfigFileEntry.pace_wait) > rb_current_time() || !ratelimit_client(source_p, 6))
|
||||
{
|
||||
/* safe enough to give this on a local connect only */
|
||||
sendto_one(source_p, form_str(RPL_LOAD2HI),
|
||||
|
|
|
@ -40,12 +40,13 @@
|
|||
#include "s_conf.h"
|
||||
#include "s_newconf.h"
|
||||
|
||||
static int m_privs(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]);
|
||||
static int me_privs(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]);
|
||||
static int mo_privs(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]);
|
||||
|
||||
struct Message privs_msgtab = {
|
||||
"PRIVS", 0, 0, 0, MFLG_SLOW,
|
||||
{mg_unreg, mg_not_oper, mg_ignore, mg_ignore, {me_privs, 0}, {mo_privs, 0}}
|
||||
{mg_unreg, {m_privs, 0}, mg_ignore, mg_ignore, {me_privs, 0}, {mo_privs, 0}}
|
||||
};
|
||||
|
||||
mapi_clist_av1 privs_clist[] = {
|
||||
|
@ -151,3 +152,16 @@ static int mo_privs(struct Client *client_p, struct Client *source_p, int parc,
|
|||
use_id(target_p));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int m_privs(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
if (parc >= 2 && !EmptyString(parv[1]) &&
|
||||
irccmp(parv[1], source_p->name)) {
|
||||
sendto_one_numeric(source_p, ERR_NOPRIVILEGES,
|
||||
form_str(ERR_NOPRIVILEGES));
|
||||
return 0;
|
||||
}
|
||||
|
||||
show_privs(source_p, source_p);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -133,7 +133,7 @@ static struct StatsStruct stats_cmd_table[] = {
|
|||
{'b', stats_delay, 1, 1, },
|
||||
{'B', stats_hash, 1, 1, },
|
||||
{'c', stats_connect, 0, 0, },
|
||||
{'C', stats_capability, 1, 1, },
|
||||
{'C', stats_capability, 1, 0, },
|
||||
{'d', stats_tdeny, 1, 0, },
|
||||
{'D', stats_deny, 1, 0, },
|
||||
{'e', stats_exempt, 1, 0, },
|
||||
|
@ -944,6 +944,8 @@ stats_tstats (struct Client *source_p)
|
|||
sendto_one_numeric(source_p, RPL_STATSDEBUG,
|
||||
"T :tgchange blocked msgs %u restricted addrs %lu",
|
||||
sp.is_tgch, rb_dlink_list_length(&tgchange_list));
|
||||
sendto_one_numeric(source_p, RPL_STATSDEBUG,
|
||||
"T :ratelimit blocked commands %u", sp.is_rl);
|
||||
sendto_one_numeric(source_p, RPL_STATSDEBUG,
|
||||
"T :auth successes %u fails %u",
|
||||
sp.is_asuc, sp.is_abad);
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include "modules.h"
|
||||
#include "packet.h"
|
||||
#include "s_newconf.h"
|
||||
#include "ratelimit.h"
|
||||
|
||||
#define FIELD_CHANNEL 0x0001
|
||||
#define FIELD_HOP 0x0002
|
||||
|
@ -177,8 +178,18 @@ m_who(struct Client *client_p, struct Client *source_p, int parc, const char *pa
|
|||
{
|
||||
/* List all users on a given channel */
|
||||
chptr = find_channel(parv[1] + operspy);
|
||||
|
||||
if(chptr != NULL)
|
||||
{
|
||||
if (!IsOper(source_p) && !ratelimit_client_who(source_p, rb_dlink_list_length(&chptr->members)/50))
|
||||
{
|
||||
sendto_one(source_p, form_str(RPL_LOAD2HI),
|
||||
me.name, source_p->name, "WHO");
|
||||
sendto_one(source_p, form_str(RPL_ENDOFWHO),
|
||||
me.name, source_p->name, "*");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(operspy)
|
||||
report_operspy(source_p, "WHO", chptr->chname);
|
||||
|
||||
|
@ -187,6 +198,7 @@ m_who(struct Client *client_p, struct Client *source_p, int parc, const char *pa
|
|||
else if(!SecretChannel(chptr))
|
||||
do_who_on_channel(source_p, chptr, server_oper, NO, &fmt);
|
||||
}
|
||||
|
||||
sendto_one(source_p, form_str(RPL_ENDOFWHO),
|
||||
me.name, source_p->name, parv[1] + operspy);
|
||||
return 0;
|
||||
|
@ -233,7 +245,7 @@ m_who(struct Client *client_p, struct Client *source_p, int parc, const char *pa
|
|||
/* it has to be a global who at this point, limit it */
|
||||
if(!IsOper(source_p))
|
||||
{
|
||||
if((last_used + ConfigFileEntry.pace_wait) > rb_current_time())
|
||||
if((last_used + ConfigFileEntry.pace_wait) > rb_current_time() || !ratelimit_client(source_p, 1))
|
||||
{
|
||||
sendto_one(source_p, form_str(RPL_LOAD2HI),
|
||||
me.name, source_p->name, "WHO");
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "hook.h"
|
||||
#include "s_newconf.h"
|
||||
#include "ipv4_from_ipv6.h"
|
||||
#include "ratelimit.h"
|
||||
|
||||
static void do_whois(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]);
|
||||
static void single_whois(struct Client *source_p, struct Client *target_p, int operspy);
|
||||
|
@ -89,7 +90,7 @@ m_whois(struct Client *client_p, struct Client *source_p, int parc, const char *
|
|||
if(!IsOper(source_p))
|
||||
{
|
||||
/* seeing as this is going across servers, we should limit it */
|
||||
if((last_used + ConfigFileEntry.pace_wait_simple) > rb_current_time())
|
||||
if((last_used + ConfigFileEntry.pace_wait_simple) > rb_current_time() || !ratelimit_client(source_p, 2))
|
||||
{
|
||||
sendto_one(source_p, form_str(RPL_LOAD2HI),
|
||||
me.name, source_p->name, "WHOIS");
|
||||
|
|
1288
src/.depend
1288
src/.depend
File diff suppressed because it is too large
Load diff
|
@ -12,7 +12,7 @@ RM = @RM@
|
|||
LEX = @LEX@
|
||||
LEXLIB = @LEXLIB@
|
||||
PICFLAGS = @PICFLAGS@
|
||||
CFLAGS = @IRC_CFLAGS@ -DIRCD_PREFIX=\"@prefix@\"
|
||||
CFLAGS = @IRC_CFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
MKDEP = @MKDEP@ -DIRCD_PREFIX=\"@prefix@\"
|
||||
MV = @MV@
|
||||
|
@ -23,6 +23,9 @@ exec_prefix = @exec_prefix@
|
|||
bindir = @bindir@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
pkglibexecdir = @pkglibexecdir@
|
||||
|
||||
PROGRAM_PREFIX = @PROGRAM_PREFIX@
|
||||
|
||||
DOLLAR = $$
|
||||
|
||||
|
@ -36,7 +39,7 @@ SSL_INCLUDES = @SSL_INCLUDES@
|
|||
IRCDLIBS = @MODULES_LIBS@ -L../libratbox/src/.libs -lratbox @LIBS@ $(SSL_LIBS)
|
||||
|
||||
INCLUDES = -I../include -I../libratbox/include $(SSL_INCLUDES)
|
||||
CPPFLAGS = ${INCLUDES} @CPPFLAGS@
|
||||
CPPFLAGS = ${INCLUDES} -DIRCD_PREFIX=\"@prefix@\" @CPPFLAGS@
|
||||
|
||||
default: all
|
||||
|
||||
|
@ -46,8 +49,9 @@ y.tab.o: y.tab.c ircd_parser.y
|
|||
# Note GNU bison uses <file>.tab.c not y.tab.c
|
||||
y.tab.c: ircd_parser.y
|
||||
${YACC} -d ircd_parser.y
|
||||
y.tab.h: y.tab.c
|
||||
|
||||
lex.yy.o: lex.yy.c ircd_lexer.l
|
||||
lex.yy.o: lex.yy.c ircd_lexer.l y.tab.h
|
||||
${CC} ${CPPFLAGS} ${PICFLAGS} ${CFLAGS} -I. -c lex.yy.c
|
||||
|
||||
lex.yy.c: ircd_lexer.l
|
||||
|
@ -82,6 +86,7 @@ SRCS = \
|
|||
packet.c \
|
||||
parse.c \
|
||||
privilege.c \
|
||||
ratelimit.c \
|
||||
res.c \
|
||||
reslib.c \
|
||||
reject.c \
|
||||
|
@ -131,10 +136,10 @@ install: install-mkdirs build
|
|||
fi
|
||||
@echo "ircd: installing ircd ($(PROGS))"
|
||||
@for i in $(PROGS); do \
|
||||
if test -f $(DESTDIR)$(bindir)/$$i; then \
|
||||
$(MV) $(DESTDIR)$(bindir)/$$i $(DESTDIR)$(bindir)/$$i.old; \
|
||||
if test -f $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i; then \
|
||||
$(MV) $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i.old; \
|
||||
fi; \
|
||||
$(INSTALL_BIN) $$i $(DESTDIR)$(bindir); \
|
||||
$(INSTALL_BIN) $$i $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i; \
|
||||
done
|
||||
|
||||
version.c: version.c.SH
|
||||
|
|
|
@ -82,10 +82,10 @@ start_bandb(void)
|
|||
const char *suffix = "";
|
||||
#endif
|
||||
|
||||
rb_setenv("BANDB_DPATH", ConfigFileEntry.dpath, 1);
|
||||
rb_setenv("BANDB_DBPATH", PKGLOCALSTATEDIR "/ban.db", 1);
|
||||
if(bandb_path == NULL)
|
||||
{
|
||||
rb_snprintf(fullpath, sizeof(fullpath), "%s/bandb%s", BINPATH, suffix);
|
||||
rb_snprintf(fullpath, sizeof(fullpath), "%s/bandb%s", PKGLIBEXECDIR, suffix);
|
||||
|
||||
if(access(fullpath, X_OK) == -1)
|
||||
{
|
||||
|
@ -95,8 +95,8 @@ start_bandb(void)
|
|||
if(access(fullpath, X_OK) == -1)
|
||||
{
|
||||
ilog(L_MAIN,
|
||||
"Unable to execute bandb in %s or %s/bin",
|
||||
BINPATH, ConfigFileEntry.dpath);
|
||||
"Unable to execute bandb%s in %s or %s/bin",
|
||||
suffix, PKGLIBEXECDIR, ConfigFileEntry.dpath);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -136,6 +136,12 @@ send_channel_join(struct Channel *chptr, struct Client *client_p)
|
|||
client_p->name, client_p->username, client_p->host, chptr->chname,
|
||||
EmptyString(client_p->user->suser) ? "*" : client_p->user->suser,
|
||||
client_p->info);
|
||||
|
||||
/* Send away message to away-notify enabled clients. */
|
||||
if (client_p->user->away)
|
||||
sendto_channel_local_with_capability_butone(client_p, ALL_MEMBERS, CLICAP_AWAY_NOTIFY, NOCAPS, chptr,
|
||||
":%s!%s@%s AWAY :%s", client_p->name, client_p->username,
|
||||
client_p->host, client_p->user->away);
|
||||
}
|
||||
|
||||
/* find_channel_membership()
|
||||
|
|
|
@ -941,9 +941,9 @@ chm_ban(struct Client *source_p, struct Channel *chptr,
|
|||
}
|
||||
|
||||
if(removed && removed->forward)
|
||||
removed_mask_pos += rb_snprintf(buf, sizeof(buf), "%s$%s", removed->banstr, removed->forward);
|
||||
removed_mask_pos += rb_snprintf(buf + old_removed_mask_pos, sizeof(buf), "%s$%s", removed->banstr, removed->forward) + 1;
|
||||
else
|
||||
removed_mask_pos += rb_strlcpy(buf, mask, sizeof(buf));
|
||||
removed_mask_pos += rb_strlcpy(buf + old_removed_mask_pos, mask, sizeof(buf)) + 1;
|
||||
if(removed)
|
||||
{
|
||||
free_ban(removed);
|
||||
|
|
|
@ -933,7 +933,7 @@ static const char * replies[] = {
|
|||
/* 905 ERR_SASLTOOLONG */ ":%s 905 %s :SASL message too long",
|
||||
/* 906 ERR_SASLABORTED */ ":%s 906 %s :SASL authentication aborted",
|
||||
/* 907 ERR_SASLALREADY */ ":%s 907 %s :You have already completed SASL authentication",
|
||||
/* 908 */ NULL,
|
||||
/* 908 RPL_SASLMECHS */ ":%s 908 %s %s :are available SASL mechanisms",
|
||||
/* 909 */ NULL,
|
||||
/* 910 */ NULL,
|
||||
/* 911 */ NULL,
|
||||
|
|
|
@ -2277,6 +2277,8 @@ static struct ConfEntry conf_general_table[] =
|
|||
{ "client_flood_burst_max", CF_INT, NULL, 0, &ConfigFileEntry.client_flood_burst_max },
|
||||
{ "client_flood_message_num", CF_INT, NULL, 0, &ConfigFileEntry.client_flood_message_num },
|
||||
{ "client_flood_message_time", CF_INT, NULL, 0, &ConfigFileEntry.client_flood_message_time },
|
||||
{ "max_ratelimit_tokens", CF_INT, NULL, 0, &ConfigFileEntry.max_ratelimit_tokens },
|
||||
{ "away_interval", CF_INT, NULL, 0, &ConfigFileEntry.away_interval },
|
||||
{ "\0", 0, NULL, 0, NULL }
|
||||
};
|
||||
|
||||
|
|
132
src/ratelimit.c
Normal file
132
src/ratelimit.c
Normal file
|
@ -0,0 +1,132 @@
|
|||
/*
|
||||
* charybdis: an advanced ircd
|
||||
* ratelimit.c: Per-client ratelimiting for high-bandwidth commands.
|
||||
*
|
||||
* Copyright (c) 2012 Keith Buck <mr_flea -at- esper.net>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice is present in all copies.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "stdinc.h"
|
||||
#include "s_conf.h"
|
||||
#include "s_stats.h"
|
||||
#include "ratelimit.h"
|
||||
|
||||
/*
|
||||
* ratelimit_client(struct Client *client_p, int penalty)
|
||||
*
|
||||
* Applies a penalty to a client for executing a rate-limited command.
|
||||
*
|
||||
* Inputs:
|
||||
* - the client to be rate-limited
|
||||
* - the penalty to apply
|
||||
*
|
||||
* Outputs:
|
||||
* - 1 if the user has been penalized and the command should be
|
||||
* allowed to execute
|
||||
* - 0 if the command should not execute and the user has not
|
||||
* been penalized (they are executing commands too fast and have
|
||||
* been rate-limited)
|
||||
* The caller should return RPL_LOAD2HI
|
||||
*
|
||||
* Side effects:
|
||||
* - The ratelimit for the user will be initialized if it hasn't
|
||||
* been initialized yet.
|
||||
*/
|
||||
int ratelimit_client(struct Client *client_p, unsigned int penalty)
|
||||
{
|
||||
s_assert(client_p);
|
||||
s_assert(MyClient(client_p));
|
||||
|
||||
if (!client_p->localClient->ratelimit)
|
||||
{
|
||||
/* Not initialized yet - do it now. */
|
||||
client_p->localClient->ratelimit = rb_current_time() - ConfigFileEntry.max_ratelimit_tokens;
|
||||
}
|
||||
|
||||
/* Don't make it impossible to execute anything. */
|
||||
if (penalty > ConfigFileEntry.max_ratelimit_tokens)
|
||||
penalty = ConfigFileEntry.max_ratelimit_tokens;
|
||||
|
||||
if (client_p->localClient->ratelimit <= rb_current_time() - ConfigFileEntry.max_ratelimit_tokens)
|
||||
{
|
||||
client_p->localClient->ratelimit = rb_current_time() - ConfigFileEntry.max_ratelimit_tokens + penalty;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (client_p->localClient->ratelimit + penalty > rb_current_time())
|
||||
{
|
||||
ServerStats.is_rl++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
client_p->localClient->ratelimit += penalty;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* ratelimit_client_who(struct Client *client_p, int penalty)
|
||||
*
|
||||
* Rate-limits a client for a WHO query if they have no remaining "free"
|
||||
* WHO queries to execute.
|
||||
*
|
||||
* Inputs:
|
||||
* - same as ratelimit_client
|
||||
*
|
||||
* Outputs:
|
||||
* - same as ratelimit_client
|
||||
*
|
||||
* Side effects:
|
||||
* - A "free who" token will be removed from the user if one exists.
|
||||
* If one doesn't exist, the user will be ratelimited as normal.
|
||||
*/
|
||||
int ratelimit_client_who(struct Client *client_p, unsigned int penalty)
|
||||
{
|
||||
s_assert(client_p);
|
||||
s_assert(MyClient(client_p));
|
||||
|
||||
if (client_p->localClient->join_who_credits)
|
||||
{
|
||||
--client_p->localClient->join_who_credits;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return ratelimit_client(client_p, penalty);
|
||||
}
|
||||
|
||||
/*
|
||||
* credit_client_join(struct Client *client_p)
|
||||
*
|
||||
* Gives a user a credit to execute a WHO for joining a channel.
|
||||
*
|
||||
* Inputs:
|
||||
* - the client to be credited
|
||||
*
|
||||
* Outputs:
|
||||
* - (none)
|
||||
*
|
||||
* Side effects:
|
||||
* - (none)
|
||||
*/
|
||||
void credit_client_join(struct Client *client_p)
|
||||
{
|
||||
s_assert(client_p);
|
||||
s_assert(MyClient(client_p));
|
||||
|
||||
++client_p->localClient->join_who_credits;
|
||||
}
|
|
@ -745,6 +745,8 @@ set_default_conf(void)
|
|||
ConfigFileEntry.global_snotices = YES;
|
||||
ConfigFileEntry.operspy_dont_care_user_info = NO;
|
||||
ConfigFileEntry.use_propagated_bans = YES;
|
||||
ConfigFileEntry.max_ratelimit_tokens = 30;
|
||||
ConfigFileEntry.away_interval = 30;
|
||||
|
||||
#ifdef HAVE_LIBZ
|
||||
ConfigFileEntry.compression_level = 4;
|
||||
|
|
|
@ -500,7 +500,7 @@ burst_modes_TS6(struct Client *client_p, struct Channel *chptr,
|
|||
{
|
||||
banptr = ptr->data;
|
||||
|
||||
tlen = strlen(banptr->banstr) + 1;
|
||||
tlen = strlen(banptr->banstr) + (banptr->forward ? strlen(banptr->forward) + 1 : 0) + 1;
|
||||
|
||||
/* uh oh */
|
||||
if(cur_len + tlen > BUFSIZE - 3)
|
||||
|
@ -519,7 +519,10 @@ burst_modes_TS6(struct Client *client_p, struct Channel *chptr,
|
|||
t = buf + mlen;
|
||||
}
|
||||
|
||||
rb_sprintf(t, "%s ", banptr->banstr);
|
||||
if (banptr->forward)
|
||||
rb_sprintf(t, "%s$%s ", banptr->banstr, banptr->forward);
|
||||
else
|
||||
rb_sprintf(t, "%s ", banptr->banstr);
|
||||
t += tlen;
|
||||
cur_len += tlen;
|
||||
}
|
||||
|
|
|
@ -1468,6 +1468,12 @@ change_nick_user_host(struct Client *target_p, const char *nick, const char *use
|
|||
*modeval = '\0';
|
||||
}
|
||||
|
||||
/* Resend away message to away-notify enabled clients. */
|
||||
if (target_p->user->away)
|
||||
sendto_common_channels_local_butone(target_p, CLICAP_AWAY_NOTIFY, ":%s!%s@%s AWAY :%s",
|
||||
target_p->name, target_p->username, target_p->host,
|
||||
target_p->user->away);
|
||||
|
||||
if(MyClient(target_p) && changed_case)
|
||||
sendto_one(target_p, ":%s!%s@%s NICK %s",
|
||||
target_p->name, target_p->username, target_p->host, nick);
|
||||
|
|
|
@ -261,7 +261,7 @@ start_ssldaemon(int count, const char *ssl_cert, const char *ssl_private_key, co
|
|||
|
||||
if(ssld_path == NULL)
|
||||
{
|
||||
rb_snprintf(fullpath, sizeof(fullpath), "%s/ssld%s", BINPATH, suffix);
|
||||
rb_snprintf(fullpath, sizeof(fullpath), "%s/ssld%s", PKGLIBEXECDIR, suffix);
|
||||
|
||||
if(access(fullpath, X_OK) == -1)
|
||||
{
|
||||
|
@ -270,8 +270,8 @@ start_ssldaemon(int count, const char *ssl_cert, const char *ssl_private_key, co
|
|||
if(access(fullpath, X_OK) == -1)
|
||||
{
|
||||
ilog(L_MAIN,
|
||||
"Unable to execute ssld%s in %s/bin or %s",
|
||||
ConfigFileEntry.dpath, suffix, BINPATH);
|
||||
"Unable to execute ssld%s in %s or %s/bin",
|
||||
suffix, PKGLIBEXECDIR, ConfigFileEntry.dpath);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,8 +22,12 @@ exec_prefix = @exec_prefix@
|
|||
bindir = @bindir@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
confdir = @confdir@
|
||||
pkglibexecdir = @pkglibexecdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
localstatedir = @localstatedir@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
|
||||
PROGRAM_PREFIX = @PROGRAM_PREFIX@
|
||||
|
||||
ZIP_LIB = @ZLIB_LD@
|
||||
|
||||
|
@ -32,7 +36,8 @@ IRCDLIBS = @MODULES_LIBS@ -L../libratbox/src/.libs -lratbox @LIBS@ $(SSL_LIBS) $
|
|||
INCLUDES = -I. -I../include -I../libratbox/include $(SSL_INCLUDES)
|
||||
CPPFLAGS = ${INCLUDES} @CPPFLAGS@
|
||||
|
||||
PROGS = ssld
|
||||
pkglibexec_PROGS = ssld
|
||||
PROGS = $(pkglibexec_PROGS)
|
||||
|
||||
SOURCES = \
|
||||
ssld.c
|
||||
|
@ -47,14 +52,27 @@ build: all
|
|||
ssld: ${OBJECTS}
|
||||
${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${OBJECTS} ${IRCDLIBS}
|
||||
|
||||
install: build
|
||||
install-mkdirs:
|
||||
-@for dir in '$(bindir)' '$(pkglibexecdir)'; do \
|
||||
if test ! -d '$(DESTDIR)'"$${dir}"; then \
|
||||
mkdir -p -m 755 '$(DESTDIR)'"$${dir}"; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
install: install-mkdirs build
|
||||
@echo "ircd: installing ssld ($(PROGS))"
|
||||
@for i in $(PROGS); do \
|
||||
@for i in $(bin_PROGS); do \
|
||||
if test -f $(DESTDIR)$(bindir)/$$i; then \
|
||||
$(MV) $(DESTDIR)$(bindir)/$$i $(DESTDIR)$(bindir)/$$i.old; \
|
||||
$(MV) $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i.old; \
|
||||
fi; \
|
||||
$(INSTALL_BIN) $$i $(DESTDIR)$(bindir); \
|
||||
$(INSTALL_BIN) $$i $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i; \
|
||||
done
|
||||
@for i in $(pkglibexec_PROGS); do \
|
||||
if test -f '$(DESTDIR)$(pkglibexecdir)/'$$i; then \
|
||||
$(MV) '$(DESTDIR)$(pkglibexecdir)/'$$i '$(DESTDIR)$(pkglibexecdir)/'$$i.old; \
|
||||
fi; \
|
||||
$(INSTALL_BIN) $$i '$(DESTDIR)$(pkglibexecdir)/'$$i; \
|
||||
done
|
||||
|
||||
.c.o:
|
||||
${CC} ${CPPFLAGS} ${CFLAGS} -c $<
|
||||
|
|
|
@ -15,6 +15,8 @@ MV = @MV@
|
|||
RM = @RM@
|
||||
LN = @LN@
|
||||
|
||||
PROGRAM_PREFIX = @PROGRAM_PREFIX@
|
||||
|
||||
IRCDLIBS = -L../libratbox/src/.libs -lratbox @LIBS@
|
||||
INCLUDES = -I../include -I../libratbox/include
|
||||
CPPFLAGS = ${INCLUDES} @CPPFLAGS@
|
||||
|
@ -24,7 +26,7 @@ exec_prefix = @exec_prefix@
|
|||
bindir = @bindir@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
confdir = @confdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
localstatedir = @localstatedir@
|
||||
|
||||
PROGS = viconf mkpasswd convertilines convertklines genssl.sh
|
||||
|
@ -36,7 +38,7 @@ build: all
|
|||
mkpasswd: mkpasswd.c
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) mkpasswd.c -o mkpasswd $(IRCDLIBS)
|
||||
|
||||
viconf: viconf.c
|
||||
viconf: viconf.c ../include/setup.h ../include/config.h
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) viconf.c -o viconf $(IRCDLIBS)
|
||||
|
||||
convertilines: convertilines.c
|
||||
|
@ -45,13 +47,14 @@ convertilines: convertilines.c
|
|||
convertklines: convertklines.c
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) convertklines.c -o convertklines $(IRCDLIBS)
|
||||
|
||||
genssl.sh:
|
||||
genssl.sh: genssl.sh.in
|
||||
cd .. && ./config.status tools/genssl.sh && ./config.status tools/genssl.sh_chmod
|
||||
|
||||
clean:
|
||||
$(RM) -f encspeed viconf chkconf mkpasswd *~ core *.exe convertklines convertilines
|
||||
|
||||
distclean: clean
|
||||
$(RM) -f Makefile
|
||||
$(RM) -f genssl.sh Makefile
|
||||
|
||||
lint:
|
||||
lint -aacgprxhH $(CPPFLAGS) -DIRCD_PREFIX=\"@prefix@\" $(convertklines_SOURCES) $(mkpasswd_SOURCES) $(viconf_SOURCES) $(encspeed_SOURCES) >>../lint.out
|
||||
|
@ -63,16 +66,12 @@ depend:
|
|||
|
||||
# DO NOT DELETE
|
||||
|
||||
viconf.o: ../include/config.h ../include/setup.h
|
||||
viconf.o:
|
||||
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
exec_suffix = @exec_suffix@
|
||||
bindir = @bindir@
|
||||
libexecdir = @libexecdir@
|
||||
confdir = @confdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
localstatedir = @localstatedir@
|
||||
# Change this later! -- adrian
|
||||
moduledir = @moduledir@
|
||||
|
@ -95,11 +94,11 @@ install-mkdirs:
|
|||
install: install-mkdirs build
|
||||
@echo "ircd: installing tools ($(PROGS))"
|
||||
@for i in $(PROGS); do \
|
||||
if test -f $(DESTDIR)$(bindir)/$$i; then \
|
||||
$(MV) $(DESTDIR)$(bindir)/$$i $(DESTDIR)$(bindir)/$$i.old; \
|
||||
if test -f $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i; then \
|
||||
$(MV) $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i.old; \
|
||||
fi; \
|
||||
$(INSTALL_BIN) $$i $(DESTDIR)$(bindir); \
|
||||
$(INSTALL_BIN) $$i $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)$$i; \
|
||||
done; \
|
||||
$(RM) -f $(DESTDIR)$(bindir)/vimotd
|
||||
$(LN) $(DESTDIR)$(bindir)/viconf $(DESTDIR)$(bindir)/vimotd
|
||||
$(RM) -f $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)vimotd
|
||||
$(LN) $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)viconf $(DESTDIR)$(bindir)/$(PROGRAM_PREFIX)vimotd
|
||||
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
#!/bin/sh
|
||||
echo "Generating self-signed certificate .. "
|
||||
openssl req -x509 -nodes -newkey rsa:1024 -keyout ../etc/ssl.key -out ../etc/ssl.cert
|
||||
|
||||
echo "Generating Diffie-Hellman file for secure SSL/TLS negotiation .. "
|
||||
openssl dhparam -out ../etc/dh.pem 1024
|
||||
|
||||
echo "
|
||||
Now change these lines in the IRCd config file:
|
||||
|
||||
ssl_private_key = "etc/ssl.key";
|
||||
ssl_cert = "etc/ssl.cert";
|
||||
ssl_dh_params = "etc/dh.pem";
|
||||
|
||||
Enjoy using ssl.
|
||||
"
|
29
tools/genssl.sh.in
Executable file
29
tools/genssl.sh.in
Executable file
|
@ -0,0 +1,29 @@
|
|||
#!/bin/sh
|
||||
prefix="@prefix@"
|
||||
exec_prefix="@exec_prefix@"
|
||||
sysconfdir="@sysconfdir@"
|
||||
|
||||
echo "Generating self-signed certificate .. "
|
||||
openssl req -x509 -nodes -newkey rsa:1024 -keyout "${sysconfdir}"/ssl.key -out "${sysconfdir}"/ssl.cert
|
||||
|
||||
echo "Generating Diffie-Hellman file for secure SSL/TLS negotiation .. "
|
||||
openssl dhparam -out "${sysconfdir}"/dh.pem 1024
|
||||
|
||||
# If sysconfdir is relative to prefix, make the path relative. I.e.,
|
||||
# prefix=/usr and sysconfdir=/etc -> relative_sysconfdir=/etc,
|
||||
# prefix=/home/binki/chary and sysconfdir=/home/binki/chary/etc ->
|
||||
# relative_sysconfdir=etc
|
||||
relative_sysconfdir="${sysconfdir#${prefix%/}/}"
|
||||
relative_sysconfdir="${relative_sysconfdir%/}"
|
||||
|
||||
cat <<EOF
|
||||
|
||||
|
||||
Now change these lines in the IRCd config file:
|
||||
|
||||
ssl_private_key = "${relative_sysconfdir}/ssl.key";
|
||||
ssl_cert = "${relative_sysconfdir}/ssl.cert";
|
||||
ssl_dh_params = "${relative_sysconfdir}/dh.pem";
|
||||
|
||||
Enjoy using ssl.
|
||||
EOF
|
|
@ -13,6 +13,9 @@
|
|||
#include <signal.h>
|
||||
#include "config.h"
|
||||
|
||||
#ifndef PROGRAM_PREFIX
|
||||
#define PROGRAM_PREFIX ""
|
||||
#endif
|
||||
|
||||
/* wait.h is in /include on solaris, likely on other SYSV machines as well
|
||||
* but wait.h is normally in /include/sys on BSD boxen,
|
||||
|
@ -45,7 +48,7 @@ int main(int argc, char *argv[])
|
|||
else
|
||||
p++;
|
||||
|
||||
if(strcmp(p, "vimotd") == 0)
|
||||
if(strcmp(p, PROGRAM_PREFIX "vimotd") == 0)
|
||||
filename = MPATH;
|
||||
|
||||
if(LockedFile(filename))
|
||||
|
|
Loading…
Reference in a new issue