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
|
||||
include/serno.h
|
||||
libratbox/src/version.c.last
|
||||
*.pyc
|
||||
.git
|
||||
|
|
|
@ -5,8 +5,5 @@ compiler:
|
|||
before-install:
|
||||
- sudo apt-get update
|
||||
install:
|
||||
- sudo apt-get install build-essential libssl-dev flex bison
|
||||
script: "./configure && make"
|
||||
|
||||
notifications:
|
||||
irc: "irc.yolo-swag.com#elemental-ircd"
|
||||
- sudo apt-get install build-essential libssl-dev flex bison astyle
|
||||
script: "(cd ./testsuite/astyle && ./check_style.sh) && ./configure && make"
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -1,20 +1,43 @@
|
|||
# Contribution guidelines
|
||||
|
||||
Please open contributions as either issue reports or pull requests. We will ask
|
||||
that anything that requires testing outside our normally supported platforms be
|
||||
Please open contributions as either issue reports or pull requests. We will ask
|
||||
that anything that requires testing outside our normally supported platforms be
|
||||
marked as such.
|
||||
|
||||
As ircd is such an ancient project with varying code styles, please try to
|
||||
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.
|
||||
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:
|
||||
|
||||
```console
|
||||
$ 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.
|
||||
See LICENSE for licensing details (GPL v2).
|
||||
|
||||
-- elemental-ircd 6.6.2
|
||||
|
||||
Fix ban logic
|
||||
|
||||
-- elemental-ircd 6.6.1
|
||||
|
||||
All code is now in the linux kernel coding style. Patches that do not
|
||||
|
|
|
@ -1,5 +1,13 @@
|
|||
# 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
|
||||
IRC daemon. It is a fork of the now-defunct ShadowIRCD and seeks to continue in
|
||||
the direction ShadowIRCD was headed.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# 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
|
||||
#
|
||||
|
@ -579,8 +579,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='elemental-ircd'
|
||||
PACKAGE_TARNAME='elemental-ircd'
|
||||
PACKAGE_VERSION='6.6.1'
|
||||
PACKAGE_STRING='elemental-ircd 6.6.1'
|
||||
PACKAGE_VERSION='7.0-qaohv'
|
||||
PACKAGE_STRING='elemental-ircd 7.0-qaohv'
|
||||
PACKAGE_BUGREPORT=''
|
||||
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.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
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]...
|
||||
|
||||
|
@ -1364,7 +1364,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
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
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1488,7 +1488,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
elemental-ircd configure 6.6.1
|
||||
elemental-ircd configure 7.0-qaohv
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
|
@ -2092,7 +2092,7 @@ cat >config.log <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
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
|
||||
|
||||
$ $0 $@
|
||||
|
@ -10100,7 +10100,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
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
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -10166,7 +10166,7 @@ _ACEOF
|
|||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
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,
|
||||
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
|
||||
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)
|
||||
|
||||
|
|
|
@ -57,13 +57,6 @@ serverinfo {
|
|||
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";
|
||||
|
||||
|
|
|
@ -159,16 +159,6 @@ serverinfo {
|
|||
*/
|
||||
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 = "etc/ssl.key";
|
||||
|
||||
|
|
|
@ -155,16 +155,6 @@ serverinfo {
|
|||
*/
|
||||
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 = "etc/ssl.key";
|
||||
|
||||
|
|
|
@ -67,7 +67,6 @@ SRCS = \
|
|||
m_mkpasswd.c \
|
||||
m_oaccept.c \
|
||||
m_ojoin.c \
|
||||
m_olist.c \
|
||||
m_okick.c \
|
||||
m_omode.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",
|
||||
source_p->name,
|
||||
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);
|
||||
} else if(*parv[1] == '!' && ConfigChannel.use_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,
|
||||
parc - 2, parv + 2);
|
||||
#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 */
|
||||
if (!wasonchannel) {
|
||||
sendto_one_numeric(source_p, ERR_USERNOTINCHANNEL,
|
||||
form_str(ERR_USERNOTINCHANNEL), parv[3], chptr->chname);
|
||||
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);
|
||||
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],
|
||||
source_p->id);
|
||||
msptr->flags |= CHFL_OWNER;
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
IRCDVar myIrcd[] = {
|
||||
{
|
||||
"Elemental-IRCd 6.5", /* ircd name */
|
||||
"Elemental-IRCd 7.0", /* ircd name */
|
||||
"+oiS", /* nickserv mode */
|
||||
"+oiS", /* chanserv mode */
|
||||
"+oiS", /* memoserv mode */
|
||||
|
@ -44,8 +44,8 @@ IRCDVar myIrcd[] = {
|
|||
1, /* SVSNICK */
|
||||
1, /* Vhost */
|
||||
1, /* Has Owner */
|
||||
"+y", /* Mode to set for an owner */
|
||||
"-y", /* Mode to unset for an owner */
|
||||
"+q", /* Mode to set for an owner */
|
||||
"-q", /* Mode to unset for an owner */
|
||||
"+a", /* Mode to set for chan admin */
|
||||
"-a", /* Mode to unset for chan admin */
|
||||
NULL, /* Mode On Reg */
|
||||
|
@ -443,7 +443,7 @@ CUMode myCumodes[128] = {
|
|||
{0}, /* n */
|
||||
{CUS_OP, CUF_PROTECT_BOTSERV, check_valid_op},
|
||||
{0}, /* p */
|
||||
{0}, /* q */
|
||||
{CUS_OP, CUF_PROTECT_BOTSERV, check_valid_op}, /* q */
|
||||
{0}, /* r */
|
||||
{0}, /* s */
|
||||
{0}, /* t */
|
||||
|
@ -451,7 +451,7 @@ CUMode myCumodes[128] = {
|
|||
{CUS_VOICE, 0, NULL},
|
||||
{0}, /* w */
|
||||
{0}, /* x */
|
||||
{CUS_OP, CUF_PROTECT_BOTSERV, check_valid_op}, /* y */
|
||||
{0}, /* y */
|
||||
{0}, /* z */
|
||||
{0}, {0}, {0}, {0}, {0}
|
||||
};
|
||||
|
|
|
@ -301,8 +301,8 @@ class ProtoElemental : public Module
|
|||
{
|
||||
|
||||
ModeManager::AddChannelMode(new ChannelModeStatus("HALFOP", 'h', '%', 1));
|
||||
ModeManager::AddChannelMode(new ChannelModeStatus("PROTECT", 'a', '!', 3));
|
||||
ModeManager::AddChannelMode(new ChannelModeStatus("OWNER", 'y', '~', 4));
|
||||
ModeManager::AddChannelMode(new ChannelModeStatus("PROTECT", 'a', '&', 3));
|
||||
ModeManager::AddChannelMode(new ChannelModeStatus("OWNER", 'q', '~', 4));
|
||||
|
||||
/* Add user modes */
|
||||
ModeManager::AddUserMode(new UserMode("NOFORWARD", 'Q'));
|
||||
|
@ -311,7 +311,7 @@ class ProtoElemental : public Module
|
|||
ModeManager::AddUserMode(new UserModeNoone("SSL", 'Z'));
|
||||
|
||||
/* b/e/I */
|
||||
ModeManager::AddChannelMode(new ChannelModeList("QUIET", 'q'));
|
||||
ModeManager::AddChannelMode(new ChannelModeList("QUIET", 'y'));
|
||||
|
||||
/* Add channel modes */
|
||||
ModeManager::AddChannelMode(new ChannelMode("BLOCKCOLOR", 'c'));
|
||||
|
|
|
@ -14,12 +14,12 @@
|
|||
#include "pmodule.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* */
|
||||
|
||||
ircd_t elemental_ircd = {
|
||||
"elemental-ircd", /* IRCd name */
|
||||
"Elemental-IRCd 7.0", /* IRCd name */
|
||||
"$$", /* TLD Prefix, used by Global. */
|
||||
true, /* Whether or not we use IRCNet/TS6 UID */
|
||||
false, /* Whether or not we use RCOMMAND */
|
||||
|
@ -32,13 +32,13 @@ ircd_t elemental_ircd = {
|
|||
CSTATUS_OWNER, /* Integer flag for owner channel flag. */
|
||||
CSTATUS_PROTECT, /* Integer flag for protect channel flag. */
|
||||
CSTATUS_HALFOP, /* Integer flag for halfops. */
|
||||
"+y", /* Mode we set for owner. */
|
||||
"+q", /* Mode we set for owner. */
|
||||
"+a", /* Mode we set for protect. */
|
||||
"+h", /* Mode we set for halfops. */
|
||||
PROTOCOL_SHADOWIRCD, /* Protocol type */
|
||||
CMODE_PERM, /* Permanent cmodes */
|
||||
CMODE_IMMUNE, /* Oper-immune cmode */
|
||||
"beIq", /* Ban-like cmodes */
|
||||
"beIy", /* Ban-like cmodes */
|
||||
'e', /* Except mchar */
|
||||
'I', /* Invex mchar */
|
||||
IRCD_CIDR_BANS | IRCD_HOLDNICK /* Flags */
|
||||
|
@ -75,7 +75,7 @@ struct cmode_ elemental_mode_list[] = {
|
|||
};
|
||||
|
||||
struct cmode_ elemental_status_mode_list[] = {
|
||||
{ 'y', CSTATUS_OWNER },
|
||||
{ 'q', CSTATUS_OWNER },
|
||||
{ 'a', CSTATUS_PROTECT },
|
||||
{ 'o', CSTATUS_OP },
|
||||
{ 'h', CSTATUS_HALFOP },
|
||||
|
@ -85,7 +85,7 @@ struct cmode_ elemental_status_mode_list[] = {
|
|||
|
||||
struct cmode_ elemental_prefix_mode_list[] = {
|
||||
{ '~', CSTATUS_OWNER },
|
||||
{ '!', CSTATUS_PROTECT },
|
||||
{ '&', CSTATUS_PROTECT },
|
||||
{ '@', CSTATUS_OP },
|
||||
{ '%', CSTATUS_HALFOP },
|
||||
{ '+', CSTATUS_VOICE },
|
||||
|
@ -100,12 +100,38 @@ struct cmode_ elemental_user_mode_list[] = {
|
|||
{ '\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)
|
||||
{
|
||||
MODULE_TRY_REQUEST_DEPENDENCY(m, "protocol/charybdis");
|
||||
|
||||
server_login = &elemental_server_login;
|
||||
mode_list = elemental_mode_list;
|
||||
user_mode_list = elemental_user_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_BAN 0x200000 /* supports propagated bans */
|
||||
#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 | \
|
||||
CAP_IE | CAP_KLN | CAP_SERVICE |\
|
||||
CAP_CLUSTER | CAP_ENCAP | \
|
||||
CAP_ZIP | CAP_KNOCK | CAP_UNKLN | \
|
||||
CAP_RSFNC | CAP_SAVE | CAP_EUID | CAP_EOPMOD | \
|
||||
CAP_BAN | CAP_MLOCK)
|
||||
CAP_BAN | CAP_MLOCK | CAP_QAOHV)
|
||||
|
||||
#ifdef HAVE_LIBZ
|
||||
#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 == '~') {
|
||||
fl |= CHFL_OWNER;
|
||||
s++;
|
||||
} else if(*s == '!') {
|
||||
} else if(*s == '&') {
|
||||
fl |= CHFL_ADMIN;
|
||||
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_uid++;
|
||||
} else if(fl & CHFL_ADMIN) {
|
||||
*ptr_uid++ = '!';
|
||||
*ptr_uid++ = '&';
|
||||
len_nick++;
|
||||
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 */
|
||||
|
||||
if(fl & CHFL_OWNER) {
|
||||
*mbuf++ = 'y';
|
||||
*mbuf++ = 'q';
|
||||
para[pargs++] = target_p->name;
|
||||
|
||||
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
|
||||
*/
|
||||
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;
|
||||
}
|
||||
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
|
||||
*/
|
||||
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;
|
||||
}
|
||||
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
|
||||
*/
|
||||
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;
|
||||
}
|
||||
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
|
||||
*/
|
||||
if(pargs >= MAXMODEPARAMS) {
|
||||
|
@ -1025,7 +1025,7 @@ remove_our_modes(struct Channel *chptr, struct Client *source_p)
|
|||
if(is_owner(msptr)) {
|
||||
msptr->flags &= ~CHFL_ADMIN;
|
||||
lpara[count++] = msptr->client_p->name;
|
||||
*mbuf++ = 'y';
|
||||
*mbuf++ = 'q';
|
||||
|
||||
/* Make sure it fits if +h, +o, or +v are involved */
|
||||
if(is_admin(msptr)) {
|
||||
|
|
|
@ -485,6 +485,10 @@ msg_channel(int p_or_n, const char *command,
|
|||
rb_strlcpy(text2, text, BUFSIZE);
|
||||
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
|
||||
if (p_or_n != NOTICE && *text == '\001' &&
|
||||
!strncasecmp(text + 1, "ACTION ", 7)) {
|
||||
|
@ -503,6 +507,7 @@ msg_channel(int p_or_n, const char *command,
|
|||
return;
|
||||
}
|
||||
}
|
||||
skip_NOCAPS_check:
|
||||
|
||||
if(chptr->mode.mode & MODE_NOCOLOR && (!ConfigChannel.exempt_cmode_c || !is_any_op(msptr))) {
|
||||
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;
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
case 'y':
|
||||
banlist = &chptr->quietlist;
|
||||
mode_type = CHFL_QUIET;
|
||||
mems = ALL_MEMBERS;
|
||||
|
|
|
@ -652,7 +652,7 @@ static struct InfoStruct info_table[] = {
|
|||
"use_owner",
|
||||
OUTPUT_BOOLEAN_YN,
|
||||
&ConfigChannel.use_owner,
|
||||
"Enable chanmode +y (owner)",
|
||||
"Enable chanmode +q (owner)",
|
||||
},
|
||||
{
|
||||
"use_except",
|
||||
|
|
|
@ -188,8 +188,8 @@ find_channel_status(struct membership *msptr, int combine)
|
|||
}
|
||||
if(is_admin(msptr)) {
|
||||
if(!combine)
|
||||
return "!";
|
||||
*p++ = '!';
|
||||
return "&";
|
||||
*p++ = '&';
|
||||
}
|
||||
|
||||
if(is_chanop(msptr)) {
|
||||
|
|
14
src/chmode.c
14
src/chmode.c
|
@ -141,13 +141,13 @@ construct_cflag_param_string(void)
|
|||
|
||||
*cflagsparaminfo = '\0';
|
||||
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_except ? "e" : "",
|
||||
ConfigChannel.use_forward ? "f" : "",
|
||||
ConfigChannel.use_halfop ? "h" : "",
|
||||
strchr(ConfigChannel.disabledmodes, 'j') ? "" : "j",
|
||||
strchr(ConfigChannel.disabledmodes, 'q') ? "" : "q",
|
||||
strchr(ConfigChannel.disabledmodes, 'y') ? "" : "y",
|
||||
ConfigChannel.use_invex ? "I" : "");
|
||||
}
|
||||
|
||||
|
@ -219,7 +219,7 @@ get_channel_access(struct Client *source_p, struct membership *msptr)
|
|||
/* check_bans_number()
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
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 ?
|
||||
ConfigChannel.max_bans_large : ConfigChannel.max_bans)) {
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* add_id()
|
||||
|
@ -1866,7 +1866,7 @@ struct ChannelMode chmode_table[256] = {
|
|||
{chm_simple, MODE_NOPRIVMSGS }, /* n */
|
||||
{chm_op, 0 }, /* o */
|
||||
{chm_simple, MODE_PRIVATE }, /* p */
|
||||
{chm_ban, CHFL_QUIET }, /* q */
|
||||
{chm_owner, 0 }, /* q */
|
||||
{chm_simple, MODE_REGONLY }, /* r */
|
||||
{chm_simple, MODE_SECRET }, /* s */
|
||||
{chm_simple, MODE_TOPICLIMIT }, /* t */
|
||||
|
@ -1874,7 +1874,7 @@ struct ChannelMode chmode_table[256] = {
|
|||
{chm_voice, 0 }, /* v */
|
||||
{chm_nosuch, 0 }, /* w */
|
||||
{chm_nosuch, 0 }, /* x */
|
||||
{chm_owner, 0 }, /* y */
|
||||
{chm_ban, CHFL_QUIET }, /* y */
|
||||
{chm_simple, MODE_OPMODERATE }, /* z */
|
||||
|
||||
{chm_nosuch, 0 }, /* 0x7b */
|
||||
|
|
|
@ -749,8 +749,8 @@ static const char * replies[] = {
|
|||
/* 725 RPL_TESTLINE */ ":%s 725 %s %c %ld %s :%s",
|
||||
/* 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",
|
||||
/* 728 RPL_QUIETLIST */ ":%s 728 %s %s q %s %s %lu",
|
||||
/* 729 RPL_ENDOFQUIETLIST */ ":%s 729 %s %s q :End of Channel Quiet List",
|
||||
/* 728 RPL_QUIETLIST */ ":%s 728 %s %s y %s %s %lu",
|
||||
/* 729 RPL_ENDOFQUIETLIST */ ":%s 729 %s %s y :End of Channel Quiet List",
|
||||
/* 730 RPL_MONONLINE */ ":%s 730 %s :%s",
|
||||
/* 731 RPL_MONOFFLINE */ ":%s 731 %s :%s",
|
||||
/* 732 RPL_MONLIST */ ":%s 732 %s :%s",
|
||||
|
|
|
@ -947,8 +947,8 @@ validate_conf(void)
|
|||
cflag_orphan('Q');
|
||||
continue;
|
||||
}
|
||||
if(*dm == 'q') {
|
||||
cflag_orphan('q');
|
||||
if(*dm == 'y') {
|
||||
cflag_orphan('y');
|
||||
continue;
|
||||
}
|
||||
if(*dm == 'I') {
|
||||
|
@ -1002,6 +1002,9 @@ validate_conf(void)
|
|||
cflag_orphan('M');
|
||||
continue;
|
||||
}
|
||||
if(*dm == 'u') {
|
||||
cflag_orphan('u');
|
||||
}
|
||||
}
|
||||
}
|
||||
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
|
||||
*/
|
||||
struct Capability captab[] = {
|
||||
/* name cap */
|
||||
{ "QS", CAP_QS },
|
||||
{ "EX", CAP_EX },
|
||||
{ "CHW", CAP_CHW},
|
||||
{ "IE", CAP_IE},
|
||||
{ "KLN", CAP_KLN},
|
||||
{ "KNOCK", CAP_KNOCK},
|
||||
{ "ZIP", CAP_ZIP},
|
||||
{ "TB", CAP_TB},
|
||||
{ "UNKLN", CAP_UNKLN},
|
||||
{ "CLUSTER", CAP_CLUSTER},
|
||||
{ "ENCAP", CAP_ENCAP },
|
||||
{ "SERVICES", CAP_SERVICE },
|
||||
{ "RSFNC", CAP_RSFNC },
|
||||
{ "SAVE", CAP_SAVE },
|
||||
{ "EUID", CAP_EUID },
|
||||
{ "EOPMOD", CAP_EOPMOD },
|
||||
{ "BAN", CAP_BAN },
|
||||
{ "MLOCK", CAP_MLOCK },
|
||||
{0, 0}
|
||||
/*name cap required?*/
|
||||
{ "QS", CAP_QS, 1 },
|
||||
{ "EX", CAP_EX, 1 },
|
||||
{ "CHW", CAP_CHW, 0 },
|
||||
{ "IE", CAP_IE, 0 },
|
||||
{ "KLN", CAP_KLN, 0 },
|
||||
{ "KNOCK", CAP_KNOCK, 0 },
|
||||
{ "ZIP", CAP_ZIP, 0 },
|
||||
{ "TB", CAP_TB, 1 },
|
||||
{ "UNKLN", CAP_UNKLN, 0 },
|
||||
{ "CLUSTER",CAP_CLUSTER, 0 },
|
||||
{ "ENCAP", CAP_ENCAP, 1 },
|
||||
{ "SERVICES",CAP_SERVICE, 1 },
|
||||
{ "RSFNC", CAP_RSFNC, 0 },
|
||||
{ "SAVE", CAP_SAVE, 0 },
|
||||
{ "EUID", CAP_EUID, 1 },
|
||||
{ "EOPMOD", CAP_EOPMOD, 0 },
|
||||
{ "BAN", CAP_BAN, 0 },
|
||||
{ "MLOCK", CAP_MLOCK, 1 },
|
||||
{ "QAOHV", CAP_QAOHV, 0 },
|
||||
{ 0, 0, 0 }
|
||||
};
|
||||
|
||||
static CNCB serv_connect_callback;
|
||||
|
@ -658,7 +659,7 @@ burst_TS6(struct Client *client_p)
|
|||
burst_modes_TS6(client_p, chptr, &chptr->invexlist, 'I');
|
||||
|
||||
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)
|
||||
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;
|
||||
|
||||
if(is_owner(mscptr)) {
|
||||
*mptr++ = 'y';
|
||||
*mptr++ = 'q';
|
||||
strcat(modeval, nick);
|
||||
strcat(modeval, " ");
|
||||
}
|
||||
|
|
|
@ -222,7 +222,7 @@ isupport_chanmodes(const void *ptr)
|
|||
rb_snprintf(result, sizeof result, "%s%sb%s,k,%sl%s,%s",
|
||||
ConfigChannel.use_except ? "e" : "",
|
||||
ConfigChannel.use_invex ? "I" : "",
|
||||
strchr(ConfigChannel.disabledmodes, 'q') ? "" : "q",
|
||||
strchr(ConfigChannel.disabledmodes, 'y') ? "" : "y",
|
||||
ConfigChannel.use_forward ? "f" : "",
|
||||
strchr(ConfigChannel.disabledmodes, 'j') ? "" : "j",
|
||||
cflagsbuf);
|
||||
|
@ -252,11 +252,11 @@ isupport_prefix(const void *ptr)
|
|||
static char result[13];
|
||||
|
||||
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_halfop ? "h" : "",
|
||||
ConfigChannel.use_owner ? "~" : "",
|
||||
ConfigChannel.use_admin ? "!" : "",
|
||||
ConfigChannel.use_admin ? "&" : "",
|
||||
ConfigChannel.use_halfop ? "%" : "");
|
||||
return result;
|
||||
}
|
||||
|
@ -305,7 +305,7 @@ isupport_ownermode(const void *ptr)
|
|||
if(!ConfigChannel.use_owner)
|
||||
return NULL;
|
||||
|
||||
rb_snprintf(result, sizeof result, "y");
|
||||
rb_snprintf(result, sizeof result, "q");
|
||||
|
||||
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