Compare commits
38 Commits
armageddon
...
qaohv-migr
Author | SHA1 | Date |
---|---|---|
Sam Dodrill | 78f7194d41 | |
Sam Dodrill | 23c50b1903 | |
Sam Dodrill | bb119101bc | |
Sam Dodrill | 4c62183317 | |
Sam Dodrill | a5cfb65445 | |
Sam Dodrill | 1393f6394e | |
Sam Dodrill | e09eade337 | |
Sam Dodrill | 1da821dcde | |
Sam Dodrill | 49790bbac5 | |
Sam Dodrill | fbfca84c1c | |
Sam Dodrill | 04ad084e5e | |
Sam Dodrill | 09a8287d97 | |
Sam Dodrill | 39f9e19cb6 | |
Sam Dodrill | 83cf65e493 | |
Sam Dodrill | a5a0b3e8d8 | |
Sam Dodrill | 76441b9232 | |
Sam Dodrill | 417a320324 | |
Sam Dodrill | e1657f04ec | |
Sam Dodrill | daac54878c | |
Sam Dodrill | e7f3a5ad93 | |
Sam Dodrill | 9c83aac397 | |
Sam Dodrill | 0c372c65fc | |
Sam Dodrill | 8cff086fc5 | |
Sam Dodrill | 48a3589d5e | |
Sam Dodrill | 7c4267175b | |
Sam Dodrill | aa4ebff4a5 | |
Sam Dodrill | a3e2e47b86 | |
Sam Dodrill | 88cd0168ad | |
Sam Dodrill | 874ca05045 | |
Sam Dodrill | 2c0ee6900c | |
Sam Dodrill | 9b969de641 | |
Sam Dodrill | cc0c8d338d | |
Sam Dodrill | 0361eeeedf | |
Sam Dodrill | a6eb07553e | |
Sam Dodrill | 62a511ab7b | |
Sam Dodrill | 3e6d026b38 | |
Sam Dodrill | 100324f5c9 | |
Sam Dodrill | 771cc10e92 |
|
@ -0,0 +1 @@
|
||||||
|
.gitignore
|
|
@ -40,3 +40,5 @@ tools/mkpasswd
|
||||||
tools/viconf
|
tools/viconf
|
||||||
include/serno.h
|
include/serno.h
|
||||||
libratbox/src/version.c.last
|
libratbox/src/version.c.last
|
||||||
|
*.pyc
|
||||||
|
.git
|
||||||
|
|
|
@ -5,8 +5,5 @@ compiler:
|
||||||
before-install:
|
before-install:
|
||||||
- sudo apt-get update
|
- sudo apt-get update
|
||||||
install:
|
install:
|
||||||
- sudo apt-get install build-essential libssl-dev flex bison
|
- sudo apt-get install build-essential libssl-dev flex bison astyle
|
||||||
script: "./configure && make"
|
script: "(cd ./testsuite/astyle && ./check_style.sh) && ./configure && make"
|
||||||
|
|
||||||
notifications:
|
|
||||||
irc: "irc.yolo-swag.com#elemental-ircd"
|
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
import os
|
||||||
|
import ycm_core
|
||||||
|
|
||||||
|
# These are the compilation flags that will be used in case there's no
|
||||||
|
# compilation database set (by default, one is not set).
|
||||||
|
# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR.
|
||||||
|
flags = [
|
||||||
|
'-Wall',
|
||||||
|
'-Wextra',
|
||||||
|
'-Werror',
|
||||||
|
'-g',
|
||||||
|
'-g',
|
||||||
|
'-Iinclude',
|
||||||
|
'-Ilibratbox/include',
|
||||||
|
]
|
||||||
|
|
||||||
|
# Set this to the absolute path to the folder (NOT the file!) containing the
|
||||||
|
# compile_commands.json file to use that instead of 'flags'. See here for
|
||||||
|
# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html
|
||||||
|
#
|
||||||
|
# You can get CMake to generate this file for you by adding:
|
||||||
|
# set( CMAKE_EXPORT_COMPILE_COMMANDS 1 )
|
||||||
|
# to your CMakeLists.txt file.
|
||||||
|
#
|
||||||
|
# Most projects will NOT need to set this to anything; you can just change the
|
||||||
|
# 'flags' list of compilation flags. Notice that YCM itself uses that approach.
|
||||||
|
compilation_database_folder = ''
|
||||||
|
|
||||||
|
if os.path.exists( compilation_database_folder ):
|
||||||
|
database = ycm_core.CompilationDatabase( compilation_database_folder )
|
||||||
|
else:
|
||||||
|
database = None
|
||||||
|
|
||||||
|
SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ]
|
||||||
|
|
||||||
|
def DirectoryOfThisScript():
|
||||||
|
return os.path.dirname( os.path.abspath( __file__ ) )
|
||||||
|
|
||||||
|
|
||||||
|
def MakeRelativePathsInFlagsAbsolute( flags, working_directory ):
|
||||||
|
if not working_directory:
|
||||||
|
return list( flags )
|
||||||
|
new_flags = []
|
||||||
|
make_next_absolute = False
|
||||||
|
path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ]
|
||||||
|
for flag in flags:
|
||||||
|
new_flag = flag
|
||||||
|
|
||||||
|
if make_next_absolute:
|
||||||
|
make_next_absolute = False
|
||||||
|
if not flag.startswith( '/' ):
|
||||||
|
new_flag = os.path.join( working_directory, flag )
|
||||||
|
|
||||||
|
for path_flag in path_flags:
|
||||||
|
if flag == path_flag:
|
||||||
|
make_next_absolute = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if flag.startswith( path_flag ):
|
||||||
|
path = flag[ len( path_flag ): ]
|
||||||
|
new_flag = path_flag + os.path.join( working_directory, path )
|
||||||
|
break
|
||||||
|
|
||||||
|
if new_flag:
|
||||||
|
new_flags.append( new_flag )
|
||||||
|
return new_flags
|
||||||
|
|
||||||
|
|
||||||
|
def IsHeaderFile( filename ):
|
||||||
|
extension = os.path.splitext( filename )[ 1 ]
|
||||||
|
return extension in [ '.h', '.hxx', '.hpp', '.hh' ]
|
||||||
|
|
||||||
|
|
||||||
|
def GetCompilationInfoForFile( filename ):
|
||||||
|
# The compilation_commands.json file generated by CMake does not have entries
|
||||||
|
# for header files. So we do our best by asking the db for flags for a
|
||||||
|
# corresponding source file, if any. If one exists, the flags for that file
|
||||||
|
# should be good enough.
|
||||||
|
if IsHeaderFile( filename ):
|
||||||
|
basename = os.path.splitext( filename )[ 0 ]
|
||||||
|
for extension in SOURCE_EXTENSIONS:
|
||||||
|
replacement_file = basename + extension
|
||||||
|
if os.path.exists( replacement_file ):
|
||||||
|
compilation_info = database.GetCompilationInfoForFile(
|
||||||
|
replacement_file )
|
||||||
|
if compilation_info.compiler_flags_:
|
||||||
|
return compilation_info
|
||||||
|
return None
|
||||||
|
return database.GetCompilationInfoForFile( filename )
|
||||||
|
|
||||||
|
|
||||||
|
def FlagsForFile( filename, **kwargs ):
|
||||||
|
if database:
|
||||||
|
# Bear in mind that compilation_info.compiler_flags_ does NOT return a
|
||||||
|
# python list, but a "list-like" StringVec object
|
||||||
|
compilation_info = GetCompilationInfoForFile( filename )
|
||||||
|
if not compilation_info:
|
||||||
|
return None
|
||||||
|
|
||||||
|
final_flags = MakeRelativePathsInFlagsAbsolute(
|
||||||
|
compilation_info.compiler_flags_,
|
||||||
|
compilation_info.compiler_working_dir_ )
|
||||||
|
|
||||||
|
# NOTE: This is just for YouCompleteMe; it's highly likely that your project
|
||||||
|
# does NOT need to remove the stdlib flag. DO NOT USE THIS IN YOUR
|
||||||
|
# ycm_extra_conf IF YOU'RE NOT 100% SURE YOU NEED IT.
|
||||||
|
try:
|
||||||
|
final_flags.remove( '-stdlib=libc++' )
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
relative_to = DirectoryOfThisScript()
|
||||||
|
final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to )
|
||||||
|
|
||||||
|
return {
|
||||||
|
'flags': final_flags,
|
||||||
|
'do_cache': True
|
||||||
|
}
|
|
@ -4,10 +4,8 @@ Please open contributions as either issue reports or pull requests. We will ask
|
||||||
that anything that requires testing outside our normally supported platforms be
|
that anything that requires testing outside our normally supported platforms be
|
||||||
marked as such.
|
marked as such.
|
||||||
|
|
||||||
As ircd is such an ancient project with varying code styles, please try to
|
Style
|
||||||
follow the current coding style of the file you are in. If all else fails,
|
-----
|
||||||
please use the [Linux Kernel](https://www.kernel.org/doc/Documentation/CodingStyle)
|
|
||||||
coding style.
|
|
||||||
|
|
||||||
Please run all code against the following `astyle` command before sending in
|
Please run all code against the following `astyle` command before sending in
|
||||||
a pull request:
|
a pull request:
|
||||||
|
@ -16,5 +14,30 @@ a pull request:
|
||||||
$ astyle --style=linux --mode=c -n $file
|
$ astyle --style=linux --mode=c -n $file
|
||||||
```
|
```
|
||||||
|
|
||||||
It should be trivial to set up your text editor to do this for you.
|
It should be trivial to set up your text editor to do this for you. If you use
|
||||||
|
vim, add this to your vim configuration:
|
||||||
|
|
||||||
|
```vimscript
|
||||||
|
" Lvimrc
|
||||||
|
" if .lvimrc exists in current or parent directory of the currently loaded file,
|
||||||
|
" load it as config
|
||||||
|
if filereadable('../.lvimrc')
|
||||||
|
source ../.lvimrc
|
||||||
|
endif
|
||||||
|
if filereadable('./.lvimrc')
|
||||||
|
source ./.lvimrc
|
||||||
|
endif
|
||||||
|
```
|
||||||
|
|
||||||
|
Otherwise please make sure the appropriate command is ran as part of your
|
||||||
|
editing process before you send a pull request. All pull requests that do not
|
||||||
|
follow the coding style will not be considered until they follow the coding
|
||||||
|
style.
|
||||||
|
|
||||||
|
Testing
|
||||||
|
-------
|
||||||
|
|
||||||
|
When testing Elemental, please be sure to test it on a network of at least
|
||||||
|
3 instances of elemental. Please also be sure to have one of these instances
|
||||||
|
run **without** the patch you are testing, to be able to show that there is
|
||||||
|
a difference.
|
||||||
|
|
4
NEWS
4
NEWS
|
@ -1,6 +1,10 @@
|
||||||
This is elemental-ircd 6.6.1, Copyright (c) 2014 elemental-ircd team.
|
This is elemental-ircd 6.6.1, Copyright (c) 2014 elemental-ircd team.
|
||||||
See LICENSE for licensing details (GPL v2).
|
See LICENSE for licensing details (GPL v2).
|
||||||
|
|
||||||
|
-- elemental-ircd 6.6.2
|
||||||
|
|
||||||
|
Fix ban logic
|
||||||
|
|
||||||
-- elemental-ircd 6.6.1
|
-- elemental-ircd 6.6.1
|
||||||
|
|
||||||
All code is now in the linux kernel coding style. Patches that do not
|
All code is now in the linux kernel coding style. Patches that do not
|
||||||
|
|
|
@ -1,5 +1,13 @@
|
||||||
# Elemental-IRCd
|
# Elemental-IRCd
|
||||||
|
|
||||||
|
IMPORTANT
|
||||||
|
---------
|
||||||
|
|
||||||
|
This branch is **NOT PRODUCTION READY**, **WILL BREAK THINGS** and **SHOULD NOT
|
||||||
|
BE USED IF STABILITY OR PREDICTABLE BEHAVIOR IS AT ALL DESIRED**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
**Elemental-IRCd** is a high performance, lightweight, and scalable
|
**Elemental-IRCd** is a high performance, lightweight, and scalable
|
||||||
IRC daemon. It is a fork of the now-defunct ShadowIRCD and seeks to continue in
|
IRC daemon. It is a fork of the now-defunct ShadowIRCD and seeks to continue in
|
||||||
the direction ShadowIRCD was headed.
|
the direction ShadowIRCD was headed.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.69 for elemental-ircd 6.6.1.
|
# Generated by GNU Autoconf 2.69 for elemental-ircd 7.0-qaohv.
|
||||||
#
|
#
|
||||||
# 2014 elemental-ircd Team
|
# 2014 elemental-ircd Team
|
||||||
#
|
#
|
||||||
|
@ -579,8 +579,8 @@ MAKEFLAGS=
|
||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='elemental-ircd'
|
PACKAGE_NAME='elemental-ircd'
|
||||||
PACKAGE_TARNAME='elemental-ircd'
|
PACKAGE_TARNAME='elemental-ircd'
|
||||||
PACKAGE_VERSION='6.6.1'
|
PACKAGE_VERSION='7.0-qaohv'
|
||||||
PACKAGE_STRING='elemental-ircd 6.6.1'
|
PACKAGE_STRING='elemental-ircd 7.0-qaohv'
|
||||||
PACKAGE_BUGREPORT=''
|
PACKAGE_BUGREPORT=''
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
|
@ -1303,7 +1303,7 @@ if test "$ac_init_help" = "long"; then
|
||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures elemental-ircd 6.6.1 to adapt to many kinds of systems.
|
\`configure' configures elemental-ircd 7.0-qaohv to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
|
@ -1364,7 +1364,7 @@ fi
|
||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of elemental-ircd 6.6.1:";;
|
short | recursive ) echo "Configuration of elemental-ircd 7.0-qaohv:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
|
@ -1488,7 +1488,7 @@ fi
|
||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
elemental-ircd configure 6.6.1
|
elemental-ircd configure 7.0-qaohv
|
||||||
generated by GNU Autoconf 2.69
|
generated by GNU Autoconf 2.69
|
||||||
|
|
||||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||||
|
@ -2092,7 +2092,7 @@ cat >config.log <<_ACEOF
|
||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by elemental-ircd $as_me 6.6.1, which was
|
It was created by elemental-ircd $as_me 7.0-qaohv, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
|
@ -10100,7 +10100,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by elemental-ircd $as_me 6.6.1, which was
|
This file was extended by elemental-ircd $as_me 7.0-qaohv, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
|
@ -10166,7 +10166,7 @@ _ACEOF
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
elemental-ircd config.status 6.6.1
|
elemental-ircd config.status 7.0-qaohv
|
||||||
configured by $0, generated by GNU Autoconf 2.69,
|
configured by $0, generated by GNU Autoconf 2.69,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ AC_PREREQ(2.57)
|
||||||
dnl Sneaky way to get an Id tag into the configure script
|
dnl Sneaky way to get an Id tag into the configure script
|
||||||
AC_COPYRIGHT([2014 elemental-ircd Team])
|
AC_COPYRIGHT([2014 elemental-ircd Team])
|
||||||
|
|
||||||
AC_INIT([elemental-ircd],[6.6.1])
|
AC_INIT([elemental-ircd],[7.0-qaohv])
|
||||||
|
|
||||||
AC_CONFIG_HEADER(include/setup.h)
|
AC_CONFIG_HEADER(include/setup.h)
|
||||||
|
|
||||||
|
|
|
@ -57,13 +57,6 @@ serverinfo {
|
||||||
helpurl = "http://www.mynet.net/help";
|
helpurl = "http://www.mynet.net/help";
|
||||||
hub = yes;
|
hub = yes;
|
||||||
|
|
||||||
/* On multi-homed hosts you may need the following. These define
|
|
||||||
* the addresses we connect from to other servers. */
|
|
||||||
/* for IPv4 */
|
|
||||||
#vhost = "192.169.0.1";
|
|
||||||
/* for IPv6 */
|
|
||||||
#vhost6 = "3ffe:80e8:546::2";
|
|
||||||
|
|
||||||
/* ssl_private_key: our ssl private key */
|
/* ssl_private_key: our ssl private key */
|
||||||
ssl_private_key = "etc/ssl.key";
|
ssl_private_key = "etc/ssl.key";
|
||||||
|
|
||||||
|
|
|
@ -159,16 +159,6 @@ serverinfo {
|
||||||
*/
|
*/
|
||||||
hub = no;
|
hub = no;
|
||||||
|
|
||||||
/* vhost: the IP to bind to when we connect outward to ipv4 servers.
|
|
||||||
* This should be an ipv4 IP only.
|
|
||||||
*/
|
|
||||||
#vhost = "192.169.0.1";
|
|
||||||
|
|
||||||
/* vhost6: the IP to bind to when we connect outward to ipv6 servers.
|
|
||||||
* This should be an ipv6 IP only.
|
|
||||||
*/
|
|
||||||
#vhost6 = "3ffe:80e8:546::2";
|
|
||||||
|
|
||||||
/* ssl_private_key: our ssl private key */
|
/* ssl_private_key: our ssl private key */
|
||||||
ssl_private_key = "etc/ssl.key";
|
ssl_private_key = "etc/ssl.key";
|
||||||
|
|
||||||
|
|
|
@ -155,16 +155,6 @@ serverinfo {
|
||||||
*/
|
*/
|
||||||
hub = no;
|
hub = no;
|
||||||
|
|
||||||
/* vhost: the IP to bind to when we connect outward to ipv4 servers.
|
|
||||||
* This should be an ipv4 IP only.
|
|
||||||
*/
|
|
||||||
#vhost = "192.169.0.1";
|
|
||||||
|
|
||||||
/* vhost6: the IP to bind to when we connect outward to ipv6 servers.
|
|
||||||
* This should be an ipv6 IP only.
|
|
||||||
*/
|
|
||||||
#vhost6 = "3ffe:80e8:546::2";
|
|
||||||
|
|
||||||
/* ssl_private_key: our ssl private key */
|
/* ssl_private_key: our ssl private key */
|
||||||
ssl_private_key = "etc/ssl.key";
|
ssl_private_key = "etc/ssl.key";
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,6 @@ SRCS = \
|
||||||
m_mkpasswd.c \
|
m_mkpasswd.c \
|
||||||
m_oaccept.c \
|
m_oaccept.c \
|
||||||
m_ojoin.c \
|
m_ojoin.c \
|
||||||
m_olist.c \
|
|
||||||
m_okick.c \
|
m_okick.c \
|
||||||
m_omode.c \
|
m_omode.c \
|
||||||
m_opme.c \
|
m_opme.c \
|
||||||
|
|
|
@ -101,7 +101,7 @@ mo_ojoin(struct Client *client_p, struct Client *source_p, int parc, const char
|
||||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s JOIN %s",
|
sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s JOIN %s",
|
||||||
source_p->name,
|
source_p->name,
|
||||||
source_p->username, source_p->host, chptr->chname);
|
source_p->username, source_p->host, chptr->chname);
|
||||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +y %s",
|
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +q %s",
|
||||||
me.name, chptr->chname, source_p->name);
|
me.name, chptr->chname, source_p->name);
|
||||||
} else if(*parv[1] == '!' && ConfigChannel.use_admin) {
|
} else if(*parv[1] == '!' && ConfigChannel.use_admin) {
|
||||||
add_user_to_channel(chptr, source_p, CHFL_ADMIN);
|
add_user_to_channel(chptr, source_p, CHFL_ADMIN);
|
||||||
|
|
|
@ -1,149 +0,0 @@
|
||||||
/*
|
|
||||||
* ircd-ratbox: A slightly useful ircd.
|
|
||||||
* m_olist.c: List channels. olist is an oper only command
|
|
||||||
* that shows channels regardless of modes. This
|
|
||||||
* is kinda evil, and might be morally wrong, but
|
|
||||||
* somebody will likely need it.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 by the past and present ircd coders, and others.
|
|
||||||
* Copyright (C) 2004 ircd-ratbox Development Team
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
||||||
* USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "stdinc.h"
|
|
||||||
#include "channel.h"
|
|
||||||
#include "client.h"
|
|
||||||
#include "ircd.h"
|
|
||||||
#include "numeric.h"
|
|
||||||
#include "logger.h"
|
|
||||||
#include "s_serv.h"
|
|
||||||
#include "send.h"
|
|
||||||
#include "whowas.h"
|
|
||||||
#include "match.h"
|
|
||||||
#include "hash.h"
|
|
||||||
#include "msg.h"
|
|
||||||
#include "parse.h"
|
|
||||||
#include "modules.h"
|
|
||||||
#include "s_newconf.h"
|
|
||||||
|
|
||||||
static int mo_olist(struct Client *, struct Client *, int parc, const char *parv[]);
|
|
||||||
|
|
||||||
#ifndef STATIC_MODULES
|
|
||||||
|
|
||||||
struct Message olist_msgtab = {
|
|
||||||
"OLIST", 0, 0, 0, MFLG_SLOW,
|
|
||||||
{mg_unreg, mg_not_oper, mg_ignore, mg_ignore, mg_ignore, {mo_olist, 1}}
|
|
||||||
};
|
|
||||||
|
|
||||||
mapi_clist_av1 olist_clist[] = { &olist_msgtab, NULL };
|
|
||||||
|
|
||||||
DECLARE_MODULE_AV1(okick, NULL, NULL, olist_clist, NULL, NULL, "$Revision: 6 $");
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void list_all_channels(struct Client *source_p);
|
|
||||||
static void list_named_channel(struct Client *source_p, const char *name);
|
|
||||||
|
|
||||||
/*
|
|
||||||
** mo_olist
|
|
||||||
** parv[1] = channel
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
mo_olist(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
|
||||||
{
|
|
||||||
if(!IsOperSpy(source_p)) {
|
|
||||||
sendto_one(source_p, form_str(ERR_NOPRIVS),
|
|
||||||
me.name, source_p->name, "oper_spy");
|
|
||||||
sendto_one(source_p, form_str(RPL_LISTEND),
|
|
||||||
me.name, source_p->name);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If no arg, do all channels *whee*, else just one channel */
|
|
||||||
if(parc < 2 || EmptyString(parv[1]))
|
|
||||||
list_all_channels(source_p);
|
|
||||||
else
|
|
||||||
list_named_channel(source_p, parv[1]);
|
|
||||||
|
|
||||||
sendto_one(source_p, form_str(RPL_LISTEND), me.name, source_p->name);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* list_all_channels
|
|
||||||
* inputs - pointer to client requesting list
|
|
||||||
* output - 0/1
|
|
||||||
* side effects - list all channels to source_p
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
list_all_channels(struct Client *source_p)
|
|
||||||
{
|
|
||||||
struct Channel *chptr;
|
|
||||||
rb_dlink_node *ptr;
|
|
||||||
|
|
||||||
report_operspy(source_p, "LIST", NULL);
|
|
||||||
sendto_one(source_p, form_str(RPL_LISTSTART), me.name, source_p->name);
|
|
||||||
|
|
||||||
RB_DLINK_FOREACH(ptr, global_channel_list.head) {
|
|
||||||
chptr = ptr->data;
|
|
||||||
|
|
||||||
sendto_one(source_p, ":%s 322 %s %s %lu :[%s] %s",
|
|
||||||
me.name, source_p->name, chptr->chname,
|
|
||||||
rb_dlink_list_length(&chptr->members),
|
|
||||||
channel_modes(chptr, &me),
|
|
||||||
chptr->topic == NULL ? "" : chptr->topic);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* list_named_channel
|
|
||||||
* inputs - pointer to client requesting list
|
|
||||||
* output - 0/1
|
|
||||||
* side effects - list all channels to source_p
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
list_named_channel(struct Client *source_p, const char *name)
|
|
||||||
{
|
|
||||||
struct Channel *chptr;
|
|
||||||
char *p;
|
|
||||||
char *n = LOCAL_COPY(name);
|
|
||||||
|
|
||||||
if((p = strchr(n, ',')))
|
|
||||||
*p = '\0';
|
|
||||||
|
|
||||||
/* Put operspy notice before any output, but only if channel exists */
|
|
||||||
chptr = EmptyString(n) ? NULL : find_channel(n);
|
|
||||||
if(chptr != NULL)
|
|
||||||
report_operspy(source_p, "LIST", chptr->chname);
|
|
||||||
|
|
||||||
sendto_one(source_p, form_str(RPL_LISTSTART), me.name, source_p->name);
|
|
||||||
|
|
||||||
if(EmptyString(n))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(chptr == NULL)
|
|
||||||
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
|
|
||||||
form_str(ERR_NOSUCHCHANNEL), n);
|
|
||||||
else
|
|
||||||
sendto_one(source_p, ":%s 322 %s %s %lu :[%s] %s", me.name, source_p->name,
|
|
||||||
chptr->chname, rb_dlink_list_length(&chptr->members),
|
|
||||||
channel_modes(chptr, &me), chptr->topic ? chptr->topic : "");
|
|
||||||
}
|
|
|
@ -118,17 +118,17 @@ mo_omode(struct Client *client_p, struct Client *source_p, int parc, const char
|
||||||
set_channel_mode(client_p, source_p->servptr, chptr, msptr,
|
set_channel_mode(client_p, source_p->servptr, chptr, msptr,
|
||||||
parc - 2, parv + 2);
|
parc - 2, parv + 2);
|
||||||
#else
|
#else
|
||||||
if (parc == 4 && !strcmp(parv[2], "+y") && !irccmp(parv[3], source_p->name)) {
|
if (parc == 4 && !strcmp(parv[2], "+q") && !irccmp(parv[3], source_p->name)) {
|
||||||
/* Ownering themselves */
|
/* Ownering themselves */
|
||||||
if (!wasonchannel) {
|
if (!wasonchannel) {
|
||||||
sendto_one_numeric(source_p, ERR_USERNOTINCHANNEL,
|
sendto_one_numeric(source_p, ERR_USERNOTINCHANNEL,
|
||||||
form_str(ERR_USERNOTINCHANNEL), parv[3], chptr->chname);
|
form_str(ERR_USERNOTINCHANNEL), parv[3], chptr->chname);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +y %s",
|
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +q %s",
|
||||||
me.name, parv[1], source_p->name);
|
me.name, parv[1], source_p->name);
|
||||||
sendto_server(NULL, chptr, CAP_TS6, NOCAPS,
|
sendto_server(NULL, chptr, CAP_TS6, NOCAPS,
|
||||||
":%s TMODE %ld %s +y %s",
|
":%s TMODE %ld %s +q %s",
|
||||||
me.id, (long) chptr->channelts, parv[1],
|
me.id, (long) chptr->channelts, parv[1],
|
||||||
source_p->id);
|
source_p->id);
|
||||||
msptr->flags |= CHFL_OWNER;
|
msptr->flags |= CHFL_OWNER;
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
IRCDVar myIrcd[] = {
|
IRCDVar myIrcd[] = {
|
||||||
{
|
{
|
||||||
"Elemental-IRCd 6.5", /* ircd name */
|
"Elemental-IRCd 7.0", /* ircd name */
|
||||||
"+oiS", /* nickserv mode */
|
"+oiS", /* nickserv mode */
|
||||||
"+oiS", /* chanserv mode */
|
"+oiS", /* chanserv mode */
|
||||||
"+oiS", /* memoserv mode */
|
"+oiS", /* memoserv mode */
|
||||||
|
@ -44,8 +44,8 @@ IRCDVar myIrcd[] = {
|
||||||
1, /* SVSNICK */
|
1, /* SVSNICK */
|
||||||
1, /* Vhost */
|
1, /* Vhost */
|
||||||
1, /* Has Owner */
|
1, /* Has Owner */
|
||||||
"+y", /* Mode to set for an owner */
|
"+q", /* Mode to set for an owner */
|
||||||
"-y", /* Mode to unset for an owner */
|
"-q", /* Mode to unset for an owner */
|
||||||
"+a", /* Mode to set for chan admin */
|
"+a", /* Mode to set for chan admin */
|
||||||
"-a", /* Mode to unset for chan admin */
|
"-a", /* Mode to unset for chan admin */
|
||||||
NULL, /* Mode On Reg */
|
NULL, /* Mode On Reg */
|
||||||
|
@ -443,7 +443,7 @@ CUMode myCumodes[128] = {
|
||||||
{0}, /* n */
|
{0}, /* n */
|
||||||
{CUS_OP, CUF_PROTECT_BOTSERV, check_valid_op},
|
{CUS_OP, CUF_PROTECT_BOTSERV, check_valid_op},
|
||||||
{0}, /* p */
|
{0}, /* p */
|
||||||
{0}, /* q */
|
{CUS_OP, CUF_PROTECT_BOTSERV, check_valid_op}, /* q */
|
||||||
{0}, /* r */
|
{0}, /* r */
|
||||||
{0}, /* s */
|
{0}, /* s */
|
||||||
{0}, /* t */
|
{0}, /* t */
|
||||||
|
@ -451,7 +451,7 @@ CUMode myCumodes[128] = {
|
||||||
{CUS_VOICE, 0, NULL},
|
{CUS_VOICE, 0, NULL},
|
||||||
{0}, /* w */
|
{0}, /* w */
|
||||||
{0}, /* x */
|
{0}, /* x */
|
||||||
{CUS_OP, CUF_PROTECT_BOTSERV, check_valid_op}, /* y */
|
{0}, /* y */
|
||||||
{0}, /* z */
|
{0}, /* z */
|
||||||
{0}, {0}, {0}, {0}, {0}
|
{0}, {0}, {0}, {0}, {0}
|
||||||
};
|
};
|
||||||
|
|
|
@ -301,8 +301,8 @@ class ProtoElemental : public Module
|
||||||
{
|
{
|
||||||
|
|
||||||
ModeManager::AddChannelMode(new ChannelModeStatus("HALFOP", 'h', '%', 1));
|
ModeManager::AddChannelMode(new ChannelModeStatus("HALFOP", 'h', '%', 1));
|
||||||
ModeManager::AddChannelMode(new ChannelModeStatus("PROTECT", 'a', '!', 3));
|
ModeManager::AddChannelMode(new ChannelModeStatus("PROTECT", 'a', '&', 3));
|
||||||
ModeManager::AddChannelMode(new ChannelModeStatus("OWNER", 'y', '~', 4));
|
ModeManager::AddChannelMode(new ChannelModeStatus("OWNER", 'q', '~', 4));
|
||||||
|
|
||||||
/* Add user modes */
|
/* Add user modes */
|
||||||
ModeManager::AddUserMode(new UserMode("NOFORWARD", 'Q'));
|
ModeManager::AddUserMode(new UserMode("NOFORWARD", 'Q'));
|
||||||
|
@ -311,7 +311,7 @@ class ProtoElemental : public Module
|
||||||
ModeManager::AddUserMode(new UserModeNoone("SSL", 'Z'));
|
ModeManager::AddUserMode(new UserModeNoone("SSL", 'Z'));
|
||||||
|
|
||||||
/* b/e/I */
|
/* b/e/I */
|
||||||
ModeManager::AddChannelMode(new ChannelModeList("QUIET", 'q'));
|
ModeManager::AddChannelMode(new ChannelModeList("QUIET", 'y'));
|
||||||
|
|
||||||
/* Add channel modes */
|
/* Add channel modes */
|
||||||
ModeManager::AddChannelMode(new ChannelMode("BLOCKCOLOR", 'c'));
|
ModeManager::AddChannelMode(new ChannelMode("BLOCKCOLOR", 'c'));
|
||||||
|
|
|
@ -14,12 +14,12 @@
|
||||||
#include "pmodule.h"
|
#include "pmodule.h"
|
||||||
#include "protocol/shadowircd.h"
|
#include "protocol/shadowircd.h"
|
||||||
|
|
||||||
DECLARE_MODULE_V1("protocol/elemental-ircd", true, _modinit, NULL, PACKAGE_STRING, "PonyChat Development Group <http://www.ponychat.net>");
|
DECLARE_MODULE_V1("protocol/elemental-ircd", true, _modinit, NULL, PACKAGE_STRING, "Elemental-IRCd Development Team http://github.com/elemental-ircd/elemental-ircd");
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
|
|
||||||
ircd_t elemental_ircd = {
|
ircd_t elemental_ircd = {
|
||||||
"elemental-ircd", /* IRCd name */
|
"Elemental-IRCd 7.0", /* IRCd name */
|
||||||
"$$", /* TLD Prefix, used by Global. */
|
"$$", /* TLD Prefix, used by Global. */
|
||||||
true, /* Whether or not we use IRCNet/TS6 UID */
|
true, /* Whether or not we use IRCNet/TS6 UID */
|
||||||
false, /* Whether or not we use RCOMMAND */
|
false, /* Whether or not we use RCOMMAND */
|
||||||
|
@ -32,13 +32,13 @@ ircd_t elemental_ircd = {
|
||||||
CSTATUS_OWNER, /* Integer flag for owner channel flag. */
|
CSTATUS_OWNER, /* Integer flag for owner channel flag. */
|
||||||
CSTATUS_PROTECT, /* Integer flag for protect channel flag. */
|
CSTATUS_PROTECT, /* Integer flag for protect channel flag. */
|
||||||
CSTATUS_HALFOP, /* Integer flag for halfops. */
|
CSTATUS_HALFOP, /* Integer flag for halfops. */
|
||||||
"+y", /* Mode we set for owner. */
|
"+q", /* Mode we set for owner. */
|
||||||
"+a", /* Mode we set for protect. */
|
"+a", /* Mode we set for protect. */
|
||||||
"+h", /* Mode we set for halfops. */
|
"+h", /* Mode we set for halfops. */
|
||||||
PROTOCOL_SHADOWIRCD, /* Protocol type */
|
PROTOCOL_SHADOWIRCD, /* Protocol type */
|
||||||
CMODE_PERM, /* Permanent cmodes */
|
CMODE_PERM, /* Permanent cmodes */
|
||||||
CMODE_IMMUNE, /* Oper-immune cmode */
|
CMODE_IMMUNE, /* Oper-immune cmode */
|
||||||
"beIq", /* Ban-like cmodes */
|
"beIy", /* Ban-like cmodes */
|
||||||
'e', /* Except mchar */
|
'e', /* Except mchar */
|
||||||
'I', /* Invex mchar */
|
'I', /* Invex mchar */
|
||||||
IRCD_CIDR_BANS | IRCD_HOLDNICK /* Flags */
|
IRCD_CIDR_BANS | IRCD_HOLDNICK /* Flags */
|
||||||
|
@ -75,7 +75,7 @@ struct cmode_ elemental_mode_list[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cmode_ elemental_status_mode_list[] = {
|
struct cmode_ elemental_status_mode_list[] = {
|
||||||
{ 'y', CSTATUS_OWNER },
|
{ 'q', CSTATUS_OWNER },
|
||||||
{ 'a', CSTATUS_PROTECT },
|
{ 'a', CSTATUS_PROTECT },
|
||||||
{ 'o', CSTATUS_OP },
|
{ 'o', CSTATUS_OP },
|
||||||
{ 'h', CSTATUS_HALFOP },
|
{ 'h', CSTATUS_HALFOP },
|
||||||
|
@ -85,7 +85,7 @@ struct cmode_ elemental_status_mode_list[] = {
|
||||||
|
|
||||||
struct cmode_ elemental_prefix_mode_list[] = {
|
struct cmode_ elemental_prefix_mode_list[] = {
|
||||||
{ '~', CSTATUS_OWNER },
|
{ '~', CSTATUS_OWNER },
|
||||||
{ '!', CSTATUS_PROTECT },
|
{ '&', CSTATUS_PROTECT },
|
||||||
{ '@', CSTATUS_OP },
|
{ '@', CSTATUS_OP },
|
||||||
{ '%', CSTATUS_HALFOP },
|
{ '%', CSTATUS_HALFOP },
|
||||||
{ '+', CSTATUS_VOICE },
|
{ '+', CSTATUS_VOICE },
|
||||||
|
@ -100,12 +100,38 @@ struct cmode_ elemental_user_mode_list[] = {
|
||||||
{ '\0', 0 }
|
{ '\0', 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
/* *INDENT-ON* */
|
/* login to our uplink */
|
||||||
|
static unsigned int elemental_server_login(void)
|
||||||
|
{
|
||||||
|
int ret = 1;
|
||||||
|
|
||||||
|
if (!me.numeric) {
|
||||||
|
ircd->uses_uid = false;
|
||||||
|
ret = sts("PASS %s :TS", curr_uplink->send_pass);
|
||||||
|
} else if (strlen(me.numeric) == 3 && isdigit((unsigned char)*me.numeric)) {
|
||||||
|
ircd->uses_uid = true;
|
||||||
|
ret = sts("PASS %s TS 6 :%s", curr_uplink->send_pass, me.numeric);
|
||||||
|
} else {
|
||||||
|
slog(LG_ERROR, "Invalid numeric (SID) %s", me.numeric);
|
||||||
|
}
|
||||||
|
if (ret == 1)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
me.bursting = true;
|
||||||
|
|
||||||
|
sts("CAPAB :QS EX IE KLN UNKLN ENCAP TB SERVICES EUID EOPMOD MLOCK QAOHV");
|
||||||
|
sts("SERVER %s 1 :%s%s", me.name, me.hidden ? "(H) " : "", me.desc);
|
||||||
|
sts("SVINFO %d 3 0 :%lu", ircd->uses_uid ? 6 : 5,
|
||||||
|
(unsigned long)CURRTIME);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void _modinit(module_t * m)
|
void _modinit(module_t * m)
|
||||||
{
|
{
|
||||||
MODULE_TRY_REQUEST_DEPENDENCY(m, "protocol/charybdis");
|
MODULE_TRY_REQUEST_DEPENDENCY(m, "protocol/charybdis");
|
||||||
|
|
||||||
|
server_login = &elemental_server_login;
|
||||||
mode_list = elemental_mode_list;
|
mode_list = elemental_mode_list;
|
||||||
user_mode_list = elemental_user_mode_list;
|
user_mode_list = elemental_user_mode_list;
|
||||||
status_mode_list = elemental_status_mode_list;
|
status_mode_list = elemental_status_mode_list;
|
||||||
|
|
|
@ -72,13 +72,14 @@ struct Capability {
|
||||||
#define CAP_EOPMOD 0x100000 /* supports EOPMOD (ext +z + ext topic) */
|
#define CAP_EOPMOD 0x100000 /* supports EOPMOD (ext +z + ext topic) */
|
||||||
#define CAP_BAN 0x200000 /* supports propagated bans */
|
#define CAP_BAN 0x200000 /* supports propagated bans */
|
||||||
#define CAP_MLOCK 0x400000 /* supports MLOCK messages */
|
#define CAP_MLOCK 0x400000 /* supports MLOCK messages */
|
||||||
|
#define CAP_QAOHV 0x800000 /* uses +q for owner and +y for quiet */
|
||||||
|
|
||||||
#define CAP_MASK (CAP_QS | CAP_EX | CAP_CHW | \
|
#define CAP_MASK (CAP_QS | CAP_EX | CAP_CHW | \
|
||||||
CAP_IE | CAP_KLN | CAP_SERVICE |\
|
CAP_IE | CAP_KLN | CAP_SERVICE |\
|
||||||
CAP_CLUSTER | CAP_ENCAP | \
|
CAP_CLUSTER | CAP_ENCAP | \
|
||||||
CAP_ZIP | CAP_KNOCK | CAP_UNKLN | \
|
CAP_ZIP | CAP_KNOCK | CAP_UNKLN | \
|
||||||
CAP_RSFNC | CAP_SAVE | CAP_EUID | CAP_EOPMOD | \
|
CAP_RSFNC | CAP_SAVE | CAP_EUID | CAP_EOPMOD | \
|
||||||
CAP_BAN | CAP_MLOCK)
|
CAP_BAN | CAP_MLOCK | CAP_QAOHV)
|
||||||
|
|
||||||
#ifdef HAVE_LIBZ
|
#ifdef HAVE_LIBZ
|
||||||
#define CAP_ZIP_SUPPORTED CAP_ZIP
|
#define CAP_ZIP_SUPPORTED CAP_ZIP
|
||||||
|
|
|
@ -521,7 +521,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
|
||||||
if(*s == '~') {
|
if(*s == '~') {
|
||||||
fl |= CHFL_OWNER;
|
fl |= CHFL_OWNER;
|
||||||
s++;
|
s++;
|
||||||
} else if(*s == '!') {
|
} else if(*s == '&') {
|
||||||
fl |= CHFL_ADMIN;
|
fl |= CHFL_ADMIN;
|
||||||
s++;
|
s++;
|
||||||
} else if(*s == '@') {
|
} else if(*s == '@') {
|
||||||
|
@ -557,7 +557,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
|
||||||
len_nick++;
|
len_nick++;
|
||||||
len_uid++;
|
len_uid++;
|
||||||
} else if(fl & CHFL_ADMIN) {
|
} else if(fl & CHFL_ADMIN) {
|
||||||
*ptr_uid++ = '!';
|
*ptr_uid++ = '&';
|
||||||
len_nick++;
|
len_nick++;
|
||||||
len_uid++;
|
len_uid++;
|
||||||
}
|
}
|
||||||
|
@ -598,11 +598,11 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
|
||||||
* I would love to hear it - Taros */
|
* I would love to hear it - Taros */
|
||||||
|
|
||||||
if(fl & CHFL_OWNER) {
|
if(fl & CHFL_OWNER) {
|
||||||
*mbuf++ = 'y';
|
*mbuf++ = 'q';
|
||||||
para[pargs++] = target_p->name;
|
para[pargs++] = target_p->name;
|
||||||
|
|
||||||
if(fl & CHFL_ADMIN) {
|
if(fl & CHFL_ADMIN) {
|
||||||
/* its possible the +y has filled up MAXMODEPARAMS, if so, start
|
/* its possible the +q has filled up MAXMODEPARAMS, if so, start
|
||||||
* a new buffer
|
* a new buffer
|
||||||
*/
|
*/
|
||||||
if(pargs >= MAXMODEPARAMS) {
|
if(pargs >= MAXMODEPARAMS) {
|
||||||
|
@ -622,7 +622,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
|
||||||
para[pargs++] = target_p->name;
|
para[pargs++] = target_p->name;
|
||||||
}
|
}
|
||||||
if(fl & CHFL_CHANOP) {
|
if(fl & CHFL_CHANOP) {
|
||||||
/* its possible the +y has filled up MAXMODEPARAMS, if so, start
|
/* its possible the +q has filled up MAXMODEPARAMS, if so, start
|
||||||
* a new buffer
|
* a new buffer
|
||||||
*/
|
*/
|
||||||
if(pargs >= MAXMODEPARAMS) {
|
if(pargs >= MAXMODEPARAMS) {
|
||||||
|
@ -642,7 +642,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
|
||||||
para[pargs++] = target_p->name;
|
para[pargs++] = target_p->name;
|
||||||
}
|
}
|
||||||
if(fl & CHFL_HALFOP) {
|
if(fl & CHFL_HALFOP) {
|
||||||
/* its possible the +y has filled up MAXMODEPARAMS, if so, start
|
/* its possible the +q has filled up MAXMODEPARAMS, if so, start
|
||||||
* a new buffer
|
* a new buffer
|
||||||
*/
|
*/
|
||||||
if(pargs >= MAXMODEPARAMS) {
|
if(pargs >= MAXMODEPARAMS) {
|
||||||
|
@ -662,7 +662,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
|
||||||
para[pargs++] = target_p->name;
|
para[pargs++] = target_p->name;
|
||||||
}
|
}
|
||||||
if(fl & CHFL_VOICE) {
|
if(fl & CHFL_VOICE) {
|
||||||
/* its possible the +y has filled up MAXMODEPARAMS, if so, start
|
/* its possible the +q has filled up MAXMODEPARAMS, if so, start
|
||||||
* a new buffer
|
* a new buffer
|
||||||
*/
|
*/
|
||||||
if(pargs >= MAXMODEPARAMS) {
|
if(pargs >= MAXMODEPARAMS) {
|
||||||
|
@ -1025,7 +1025,7 @@ remove_our_modes(struct Channel *chptr, struct Client *source_p)
|
||||||
if(is_owner(msptr)) {
|
if(is_owner(msptr)) {
|
||||||
msptr->flags &= ~CHFL_ADMIN;
|
msptr->flags &= ~CHFL_ADMIN;
|
||||||
lpara[count++] = msptr->client_p->name;
|
lpara[count++] = msptr->client_p->name;
|
||||||
*mbuf++ = 'y';
|
*mbuf++ = 'q';
|
||||||
|
|
||||||
/* Make sure it fits if +h, +o, or +v are involved */
|
/* Make sure it fits if +h, +o, or +v are involved */
|
||||||
if(is_admin(msptr)) {
|
if(is_admin(msptr)) {
|
||||||
|
|
|
@ -485,6 +485,10 @@ msg_channel(int p_or_n, const char *command,
|
||||||
rb_strlcpy(text2, text, BUFSIZE);
|
rb_strlcpy(text2, text, BUFSIZE);
|
||||||
strip_unprintable(text2);
|
strip_unprintable(text2);
|
||||||
|
|
||||||
|
if(!MyClient(source_p)) {
|
||||||
|
goto skip_NOCAPS_check;
|
||||||
|
}
|
||||||
|
|
||||||
// Don't count the "ACTION" part of action as part of the message --SnoFox
|
// Don't count the "ACTION" part of action as part of the message --SnoFox
|
||||||
if (p_or_n != NOTICE && *text == '\001' &&
|
if (p_or_n != NOTICE && *text == '\001' &&
|
||||||
!strncasecmp(text + 1, "ACTION ", 7)) {
|
!strncasecmp(text + 1, "ACTION ", 7)) {
|
||||||
|
@ -503,6 +507,7 @@ msg_channel(int p_or_n, const char *command,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
skip_NOCAPS_check:
|
||||||
|
|
||||||
if(chptr->mode.mode & MODE_NOCOLOR && (!ConfigChannel.exempt_cmode_c || !is_any_op(msptr))) {
|
if(chptr->mode.mode & MODE_NOCOLOR && (!ConfigChannel.exempt_cmode_c || !is_any_op(msptr))) {
|
||||||
rb_strlcpy(text2, text, BUFSIZE);
|
rb_strlcpy(text2, text, BUFSIZE);
|
||||||
|
|
|
@ -274,7 +274,7 @@ ms_bmask(struct Client *client_p, struct Client *source_p, int parc, const char
|
||||||
mems = ONLY_CHANOPS;
|
mems = ONLY_CHANOPS;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'q':
|
case 'y':
|
||||||
banlist = &chptr->quietlist;
|
banlist = &chptr->quietlist;
|
||||||
mode_type = CHFL_QUIET;
|
mode_type = CHFL_QUIET;
|
||||||
mems = ALL_MEMBERS;
|
mems = ALL_MEMBERS;
|
||||||
|
|
|
@ -652,7 +652,7 @@ static struct InfoStruct info_table[] = {
|
||||||
"use_owner",
|
"use_owner",
|
||||||
OUTPUT_BOOLEAN_YN,
|
OUTPUT_BOOLEAN_YN,
|
||||||
&ConfigChannel.use_owner,
|
&ConfigChannel.use_owner,
|
||||||
"Enable chanmode +y (owner)",
|
"Enable chanmode +q (owner)",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"use_except",
|
"use_except",
|
||||||
|
|
|
@ -188,8 +188,8 @@ find_channel_status(struct membership *msptr, int combine)
|
||||||
}
|
}
|
||||||
if(is_admin(msptr)) {
|
if(is_admin(msptr)) {
|
||||||
if(!combine)
|
if(!combine)
|
||||||
return "!";
|
return "&";
|
||||||
*p++ = '!';
|
*p++ = '&';
|
||||||
}
|
}
|
||||||
|
|
||||||
if(is_chanop(msptr)) {
|
if(is_chanop(msptr)) {
|
||||||
|
|
14
src/chmode.c
14
src/chmode.c
|
@ -141,13 +141,13 @@ construct_cflag_param_string(void)
|
||||||
|
|
||||||
*cflagsparaminfo = '\0';
|
*cflagsparaminfo = '\0';
|
||||||
rb_snprintf(cflagsparaminfo, sizeof cflagsparaminfo, "%s%sb%s%s%s%sklov%s%s",
|
rb_snprintf(cflagsparaminfo, sizeof cflagsparaminfo, "%s%sb%s%s%s%sklov%s%s",
|
||||||
ConfigChannel.use_owner ? "y" : "",
|
ConfigChannel.use_owner ? "q" : "",
|
||||||
ConfigChannel.use_admin ? "a" : "",
|
ConfigChannel.use_admin ? "a" : "",
|
||||||
ConfigChannel.use_except ? "e" : "",
|
ConfigChannel.use_except ? "e" : "",
|
||||||
ConfigChannel.use_forward ? "f" : "",
|
ConfigChannel.use_forward ? "f" : "",
|
||||||
ConfigChannel.use_halfop ? "h" : "",
|
ConfigChannel.use_halfop ? "h" : "",
|
||||||
strchr(ConfigChannel.disabledmodes, 'j') ? "" : "j",
|
strchr(ConfigChannel.disabledmodes, 'j') ? "" : "j",
|
||||||
strchr(ConfigChannel.disabledmodes, 'q') ? "" : "q",
|
strchr(ConfigChannel.disabledmodes, 'y') ? "" : "y",
|
||||||
ConfigChannel.use_invex ? "I" : "");
|
ConfigChannel.use_invex ? "I" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +219,7 @@ get_channel_access(struct Client *source_p, struct membership *msptr)
|
||||||
/* check_bans_number()
|
/* check_bans_number()
|
||||||
*
|
*
|
||||||
* inputs - client, channel ban list
|
* inputs - client, channel ban list
|
||||||
* outputs - 0 on ban being allowed, 1 on ban being disallowed
|
* outputs - 1 on ban being allowed, 0 on ban being disallowed
|
||||||
* side effects - none
|
* side effects - none
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
|
@ -227,10 +227,10 @@ check_bans_number(struct Client *source_p, struct Channel *chptr, rb_dlink_list
|
||||||
{
|
{
|
||||||
if (rb_dlink_list_length(list) >= (chptr->mode.mode & MODE_EXLIMIT ?
|
if (rb_dlink_list_length(list) >= (chptr->mode.mode & MODE_EXLIMIT ?
|
||||||
ConfigChannel.max_bans_large : ConfigChannel.max_bans)) {
|
ConfigChannel.max_bans_large : ConfigChannel.max_bans)) {
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* add_id()
|
/* add_id()
|
||||||
|
@ -1866,7 +1866,7 @@ struct ChannelMode chmode_table[256] = {
|
||||||
{chm_simple, MODE_NOPRIVMSGS }, /* n */
|
{chm_simple, MODE_NOPRIVMSGS }, /* n */
|
||||||
{chm_op, 0 }, /* o */
|
{chm_op, 0 }, /* o */
|
||||||
{chm_simple, MODE_PRIVATE }, /* p */
|
{chm_simple, MODE_PRIVATE }, /* p */
|
||||||
{chm_ban, CHFL_QUIET }, /* q */
|
{chm_owner, 0 }, /* q */
|
||||||
{chm_simple, MODE_REGONLY }, /* r */
|
{chm_simple, MODE_REGONLY }, /* r */
|
||||||
{chm_simple, MODE_SECRET }, /* s */
|
{chm_simple, MODE_SECRET }, /* s */
|
||||||
{chm_simple, MODE_TOPICLIMIT }, /* t */
|
{chm_simple, MODE_TOPICLIMIT }, /* t */
|
||||||
|
@ -1874,7 +1874,7 @@ struct ChannelMode chmode_table[256] = {
|
||||||
{chm_voice, 0 }, /* v */
|
{chm_voice, 0 }, /* v */
|
||||||
{chm_nosuch, 0 }, /* w */
|
{chm_nosuch, 0 }, /* w */
|
||||||
{chm_nosuch, 0 }, /* x */
|
{chm_nosuch, 0 }, /* x */
|
||||||
{chm_owner, 0 }, /* y */
|
{chm_ban, CHFL_QUIET }, /* y */
|
||||||
{chm_simple, MODE_OPMODERATE }, /* z */
|
{chm_simple, MODE_OPMODERATE }, /* z */
|
||||||
|
|
||||||
{chm_nosuch, 0 }, /* 0x7b */
|
{chm_nosuch, 0 }, /* 0x7b */
|
||||||
|
|
|
@ -749,8 +749,8 @@ static const char * replies[] = {
|
||||||
/* 725 RPL_TESTLINE */ ":%s 725 %s %c %ld %s :%s",
|
/* 725 RPL_TESTLINE */ ":%s 725 %s %c %ld %s :%s",
|
||||||
/* 726 RPL_NOTESTLINE */ ":%s 726 %s %s :No matches",
|
/* 726 RPL_NOTESTLINE */ ":%s 726 %s %s :No matches",
|
||||||
/* 727 RPL_TESTMASKGECOS */ ":%s 727 %s %d %d %s!%s@%s %s :Local/remote clients match",
|
/* 727 RPL_TESTMASKGECOS */ ":%s 727 %s %d %d %s!%s@%s %s :Local/remote clients match",
|
||||||
/* 728 RPL_QUIETLIST */ ":%s 728 %s %s q %s %s %lu",
|
/* 728 RPL_QUIETLIST */ ":%s 728 %s %s y %s %s %lu",
|
||||||
/* 729 RPL_ENDOFQUIETLIST */ ":%s 729 %s %s q :End of Channel Quiet List",
|
/* 729 RPL_ENDOFQUIETLIST */ ":%s 729 %s %s y :End of Channel Quiet List",
|
||||||
/* 730 RPL_MONONLINE */ ":%s 730 %s :%s",
|
/* 730 RPL_MONONLINE */ ":%s 730 %s :%s",
|
||||||
/* 731 RPL_MONOFFLINE */ ":%s 731 %s :%s",
|
/* 731 RPL_MONOFFLINE */ ":%s 731 %s :%s",
|
||||||
/* 732 RPL_MONLIST */ ":%s 732 %s :%s",
|
/* 732 RPL_MONLIST */ ":%s 732 %s :%s",
|
||||||
|
|
|
@ -947,8 +947,8 @@ validate_conf(void)
|
||||||
cflag_orphan('Q');
|
cflag_orphan('Q');
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(*dm == 'q') {
|
if(*dm == 'y') {
|
||||||
cflag_orphan('q');
|
cflag_orphan('y');
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(*dm == 'I') {
|
if(*dm == 'I') {
|
||||||
|
@ -1002,6 +1002,9 @@ validate_conf(void)
|
||||||
cflag_orphan('M');
|
cflag_orphan('M');
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if(*dm == 'u') {
|
||||||
|
cflag_orphan('u');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
construct_cflag_param_string();
|
construct_cflag_param_string();
|
||||||
|
|
43
src/s_serv.c
43
src/s_serv.c
|
@ -71,26 +71,27 @@ static char buf[BUFSIZE];
|
||||||
* extra argument to "PASS" takes care of checking that. -orabidoo
|
* extra argument to "PASS" takes care of checking that. -orabidoo
|
||||||
*/
|
*/
|
||||||
struct Capability captab[] = {
|
struct Capability captab[] = {
|
||||||
/* name cap */
|
/*name cap required?*/
|
||||||
{ "QS", CAP_QS },
|
{ "QS", CAP_QS, 1 },
|
||||||
{ "EX", CAP_EX },
|
{ "EX", CAP_EX, 1 },
|
||||||
{ "CHW", CAP_CHW},
|
{ "CHW", CAP_CHW, 0 },
|
||||||
{ "IE", CAP_IE},
|
{ "IE", CAP_IE, 0 },
|
||||||
{ "KLN", CAP_KLN},
|
{ "KLN", CAP_KLN, 0 },
|
||||||
{ "KNOCK", CAP_KNOCK},
|
{ "KNOCK", CAP_KNOCK, 0 },
|
||||||
{ "ZIP", CAP_ZIP},
|
{ "ZIP", CAP_ZIP, 0 },
|
||||||
{ "TB", CAP_TB},
|
{ "TB", CAP_TB, 1 },
|
||||||
{ "UNKLN", CAP_UNKLN},
|
{ "UNKLN", CAP_UNKLN, 0 },
|
||||||
{ "CLUSTER", CAP_CLUSTER},
|
{ "CLUSTER",CAP_CLUSTER, 0 },
|
||||||
{ "ENCAP", CAP_ENCAP },
|
{ "ENCAP", CAP_ENCAP, 1 },
|
||||||
{ "SERVICES", CAP_SERVICE },
|
{ "SERVICES",CAP_SERVICE, 1 },
|
||||||
{ "RSFNC", CAP_RSFNC },
|
{ "RSFNC", CAP_RSFNC, 0 },
|
||||||
{ "SAVE", CAP_SAVE },
|
{ "SAVE", CAP_SAVE, 0 },
|
||||||
{ "EUID", CAP_EUID },
|
{ "EUID", CAP_EUID, 1 },
|
||||||
{ "EOPMOD", CAP_EOPMOD },
|
{ "EOPMOD", CAP_EOPMOD, 0 },
|
||||||
{ "BAN", CAP_BAN },
|
{ "BAN", CAP_BAN, 0 },
|
||||||
{ "MLOCK", CAP_MLOCK },
|
{ "MLOCK", CAP_MLOCK, 1 },
|
||||||
{0, 0}
|
{ "QAOHV", CAP_QAOHV, 0 },
|
||||||
|
{ 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
static CNCB serv_connect_callback;
|
static CNCB serv_connect_callback;
|
||||||
|
@ -658,7 +659,7 @@ burst_TS6(struct Client *client_p)
|
||||||
burst_modes_TS6(client_p, chptr, &chptr->invexlist, 'I');
|
burst_modes_TS6(client_p, chptr, &chptr->invexlist, 'I');
|
||||||
|
|
||||||
if(rb_dlink_list_length(&chptr->quietlist) > 0)
|
if(rb_dlink_list_length(&chptr->quietlist) > 0)
|
||||||
burst_modes_TS6(client_p, chptr, &chptr->quietlist, 'q');
|
burst_modes_TS6(client_p, chptr, &chptr->quietlist, 'y');
|
||||||
|
|
||||||
if(IsCapable(client_p, CAP_TB) && chptr->topic != NULL)
|
if(IsCapable(client_p, CAP_TB) && chptr->topic != NULL)
|
||||||
sendto_one(client_p, ":%s TB %s %ld %s%s:%s",
|
sendto_one(client_p, ":%s TB %s %ld %s%s:%s",
|
||||||
|
|
|
@ -1435,7 +1435,7 @@ change_nick_user_host(struct Client *target_p, const char *nick, const char *use
|
||||||
mptr = mode;
|
mptr = mode;
|
||||||
|
|
||||||
if(is_owner(mscptr)) {
|
if(is_owner(mscptr)) {
|
||||||
*mptr++ = 'y';
|
*mptr++ = 'q';
|
||||||
strcat(modeval, nick);
|
strcat(modeval, nick);
|
||||||
strcat(modeval, " ");
|
strcat(modeval, " ");
|
||||||
}
|
}
|
||||||
|
|
|
@ -222,7 +222,7 @@ isupport_chanmodes(const void *ptr)
|
||||||
rb_snprintf(result, sizeof result, "%s%sb%s,k,%sl%s,%s",
|
rb_snprintf(result, sizeof result, "%s%sb%s,k,%sl%s,%s",
|
||||||
ConfigChannel.use_except ? "e" : "",
|
ConfigChannel.use_except ? "e" : "",
|
||||||
ConfigChannel.use_invex ? "I" : "",
|
ConfigChannel.use_invex ? "I" : "",
|
||||||
strchr(ConfigChannel.disabledmodes, 'q') ? "" : "q",
|
strchr(ConfigChannel.disabledmodes, 'y') ? "" : "y",
|
||||||
ConfigChannel.use_forward ? "f" : "",
|
ConfigChannel.use_forward ? "f" : "",
|
||||||
strchr(ConfigChannel.disabledmodes, 'j') ? "" : "j",
|
strchr(ConfigChannel.disabledmodes, 'j') ? "" : "j",
|
||||||
cflagsbuf);
|
cflagsbuf);
|
||||||
|
@ -252,11 +252,11 @@ isupport_prefix(const void *ptr)
|
||||||
static char result[13];
|
static char result[13];
|
||||||
|
|
||||||
rb_snprintf(result, sizeof result, "(%s%so%sv)%s%s@%s+",
|
rb_snprintf(result, sizeof result, "(%s%so%sv)%s%s@%s+",
|
||||||
ConfigChannel.use_owner ? "y" : "",
|
ConfigChannel.use_owner ? "q" : "",
|
||||||
ConfigChannel.use_admin ? "a" : "",
|
ConfigChannel.use_admin ? "a" : "",
|
||||||
ConfigChannel.use_halfop ? "h" : "",
|
ConfigChannel.use_halfop ? "h" : "",
|
||||||
ConfigChannel.use_owner ? "~" : "",
|
ConfigChannel.use_owner ? "~" : "",
|
||||||
ConfigChannel.use_admin ? "!" : "",
|
ConfigChannel.use_admin ? "&" : "",
|
||||||
ConfigChannel.use_halfop ? "%" : "");
|
ConfigChannel.use_halfop ? "%" : "");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -305,7 +305,7 @@ isupport_ownermode(const void *ptr)
|
||||||
if(!ConfigChannel.use_owner)
|
if(!ConfigChannel.use_owner)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
rb_snprintf(result, sizeof result, "y");
|
rb_snprintf(result, sizeof result, "q");
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
for file in $(find **/*.c)
|
||||||
|
do
|
||||||
|
if [[ $file = "bandb/sqlite3.c" ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $file = "src/lex.yy.c" ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $file = "src/y.tab.c" ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $file = "tools/convertilines.c" ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $file = "tools/convertklines.c" ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $file = "tools/mkpasswd.c" ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $file = "tools/viconf.c" ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $file = "unsupported/make_override_immune.c" ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $file = "unsupported/m_clearchan.c" ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $file = "unsupported/sno_channeljoin.c" ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $(astyle --style=linux --mode=c -n $file 2>&1 | cut -f1 -d' ') = "Unchanged" ]]
|
||||||
|
then
|
||||||
|
echo "$file passed coding standards"
|
||||||
|
else
|
||||||
|
echo "$file is not at coding standards."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
|
@ -0,0 +1,3 @@
|
||||||
|
FROM elemental:7.0-qaohv
|
||||||
|
|
||||||
|
ADD ircd.conf /home/ircd/run/etc/ircd.conf
|
|
@ -0,0 +1,585 @@
|
||||||
|
/* doc/example.conf - brief example configuration file
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000-2002 Hybrid Development Team
|
||||||
|
* Copyright (C) 2002-2005 ircd-ratbox development team
|
||||||
|
* Copyright (C) 2005-2006 charybdis development team
|
||||||
|
*
|
||||||
|
* $Id: example.conf 3582 2007-11-17 21:55:48Z jilles $
|
||||||
|
*
|
||||||
|
* See reference.conf for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Extensions */
|
||||||
|
#loadmodule "extensions/chm_adminonly.so";
|
||||||
|
loadmodule "extensions/chm_operonly.so";
|
||||||
|
#loadmodule "extensions/chm_sslonly.so";
|
||||||
|
#loadmodule "extensions/chm_operonly_compat.so";
|
||||||
|
#loadmodule "extensions/chm_quietunreg_compat.so";
|
||||||
|
#loadmodule "extensions/chm_sslonly_compat.so";
|
||||||
|
#loadmodule "extensions/createauthonly.so";
|
||||||
|
loadmodule "extensions/extb_account.so";
|
||||||
|
loadmodule "extensions/extb_canjoin.so";
|
||||||
|
loadmodule "extensions/extb_channel.so";
|
||||||
|
loadmodule "extensions/extb_extgecos.so";
|
||||||
|
loadmodule "extensions/extb_oper.so";
|
||||||
|
loadmodule "extensions/extb_realname.so";
|
||||||
|
#loadmodule "extensions/extb_server.so";
|
||||||
|
#loadmodule "extensions/extb_ssl.so";
|
||||||
|
#loadmodule "extensions/hurt.so";
|
||||||
|
loadmodule "extensions/ip_cloaking.so";
|
||||||
|
#loadmodule "extensions/m_findforwards.so";
|
||||||
|
loadmodule "extensions/m_identify.so";
|
||||||
|
loadmodule "extensions/m_mkpasswd.so";
|
||||||
|
loadmodule "extensions/m_webirc.so";
|
||||||
|
#loadmodule "extensions/m_cycle.so";
|
||||||
|
#loadmodule "extensions/m_oaccept.so";
|
||||||
|
#loadmodule "extensions/m_opme.so";
|
||||||
|
#loadmodule "extensions/m_ojoin.so";
|
||||||
|
#loadmodule "extensions/m_omode.so";
|
||||||
|
#loadmodule "extensions/m_olist.so";
|
||||||
|
#loadmodule "extensions/m_okick.so";
|
||||||
|
#loadmodule "extensions/m_force.so";
|
||||||
|
#loadmodule "extensions/m_roleplay.so";
|
||||||
|
#loadmodule "extensions/no_oper_invis.so";
|
||||||
|
loadmodule "extensions/sno_farconnect.so";
|
||||||
|
loadmodule "extensions/sno_globalkline.so";
|
||||||
|
loadmodule "extensions/sno_globaloper.so";
|
||||||
|
#loadmodule "extensions/sno_whois.so";
|
||||||
|
|
||||||
|
serverinfo {
|
||||||
|
name = "rarity.shadownet.int";
|
||||||
|
sid = "47G";
|
||||||
|
description = "Rarity >_<";
|
||||||
|
network_name = "ShadowNET";
|
||||||
|
network_desc = "Help I need muffin";
|
||||||
|
helpchan = "#help";
|
||||||
|
helpurl = "http://www.mynet.net/help";
|
||||||
|
hub = yes;
|
||||||
|
|
||||||
|
/* On multi-homed hosts you may need the following. These define
|
||||||
|
* the addresses we connect from to other servers. */
|
||||||
|
/* for IPv4 */
|
||||||
|
#vhost = "192.169.0.1";
|
||||||
|
/* for IPv6 */
|
||||||
|
#vhost6 = "3ffe:80e8:546::2";
|
||||||
|
|
||||||
|
/* ssl_private_key: our ssl private key */
|
||||||
|
ssl_private_key = "etc/ssl.key";
|
||||||
|
|
||||||
|
/* ssl_cert: certificate for our ssl server */
|
||||||
|
ssl_cert = "etc/ssl.cert";
|
||||||
|
|
||||||
|
/* ssl_dh_params: DH parameters, generate with openssl dhparam -out dh.pem 1024 */
|
||||||
|
ssl_dh_params = "etc/dh.pem";
|
||||||
|
|
||||||
|
/* ssld_count: number of ssld processes you want to start, if you
|
||||||
|
* have a really busy server, using N-1 where N is the number of
|
||||||
|
* cpu/cpu cores you have might be useful. A number greater than one
|
||||||
|
* can also be useful in case of bugs in ssld and because ssld needs
|
||||||
|
* two file descriptors per SSL connection.
|
||||||
|
*/
|
||||||
|
ssld_count = 1;
|
||||||
|
|
||||||
|
/* default max clients: the default maximum number of clients
|
||||||
|
* allowed to connect. This can be changed once ircd has started by
|
||||||
|
* issuing:
|
||||||
|
* /quote set maxclients <limit>
|
||||||
|
*/
|
||||||
|
default_max_clients = 1024;
|
||||||
|
};
|
||||||
|
|
||||||
|
admin {
|
||||||
|
name = "Lazy admin (lazya)";
|
||||||
|
description = "AthemeNET client server";
|
||||||
|
email = "nobody@127.0.0.1";
|
||||||
|
};
|
||||||
|
|
||||||
|
log {
|
||||||
|
fname_userlog = "logs/userlog";
|
||||||
|
#fname_fuserlog = "logs/fuserlog";
|
||||||
|
fname_operlog = "logs/operlog";
|
||||||
|
#fname_foperlog = "logs/foperlog";
|
||||||
|
fname_serverlog = "logs/serverlog";
|
||||||
|
#fname_klinelog = "logs/klinelog";
|
||||||
|
fname_killlog = "logs/killlog";
|
||||||
|
fname_operspylog = "logs/operspylog";
|
||||||
|
#fname_ioerrorlog = "logs/ioerror";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* class {} blocks MUST be specified before anything that uses them. That
|
||||||
|
* means they must be defined before auth {} and before connect {}.
|
||||||
|
*/
|
||||||
|
class "users" {
|
||||||
|
ping_time = 2 minutes;
|
||||||
|
number_per_ident = 10;
|
||||||
|
number_per_ip = 10;
|
||||||
|
number_per_ip_global = 50;
|
||||||
|
cidr_ipv4_bitlen = 24;
|
||||||
|
cidr_ipv6_bitlen = 64;
|
||||||
|
number_per_cidr = 200;
|
||||||
|
max_number = 3000;
|
||||||
|
sendq = 400 kbytes;
|
||||||
|
};
|
||||||
|
|
||||||
|
class "opers" {
|
||||||
|
ping_time = 5 minutes;
|
||||||
|
number_per_ip = 10;
|
||||||
|
max_number = 1000;
|
||||||
|
sendq = 1 megabyte;
|
||||||
|
};
|
||||||
|
|
||||||
|
class "server" {
|
||||||
|
ping_time = 5 minutes;
|
||||||
|
connectfreq = 5 minutes;
|
||||||
|
max_number = 1;
|
||||||
|
sendq = 4 megabytes;
|
||||||
|
};
|
||||||
|
|
||||||
|
listen {
|
||||||
|
/* If you want to listen on a specific IP only, specify host.
|
||||||
|
* host definitions apply only to the following port line.
|
||||||
|
*/
|
||||||
|
#host = "192.169.0.1";
|
||||||
|
port = 5000, 6665 .. 6669;
|
||||||
|
sslport = 6697;
|
||||||
|
|
||||||
|
/* Listen on IPv6 (if you used host= above). */
|
||||||
|
#host = "3ffe:1234:a:b:c::d";
|
||||||
|
#port = 5000, 6665 .. 6669;
|
||||||
|
#sslport = 9999;
|
||||||
|
};
|
||||||
|
|
||||||
|
connect "services.int" {
|
||||||
|
host = "*";
|
||||||
|
send_password = "dev";
|
||||||
|
accept_password = "dev";
|
||||||
|
port = 6667;
|
||||||
|
flags = topicburst;
|
||||||
|
class = "server";
|
||||||
|
};
|
||||||
|
|
||||||
|
connect "tetra.int" {
|
||||||
|
host = "*";
|
||||||
|
send_password = "dev";
|
||||||
|
accept_password = "dev";
|
||||||
|
port = 6667;
|
||||||
|
flags = topicburst;
|
||||||
|
class = "server";
|
||||||
|
};
|
||||||
|
|
||||||
|
connect "ardreth.shadownet.int" {
|
||||||
|
host = "*";
|
||||||
|
send_password = "dev";
|
||||||
|
accept_password = "dev";
|
||||||
|
port = 6667;
|
||||||
|
flags = topicburst;
|
||||||
|
class = "server";
|
||||||
|
};
|
||||||
|
|
||||||
|
connect "janus.shadownet.int" {
|
||||||
|
host = "*";
|
||||||
|
send_password = "dev";
|
||||||
|
accept_password = "dev";
|
||||||
|
port = 6667;
|
||||||
|
class = "server";
|
||||||
|
hub_mask = "*";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* auth {}: allow users to connect to the ircd (OLD I:)
|
||||||
|
* auth {} blocks MUST be specified in order of precedence. The first one
|
||||||
|
* that matches a user will be used. So place spoofs first, then specials,
|
||||||
|
* then general access, then restricted.
|
||||||
|
*/
|
||||||
|
auth {
|
||||||
|
/* user: the user@host allowed to connect. Multiple IPv4/IPv6 user
|
||||||
|
* lines are permitted per auth block. This is matched against the
|
||||||
|
* hostname and IP address (using :: shortening for IPv6 and
|
||||||
|
* prepending a 0 if it starts with a colon) and can also use CIDR
|
||||||
|
* masks.
|
||||||
|
*/
|
||||||
|
user = "*@172.16.0.0/12";
|
||||||
|
user = "*test@123D:B567:*";
|
||||||
|
|
||||||
|
/* auth_user: The username (authenticated via SASL or PASS) allowed
|
||||||
|
* to connect. You are able to put multiple auth_user lines. If people
|
||||||
|
* are authenticating via SASL in this way, it is recommended to comment
|
||||||
|
* out the password option below. You will also *NEED* to specify a user
|
||||||
|
* line above auth_user, this can safely be "*@*", however.
|
||||||
|
*/
|
||||||
|
auth_user = "jilles";
|
||||||
|
auth_user = "jdhore";
|
||||||
|
|
||||||
|
/* password: an optional password that is required to use this block.
|
||||||
|
* By default this is not encrypted, specify the flag "encrypted" in
|
||||||
|
* flags = ...; below if it is.
|
||||||
|
*/
|
||||||
|
password = "letmein";
|
||||||
|
|
||||||
|
/* spoof: fake the users user@host to be be this. You may either
|
||||||
|
* specify a host or a user@host to spoof to. This is free-form,
|
||||||
|
* just do everyone a favour and dont abuse it. (OLD I: = flag)
|
||||||
|
*/
|
||||||
|
spoof = "I.still.hate.packets";
|
||||||
|
|
||||||
|
/* autojoin: Channel (or channels, comma-seperated) to join users
|
||||||
|
* in this auth block to on connect. Note that this won't join
|
||||||
|
* the user through any bans or otherwise restrictive chmodes.
|
||||||
|
*/
|
||||||
|
autojoin = "#shadowircd,#test";
|
||||||
|
|
||||||
|
/* autojoin_opers : Channel (or channels, comma-seperated) to join
|
||||||
|
* opers to on oper-up.
|
||||||
|
*/
|
||||||
|
autojoin_opers = "#opers,#help";
|
||||||
|
|
||||||
|
/* Possible flags in auth:
|
||||||
|
*
|
||||||
|
* encrypted | password is encrypted with mkpasswd
|
||||||
|
* spoof_notice | give a notice when spoofing hosts
|
||||||
|
* exceed_limit (old > flag) | allow user to exceed class user limits
|
||||||
|
* kline_exempt (old ^ flag) | exempt this user from k/g/xlines&dnsbls
|
||||||
|
* dnsbl_exempt | exempt this user from dnsbls
|
||||||
|
* spambot_exempt | exempt this user from spambot checks
|
||||||
|
* shide_exempt | exempt this user from serverhiding
|
||||||
|
* jupe_exempt | exempt this user from generating
|
||||||
|
* warnings joining juped channels
|
||||||
|
* resv_exempt | exempt this user from resvs
|
||||||
|
* flood_exempt | exempt this user from flood limits
|
||||||
|
* USE WITH CAUTION.
|
||||||
|
* no_tilde (old - flag) | don't prefix ~ to username if no ident
|
||||||
|
* need_ident (old + flag) | require ident for user in this class
|
||||||
|
* need_ssl | require SSL/TLS for user in this class
|
||||||
|
* need_sasl | require SASL id for user in this class
|
||||||
|
*/
|
||||||
|
flags = kline_exempt, exceed_limit;
|
||||||
|
|
||||||
|
/* class: the class the user is placed in */
|
||||||
|
class = "opers";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Example WEBIRC authblock */
|
||||||
|
auth {
|
||||||
|
/* user: webirc@IP.OF.YOUR.WEBIRC . the webirc@ part is required */
|
||||||
|
user = "webirc@192.168.1.1";
|
||||||
|
|
||||||
|
/* password: password the webirc client sends in the WEBIRC command.
|
||||||
|
* You can use a encrypted password here (see above auth block).
|
||||||
|
*/
|
||||||
|
password = "<password>";
|
||||||
|
|
||||||
|
/* spoof: This is required to keep it what it is currently if you
|
||||||
|
* want the webirc client to show the users' real host as their
|
||||||
|
* host on IRC.
|
||||||
|
*/
|
||||||
|
spoof = "webirc.";
|
||||||
|
class = "users";
|
||||||
|
};
|
||||||
|
|
||||||
|
auth {
|
||||||
|
user = "*@*";
|
||||||
|
class = "users";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* privset {} blocks MUST be specified before anything that uses them. That
|
||||||
|
* means they must be defined before operator {}.
|
||||||
|
*/
|
||||||
|
privset "local_op" {
|
||||||
|
privs = oper:local_kill, oper:operwall;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "server_bot" {
|
||||||
|
extends = "local_op";
|
||||||
|
privs = oper:kline, oper:remoteban, snomask:nick_changes;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "global_op" {
|
||||||
|
extends = "local_op";
|
||||||
|
privs = oper:global_kill, oper:routing, oper:kline, oper:unkline, oper:xline,
|
||||||
|
oper:resv, oper:mass_notice, oper:remoteban;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "admin" {
|
||||||
|
extends = "global_op";
|
||||||
|
privs = oper:admin, oper:die, oper:rehash, oper:spy, oper:override;
|
||||||
|
};
|
||||||
|
|
||||||
|
operator "god" {
|
||||||
|
/* name: the name of the oper must go above */
|
||||||
|
|
||||||
|
/* user: the user@host required for this operator. CIDR *is*
|
||||||
|
* supported now. auth{} spoofs work here, other spoofs do not.
|
||||||
|
* multiple user="" lines are supported.
|
||||||
|
*/
|
||||||
|
user = "*@*";
|
||||||
|
|
||||||
|
/* password: the password required to oper. Unless ~encrypted is
|
||||||
|
* contained in flags = ...; this will need to be encrypted using
|
||||||
|
* mkpasswd, MD5 is supported
|
||||||
|
*/
|
||||||
|
password = "test";
|
||||||
|
|
||||||
|
/* rsa key: the public key for this oper when using Challenge.
|
||||||
|
* A password should not be defined when this is used, see
|
||||||
|
* doc/challenge.txt for more information.
|
||||||
|
*/
|
||||||
|
#rsa_public_key_file = "/usr/local/ircd/etc/oper.pub";
|
||||||
|
|
||||||
|
/* umodes: the specific umodes this oper gets when they oper.
|
||||||
|
* If this is specified an oper will not be given oper_umodes
|
||||||
|
* These are described above oper_only_umodes in general {};
|
||||||
|
*/
|
||||||
|
#umodes = locops, servnotice, operwall, wallop;
|
||||||
|
|
||||||
|
/* fingerprint: if specified, the oper's client certificate
|
||||||
|
* fingerprint will be checked against the specified fingerprint
|
||||||
|
* below.
|
||||||
|
*/
|
||||||
|
#fingerprint = "c77106576abf7f9f90cca0f63874a60f2e40a64b";
|
||||||
|
|
||||||
|
/* snomask: specific server notice mask on oper up.
|
||||||
|
* If this is specified an oper will not be given oper_snomask.
|
||||||
|
*/
|
||||||
|
snomask = "+ZbFcfkrsuy";
|
||||||
|
|
||||||
|
/* vhost: defines the vhost that this oper will get on oper up.
|
||||||
|
* this must be a valid hostmask. If this is specified the oper
|
||||||
|
* will not be given default_operhost.
|
||||||
|
*/
|
||||||
|
vhost = "is.an.oper";
|
||||||
|
|
||||||
|
/* swhois: defines an additional line that will be displayed
|
||||||
|
* whenever someone does /whois on the oper in question.
|
||||||
|
*/
|
||||||
|
swhois = "is wearing pants.";
|
||||||
|
|
||||||
|
/* operstring: defines a custom operstring for this oper,
|
||||||
|
* which will be shown in whois instead of default_operstring
|
||||||
|
* or default_adminstring.
|
||||||
|
*/
|
||||||
|
operstring = "is a lazy IRC Operator";
|
||||||
|
|
||||||
|
/* flags: misc options for the operator. You may prefix an option
|
||||||
|
* with ~ to disable it, e.g. ~encrypted.
|
||||||
|
*
|
||||||
|
* Default flags are encrypted.
|
||||||
|
*
|
||||||
|
* Available options:
|
||||||
|
*
|
||||||
|
* encrypted: the password above is encrypted [DEFAULT]
|
||||||
|
* need_ssl: must be using SSL/TLS to oper up
|
||||||
|
*/
|
||||||
|
flags = ~encrypted;
|
||||||
|
|
||||||
|
/* privset: privileges set to grant */
|
||||||
|
privset = "admin";
|
||||||
|
};
|
||||||
|
|
||||||
|
service {
|
||||||
|
name = "services.int";
|
||||||
|
};
|
||||||
|
|
||||||
|
service {
|
||||||
|
name = "tetra.int";
|
||||||
|
};
|
||||||
|
|
||||||
|
cluster {
|
||||||
|
name = "*";
|
||||||
|
flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv;
|
||||||
|
};
|
||||||
|
|
||||||
|
shared {
|
||||||
|
oper = "*@*", "*";
|
||||||
|
flags = all;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* exempt {}: IPs that are exempt from Dlines and rejectcache. (OLD d:) */
|
||||||
|
exempt {
|
||||||
|
ip = "127.0.0.1";
|
||||||
|
};
|
||||||
|
|
||||||
|
channel {
|
||||||
|
disabledmodes = "G";
|
||||||
|
autochanmodes = "nt";
|
||||||
|
admin_on_channel_create = no;
|
||||||
|
exemptchanops = "NTc";
|
||||||
|
use_halfop = yes;
|
||||||
|
use_admin = yes;
|
||||||
|
use_knock = yes;
|
||||||
|
use_local_channels = yes;
|
||||||
|
knock_delay = 5 minutes;
|
||||||
|
knock_delay_channel = 1 minute;
|
||||||
|
max_chans_per_user = 15;
|
||||||
|
max_bans = 100;
|
||||||
|
max_bans_large = 500;
|
||||||
|
default_split_user_count = 0;
|
||||||
|
default_split_server_count = 0;
|
||||||
|
no_create_on_split = no;
|
||||||
|
no_join_on_split = no;
|
||||||
|
burst_topicwho = yes;
|
||||||
|
kick_on_split_riding = no;
|
||||||
|
only_ascii_channels = no;
|
||||||
|
cycle_host_change = yes;
|
||||||
|
host_in_topic = yes;
|
||||||
|
resv_forcepart = yes;
|
||||||
|
channel_target_change = yes;
|
||||||
|
};
|
||||||
|
|
||||||
|
serverhide {
|
||||||
|
flatten_links = yes;
|
||||||
|
links_delay = 5 minutes;
|
||||||
|
hidden = no;
|
||||||
|
disable_hidden = no;
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "NickServ" {
|
||||||
|
target = "NickServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "ChanServ" {
|
||||||
|
target = "ChanServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "OperServ" {
|
||||||
|
target = "OperServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "MemoServ" {
|
||||||
|
target = "MemoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "HostServ" {
|
||||||
|
target = "HostServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "BotServ" {
|
||||||
|
target = "BotServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "InfoServ" {
|
||||||
|
target = "InfoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "GroupServ" {
|
||||||
|
target = "GroupServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "NS" {
|
||||||
|
target = "NickServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "CS" {
|
||||||
|
target = "ChanServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "OS" {
|
||||||
|
target = "OperServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "MS" {
|
||||||
|
target = "MemoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "HS" {
|
||||||
|
target = "HostServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "BS" {
|
||||||
|
target = "BotServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "IS" {
|
||||||
|
target = "InfoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "GS" {
|
||||||
|
target = "GroupServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
general {
|
||||||
|
hide_error_messages = opers;
|
||||||
|
hide_spoof_ips = yes;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* default umodes: umodes to set upon connection
|
||||||
|
* If you have enabled the ip_cloaking extension, and you wish for
|
||||||
|
* incoming clients to be cloaked upon connection, +x must be in
|
||||||
|
* the umode string below.
|
||||||
|
*/
|
||||||
|
default_umodes = "+ix";
|
||||||
|
|
||||||
|
default_operstring = "is an IRC Operator";
|
||||||
|
default_adminstring = "is a Server Administrator";
|
||||||
|
default_operhost = "yolo-swag.com";
|
||||||
|
#static_quit = "I like turtles!";
|
||||||
|
servicestring = "is a Network Service";
|
||||||
|
disable_fake_channels = no;
|
||||||
|
hide_channel_below_users = 3;
|
||||||
|
tkline_expire_notices = no;
|
||||||
|
default_floodcount = 10;
|
||||||
|
failed_oper_notice = yes;
|
||||||
|
dots_in_ident=2;
|
||||||
|
min_nonwildcard = 4;
|
||||||
|
min_nonwildcard_simple = 3;
|
||||||
|
max_accept = 100;
|
||||||
|
max_monitor = 100;
|
||||||
|
anti_nick_flood = yes;
|
||||||
|
max_nick_time = 20 seconds;
|
||||||
|
max_nick_changes = 5;
|
||||||
|
anti_spam_exit_message_time = 5 minutes;
|
||||||
|
use_part_messages = yes;
|
||||||
|
ts_warn_delta = 30 seconds;
|
||||||
|
ts_max_delta = 5 minutes;
|
||||||
|
client_exit = yes;
|
||||||
|
collision_fnc = yes;
|
||||||
|
global_snotices = yes;
|
||||||
|
dline_with_reason = yes;
|
||||||
|
kline_delay = 0 seconds;
|
||||||
|
kline_with_reason = yes;
|
||||||
|
kline_reason = "K-Lined";
|
||||||
|
identify_service = "NickServ@services.int";
|
||||||
|
identify_command = "IDENTIFY";
|
||||||
|
non_redundant_klines = yes;
|
||||||
|
warn_no_nline = yes;
|
||||||
|
use_propagated_bans = yes;
|
||||||
|
stats_e_disabled = no;
|
||||||
|
stats_c_oper_only=no;
|
||||||
|
stats_h_oper_only=no;
|
||||||
|
stats_y_oper_only=no;
|
||||||
|
stats_o_oper_only=yes;
|
||||||
|
stats_P_oper_only=no;
|
||||||
|
stats_i_oper_only=masked;
|
||||||
|
stats_k_oper_only=masked;
|
||||||
|
map_oper_only = no;
|
||||||
|
operspy_admin_only = no;
|
||||||
|
operspy_dont_care_user_info = no;
|
||||||
|
secret_channels_in_whois = no;
|
||||||
|
caller_id_wait = 1 minute;
|
||||||
|
pace_wait_simple = 1 second;
|
||||||
|
pace_wait = 10 seconds;
|
||||||
|
short_motd = no;
|
||||||
|
ping_cookie = no;
|
||||||
|
connect_timeout = 30 seconds;
|
||||||
|
default_ident_timeout = 5;
|
||||||
|
disable_auth = yes;
|
||||||
|
no_oper_flood = yes;
|
||||||
|
true_no_oper_flood = no;
|
||||||
|
max_targets = 4;
|
||||||
|
client_flood = 20;
|
||||||
|
use_whois_actually = no;
|
||||||
|
oper_only_umodes = operwall, locops, servnotice;
|
||||||
|
oper_umodes = locops, servnotice, operwall, wallop;
|
||||||
|
oper_snomask = "+s";
|
||||||
|
burst_away = yes;
|
||||||
|
nick_delay = 0 seconds; # 15 minutes if you want to enable this
|
||||||
|
reject_ban_time = 1 minute;
|
||||||
|
reject_after_count = 3;
|
||||||
|
reject_duration = 5 minutes;
|
||||||
|
throttle_duration = 60;
|
||||||
|
throttle_count = 5000;
|
||||||
|
expire_override_time = 5 minutes;
|
||||||
|
};
|
||||||
|
|
||||||
|
modules {
|
||||||
|
path = "modules";
|
||||||
|
path = "modules/autoload";
|
||||||
|
};
|
|
@ -0,0 +1,3 @@
|
||||||
|
FROM elemental:7.0-qaohv
|
||||||
|
|
||||||
|
ADD ircd.conf /home/ircd/run/etc/ircd.conf
|
|
@ -0,0 +1,559 @@
|
||||||
|
/* doc/example.conf - brief example configuration file
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000-2002 Hybrid Development Team
|
||||||
|
* Copyright (C) 2002-2005 ircd-ratbox development team
|
||||||
|
* Copyright (C) 2005-2006 charybdis development team
|
||||||
|
*
|
||||||
|
* $Id: example.conf 3582 2007-11-17 21:55:48Z jilles $
|
||||||
|
*
|
||||||
|
* See reference.conf for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Extensions */
|
||||||
|
#loadmodule "extensions/chm_adminonly.so";
|
||||||
|
loadmodule "extensions/chm_operonly.so";
|
||||||
|
#loadmodule "extensions/chm_sslonly.so";
|
||||||
|
#loadmodule "extensions/chm_operonly_compat.so";
|
||||||
|
#loadmodule "extensions/chm_quietunreg_compat.so";
|
||||||
|
#loadmodule "extensions/chm_sslonly_compat.so";
|
||||||
|
#loadmodule "extensions/createauthonly.so";
|
||||||
|
loadmodule "extensions/extb_account.so";
|
||||||
|
loadmodule "extensions/extb_canjoin.so";
|
||||||
|
loadmodule "extensions/extb_channel.so";
|
||||||
|
loadmodule "extensions/extb_extgecos.so";
|
||||||
|
loadmodule "extensions/extb_oper.so";
|
||||||
|
loadmodule "extensions/extb_realname.so";
|
||||||
|
#loadmodule "extensions/extb_server.so";
|
||||||
|
#loadmodule "extensions/extb_ssl.so";
|
||||||
|
#loadmodule "extensions/hurt.so";
|
||||||
|
loadmodule "extensions/ip_cloaking.so";
|
||||||
|
#loadmodule "extensions/m_findforwards.so";
|
||||||
|
loadmodule "extensions/m_identify.so";
|
||||||
|
loadmodule "extensions/m_mkpasswd.so";
|
||||||
|
loadmodule "extensions/m_webirc.so";
|
||||||
|
#loadmodule "extensions/m_cycle.so";
|
||||||
|
#loadmodule "extensions/m_oaccept.so";
|
||||||
|
#loadmodule "extensions/m_opme.so";
|
||||||
|
#loadmodule "extensions/m_ojoin.so";
|
||||||
|
#loadmodule "extensions/m_omode.so";
|
||||||
|
#loadmodule "extensions/m_olist.so";
|
||||||
|
#loadmodule "extensions/m_okick.so";
|
||||||
|
#loadmodule "extensions/m_force.so";
|
||||||
|
#loadmodule "extensions/m_roleplay.so";
|
||||||
|
#loadmodule "extensions/no_oper_invis.so";
|
||||||
|
loadmodule "extensions/sno_farconnect.so";
|
||||||
|
loadmodule "extensions/sno_globalkline.so";
|
||||||
|
loadmodule "extensions/sno_globaloper.so";
|
||||||
|
#loadmodule "extensions/sno_whois.so";
|
||||||
|
|
||||||
|
serverinfo {
|
||||||
|
name = "ardreth.shadownet.int";
|
||||||
|
sid = "4RD";
|
||||||
|
description = "Ardreth the reaper of souls";
|
||||||
|
network_name = "ShadowNET";
|
||||||
|
network_desc = "Help I need muffin";
|
||||||
|
helpchan = "#help";
|
||||||
|
helpurl = "http://www.mynet.net/help";
|
||||||
|
hub = yes;
|
||||||
|
|
||||||
|
/* On multi-homed hosts you may need the following. These define
|
||||||
|
* the addresses we connect from to other servers. */
|
||||||
|
/* for IPv4 */
|
||||||
|
#vhost = "192.169.0.1";
|
||||||
|
/* for IPv6 */
|
||||||
|
#vhost6 = "3ffe:80e8:546::2";
|
||||||
|
|
||||||
|
/* ssl_private_key: our ssl private key */
|
||||||
|
ssl_private_key = "etc/ssl.key";
|
||||||
|
|
||||||
|
/* ssl_cert: certificate for our ssl server */
|
||||||
|
ssl_cert = "etc/ssl.cert";
|
||||||
|
|
||||||
|
/* ssl_dh_params: DH parameters, generate with openssl dhparam -out dh.pem 1024 */
|
||||||
|
ssl_dh_params = "etc/dh.pem";
|
||||||
|
|
||||||
|
/* ssld_count: number of ssld processes you want to start, if you
|
||||||
|
* have a really busy server, using N-1 where N is the number of
|
||||||
|
* cpu/cpu cores you have might be useful. A number greater than one
|
||||||
|
* can also be useful in case of bugs in ssld and because ssld needs
|
||||||
|
* two file descriptors per SSL connection.
|
||||||
|
*/
|
||||||
|
ssld_count = 1;
|
||||||
|
|
||||||
|
/* default max clients: the default maximum number of clients
|
||||||
|
* allowed to connect. This can be changed once ircd has started by
|
||||||
|
* issuing:
|
||||||
|
* /quote set maxclients <limit>
|
||||||
|
*/
|
||||||
|
default_max_clients = 1024;
|
||||||
|
};
|
||||||
|
|
||||||
|
admin {
|
||||||
|
name = "Lazy admin (lazya)";
|
||||||
|
description = "AthemeNET client server";
|
||||||
|
email = "nobody@127.0.0.1";
|
||||||
|
};
|
||||||
|
|
||||||
|
log {
|
||||||
|
fname_userlog = "logs/userlog";
|
||||||
|
#fname_fuserlog = "logs/fuserlog";
|
||||||
|
fname_operlog = "logs/operlog";
|
||||||
|
#fname_foperlog = "logs/foperlog";
|
||||||
|
fname_serverlog = "logs/serverlog";
|
||||||
|
#fname_klinelog = "logs/klinelog";
|
||||||
|
fname_killlog = "logs/killlog";
|
||||||
|
fname_operspylog = "logs/operspylog";
|
||||||
|
#fname_ioerrorlog = "logs/ioerror";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* class {} blocks MUST be specified before anything that uses them. That
|
||||||
|
* means they must be defined before auth {} and before connect {}.
|
||||||
|
*/
|
||||||
|
class "users" {
|
||||||
|
ping_time = 2 minutes;
|
||||||
|
number_per_ident = 10;
|
||||||
|
number_per_ip = 10;
|
||||||
|
number_per_ip_global = 50;
|
||||||
|
cidr_ipv4_bitlen = 24;
|
||||||
|
cidr_ipv6_bitlen = 64;
|
||||||
|
number_per_cidr = 200;
|
||||||
|
max_number = 3000;
|
||||||
|
sendq = 400 kbytes;
|
||||||
|
};
|
||||||
|
|
||||||
|
class "opers" {
|
||||||
|
ping_time = 5 minutes;
|
||||||
|
number_per_ip = 10;
|
||||||
|
max_number = 1000;
|
||||||
|
sendq = 1 megabyte;
|
||||||
|
};
|
||||||
|
|
||||||
|
class "server" {
|
||||||
|
ping_time = 5 minutes;
|
||||||
|
connectfreq = 5 minutes;
|
||||||
|
max_number = 1;
|
||||||
|
sendq = 4 megabytes;
|
||||||
|
};
|
||||||
|
|
||||||
|
listen {
|
||||||
|
/* If you want to listen on a specific IP only, specify host.
|
||||||
|
* host definitions apply only to the following port line.
|
||||||
|
*/
|
||||||
|
#host = "192.169.0.1";
|
||||||
|
port = 5000, 6665 .. 6669;
|
||||||
|
sslport = 6697;
|
||||||
|
|
||||||
|
/* Listen on IPv6 (if you used host= above). */
|
||||||
|
#host = "3ffe:1234:a:b:c::d";
|
||||||
|
#port = 5000, 6665 .. 6669;
|
||||||
|
#sslport = 9999;
|
||||||
|
};
|
||||||
|
|
||||||
|
connect "rarity.shadownet.int" {
|
||||||
|
host = "172.17.42.1";
|
||||||
|
send_password = "dev";
|
||||||
|
accept_password = "dev";
|
||||||
|
port = 6067;
|
||||||
|
class = "server";
|
||||||
|
hub_mask = "*";
|
||||||
|
flags = autoconn;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* auth {}: allow users to connect to the ircd (OLD I:)
|
||||||
|
* auth {} blocks MUST be specified in order of precedence. The first one
|
||||||
|
* that matches a user will be used. So place spoofs first, then specials,
|
||||||
|
* then general access, then restricted.
|
||||||
|
*/
|
||||||
|
auth {
|
||||||
|
/* user: the user@host allowed to connect. Multiple IPv4/IPv6 user
|
||||||
|
* lines are permitted per auth block. This is matched against the
|
||||||
|
* hostname and IP address (using :: shortening for IPv6 and
|
||||||
|
* prepending a 0 if it starts with a colon) and can also use CIDR
|
||||||
|
* masks.
|
||||||
|
*/
|
||||||
|
user = "*@172.16.0.0/12";
|
||||||
|
user = "*test@123D:B567:*";
|
||||||
|
|
||||||
|
/* auth_user: The username (authenticated via SASL or PASS) allowed
|
||||||
|
* to connect. You are able to put multiple auth_user lines. If people
|
||||||
|
* are authenticating via SASL in this way, it is recommended to comment
|
||||||
|
* out the password option below. You will also *NEED* to specify a user
|
||||||
|
* line above auth_user, this can safely be "*@*", however.
|
||||||
|
*/
|
||||||
|
auth_user = "jilles";
|
||||||
|
auth_user = "jdhore";
|
||||||
|
|
||||||
|
/* password: an optional password that is required to use this block.
|
||||||
|
* By default this is not encrypted, specify the flag "encrypted" in
|
||||||
|
* flags = ...; below if it is.
|
||||||
|
*/
|
||||||
|
password = "letmein";
|
||||||
|
|
||||||
|
/* spoof: fake the users user@host to be be this. You may either
|
||||||
|
* specify a host or a user@host to spoof to. This is free-form,
|
||||||
|
* just do everyone a favour and dont abuse it. (OLD I: = flag)
|
||||||
|
*/
|
||||||
|
spoof = "I.still.hate.packets";
|
||||||
|
|
||||||
|
/* autojoin: Channel (or channels, comma-seperated) to join users
|
||||||
|
* in this auth block to on connect. Note that this won't join
|
||||||
|
* the user through any bans or otherwise restrictive chmodes.
|
||||||
|
*/
|
||||||
|
autojoin = "#shadowircd,#test";
|
||||||
|
|
||||||
|
/* autojoin_opers : Channel (or channels, comma-seperated) to join
|
||||||
|
* opers to on oper-up.
|
||||||
|
*/
|
||||||
|
autojoin_opers = "#opers,#help";
|
||||||
|
|
||||||
|
/* Possible flags in auth:
|
||||||
|
*
|
||||||
|
* encrypted | password is encrypted with mkpasswd
|
||||||
|
* spoof_notice | give a notice when spoofing hosts
|
||||||
|
* exceed_limit (old > flag) | allow user to exceed class user limits
|
||||||
|
* kline_exempt (old ^ flag) | exempt this user from k/g/xlines&dnsbls
|
||||||
|
* dnsbl_exempt | exempt this user from dnsbls
|
||||||
|
* spambot_exempt | exempt this user from spambot checks
|
||||||
|
* shide_exempt | exempt this user from serverhiding
|
||||||
|
* jupe_exempt | exempt this user from generating
|
||||||
|
* warnings joining juped channels
|
||||||
|
* resv_exempt | exempt this user from resvs
|
||||||
|
* flood_exempt | exempt this user from flood limits
|
||||||
|
* USE WITH CAUTION.
|
||||||
|
* no_tilde (old - flag) | don't prefix ~ to username if no ident
|
||||||
|
* need_ident (old + flag) | require ident for user in this class
|
||||||
|
* need_ssl | require SSL/TLS for user in this class
|
||||||
|
* need_sasl | require SASL id for user in this class
|
||||||
|
*/
|
||||||
|
flags = kline_exempt, exceed_limit;
|
||||||
|
|
||||||
|
/* class: the class the user is placed in */
|
||||||
|
class = "opers";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Example WEBIRC authblock */
|
||||||
|
auth {
|
||||||
|
/* user: webirc@IP.OF.YOUR.WEBIRC . the webirc@ part is required */
|
||||||
|
user = "webirc@192.168.1.1";
|
||||||
|
|
||||||
|
/* password: password the webirc client sends in the WEBIRC command.
|
||||||
|
* You can use a encrypted password here (see above auth block).
|
||||||
|
*/
|
||||||
|
password = "<password>";
|
||||||
|
|
||||||
|
/* spoof: This is required to keep it what it is currently if you
|
||||||
|
* want the webirc client to show the users' real host as their
|
||||||
|
* host on IRC.
|
||||||
|
*/
|
||||||
|
spoof = "webirc.";
|
||||||
|
class = "users";
|
||||||
|
};
|
||||||
|
|
||||||
|
auth {
|
||||||
|
user = "*@*";
|
||||||
|
class = "users";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* privset {} blocks MUST be specified before anything that uses them. That
|
||||||
|
* means they must be defined before operator {}.
|
||||||
|
*/
|
||||||
|
privset "local_op" {
|
||||||
|
privs = oper:local_kill, oper:operwall;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "server_bot" {
|
||||||
|
extends = "local_op";
|
||||||
|
privs = oper:kline, oper:remoteban, snomask:nick_changes;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "global_op" {
|
||||||
|
extends = "local_op";
|
||||||
|
privs = oper:global_kill, oper:routing, oper:kline, oper:unkline, oper:xline,
|
||||||
|
oper:resv, oper:mass_notice, oper:remoteban;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "admin" {
|
||||||
|
extends = "global_op";
|
||||||
|
privs = oper:admin, oper:die, oper:rehash, oper:spy, oper:override;
|
||||||
|
};
|
||||||
|
|
||||||
|
operator "god" {
|
||||||
|
/* name: the name of the oper must go above */
|
||||||
|
|
||||||
|
/* user: the user@host required for this operator. CIDR *is*
|
||||||
|
* supported now. auth{} spoofs work here, other spoofs do not.
|
||||||
|
* multiple user="" lines are supported.
|
||||||
|
*/
|
||||||
|
user = "*@*";
|
||||||
|
|
||||||
|
/* password: the password required to oper. Unless ~encrypted is
|
||||||
|
* contained in flags = ...; this will need to be encrypted using
|
||||||
|
* mkpasswd, MD5 is supported
|
||||||
|
*/
|
||||||
|
password = "test";
|
||||||
|
|
||||||
|
/* rsa key: the public key for this oper when using Challenge.
|
||||||
|
* A password should not be defined when this is used, see
|
||||||
|
* doc/challenge.txt for more information.
|
||||||
|
*/
|
||||||
|
#rsa_public_key_file = "/usr/local/ircd/etc/oper.pub";
|
||||||
|
|
||||||
|
/* umodes: the specific umodes this oper gets when they oper.
|
||||||
|
* If this is specified an oper will not be given oper_umodes
|
||||||
|
* These are described above oper_only_umodes in general {};
|
||||||
|
*/
|
||||||
|
#umodes = locops, servnotice, operwall, wallop;
|
||||||
|
|
||||||
|
/* fingerprint: if specified, the oper's client certificate
|
||||||
|
* fingerprint will be checked against the specified fingerprint
|
||||||
|
* below.
|
||||||
|
*/
|
||||||
|
#fingerprint = "c77106576abf7f9f90cca0f63874a60f2e40a64b";
|
||||||
|
|
||||||
|
/* snomask: specific server notice mask on oper up.
|
||||||
|
* If this is specified an oper will not be given oper_snomask.
|
||||||
|
*/
|
||||||
|
snomask = "+ZbFcfkrsuy";
|
||||||
|
|
||||||
|
/* vhost: defines the vhost that this oper will get on oper up.
|
||||||
|
* this must be a valid hostmask. If this is specified the oper
|
||||||
|
* will not be given default_operhost.
|
||||||
|
*/
|
||||||
|
vhost = "is.an.oper";
|
||||||
|
|
||||||
|
/* swhois: defines an additional line that will be displayed
|
||||||
|
* whenever someone does /whois on the oper in question.
|
||||||
|
*/
|
||||||
|
swhois = "is wearing pants.";
|
||||||
|
|
||||||
|
/* operstring: defines a custom operstring for this oper,
|
||||||
|
* which will be shown in whois instead of default_operstring
|
||||||
|
* or default_adminstring.
|
||||||
|
*/
|
||||||
|
operstring = "is a lazy IRC Operator";
|
||||||
|
|
||||||
|
/* flags: misc options for the operator. You may prefix an option
|
||||||
|
* with ~ to disable it, e.g. ~encrypted.
|
||||||
|
*
|
||||||
|
* Default flags are encrypted.
|
||||||
|
*
|
||||||
|
* Available options:
|
||||||
|
*
|
||||||
|
* encrypted: the password above is encrypted [DEFAULT]
|
||||||
|
* need_ssl: must be using SSL/TLS to oper up
|
||||||
|
*/
|
||||||
|
flags = ~encrypted;
|
||||||
|
|
||||||
|
/* privset: privileges set to grant */
|
||||||
|
privset = "admin";
|
||||||
|
};
|
||||||
|
|
||||||
|
service {
|
||||||
|
name = "services.int";
|
||||||
|
};
|
||||||
|
|
||||||
|
service {
|
||||||
|
name = "tetra.int";
|
||||||
|
};
|
||||||
|
|
||||||
|
cluster {
|
||||||
|
name = "*";
|
||||||
|
flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv;
|
||||||
|
};
|
||||||
|
|
||||||
|
shared {
|
||||||
|
oper = "*@*", "*";
|
||||||
|
flags = all;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* exempt {}: IPs that are exempt from Dlines and rejectcache. (OLD d:) */
|
||||||
|
exempt {
|
||||||
|
ip = "127.0.0.1";
|
||||||
|
};
|
||||||
|
|
||||||
|
channel {
|
||||||
|
disabledmodes = "G";
|
||||||
|
autochanmodes = "nt";
|
||||||
|
admin_on_channel_create = no;
|
||||||
|
exemptchanops = "NTc";
|
||||||
|
use_halfop = yes;
|
||||||
|
use_admin = yes;
|
||||||
|
use_knock = yes;
|
||||||
|
use_local_channels = yes;
|
||||||
|
knock_delay = 5 minutes;
|
||||||
|
knock_delay_channel = 1 minute;
|
||||||
|
max_chans_per_user = 15;
|
||||||
|
max_bans = 100;
|
||||||
|
max_bans_large = 500;
|
||||||
|
default_split_user_count = 0;
|
||||||
|
default_split_server_count = 0;
|
||||||
|
no_create_on_split = no;
|
||||||
|
no_join_on_split = no;
|
||||||
|
burst_topicwho = yes;
|
||||||
|
kick_on_split_riding = no;
|
||||||
|
only_ascii_channels = no;
|
||||||
|
cycle_host_change = yes;
|
||||||
|
host_in_topic = yes;
|
||||||
|
resv_forcepart = yes;
|
||||||
|
channel_target_change = yes;
|
||||||
|
};
|
||||||
|
|
||||||
|
serverhide {
|
||||||
|
flatten_links = yes;
|
||||||
|
links_delay = 5 minutes;
|
||||||
|
hidden = no;
|
||||||
|
disable_hidden = no;
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "NickServ" {
|
||||||
|
target = "NickServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "ChanServ" {
|
||||||
|
target = "ChanServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "OperServ" {
|
||||||
|
target = "OperServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "MemoServ" {
|
||||||
|
target = "MemoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "HostServ" {
|
||||||
|
target = "HostServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "BotServ" {
|
||||||
|
target = "BotServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "InfoServ" {
|
||||||
|
target = "InfoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "GroupServ" {
|
||||||
|
target = "GroupServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "NS" {
|
||||||
|
target = "NickServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "CS" {
|
||||||
|
target = "ChanServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "OS" {
|
||||||
|
target = "OperServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "MS" {
|
||||||
|
target = "MemoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "HS" {
|
||||||
|
target = "HostServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "BS" {
|
||||||
|
target = "BotServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "IS" {
|
||||||
|
target = "InfoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "GS" {
|
||||||
|
target = "GroupServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
general {
|
||||||
|
hide_error_messages = opers;
|
||||||
|
hide_spoof_ips = yes;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* default umodes: umodes to set upon connection
|
||||||
|
* If you have enabled the ip_cloaking extension, and you wish for
|
||||||
|
* incoming clients to be cloaked upon connection, +x must be in
|
||||||
|
* the umode string below.
|
||||||
|
*/
|
||||||
|
default_umodes = "+ix";
|
||||||
|
|
||||||
|
default_operstring = "is an IRC Operator";
|
||||||
|
default_adminstring = "is a Server Administrator";
|
||||||
|
default_operhost = "yolo-swag.com";
|
||||||
|
#static_quit = "I like turtles!";
|
||||||
|
servicestring = "is a Network Service";
|
||||||
|
disable_fake_channels = no;
|
||||||
|
hide_channel_below_users = 3;
|
||||||
|
tkline_expire_notices = no;
|
||||||
|
default_floodcount = 10;
|
||||||
|
failed_oper_notice = yes;
|
||||||
|
dots_in_ident=2;
|
||||||
|
min_nonwildcard = 4;
|
||||||
|
min_nonwildcard_simple = 3;
|
||||||
|
max_accept = 100;
|
||||||
|
max_monitor = 100;
|
||||||
|
anti_nick_flood = yes;
|
||||||
|
max_nick_time = 20 seconds;
|
||||||
|
max_nick_changes = 5;
|
||||||
|
anti_spam_exit_message_time = 5 minutes;
|
||||||
|
use_part_messages = yes;
|
||||||
|
ts_warn_delta = 30 seconds;
|
||||||
|
ts_max_delta = 5 minutes;
|
||||||
|
client_exit = yes;
|
||||||
|
collision_fnc = yes;
|
||||||
|
global_snotices = yes;
|
||||||
|
dline_with_reason = yes;
|
||||||
|
kline_delay = 0 seconds;
|
||||||
|
kline_with_reason = yes;
|
||||||
|
kline_reason = "K-Lined";
|
||||||
|
identify_service = "NickServ@services.int";
|
||||||
|
identify_command = "IDENTIFY";
|
||||||
|
non_redundant_klines = yes;
|
||||||
|
warn_no_nline = yes;
|
||||||
|
use_propagated_bans = yes;
|
||||||
|
stats_e_disabled = no;
|
||||||
|
stats_c_oper_only=no;
|
||||||
|
stats_h_oper_only=no;
|
||||||
|
stats_y_oper_only=no;
|
||||||
|
stats_o_oper_only=yes;
|
||||||
|
stats_P_oper_only=no;
|
||||||
|
stats_i_oper_only=masked;
|
||||||
|
stats_k_oper_only=masked;
|
||||||
|
map_oper_only = no;
|
||||||
|
operspy_admin_only = no;
|
||||||
|
operspy_dont_care_user_info = no;
|
||||||
|
secret_channels_in_whois = no;
|
||||||
|
caller_id_wait = 1 minute;
|
||||||
|
pace_wait_simple = 1 second;
|
||||||
|
pace_wait = 10 seconds;
|
||||||
|
short_motd = no;
|
||||||
|
ping_cookie = no;
|
||||||
|
connect_timeout = 30 seconds;
|
||||||
|
default_ident_timeout = 5;
|
||||||
|
disable_auth = yes;
|
||||||
|
no_oper_flood = yes;
|
||||||
|
true_no_oper_flood = no;
|
||||||
|
max_targets = 4;
|
||||||
|
client_flood = 20;
|
||||||
|
use_whois_actually = no;
|
||||||
|
oper_only_umodes = operwall, locops, servnotice;
|
||||||
|
oper_umodes = locops, servnotice, operwall, wallop;
|
||||||
|
oper_snomask = "+s";
|
||||||
|
burst_away = yes;
|
||||||
|
nick_delay = 0 seconds; # 15 minutes if you want to enable this
|
||||||
|
reject_ban_time = 1 minute;
|
||||||
|
reject_after_count = 3;
|
||||||
|
reject_duration = 5 minutes;
|
||||||
|
throttle_duration = 60;
|
||||||
|
throttle_count = 5000;
|
||||||
|
expire_override_time = 5 minutes;
|
||||||
|
};
|
||||||
|
|
||||||
|
modules {
|
||||||
|
path = "modules";
|
||||||
|
path = "modules/autoload";
|
||||||
|
};
|
|
@ -0,0 +1,3 @@
|
||||||
|
FROM xena/elemental-ircd:6.6.2
|
||||||
|
|
||||||
|
ADD ircd.conf /home/ircd/run/etc/ircd.conf
|
|
@ -0,0 +1,559 @@
|
||||||
|
/* doc/example.conf - brief example configuration file
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000-2002 Hybrid Development Team
|
||||||
|
* Copyright (C) 2002-2005 ircd-ratbox development team
|
||||||
|
* Copyright (C) 2005-2006 charybdis development team
|
||||||
|
*
|
||||||
|
* $Id: example.conf 3582 2007-11-17 21:55:48Z jilles $
|
||||||
|
*
|
||||||
|
* See reference.conf for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Extensions */
|
||||||
|
#loadmodule "extensions/chm_adminonly.so";
|
||||||
|
loadmodule "extensions/chm_operonly.so";
|
||||||
|
#loadmodule "extensions/chm_sslonly.so";
|
||||||
|
#loadmodule "extensions/chm_operonly_compat.so";
|
||||||
|
#loadmodule "extensions/chm_quietunreg_compat.so";
|
||||||
|
#loadmodule "extensions/chm_sslonly_compat.so";
|
||||||
|
#loadmodule "extensions/createauthonly.so";
|
||||||
|
loadmodule "extensions/extb_account.so";
|
||||||
|
loadmodule "extensions/extb_canjoin.so";
|
||||||
|
loadmodule "extensions/extb_channel.so";
|
||||||
|
loadmodule "extensions/extb_extgecos.so";
|
||||||
|
loadmodule "extensions/extb_oper.so";
|
||||||
|
loadmodule "extensions/extb_realname.so";
|
||||||
|
#loadmodule "extensions/extb_server.so";
|
||||||
|
#loadmodule "extensions/extb_ssl.so";
|
||||||
|
#loadmodule "extensions/hurt.so";
|
||||||
|
loadmodule "extensions/ip_cloaking.so";
|
||||||
|
#loadmodule "extensions/m_findforwards.so";
|
||||||
|
loadmodule "extensions/m_identify.so";
|
||||||
|
loadmodule "extensions/m_mkpasswd.so";
|
||||||
|
loadmodule "extensions/m_webirc.so";
|
||||||
|
#loadmodule "extensions/m_cycle.so";
|
||||||
|
#loadmodule "extensions/m_oaccept.so";
|
||||||
|
#loadmodule "extensions/m_opme.so";
|
||||||
|
#loadmodule "extensions/m_ojoin.so";
|
||||||
|
#loadmodule "extensions/m_omode.so";
|
||||||
|
#loadmodule "extensions/m_olist.so";
|
||||||
|
#loadmodule "extensions/m_okick.so";
|
||||||
|
#loadmodule "extensions/m_force.so";
|
||||||
|
#loadmodule "extensions/m_roleplay.so";
|
||||||
|
#loadmodule "extensions/no_oper_invis.so";
|
||||||
|
loadmodule "extensions/sno_farconnect.so";
|
||||||
|
loadmodule "extensions/sno_globalkline.so";
|
||||||
|
loadmodule "extensions/sno_globaloper.so";
|
||||||
|
#loadmodule "extensions/sno_whois.so";
|
||||||
|
|
||||||
|
serverinfo {
|
||||||
|
name = "janus.shadownet.int";
|
||||||
|
sid = "7AN";
|
||||||
|
description = "Janus the deliverer";
|
||||||
|
network_name = "ShadowNET";
|
||||||
|
network_desc = "Help I need muffin";
|
||||||
|
helpchan = "#help";
|
||||||
|
helpurl = "http://www.mynet.net/help";
|
||||||
|
hub = yes;
|
||||||
|
|
||||||
|
/* On multi-homed hosts you may need the following. These define
|
||||||
|
* the addresses we connect from to other servers. */
|
||||||
|
/* for IPv4 */
|
||||||
|
#vhost = "192.169.0.1";
|
||||||
|
/* for IPv6 */
|
||||||
|
#vhost6 = "3ffe:80e8:546::2";
|
||||||
|
|
||||||
|
/* ssl_private_key: our ssl private key */
|
||||||
|
ssl_private_key = "etc/ssl.key";
|
||||||
|
|
||||||
|
/* ssl_cert: certificate for our ssl server */
|
||||||
|
ssl_cert = "etc/ssl.cert";
|
||||||
|
|
||||||
|
/* ssl_dh_params: DH parameters, generate with openssl dhparam -out dh.pem 1024 */
|
||||||
|
ssl_dh_params = "etc/dh.pem";
|
||||||
|
|
||||||
|
/* ssld_count: number of ssld processes you want to start, if you
|
||||||
|
* have a really busy server, using N-1 where N is the number of
|
||||||
|
* cpu/cpu cores you have might be useful. A number greater than one
|
||||||
|
* can also be useful in case of bugs in ssld and because ssld needs
|
||||||
|
* two file descriptors per SSL connection.
|
||||||
|
*/
|
||||||
|
ssld_count = 1;
|
||||||
|
|
||||||
|
/* default max clients: the default maximum number of clients
|
||||||
|
* allowed to connect. This can be changed once ircd has started by
|
||||||
|
* issuing:
|
||||||
|
* /quote set maxclients <limit>
|
||||||
|
*/
|
||||||
|
default_max_clients = 1024;
|
||||||
|
};
|
||||||
|
|
||||||
|
admin {
|
||||||
|
name = "Lazy admin (lazya)";
|
||||||
|
description = "AthemeNET client server";
|
||||||
|
email = "nobody@127.0.0.1";
|
||||||
|
};
|
||||||
|
|
||||||
|
log {
|
||||||
|
fname_userlog = "logs/userlog";
|
||||||
|
#fname_fuserlog = "logs/fuserlog";
|
||||||
|
fname_operlog = "logs/operlog";
|
||||||
|
#fname_foperlog = "logs/foperlog";
|
||||||
|
fname_serverlog = "logs/serverlog";
|
||||||
|
#fname_klinelog = "logs/klinelog";
|
||||||
|
fname_killlog = "logs/killlog";
|
||||||
|
fname_operspylog = "logs/operspylog";
|
||||||
|
#fname_ioerrorlog = "logs/ioerror";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* class {} blocks MUST be specified before anything that uses them. That
|
||||||
|
* means they must be defined before auth {} and before connect {}.
|
||||||
|
*/
|
||||||
|
class "users" {
|
||||||
|
ping_time = 2 minutes;
|
||||||
|
number_per_ident = 10;
|
||||||
|
number_per_ip = 10;
|
||||||
|
number_per_ip_global = 50;
|
||||||
|
cidr_ipv4_bitlen = 24;
|
||||||
|
cidr_ipv6_bitlen = 64;
|
||||||
|
number_per_cidr = 200;
|
||||||
|
max_number = 3000;
|
||||||
|
sendq = 400 kbytes;
|
||||||
|
};
|
||||||
|
|
||||||
|
class "opers" {
|
||||||
|
ping_time = 5 minutes;
|
||||||
|
number_per_ip = 10;
|
||||||
|
max_number = 1000;
|
||||||
|
sendq = 1 megabyte;
|
||||||
|
};
|
||||||
|
|
||||||
|
class "server" {
|
||||||
|
ping_time = 5 minutes;
|
||||||
|
connectfreq = 5 minutes;
|
||||||
|
max_number = 1;
|
||||||
|
sendq = 4 megabytes;
|
||||||
|
};
|
||||||
|
|
||||||
|
listen {
|
||||||
|
/* If you want to listen on a specific IP only, specify host.
|
||||||
|
* host definitions apply only to the following port line.
|
||||||
|
*/
|
||||||
|
#host = "192.169.0.1";
|
||||||
|
port = 5000, 6665 .. 6669;
|
||||||
|
sslport = 6697;
|
||||||
|
|
||||||
|
/* Listen on IPv6 (if you used host= above). */
|
||||||
|
#host = "3ffe:1234:a:b:c::d";
|
||||||
|
#port = 5000, 6665 .. 6669;
|
||||||
|
#sslport = 9999;
|
||||||
|
};
|
||||||
|
|
||||||
|
connect "rarity.shadownet.int" {
|
||||||
|
host = "172.17.42.1";
|
||||||
|
send_password = "dev";
|
||||||
|
accept_password = "dev";
|
||||||
|
port = 6067;
|
||||||
|
class = "server";
|
||||||
|
hub_mask = "*";
|
||||||
|
flags = autoconn;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* auth {}: allow users to connect to the ircd (OLD I:)
|
||||||
|
* auth {} blocks MUST be specified in order of precedence. The first one
|
||||||
|
* that matches a user will be used. So place spoofs first, then specials,
|
||||||
|
* then general access, then restricted.
|
||||||
|
*/
|
||||||
|
auth {
|
||||||
|
/* user: the user@host allowed to connect. Multiple IPv4/IPv6 user
|
||||||
|
* lines are permitted per auth block. This is matched against the
|
||||||
|
* hostname and IP address (using :: shortening for IPv6 and
|
||||||
|
* prepending a 0 if it starts with a colon) and can also use CIDR
|
||||||
|
* masks.
|
||||||
|
*/
|
||||||
|
user = "*@172.16.0.0/12";
|
||||||
|
user = "*test@123D:B567:*";
|
||||||
|
|
||||||
|
/* auth_user: The username (authenticated via SASL or PASS) allowed
|
||||||
|
* to connect. You are able to put multiple auth_user lines. If people
|
||||||
|
* are authenticating via SASL in this way, it is recommended to comment
|
||||||
|
* out the password option below. You will also *NEED* to specify a user
|
||||||
|
* line above auth_user, this can safely be "*@*", however.
|
||||||
|
*/
|
||||||
|
auth_user = "jilles";
|
||||||
|
auth_user = "jdhore";
|
||||||
|
|
||||||
|
/* password: an optional password that is required to use this block.
|
||||||
|
* By default this is not encrypted, specify the flag "encrypted" in
|
||||||
|
* flags = ...; below if it is.
|
||||||
|
*/
|
||||||
|
password = "letmein";
|
||||||
|
|
||||||
|
/* spoof: fake the users user@host to be be this. You may either
|
||||||
|
* specify a host or a user@host to spoof to. This is free-form,
|
||||||
|
* just do everyone a favour and dont abuse it. (OLD I: = flag)
|
||||||
|
*/
|
||||||
|
spoof = "I.still.hate.packets";
|
||||||
|
|
||||||
|
/* autojoin: Channel (or channels, comma-seperated) to join users
|
||||||
|
* in this auth block to on connect. Note that this won't join
|
||||||
|
* the user through any bans or otherwise restrictive chmodes.
|
||||||
|
*/
|
||||||
|
autojoin = "#shadowircd,#test";
|
||||||
|
|
||||||
|
/* autojoin_opers : Channel (or channels, comma-seperated) to join
|
||||||
|
* opers to on oper-up.
|
||||||
|
*/
|
||||||
|
autojoin_opers = "#opers,#help";
|
||||||
|
|
||||||
|
/* Possible flags in auth:
|
||||||
|
*
|
||||||
|
* encrypted | password is encrypted with mkpasswd
|
||||||
|
* spoof_notice | give a notice when spoofing hosts
|
||||||
|
* exceed_limit (old > flag) | allow user to exceed class user limits
|
||||||
|
* kline_exempt (old ^ flag) | exempt this user from k/g/xlines&dnsbls
|
||||||
|
* dnsbl_exempt | exempt this user from dnsbls
|
||||||
|
* spambot_exempt | exempt this user from spambot checks
|
||||||
|
* shide_exempt | exempt this user from serverhiding
|
||||||
|
* jupe_exempt | exempt this user from generating
|
||||||
|
* warnings joining juped channels
|
||||||
|
* resv_exempt | exempt this user from resvs
|
||||||
|
* flood_exempt | exempt this user from flood limits
|
||||||
|
* USE WITH CAUTION.
|
||||||
|
* no_tilde (old - flag) | don't prefix ~ to username if no ident
|
||||||
|
* need_ident (old + flag) | require ident for user in this class
|
||||||
|
* need_ssl | require SSL/TLS for user in this class
|
||||||
|
* need_sasl | require SASL id for user in this class
|
||||||
|
*/
|
||||||
|
flags = kline_exempt, exceed_limit;
|
||||||
|
|
||||||
|
/* class: the class the user is placed in */
|
||||||
|
class = "opers";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Example WEBIRC authblock */
|
||||||
|
auth {
|
||||||
|
/* user: webirc@IP.OF.YOUR.WEBIRC . the webirc@ part is required */
|
||||||
|
user = "webirc@192.168.1.1";
|
||||||
|
|
||||||
|
/* password: password the webirc client sends in the WEBIRC command.
|
||||||
|
* You can use a encrypted password here (see above auth block).
|
||||||
|
*/
|
||||||
|
password = "<password>";
|
||||||
|
|
||||||
|
/* spoof: This is required to keep it what it is currently if you
|
||||||
|
* want the webirc client to show the users' real host as their
|
||||||
|
* host on IRC.
|
||||||
|
*/
|
||||||
|
spoof = "webirc.";
|
||||||
|
class = "users";
|
||||||
|
};
|
||||||
|
|
||||||
|
auth {
|
||||||
|
user = "*@*";
|
||||||
|
class = "users";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* privset {} blocks MUST be specified before anything that uses them. That
|
||||||
|
* means they must be defined before operator {}.
|
||||||
|
*/
|
||||||
|
privset "local_op" {
|
||||||
|
privs = oper:local_kill, oper:operwall;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "server_bot" {
|
||||||
|
extends = "local_op";
|
||||||
|
privs = oper:kline, oper:remoteban, snomask:nick_changes;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "global_op" {
|
||||||
|
extends = "local_op";
|
||||||
|
privs = oper:global_kill, oper:routing, oper:kline, oper:unkline, oper:xline,
|
||||||
|
oper:resv, oper:mass_notice, oper:remoteban;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "admin" {
|
||||||
|
extends = "global_op";
|
||||||
|
privs = oper:admin, oper:die, oper:rehash, oper:spy, oper:override;
|
||||||
|
};
|
||||||
|
|
||||||
|
operator "god" {
|
||||||
|
/* name: the name of the oper must go above */
|
||||||
|
|
||||||
|
/* user: the user@host required for this operator. CIDR *is*
|
||||||
|
* supported now. auth{} spoofs work here, other spoofs do not.
|
||||||
|
* multiple user="" lines are supported.
|
||||||
|
*/
|
||||||
|
user = "*@*";
|
||||||
|
|
||||||
|
/* password: the password required to oper. Unless ~encrypted is
|
||||||
|
* contained in flags = ...; this will need to be encrypted using
|
||||||
|
* mkpasswd, MD5 is supported
|
||||||
|
*/
|
||||||
|
password = "test";
|
||||||
|
|
||||||
|
/* rsa key: the public key for this oper when using Challenge.
|
||||||
|
* A password should not be defined when this is used, see
|
||||||
|
* doc/challenge.txt for more information.
|
||||||
|
*/
|
||||||
|
#rsa_public_key_file = "/usr/local/ircd/etc/oper.pub";
|
||||||
|
|
||||||
|
/* umodes: the specific umodes this oper gets when they oper.
|
||||||
|
* If this is specified an oper will not be given oper_umodes
|
||||||
|
* These are described above oper_only_umodes in general {};
|
||||||
|
*/
|
||||||
|
#umodes = locops, servnotice, operwall, wallop;
|
||||||
|
|
||||||
|
/* fingerprint: if specified, the oper's client certificate
|
||||||
|
* fingerprint will be checked against the specified fingerprint
|
||||||
|
* below.
|
||||||
|
*/
|
||||||
|
#fingerprint = "c77106576abf7f9f90cca0f63874a60f2e40a64b";
|
||||||
|
|
||||||
|
/* snomask: specific server notice mask on oper up.
|
||||||
|
* If this is specified an oper will not be given oper_snomask.
|
||||||
|
*/
|
||||||
|
snomask = "+ZbFcfkrsuy";
|
||||||
|
|
||||||
|
/* vhost: defines the vhost that this oper will get on oper up.
|
||||||
|
* this must be a valid hostmask. If this is specified the oper
|
||||||
|
* will not be given default_operhost.
|
||||||
|
*/
|
||||||
|
vhost = "is.an.oper";
|
||||||
|
|
||||||
|
/* swhois: defines an additional line that will be displayed
|
||||||
|
* whenever someone does /whois on the oper in question.
|
||||||
|
*/
|
||||||
|
swhois = "is wearing pants.";
|
||||||
|
|
||||||
|
/* operstring: defines a custom operstring for this oper,
|
||||||
|
* which will be shown in whois instead of default_operstring
|
||||||
|
* or default_adminstring.
|
||||||
|
*/
|
||||||
|
operstring = "is a lazy IRC Operator";
|
||||||
|
|
||||||
|
/* flags: misc options for the operator. You may prefix an option
|
||||||
|
* with ~ to disable it, e.g. ~encrypted.
|
||||||
|
*
|
||||||
|
* Default flags are encrypted.
|
||||||
|
*
|
||||||
|
* Available options:
|
||||||
|
*
|
||||||
|
* encrypted: the password above is encrypted [DEFAULT]
|
||||||
|
* need_ssl: must be using SSL/TLS to oper up
|
||||||
|
*/
|
||||||
|
flags = ~encrypted;
|
||||||
|
|
||||||
|
/* privset: privileges set to grant */
|
||||||
|
privset = "admin";
|
||||||
|
};
|
||||||
|
|
||||||
|
service {
|
||||||
|
name = "services.int";
|
||||||
|
};
|
||||||
|
|
||||||
|
service {
|
||||||
|
name = "tetra.int";
|
||||||
|
};
|
||||||
|
|
||||||
|
cluster {
|
||||||
|
name = "*";
|
||||||
|
flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv;
|
||||||
|
};
|
||||||
|
|
||||||
|
shared {
|
||||||
|
oper = "*@*", "*";
|
||||||
|
flags = all;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* exempt {}: IPs that are exempt from Dlines and rejectcache. (OLD d:) */
|
||||||
|
exempt {
|
||||||
|
ip = "127.0.0.1";
|
||||||
|
};
|
||||||
|
|
||||||
|
channel {
|
||||||
|
disabledmodes = "G";
|
||||||
|
autochanmodes = "nt";
|
||||||
|
admin_on_channel_create = no;
|
||||||
|
exemptchanops = "NTc";
|
||||||
|
use_halfop = yes;
|
||||||
|
use_admin = yes;
|
||||||
|
use_knock = yes;
|
||||||
|
use_local_channels = yes;
|
||||||
|
knock_delay = 5 minutes;
|
||||||
|
knock_delay_channel = 1 minute;
|
||||||
|
max_chans_per_user = 15;
|
||||||
|
max_bans = 100;
|
||||||
|
max_bans_large = 500;
|
||||||
|
default_split_user_count = 0;
|
||||||
|
default_split_server_count = 0;
|
||||||
|
no_create_on_split = no;
|
||||||
|
no_join_on_split = no;
|
||||||
|
burst_topicwho = yes;
|
||||||
|
kick_on_split_riding = no;
|
||||||
|
only_ascii_channels = no;
|
||||||
|
cycle_host_change = yes;
|
||||||
|
host_in_topic = yes;
|
||||||
|
resv_forcepart = yes;
|
||||||
|
channel_target_change = yes;
|
||||||
|
};
|
||||||
|
|
||||||
|
serverhide {
|
||||||
|
flatten_links = yes;
|
||||||
|
links_delay = 5 minutes;
|
||||||
|
hidden = no;
|
||||||
|
disable_hidden = no;
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "NickServ" {
|
||||||
|
target = "NickServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "ChanServ" {
|
||||||
|
target = "ChanServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "OperServ" {
|
||||||
|
target = "OperServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "MemoServ" {
|
||||||
|
target = "MemoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "HostServ" {
|
||||||
|
target = "HostServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "BotServ" {
|
||||||
|
target = "BotServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "InfoServ" {
|
||||||
|
target = "InfoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "GroupServ" {
|
||||||
|
target = "GroupServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "NS" {
|
||||||
|
target = "NickServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "CS" {
|
||||||
|
target = "ChanServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "OS" {
|
||||||
|
target = "OperServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "MS" {
|
||||||
|
target = "MemoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "HS" {
|
||||||
|
target = "HostServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "BS" {
|
||||||
|
target = "BotServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "IS" {
|
||||||
|
target = "InfoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "GS" {
|
||||||
|
target = "GroupServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
general {
|
||||||
|
hide_error_messages = opers;
|
||||||
|
hide_spoof_ips = yes;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* default umodes: umodes to set upon connection
|
||||||
|
* If you have enabled the ip_cloaking extension, and you wish for
|
||||||
|
* incoming clients to be cloaked upon connection, +x must be in
|
||||||
|
* the umode string below.
|
||||||
|
*/
|
||||||
|
default_umodes = "+ix";
|
||||||
|
|
||||||
|
default_operstring = "is an IRC Operator";
|
||||||
|
default_adminstring = "is a Server Administrator";
|
||||||
|
default_operhost = "yolo-swag.com";
|
||||||
|
#static_quit = "I like turtles!";
|
||||||
|
servicestring = "is a Network Service";
|
||||||
|
disable_fake_channels = no;
|
||||||
|
hide_channel_below_users = 3;
|
||||||
|
tkline_expire_notices = no;
|
||||||
|
default_floodcount = 10;
|
||||||
|
failed_oper_notice = yes;
|
||||||
|
dots_in_ident=2;
|
||||||
|
min_nonwildcard = 4;
|
||||||
|
min_nonwildcard_simple = 3;
|
||||||
|
max_accept = 100;
|
||||||
|
max_monitor = 100;
|
||||||
|
anti_nick_flood = yes;
|
||||||
|
max_nick_time = 20 seconds;
|
||||||
|
max_nick_changes = 5;
|
||||||
|
anti_spam_exit_message_time = 5 minutes;
|
||||||
|
use_part_messages = yes;
|
||||||
|
ts_warn_delta = 30 seconds;
|
||||||
|
ts_max_delta = 5 minutes;
|
||||||
|
client_exit = yes;
|
||||||
|
collision_fnc = yes;
|
||||||
|
global_snotices = yes;
|
||||||
|
dline_with_reason = yes;
|
||||||
|
kline_delay = 0 seconds;
|
||||||
|
kline_with_reason = yes;
|
||||||
|
kline_reason = "K-Lined";
|
||||||
|
identify_service = "NickServ@services.int";
|
||||||
|
identify_command = "IDENTIFY";
|
||||||
|
non_redundant_klines = yes;
|
||||||
|
warn_no_nline = yes;
|
||||||
|
use_propagated_bans = yes;
|
||||||
|
stats_e_disabled = no;
|
||||||
|
stats_c_oper_only=no;
|
||||||
|
stats_h_oper_only=no;
|
||||||
|
stats_y_oper_only=no;
|
||||||
|
stats_o_oper_only=yes;
|
||||||
|
stats_P_oper_only=no;
|
||||||
|
stats_i_oper_only=masked;
|
||||||
|
stats_k_oper_only=masked;
|
||||||
|
map_oper_only = no;
|
||||||
|
operspy_admin_only = no;
|
||||||
|
operspy_dont_care_user_info = no;
|
||||||
|
secret_channels_in_whois = no;
|
||||||
|
caller_id_wait = 1 minute;
|
||||||
|
pace_wait_simple = 1 second;
|
||||||
|
pace_wait = 10 seconds;
|
||||||
|
short_motd = no;
|
||||||
|
ping_cookie = no;
|
||||||
|
connect_timeout = 30 seconds;
|
||||||
|
default_ident_timeout = 5;
|
||||||
|
disable_auth = yes;
|
||||||
|
no_oper_flood = yes;
|
||||||
|
true_no_oper_flood = no;
|
||||||
|
max_targets = 4;
|
||||||
|
client_flood = 20;
|
||||||
|
use_whois_actually = no;
|
||||||
|
oper_only_umodes = operwall, locops, servnotice;
|
||||||
|
oper_umodes = locops, servnotice, operwall, wallop;
|
||||||
|
oper_snomask = "+s";
|
||||||
|
burst_away = yes;
|
||||||
|
nick_delay = 0 seconds; # 15 minutes if you want to enable this
|
||||||
|
reject_ban_time = 1 minute;
|
||||||
|
reject_after_count = 3;
|
||||||
|
reject_duration = 5 minutes;
|
||||||
|
throttle_duration = 60;
|
||||||
|
throttle_count = 5000;
|
||||||
|
expire_override_time = 5 minutes;
|
||||||
|
};
|
||||||
|
|
||||||
|
modules {
|
||||||
|
path = "modules";
|
||||||
|
path = "modules/autoload";
|
||||||
|
};
|
|
@ -0,0 +1,17 @@
|
||||||
|
FROM flitter/init
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y build-essential libssl-dev git-core flex bison pkg-config && \
|
||||||
|
adduser --system --home /home/atheme atheme && mkdir /home/atheme/src && \
|
||||||
|
chmod 777 /home/atheme/src && cd /home/atheme/src && \
|
||||||
|
setuser atheme git clone https://github.com/atheme/atheme && cd atheme && \
|
||||||
|
setuser atheme git checkout atheme-7.2.5 && \
|
||||||
|
setuser atheme git submodule update --init && \
|
||||||
|
setuser atheme wget https://raw.githubusercontent.com/Elemental-IRCd/elemental-ircd/qaohv/extra/services/atheme/elemental-ircd.c -O modules/protocol/elemental-ircd.c &&\
|
||||||
|
setuser atheme ./configure && setuser atheme make && setuser atheme make install || true
|
||||||
|
|
||||||
|
ADD atheme.conf /home/atheme/atheme/etc/
|
||||||
|
RUN chmod 777 /home/atheme/atheme/etc/*
|
||||||
|
|
||||||
|
ADD run /etc/service/atheme/run
|
||||||
|
|
||||||
|
CMD /sbin/my_init
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
setuser atheme /home/atheme/atheme/bin/atheme-services -n
|
|
@ -0,0 +1,2 @@
|
||||||
|
network.json
|
||||||
|
migrate-7
|
|
@ -0,0 +1,121 @@
|
||||||
|
Creative Commons Legal Code
|
||||||
|
|
||||||
|
CC0 1.0 Universal
|
||||||
|
|
||||||
|
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||||
|
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||||
|
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||||
|
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||||
|
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||||
|
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||||
|
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||||
|
HEREUNDER.
|
||||||
|
|
||||||
|
Statement of Purpose
|
||||||
|
|
||||||
|
The laws of most jurisdictions throughout the world automatically confer
|
||||||
|
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||||
|
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||||
|
authorship and/or a database (each, a "Work").
|
||||||
|
|
||||||
|
Certain owners wish to permanently relinquish those rights to a Work for
|
||||||
|
the purpose of contributing to a commons of creative, cultural and
|
||||||
|
scientific works ("Commons") that the public can reliably and without fear
|
||||||
|
of later claims of infringement build upon, modify, incorporate in other
|
||||||
|
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||||
|
and for any purposes, including without limitation commercial purposes.
|
||||||
|
These owners may contribute to the Commons to promote the ideal of a free
|
||||||
|
culture and the further production of creative, cultural and scientific
|
||||||
|
works, or to gain reputation or greater distribution for their Work in
|
||||||
|
part through the use and efforts of others.
|
||||||
|
|
||||||
|
For these and/or other purposes and motivations, and without any
|
||||||
|
expectation of additional consideration or compensation, the person
|
||||||
|
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||||
|
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||||
|
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||||
|
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||||
|
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||||
|
|
||||||
|
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||||
|
protected by copyright and related or neighboring rights ("Copyright and
|
||||||
|
Related Rights"). Copyright and Related Rights include, but are not
|
||||||
|
limited to, the following:
|
||||||
|
|
||||||
|
i. the right to reproduce, adapt, distribute, perform, display,
|
||||||
|
communicate, and translate a Work;
|
||||||
|
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||||
|
iii. publicity and privacy rights pertaining to a person's image or
|
||||||
|
likeness depicted in a Work;
|
||||||
|
iv. rights protecting against unfair competition in regards to a Work,
|
||||||
|
subject to the limitations in paragraph 4(a), below;
|
||||||
|
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||||
|
in a Work;
|
||||||
|
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||||
|
European Parliament and of the Council of 11 March 1996 on the legal
|
||||||
|
protection of databases, and under any national implementation
|
||||||
|
thereof, including any amended or successor version of such
|
||||||
|
directive); and
|
||||||
|
vii. other similar, equivalent or corresponding rights throughout the
|
||||||
|
world based on applicable law or treaty, and any national
|
||||||
|
implementations thereof.
|
||||||
|
|
||||||
|
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||||
|
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||||
|
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||||
|
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||||
|
of action, whether now known or unknown (including existing as well as
|
||||||
|
future claims and causes of action), in the Work (i) in all territories
|
||||||
|
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||||
|
treaty (including future time extensions), (iii) in any current or future
|
||||||
|
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||||
|
including without limitation commercial, advertising or promotional
|
||||||
|
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||||
|
member of the public at large and to the detriment of Affirmer's heirs and
|
||||||
|
successors, fully intending that such Waiver shall not be subject to
|
||||||
|
revocation, rescission, cancellation, termination, or any other legal or
|
||||||
|
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||||
|
as contemplated by Affirmer's express Statement of Purpose.
|
||||||
|
|
||||||
|
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||||
|
be judged legally invalid or ineffective under applicable law, then the
|
||||||
|
Waiver shall be preserved to the maximum extent permitted taking into
|
||||||
|
account Affirmer's express Statement of Purpose. In addition, to the
|
||||||
|
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||||
|
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||||
|
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||||
|
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||||
|
maximum duration provided by applicable law or treaty (including future
|
||||||
|
time extensions), (iii) in any current or future medium and for any number
|
||||||
|
of copies, and (iv) for any purpose whatsoever, including without
|
||||||
|
limitation commercial, advertising or promotional purposes (the
|
||||||
|
"License"). The License shall be deemed effective as of the date CC0 was
|
||||||
|
applied by Affirmer to the Work. Should any part of the License for any
|
||||||
|
reason be judged legally invalid or ineffective under applicable law, such
|
||||||
|
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||||
|
of the License, and in such case Affirmer hereby affirms that he or she
|
||||||
|
will not (i) exercise any of his or her remaining Copyright and Related
|
||||||
|
Rights in the Work or (ii) assert any associated claims and causes of
|
||||||
|
action with respect to the Work, in either case contrary to Affirmer's
|
||||||
|
express Statement of Purpose.
|
||||||
|
|
||||||
|
4. Limitations and Disclaimers.
|
||||||
|
|
||||||
|
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||||
|
surrendered, licensed or otherwise affected by this document.
|
||||||
|
b. Affirmer offers the Work as-is and makes no representations or
|
||||||
|
warranties of any kind concerning the Work, express, implied,
|
||||||
|
statutory or otherwise, including without limitation warranties of
|
||||||
|
title, merchantability, fitness for a particular purpose, non
|
||||||
|
infringement, or the absence of latent or other defects, accuracy, or
|
||||||
|
the present or absence of errors, whether or not discoverable, all to
|
||||||
|
the greatest extent permissible under applicable law.
|
||||||
|
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||||
|
that may apply to the Work or any use thereof, including without
|
||||||
|
limitation any person's Copyright and Related Rights in the Work.
|
||||||
|
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||||
|
consents, permissions or other rights required for any use of the
|
||||||
|
Work.
|
||||||
|
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||||
|
party to this document and has no duty or obligation with respect to
|
||||||
|
this CC0 or use of the Work.
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
Command migrate-7 helps network staff migrate a network running Elemental-IRCd 6.6.2
|
||||||
|
to Elemental-IRCd 7.0 by getting a copy of the network channel state into a json
|
||||||
|
file on the disk. It will also be able to "replay" the network state into another
|
||||||
|
installation of Elemental-IRCd 7.0.
|
||||||
|
|
||||||
|
Because of the kind of data this tool needs to collect, it needs a server link to work.
|
||||||
|
*/
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
dataFileName = flag.String("datafile", "network.json", "file to dump to or load from")
|
||||||
|
|
||||||
|
serverName = flag.String("servername", "migrate-7.elemental-ircd.int", "server name to use in linking")
|
||||||
|
serverID = flag.String("sid", "8ZX", "server ID to use in linking")
|
||||||
|
connHost = flag.String("connhost", "127.0.0.1", "server to connect to")
|
||||||
|
connPort = flag.Int("connport", 6697, "port to connect on")
|
||||||
|
connPass = flag.String("connpass", "thebird", "password to use in linking")
|
||||||
|
connUsesTLS = flag.Bool("use-ssl", true, "connect with SSL to the uplink")
|
||||||
|
|
||||||
|
saveDataAction = flag.Bool("save", false, "save network state?")
|
||||||
|
replayDataAction = flag.Bool("replay", false, "replay network state?")
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
if *saveDataAction && *replayDataAction {
|
||||||
|
fmt.Println("Cannot choose both saving and replaying at the same time.\n")
|
||||||
|
|
||||||
|
flag.Usage()
|
||||||
|
os.Exit(2)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue