Commit initial: GNUWorld servicii IRC cu README.md complet in limba romana - Analiza arhitecturala completa a proiectului - Documentatie ierarhie clase, bucla de evenimente, protocol P10 - Identificare probleme memorie si recomandari modernizare

This commit is contained in:
Underchat 2026-03-02 00:51:45 +02:00
commit fcb24f6de9
870 changed files with 311128 additions and 0 deletions

10
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,10 @@
# Default ignored files
/shelf/
/workspace.xml
# Ignored default folder with query files
/queries/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Ask2AgentMigrationStateService">
<option name="migrationStatus" value="COMPLETED" />
</component>
</project>

View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

4
.idea/misc.xml Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.14" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/underchat-gnuworld.iml" filepath="$PROJECT_DIR$/.idea/underchat-gnuworld.iml" />
</modules>
</component>
</project>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="Python 3.14" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

2
AUTHORS Normal file
View File

@ -0,0 +1,2 @@
See Credits file.

340
COPYING Normal file
View File

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

1500
ChangeLog Normal file

File diff suppressed because it is too large Load Diff

70
Credits Normal file
View File

@ -0,0 +1,70 @@
This file is here to recognize the many people who are
responsible for bringing GNUWorld to the free society.
Orlando Bassatto (nextie) - Orlando is the project's original
founder. His insight and talent have brought this project to the
world. Orlando is responsible for the original design and
implementation from which gnuworld is born.
Andrea Cocito (Nemesi) - Andrea is a very gifted and dedicated
programmer. He has helped with some of the most difficult
areas of ircu and gnuworld. His contributions are immeasurable.
Perry (Isomer) - Lots of great ideas and a calming attitude in
times of panic. Perry is the project manager, putting The Man
into his place.
Greg (Gte) - Lots of real world testing and development of
gnuworld and its modules. Greg is the father of the cservice
module, which I (ripper_) continually break.
Tomer (MrBean) - Creator of the ccontrol (oper services) module.
Tomer has generated a huge amount of code, and withstood the
weight of my (ripper_) nitpicking. Good job on your first major
project :)
Jeekay (jeekay@netgamers.org) - Creator of the dronescan module.
He has provided a wealth of new information, as well as asking
lots of tough questions.
Stephane (mbuna) - Silently challenging me to do better, plus
normal type support and feedback :)
Julien (nighty) - Development of the web interface almost
entirely on his own. This system looks good, and works even
better. Thanks for all of your tireless hours without tangible
rewards!
ZAMBOO (zamboo@under-web.net) Lots of bug reporting and diligent
efforts to try out all the possibilities. Thanks :)
OUTSider - Always testing and retesting, looking for bugs...you found
some! Also thanks for contributing some code.
Doug (seiki) - Thanks a lot for letting me thrash your machine
during development and testing of gnuworld. You really made a
lot of sacrifices and had to put up with my complaining :)
Ben (Obike) - Enormous help with the php security issues, and
the web interface in general. Your expertise was invaluable.
Keir - Helping with new ideas and finding bugs, testing in the real
world. Keir has put forth some excellent ideas on enhancements for
gnuworld.
Marc Dondlinger (aka HiGhPwR) <highpwr@quake.lu>
Huge amounts of bug reporting, a loyal user without whom this
project would never have been ready :)
Kevin Mitchell (Kev) - Helping to fill in the gaps, there are lots!
David Henriksen <david@itwebnet.dk> (Plexus@IRC)
Real world testing and implementation, bug finding. Youve helped
this project with a lot of issues.
Raystonn <raystonn@hotmail.com> - Thanks for helping with some of
the finer points :)
Maniac <maniac@krushnet.org> - Thanks for lots of bug fixing and
testing...you really like to pick apart our code!

234
INSTALL Normal file
View File

@ -0,0 +1,234 @@
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006 Free Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system.
Running `configure' might take a while. While running, it prints
some messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script).
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf bug. Until the bug is fixed you can use this workaround:
CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

96
INSTALL-NEW-Website.txt Normal file
View File

@ -0,0 +1,96 @@
!!!WARNING!!! I DON'T provide any support for the webpage installation, bugfix, modification, asking me for any kind of question/support will result in automatic ignore !!!
!!!WARNING!!! I DON'T provide any support for the webpage installation, bugfix, modification, asking me for any kind of question/support will result in automatic ignore !!!
!!!WARNING!!! I DON'T provide any support for the webpage installation, bugfix, modification, asking me for any kind of question/support will result in automatic ignore !!!
This document is outdated, use it at your own risk.
In order to work the webpage, so far we need to use at most ubuntu 12, installs php version under 5.3.28,
so the maximum version of php still containing the required register_globals variable in php.ini is 5.3.27
Anyone who knows a fix, or bypass the necessity of register_globals let me know.
In root we install the dependencies:
----Apache & php quick install---------------------------------
sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install libapache2-mod-php5
linux:/root# sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
linux:/root# sudo apt-get install php5-gd
linux:/root# sudo apt-get install php5-dev php5-pgsql
linux:/root# sudo apt-get install libpqxx-3.1 libpqxx3-dev
You can always find the available libpqxx version with searching:
linux:/root# sudo apt-cache search libpqxx
Restarting apache:
sudo /etc/init.d/apache2 restart
We install postgresql:
linux:/root# sudo apt-get install libreadline-dev
linux:/root# sudo apt-get install bison
linux:/root# wget http://ftp.postgresql.org/pub/source/v9.3.4/postgresql-9.3.4.tar.gz
linux:/root# tar zxvf postgresql-9.3.4.tar.gz
linux:/root# cd postgresql-9.3.4.tar.gz
linux:/root/postgresql-9.3.4# ./configure
linux:/root/postgresql-9.3.4# make; make install
Now we create the databse:
linux:/root# [sudo] mkdir /usr/local/pgsql/data
linux:/root# chown gnuworld /usr/local/pgsql/data
linux:/root# chgrp gnuworld /usr/local/pgsql/data
linux:/root# su - gnuworld
linux:/home/gnuworld$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data &
Start the database with:
linux:/home/gnuworld$ /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
It worth to put that line in a crontab line:
crontab -e
@reboot /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
So on a reboot you'll get postgres running.
Warning: Don't do these if you already started and have a gnuworld installation.
-- Start --
linux:/home/gnuworld$ git clone https://github.com/Seven-7/gnuworld-enhanced.git
linux:/home/gnuworld$ cd gnuworld-enhanced/doc
linux:/gnuworld/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/createdb --template=template0 -E=SQL_ASCII cservice
linux:/gnuworld/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < cservice.sql
linux:/gnuworld/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < cservice.config.sql
linux:/gnuworld/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < languages.sql
linux:/gnuworld/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < language_table.sql
linux:/gnuworld/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < greeting.sql
linux:/gnuworld/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < cservice.help.sql
linux:/gnuworld/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < cservice.web.sql
linux:/gnuworld/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < cservice.addme.sql
-- End -- of not repeatable part --
local_db must be created for website! [Error code (L)]
linux:/gnuworld/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/createdb --template=template0 -E=SQL_ASCII local_db
linux:/gnuworld/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql local_db < local_db.sql
linux:/gnuworld/gnuworld-enhanced/doc$ cd ~
linux:/home/gnuworld$ git clone https://github.com/Seven-7/website-gnuworld.git
linux:/home/gnuworld$ su -
linux:/root# cd /var/www/html
linux:/var/www/html# chmod 711 ~gnuworld
linux:/var/www/html# chmod 711 ~gnuworld/website-gnuworld
linux:/var/www/html# chmod 755 ~gnuworld/website-gnuworld/php_includes
linux:/var/www/html# chmod 644 ~gnuworld/website-gnuworld/php_includes/config.inc
linux:/var/www/html# chmod 755 ~gnuworld/website-gnuworld/docs/gnuworld/
linux:/var/www/html# ln -s /home/gnuworld/website-gnuworld/docs/gnuworld live
Now you can try see the webpage in the following addresses:
http://localhost/live
http://127.0.0.1/live
http://yourIP/live
Reanaming/replacing 'Undernet' in X's responses with your network name:
Enter in postgresql command line:
linux:/home/gnuworld$ /usr/local/pgsql/bin/psql cservice
cservice=# UPDATE translations SET text=REPLACE(text, 'Undernet', 'YourNetwork');
Quit from psql command line with \q
cservice=# \q
linux:/home/gnuworld$

106
INSTALL-NEW-gnuworld.txt Normal file
View File

@ -0,0 +1,106 @@
This is a typical ubuntu installation.
root@vps189189:~# sudo apt-get install gcc g++ cpp
root@vps189189:~# sudo apt-get install flex
root@vps189189:~# sudo apt-get install byacc
root@vps189189:~# sudo apt-get install bison
root@vps189189:~# sudo apt-get install make automake
root@vps189189:~# sudo apt-get install openssl libssl-dev
root@vps189189:~# sudo apt-get install git
root@vps189189:~# sudo apt-get install libpqxx-4.0
root@vps189189:~# sudo apt-get install libreadline6-dev
root@vps189189:~# sudo apt-get install zlib1g-dev
root@vps189189:~# sudo apt-get install vim
Add a non-root user for postgresql, eg. 'gnuworld'
root@vps189189:~# adduser gnuworld
Installing PostgreSQL database:
root@vps189189:~# wget http://ftp.postgresql.org/pub/source/v9.3.4/postgresql-9.3.4.tar.gz
root@vps189189:~# tar zxvf postgresql-9.3.4.tar.gz
root@vps189189:~# cd postgresql-9.3.4/
root@vps189189:~/postgresql-9.3.4# ./configure [--without-readline --without-zlib]
root@vps189189:~/postgresql-9.3.4# make && sudo make install
root@vps189189:~/postgresql-9.3.4# cd ~
You can use here nano if you want, I use vim editor
root@vps189189:~# vim /etc/ld.so.conf
Press 'a' to enter in edit mode, and insert the line:
/usr/local/pgsql/lib
Press ESC
write: ':wq' or hold down Shift and press two times 'z' (Shift + ZZ)
Now let's create the database directories:
root@vps189189:~# [sudo] mkdir /usr/local/pgsql/data
root@vps189189:~# chown gnuworld /usr/local/pgsql/data
root@vps189189:~# chgrp gnuworld /usr/local/pgsql/data
Starting the database itself:
root@vps189189:~# su gnuworld
gnuworld@vps189189:/root$ cd ~
gnuworld@vps189189:~$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
Success. You can now start the database server using:
gnuworld@vps189189:~$ /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data &
This line is useful to put in crontab, so on server reboot you get postgres running
gnuworld@vps189189:~$ crontab -e
At the end insert:
@reboot /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
After this I usually open a new terminal window, to not to be bothered with database messages.
Now install gnuworld-enhanced:
gnuworld@vps189189:~$ git clone https://github.com/Seven-7/gnuworld-enhanced.git
gnuworld@vps189189:~$ cd gnuworld-enhanced/
gnuworld@vps189189:~/gnuworld-enhanced$ ./configure --with-extra-includes=/usr/local/include --with-extra-includes=/usr/include/postgresql/ --with-pgsql-home=/usr/local/pgsql/ --enable-modules=cservice,ccontrol,dronescan,openchanfix[,gnutest,nickserv,scanner,snoop,stats]
Please note here that gnutest,nickserv,scanner,snoop,stats modules are experimental, unfinished, not useful, probably you should ommit modules!
gnuworld@vps189189:~/gnuworld-enhanced$ make; make install
Now create the actual databases:
gnuworld@vps189189:~/gnuworld-enhanced$ cd doc
Note!: You can try to shortcat all of these with running the
~/gnuworld-enhanced/doc/do-db.sh
script! You must be in the ~/gnuworld-enhanced/doc directory!
gnuworld@vps189189:~/gnuworld-enhanced/doc$ ./do-db.sh
Or manually:
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/createdb --template=template0 -E=SQL_ASCII cservice
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < cservice.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < cservice.config.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < languages.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < language_table.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < greeting.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < cservice.help.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < cservice.web.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < cservice.addme.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/createdb --template=template0 -E=SQL_ASCII ccontrol
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql ccontrol < ccontrol.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql ccontrol < ccontrol.help.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql ccontrol < ccontrol.addme.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql ccontrol < ccontrol.commands.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/createdb --template=template0 -E=SQL_ASCII dronescan
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql dronescan < dronescan.sql
gnuworld@vps189189:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/createdb --template=template0 -E=SQL_ASCII chanfix
gnuworld@vps189189:~/gnuworld-enhanced/doc$ cd ../mod.openchanfix/doc/
gnuworld@vps189189:~/gnuworld-enhanced/mod.openchanfix/doc$ /usr/local/pgsql/bin/psql chanfix < chanfix.sql
gnuworld@vps189189:~/gnuworld-enhanced/mod.openchanfix/doc$ /usr/local/pgsql/bin/psql chanfix < chanfix.languages.sql
gnuworld@vps189189:~/gnuworld-enhanced/mod.openchanfix/doc$ /usr/local/pgsql/bin/psql chanfix < chanfix.language.english.sql
gnuworld@vps189189:~/gnuworld-enhanced/mod.openchanfix/doc$ /usr/local/pgsql/bin/psql chanfix < chanfix.help.sql
gnuworld@vps189189:~/gnuworld-enhanced/mod.openchanfix/doc$ /usr/local/pgsql/bin/psql chanfix < chanfix.addme.sql
Go to bin directory, and create the gnuworld config files:
gnuworld@vps189189:~/gnuworld-enhanced/mod.openchanfix/doc$ cd ~/gnuworld-enhanced/bin/
gnuworld@vps189189:~/gnuworld-enhanced/bin$ cp GNUWorld.example.conf GNUWorld.conf
gnuworld@vps189189:~/gnuworld-enhanced/bin$ cp cservice.example.conf cservice.conf
gnuworld@vps189189:~/gnuworld-enhanced/bin$ cp ccontrol.example.conf ccontrol.conf
gnuworld@vps189189:~/gnuworld-enhanced/bin$ cp dronescan.example.conf dronescan.conf
gnuworld@vps189189:~/gnuworld-enhanced/bin$ cp openchanfix.example.conf openchanfix.conf
Edit all these files.
In GNUWorld.conf don't forget to uncomment the modules you configured with
# To use a certain module, uncomment it below.
module = libcservice.la cservice.conf
module = libccontrol.la ccontrol.conf
module = libchanfix.la openchanfix.conf
module = libdronescan.la dronescan.conf
And finally we can start gnuworld:
gnuworld@vps189189:~/gnuworld-enhanced/bin$ ./gnuworld &

40
INSTALL-NEW-ircd.txt Normal file
View File

@ -0,0 +1,40 @@
Example of installing ircd (Nefarious2 or ircu)
root@vps189189:~# sudo apt-get update
root@vps189189:~# sudo apt-get install gcc g++ cpp
root@vps189189:~# sudo apt-get install flex
root@vps189189:~# sudo apt-get install byacc
root@vps189189:~# sudo apt-get install bison
root@vps189189:~# sudo apt-get install make autoconf automake
root@vps189189:~# sudo apt-get install openssl libssl-dev
root@vps189189:~# sudo apt-get install libpcre3-dev
root@vps189189:~# sudo apt-get install git
root@vps189189:~# sudo apt-get install vim
Let's create a user for ircd
root@vps189189:~# adduser ircd
root@vps189189:~# su ircd
ircd@vps189189:~# cd ~
ircd@vps189189:~# mkdir ircds
Depending which (or both) ircd you install:
ircd@vps189189:~# mkdir ircds/nef2-bin
ircd@vps189189:~# mkdir ircds/ircu-bin
ircd@vps189189:~# cd ~
ircd@vps189189:~# git clone https://github.com/evilnet/nefarious2.git
ircd@vps189189:~# cd nefarious2
Important note: Do the patch described in gnuworld-enhanced/README-DO-UPDATES.txt at date 2016.01.06
ircd@vps189189:~/nefarious2$ ./configure --prefix=/home/ircd/ircds/nef2-bin
ircd@vps189189:~/nefarious2$ make; make install
ircd@vps189189:~/nefarious2$ cd /home/ircd/ircds/nef2-bin/lib
Copy from the example conf from gnuworld-enhanced doc
ircd@vps189189:~/ircds/nef2-bin/lib$ cp /home/gnuworld/gnuworld-enhanced/doc/ircds.example.conf/ircd-nef.example.conf /home/ircd/ircds/nef2-bin
ircd@vps189189:~/ircds/nef2-bin/lib$ mv ircd-nef.example.conf ircd.conf
Edit the conf to your needs!
ircd@vps189189:~/ircds/nef2-bin/lib$ vim ircd.conf
Start the ircd:
ircd@vps189189:~/ircds/nef2-bin/lib$ cd ../bin
ircd@vps189189:~/ircds/nef2-bin/bin$ ./ircd &

12
INSTALL-Useful-ToKnow.txt Normal file
View File

@ -0,0 +1,12 @@
==========================================================================
* Any change in a *.h file requires a complete reconfigure and remake.
--------------------------------------------------------------------------
After you modified a *.h file, you should do the following steps:
1) Note down you actual config line fom ~/gnuworld-enhanced/config.log
2) make clean; make distclean
3) ./configure ......
4) make; make install
==========================================================================
* Fast postgresql restart command:
-------------------------------------------------------------------------
/usr/local/pgsql/bin/pg_ctl restart -m fast -D /usr/local/pgsql/data -o -F &

340
LICENSE Normal file
View File

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
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
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

192
Makefile.am Normal file
View File

@ -0,0 +1,192 @@
## $Id: Makefile.am,v 1.26 2007/08/28 16:09:56 dan_karrels Exp $
## test
@SET_MAKE@
if COND_MODCCONTROL
MODCCONTROL = mod.ccontrol
endif
if COND_MODCHANFIX
MODCHANFIX = mod.chanfix
endif
if COND_MODCLIENTEXAMPLE
MODCLIENTEXAMPLE = mod.clientExample
endif
if COND_MODCLONER
MODCLONER = mod.cloner
endif
if COND_MODCSERVICE
MODCSERVICE = mod.cservice
endif
if COND_MODDRONESCAN
MODDRONESCAN = mod.dronescan
endif
if COND_MODGNUTEST
MODGNUTEST = mod.gnutest
endif
if COND_MODNICKSERV
MODNICKSERV = mod.nickserv
endif
if COND_MODOPENCHANFIX
MODOPENCHANFIX = mod.openchanfix
endif
if COND_MODSCANNER
MODSCANNER = mod.scanner
endif
if COND_MODSTATS
MODSTATS = mod.stats
endif
if COND_MODSNOOP
MODSNOOP = mod.snoop
endif
if COND_TESTDIR
TESTDIR = test
endif
SUBDIRS = libgnuworld libltdl src db \
$(NEW_MODS) \
$(MODCCONTROL) \
$(MODCHANFIX) \
$(MODCLIENTEXAMPLE) \
$(MODCLONER) \
$(MODCSERVICE) \
$(MODDRONESCAN) \
$(MODGNUTEST) \
$(MODNICKSERV) \
$(MODOPENCHANFIX) \
$(MODSCANNER) \
$(MODSTATS) \
$(MODSNOOP) \
$(TESTDIR) \
libircu
EXTRA_DIST = bin/ccontrol.example.conf.in \
bin/chanfix.example.conf.in \
bin/clientExample.example.conf.in \
bin/cloner.example.conf.in \
bin/cservice.example.conf.in \
bin/dronescan.example.conf.in \
bin/gnutest.example.conf.in \
bin/GNUWorld.example.conf.in \
bin/nickserv.example.conf.in \
bin/openchanfix.example.conf.in \
bin/scanner.example.conf.in \
bin/stats.example.conf.in \
bin/server_command_map.in \
contrib/00INDEX.TXT \
contrib/chktrans.py \
contrib/encrypt.sh \
doc/README.pgsql \
doc/README \
doc/README.appjudge \
doc/README.ccontrol \
doc/README.cservice \
doc/README.dronescan \
doc/README.sharedmemory \
doc/autokill.sql \
doc/ccontrol.addme.sql \
doc/ccontrol.commands.sql \
doc/ccontrol.help.sql \
doc/ccontrol.sql \
doc/ccontrol.update.sql \
doc/checkvarargs.py \
doc/chktrans.py \
doc/cparse.py \
doc/cservice.addme.sql \
doc/cservice.config.sql \
doc/cservice.help.sql \
doc/cservice.sql \
doc/cservice.web.sql \
doc/dronescan.sql \
doc/genhelp.py \
doc/grant.sql \
doc/greeting.sql \
doc/language_christmas.sql \
doc/language_dutch.sql \
doc/language_easter.sql \
doc/language_german.sql \
doc/language_greek.sql \
doc/language_halloween.sql \
doc/language_swedish.sql \
doc/language_table.sql \
doc/languages.sql \
doc/local_db.sql \
doc/motd.sql \
doc/movetables \
doc/notes.sql \
doc/README \
doc/README.appjudge \
doc/README.ccontrol \
doc/README.cservice \
doc/README.pgsql \
doc/README.sharedmemory \
doc/update.channels.sql \
doc/update_complaints_20031020.sql \
doc/update_complaints_20031026.sql \
doc/update_complaints.sql \
doc/update.delete.sql \
doc/update.gfxcode.sql \
doc/update.statistics.sql \
doc/update_fraud_lists.sql \
doc/update.statistics.sql \
doc/update_themes.sql \
doc/update_tzmove_l.sql \
doc/update_tzmove_r.sql \
doc/cmaster/maint/cleanup_traffic.sql \
doc/cmaster/maint/enc_pass.sh \
doc/cmaster/maint/fixDOS.sh \
doc/cmaster/maint/Manager1K.sh \
doc/cmaster/maint/WipeUser.sh \
doc/cmaster/regproc/appjudge \
doc/cmaster/regproc/appjudge-config \
doc/cmaster/regproc/cron-judge.in \
doc/cmaster/regproc/cycle-judge \
doc/cmaster/website/faq.html \
doc/cmaster/website/index.html \
doc/cmaster/website/install.html \
doc/cmaster/website/manual.html \
doc/cmaster/website/web.html \
doc/idoc/index.php \
doc/idoc/README \
doc/nickserv/nickserv.sql \
doc/nickserv/INSTALL \
doc/nickserv/USAGE \
include/defs.h \
include/Channel.h \
include/ChannelUser.h \
include/Gline.h \
include/LoadClientTimerHandler.h \
include/Network.h \
include/NetworkTarget.h \
include/Numeric.h \
include/ServerCommandHandler.h \
include/ServerTimerHandlers.h \
include/Timer.h \
include/TimerHandler.h \
include/UnloadClientTimerHandler.h \
include/client.h \
include/events.h \
include/iClient.h \
include/iServer.h \
include/ip.h \
include/gnuworld_config.h \
include/gw_hashmap.h \
include/moduleLoader.h \
include/server.h \
libltdl/acconfig.h \
libltdl/ltdl.h \
libltdl/config.h \
tools/checkgnuworld.sh

941
Makefile.in Normal file
View File

@ -0,0 +1,941 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in \
$(top_srcdir)/bin/GNUWorld.example.conf.in \
$(top_srcdir)/bin/ccontrol.example.conf.in \
$(top_srcdir)/bin/chanfix.example.conf.in \
$(top_srcdir)/bin/clientExample.example.conf.in \
$(top_srcdir)/bin/cloner.example.conf.in \
$(top_srcdir)/bin/cservice.example.conf.in \
$(top_srcdir)/bin/dronescan.example.conf.in \
$(top_srcdir)/bin/gnutest.example.conf.in \
$(top_srcdir)/bin/logging.properties.in \
$(top_srcdir)/bin/nickserv.example.conf.in \
$(top_srcdir)/bin/openchanfix.example.conf.in \
$(top_srcdir)/bin/scanner.example.conf.in \
$(top_srcdir)/bin/server_command_map.in \
$(top_srcdir)/bin/snoop.example.conf.in \
$(top_srcdir)/bin/stats.example.conf.in \
$(top_srcdir)/configure $(top_srcdir)/include/defs.h.in \
$(top_srcdir)/tools/checkgnuworld.sh.in AUTHORS COPYING \
ChangeLog INSTALL NEWS TODO config.guess config.sub depcomp \
install-sh ltconfig ltmain.sh missing mkinstalldirs
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/ac_cxx_namespaces.m4 \
$(top_srcdir)/ax_boost_thread.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/include/defs.h
CONFIG_CLEAN_FILES = bin/server_command_map bin/ccontrol.example.conf \
bin/chanfix.example.conf bin/clientExample.example.conf \
bin/cloner.example.conf bin/cservice.example.conf \
bin/gnutest.example.conf bin/GNUWorld.example.conf \
bin/nickserv.example.conf bin/openchanfix.example.conf \
bin/scanner.example.conf bin/stats.example.conf \
bin/snoop.example.conf bin/dronescan.example.conf \
bin/logging.properties tools/checkgnuworld.sh
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
distdir dist dist-all distcheck
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = libgnuworld libltdl src db @NEW_MODS@ mod.ccontrol \
mod.chanfix mod.clientExample mod.cloner mod.cservice \
mod.dronescan mod.gnutest mod.nickserv mod.openchanfix \
mod.scanner mod.stats mod.snoop test libircu
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d "$(distdir)" \
|| { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr "$(distdir)"; }; }
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BOOST_THREAD_LIB = @BOOST_THREAD_LIB@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INCLTDL = @INCLTDL@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBGNUWORLD = @LIBGNUWORLD@
LIBLTDL = @LIBLTDL@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LTDLDEPS = @LTDLDEPS@
LTDLINCL = @LTDLINCL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NEW_MODS = @NEW_MODS@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
pgsql_includedir = @pgsql_includedir@
pgsql_libdir = @pgsql_libdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
subdirs = @subdirs@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
threadLib = @threadLib@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
@COND_MODCCONTROL_TRUE@MODCCONTROL = mod.ccontrol
@COND_MODCHANFIX_TRUE@MODCHANFIX = mod.chanfix
@COND_MODCLIENTEXAMPLE_TRUE@MODCLIENTEXAMPLE = mod.clientExample
@COND_MODCLONER_TRUE@MODCLONER = mod.cloner
@COND_MODCSERVICE_TRUE@MODCSERVICE = mod.cservice
@COND_MODDRONESCAN_TRUE@MODDRONESCAN = mod.dronescan
@COND_MODGNUTEST_TRUE@MODGNUTEST = mod.gnutest
@COND_MODNICKSERV_TRUE@MODNICKSERV = mod.nickserv
@COND_MODOPENCHANFIX_TRUE@MODOPENCHANFIX = mod.openchanfix
@COND_MODSCANNER_TRUE@MODSCANNER = mod.scanner
@COND_MODSTATS_TRUE@MODSTATS = mod.stats
@COND_MODSNOOP_TRUE@MODSNOOP = mod.snoop
@COND_TESTDIR_TRUE@TESTDIR = test
SUBDIRS = libgnuworld libltdl src db \
$(NEW_MODS) \
$(MODCCONTROL) \
$(MODCHANFIX) \
$(MODCLIENTEXAMPLE) \
$(MODCLONER) \
$(MODCSERVICE) \
$(MODDRONESCAN) \
$(MODGNUTEST) \
$(MODNICKSERV) \
$(MODOPENCHANFIX) \
$(MODSCANNER) \
$(MODSTATS) \
$(MODSNOOP) \
$(TESTDIR) \
libircu
EXTRA_DIST = bin/ccontrol.example.conf.in \
bin/chanfix.example.conf.in \
bin/clientExample.example.conf.in \
bin/cloner.example.conf.in \
bin/cservice.example.conf.in \
bin/dronescan.example.conf.in \
bin/gnutest.example.conf.in \
bin/GNUWorld.example.conf.in \
bin/nickserv.example.conf.in \
bin/openchanfix.example.conf.in \
bin/scanner.example.conf.in \
bin/stats.example.conf.in \
bin/server_command_map.in \
contrib/00INDEX.TXT \
contrib/chktrans.py \
contrib/encrypt.sh \
doc/README.pgsql \
doc/README \
doc/README.appjudge \
doc/README.ccontrol \
doc/README.cservice \
doc/README.dronescan \
doc/README.sharedmemory \
doc/autokill.sql \
doc/ccontrol.addme.sql \
doc/ccontrol.commands.sql \
doc/ccontrol.help.sql \
doc/ccontrol.sql \
doc/ccontrol.update.sql \
doc/checkvarargs.py \
doc/chktrans.py \
doc/cparse.py \
doc/cservice.addme.sql \
doc/cservice.config.sql \
doc/cservice.help.sql \
doc/cservice.sql \
doc/cservice.web.sql \
doc/dronescan.sql \
doc/genhelp.py \
doc/grant.sql \
doc/greeting.sql \
doc/language_christmas.sql \
doc/language_dutch.sql \
doc/language_easter.sql \
doc/language_german.sql \
doc/language_greek.sql \
doc/language_halloween.sql \
doc/language_swedish.sql \
doc/language_table.sql \
doc/languages.sql \
doc/local_db.sql \
doc/motd.sql \
doc/movetables \
doc/notes.sql \
doc/README \
doc/README.appjudge \
doc/README.ccontrol \
doc/README.cservice \
doc/README.pgsql \
doc/README.sharedmemory \
doc/update.channels.sql \
doc/update_complaints_20031020.sql \
doc/update_complaints_20031026.sql \
doc/update_complaints.sql \
doc/update.delete.sql \
doc/update.gfxcode.sql \
doc/update.statistics.sql \
doc/update_fraud_lists.sql \
doc/update.statistics.sql \
doc/update_themes.sql \
doc/update_tzmove_l.sql \
doc/update_tzmove_r.sql \
doc/cmaster/maint/cleanup_traffic.sql \
doc/cmaster/maint/enc_pass.sh \
doc/cmaster/maint/fixDOS.sh \
doc/cmaster/maint/Manager1K.sh \
doc/cmaster/maint/WipeUser.sh \
doc/cmaster/regproc/appjudge \
doc/cmaster/regproc/appjudge-config \
doc/cmaster/regproc/cron-judge.in \
doc/cmaster/regproc/cycle-judge \
doc/cmaster/website/faq.html \
doc/cmaster/website/index.html \
doc/cmaster/website/install.html \
doc/cmaster/website/manual.html \
doc/cmaster/website/web.html \
doc/idoc/index.php \
doc/idoc/README \
doc/nickserv/nickserv.sql \
doc/nickserv/INSTALL \
doc/nickserv/USAGE \
include/defs.h \
include/Channel.h \
include/ChannelUser.h \
include/Gline.h \
include/LoadClientTimerHandler.h \
include/Network.h \
include/NetworkTarget.h \
include/Numeric.h \
include/ServerCommandHandler.h \
include/ServerTimerHandlers.h \
include/Timer.h \
include/TimerHandler.h \
include/UnloadClientTimerHandler.h \
include/client.h \
include/events.h \
include/iClient.h \
include/iServer.h \
include/ip.h \
include/gnuworld_config.h \
include/gw_hashmap.h \
include/moduleLoader.h \
include/server.h \
libltdl/acconfig.h \
libltdl/ltdl.h \
libltdl/config.h \
tools/checkgnuworld.sh
all: all-recursive
.SUFFIXES:
am--refresh:
@:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
$(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(am__cd) $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):
include/defs.h: include/stamp-h1
@if test ! -f $@; then \
rm -f include/stamp-h1; \
$(MAKE) $(AM_MAKEFLAGS) include/stamp-h1; \
else :; fi
include/stamp-h1: $(top_srcdir)/include/defs.h.in $(top_builddir)/config.status
@rm -f include/stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status include/defs.h
$(top_srcdir)/include/defs.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
rm -f include/stamp-h1
touch $@
distclean-hdr:
-rm -f include/defs.h include/stamp-h1
bin/server_command_map: $(top_builddir)/config.status $(top_srcdir)/bin/server_command_map.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/ccontrol.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/ccontrol.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/chanfix.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/chanfix.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/clientExample.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/clientExample.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/cloner.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/cloner.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/cservice.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/cservice.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/gnutest.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/gnutest.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/GNUWorld.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/GNUWorld.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/nickserv.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/nickserv.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/openchanfix.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/openchanfix.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/scanner.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/scanner.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/stats.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/stats.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/snoop.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/snoop.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/dronescan.example.conf: $(top_builddir)/config.status $(top_srcdir)/bin/dronescan.example.conf.in
cd $(top_builddir) && $(SHELL) ./config.status $@
bin/logging.properties: $(top_builddir)/config.status $(top_srcdir)/bin/logging.properties.in
cd $(top_builddir) && $(SHELL) ./config.status $@
tools/checkgnuworld.sh: $(top_builddir)/config.status $(top_srcdir)/tools/checkgnuworld.sh.in
cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool config.lt
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
$(am__remove_distdir)
test -d "$(distdir)" || mkdir "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$new_top_distdir" \
distdir="$$new_distdir" \
am__remove_distdir=: \
am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \
|| exit 1; \
fi; \
done
-test -n "$(am__skip_mode_fix)" \
|| find "$(distdir)" -type d ! -perm -755 \
-exec chmod u+rwx,go+rx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-lzma: distdir
tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
$(am__remove_distdir)
dist-xz: distdir
tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
$(am__remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
dist dist-all: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lzma*) \
lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
*.tar.xz*) \
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& am__cwd=`pwd` \
&& $(am__cd) $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
&& cd "$$am__cwd" \
|| exit 1
$(am__remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
@$(am__cd) '$(distuninstallcheck_dir)' \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr \
distclean-libtool distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
html-am:
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive
install-info-am:
install-man:
install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
install-am install-strip tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-generic \
clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
distcheck distclean distclean-generic distclean-hdr \
distclean-libtool distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-recursive uninstall uninstall-am
@SET_MAKE@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

7
NEWS Normal file
View File

@ -0,0 +1,7 @@
The newest versions (v7.3.x) of postgresql do not come with c++ support by
default. These libraries have been moved to a separate project. However,
that project is not yet mature enough to compile no most systems.
Therefore, we recommend you use the latest version of pgsql v7.2.x
(currently 7.2.4).

35
README Normal file
View File

@ -0,0 +1,35 @@
!!! WARNING !!!
READ ALL THE FOLLOWING WARINGS BEFORE PROCEED WITH INSTALL !!!
!!! WARNING !!!
Use this version of gnuworld at your own risk, this is used by smaller communities, it is not so well tested like the official gnuworld, therefore easily could be found bugs!
!!! WARNING !!!
DO NOT use older versions, which comes from circulation from "hand-to hand" those represents a higher risk of containing critical bugs, always use the latest version. There are a few basic steps to get correctly the latest version:
1. Install git:
sudo apt-get install git
2. Get the latest 'gnuworld-enhanced'
git clone https://github.com/ZioNeL/gnuworld-enhanced.git
3. Install it in the usual way:
cd gnuworld-enhanced
./configure ........
make && make instal, etc etc
4. Keep your code updated, periodically, and/or check for any new commits on github:
git pull
5. Rebuild and restart gnuworld
make && make install
restart gnu ...
!!! WARNING !!!
Official gnuworld database and gnuworld-enhanced databases are not compatible! Once you installed one version doesn't work to change your mind and use an existing database with the other gnuworld! Only advanced users could attempt a migration, but it's probably not the case for major usual users!
If you want to switch between gnuworld-enhanced and gnuworld official you must recreate all the databases!!
!!! WARNING !!!
Don't run the original official TheJudge crontab scripts with this version of gnuworld! This version handles internally the channel registration process, the crontabs scripts interfere with it in an unpredictable, not wanted way!
!!! WARNING !!!
The Judge settings must be kept in synchron MANUALLY in BOTH gnuworld's cservice.conf as also in website configs!
Do not expect the website settings will be applied to the gnuworld too!
!!! WARNING !!!
gnuworld-enhanced is an UNOFFICIAL gnuworld, do not ask for support on Undernet #coder-com, but instead you can ask on #GNUWorld

188
README-DO-UPDATES.txt Normal file
View File

@ -0,0 +1,188 @@
==============================================================================
2020.04.26 * SETHOST: Prevent setting some restricted/reserved hostnames
------------------------------------------------------------------------------
If you have an existing installation, you can upgrade with the following steps:
gnuworld@ubuntu:~$ cd gnuworld-enhanced
gnuworld@ubuntu:~/gnuworld-enhanced$ git pull
gnuworld@ubuntu:~/gnuworld-enhanced$ make; make install
- Add the new restricted/reserved hostnames section from cservice.example.conf to your cservice.conf
... restart gnuworld ...
- If you just edited/updated the restricted hostnames in cservice.conf just:
... restart gnuworld ...
Done.
- If you don't want to allow admins/opers to set restricted/reserved hosts, edit
mod.cservice/cservice_config.h
#undef ADMINS_USE_RESTRICTED_SETHOSTS
gnuworld@ubuntu:~/gnuworld-enhanced$ make; make install
... restart gnuworld ...
Done.
==============================================================================
2016.02.18 Added halfop support: mod.cservice HALFOPCommand and HALFDEOPCommand
------------------------------------------------------------------------------
If you have an existing installation, you can upgrade with the following steps:
gnuworld@ubuntu:~$ cd gnuworld-enhanced
gnuworld@ubuntu:~/gnuworld-enhanced$ make clean; make distclean
- Reconfigure again:
gnuworld@ubuntu:~/gnuworld-enhanced$ ./configure ......
gnuworld@ubuntu:~/gnuworld-enhanced$ make; make install
... restart gnuworld ...
Done.
Note: If doesn't works, follow the steps like in SCANCommand, saving libltdl, and doing the autoreconf
============================================================================
2016.02.04 Recognizing and handling Nefarious2's cloaked IP and cloaked Host
----------------------------------------------------------------------------
If you have an existing installation, you can upgrade with the following steps:
gnuworld@ubuntu:~$ cd gnuworld-enhanced
gnuworld@ubuntu:~/gnuworld-enhanced$ git pull
gnuworld@ubuntu:~/gnuworld-enhanced$ make; make install
... restart gnuworld ...
Done.
Also don't forget to set "HOST_HIDING_STYLE" > 1 in Nefarious2's ircd.conf if you intend to see cloaked IPs/hosts
============================================================================
2016.01.08 Prevent users to set 'exotic' hostnames, like with colors, etc.
----------------------------------------------------------------------------
If you have an existing installation, you can upgrade with the following steps:
gnuworld@ubuntu:~$ cd gnuworld-enhanced
gnuworld@ubuntu:~/gnuworld-enhanced$ git pull
gnuworld@ubuntu:~/gnuworld-enhanced$ make; make install
... restart gnuworld ...
Done.
============================================================================
2016.01.07 Added mod.cservice SCANCommand
First puropse: find owner user of a nickname
----------------------------------------------------------------------------
gnuworld@ubuntu:~$ cd gnuworld-enhanced
gnuworld@ubuntu:~/gnuworld-enhanced$ git pull
- Check and note down your current configure line:
gnuworld@ubuntu:~/gnuworld-enhanced$ vim config.log
In my case:
./configure --with-extra-includes=/usr/local/include --with-extra-includes=/usr/include/postgresql/ --with-pgsql-home=/usr/local/pgsql/ --enable-modules=cservice,ccontrol
- Do a full clean:
gnuworld@ubuntu:~/gnuworld-enhanced$ make clean; make distclean
- Save libltdl:
gnuworld@ubuntu:~/gnuworld-enhanced$ cp -rf libltdl/ libltdl-save
- Do a full autoreconf:
gnuworld@ubuntu:~/gnuworld-enhanced$ autoreconf -Wall -i
- Delete libltdl/, rename back libltdl-save:
gnuworld@ubuntu:~/gnuworld-enhanced$ rm -rf libltdl; mv libltdl-save libltdl
- Configure again:
gnuworld@ubuntu:~/gnuworld-enhanced$ ./configure --with-extra-includes=/usr/local/include --with-extra-includes=/usr/include/postgresql/ --with-pgsql-home=/usr/local/pgsql/ --enable-modules=cservice,ccontrol
gnuworld@ubuntu:~/gnuworld-enhanced$ make; make install
... restart gnuworld ...
Done.
============================================================================
2016.01.07 mod.cservice NEWPASS: Admins can set target users a new password
----------------------------------------------------------------------------
- The usual update procedure:
gnuworld@ubuntu:~$ cd gnuworld-enhanced
gnuworld@ubuntu:~/gnuworld-enhanced$ git pull
gnuworld@ubuntu:~/gnuworld-enhanced$ make; make install
... restart gnuworld ...
Done.
============================================================================
2016.01.06 Nick protection through mod.cservice (nickreg/nickserv function)
----------------------------------------------------------------------------
Warning! You need to patch Nefarious2 to handle correctly svsnicks!
- Edit nefarious2/ircd/s_user.c
- Find set_nick_name function
On the section where writes:
/*
* Refuse nick change if the last nick change was less
* then 30 seconds ago. This is intended to get rid of
... ...
There is:
if (CurrentTime < cli_nextnick(cptr))
{
cli_nextnick(cptr) += 2;
send_reply(cptr, ERR_NICKTOOFAST, parv[1],
cli_nextnick(cptr) - CurrentTime);
/* Send error message */
sendcmdto_one(cptr, CMD_NICK, cptr, "%s", cli_name(cptr));
/* bounce NICK to user */
return 0; /* ignore nick change! */
}
else {
/* Limit total to 1 change per NICK_DELAY seconds: */
cli_nextnick(cptr) += NICK_DELAY;
/* However allow _maximal_ 1 extra consecutive nick change: */
if (cli_nextnick(cptr) < CurrentTime)
cli_nextnick(cptr) = CurrentTime;
}
Change it to:
if (!svsnick)
{
if (CurrentTime < cli_nextnick(cptr))
{
cli_nextnick(cptr) += 2;
send_reply(cptr, ERR_NICKTOOFAST, parv[1],
cli_nextnick(cptr) - CurrentTime);
/* Send error message */
sendcmdto_one(cptr, CMD_NICK, cptr, "%s", cli_name(cptr));
/* bounce NICK to user */
return 0; /* ignore nick change! */
}
else {
/* Limit total to 1 change per NICK_DELAY seconds: */
cli_nextnick(cptr) += NICK_DELAY;
/* However allow _maximal_ 1 extra consecutive nick change: */
if (cli_nextnick(cptr) < CurrentTime)
cli_nextnick(cptr) = CurrentTime;
}
}
- Save the file
- Do a make; make install again
- Restart ircd!
Now updating gnuworld:
- Update the database 'users' table structure:
gnuworld@ubuntu:~$ cd gnuworld-enhanced
gnuworld@ubuntu:~/gnuworld-enhanced$ git pull
gnuworld@ubuntu:~$ cd gnuworld-enhanced/doc
gnuworld@ubuntu:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < update_cservice_users_nickname.sql
gnuworld@ubuntu:~/gnuworld-enhanced/doc$ cd ..
gnuworld@ubuntu:~/gnuworld-enhanced$ make; make install
... restart gnuworld ...
Done.
============================================================================
2016.01.06 New feature: Set welcome notice-message on channel joins through X
----------------------------------------------------------------------------
If you have an existing installation, you can upgrade with the following steps:
- Update the database 'channels' table structure:
gnuworld@ubuntu:~$ cd gnuworld-enhanced
gnuworld@ubuntu:~/gnuworld-enhanced$ git pull
gnuworld@ubuntu:~/gnuworld-enhanced$ cd doc
gnuworld@ubuntu:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < update_cservice_channel_welcome.sql
gnuworld@ubuntu:~/gnuworld-enhanced/doc$ cd ..
gnuworld@ubuntu:~/gnuworld-enhanced$ make; make install
... restart gnuworld ...
Done. You can see the welcome message on any channel join.
============================================================================
2015.08.06 New feature: Set (fake)hostname for users
----------------------------------------------------------------------------
Warning! This feature requires Nefarious2 with it's Fake host support.
If you have an existing installation, you can upgrade with the following steps:
- Update the database 'users' table structure:
gnuworld@ubuntu:~/gnuworld-enhanced$ git pull
gnuworld@ubuntu:~$ cd gnuworld-enhanced/doc
gnuworld@ubuntu:~/gnuworld-enhanced/doc$ /usr/local/pgsql/bin/psql cservice < update_cservice_users_hostname.sql
- This update probably requires a full reconfigure, so note down your configure line from
~/gnuworld-enhanced/config.log
after that, do a full reconfigure and remake
gnuworld@ubuntu:~/gnuworld-enhanced$ make clean; make distclean
gnuworld@ubuntu:~/gnuworld-enhanced$ ./configure ....
gnuworld@ubuntu:~/gnuworld-enhanced$ make; make install
... restart gnuworld ...
The command syntax for setting a hostname for a username:
/msg X set hostname <anyhost.youwant.com>
To clear your hostname use:
/msg X set hostname off

View File

@ -0,0 +1,21 @@
Often might be needed to save your database, you want to do a migration, a reinstall, etc.
Creating and restoring a database is easy:
Creating a backup:
-----------------
/usr/local/pgsql/bin/pg_dump cservice > cservice-backup.sql
/usr/local/pgsql/bin/pg_dump ccontrol > ccontrol-backup.sql
Restoring a database from backup:
--------------------------------
First drop the current databases what we want to replace:
/usr/local/pgsql/bin/dropdb cservice
/usr/local/pgsql/bin/dropdb ccontrol
Create back the databases, they will be empty:
/usr/local/pgsql/bin/createdb --template=template0 -E=SQL_ASCII cservice
/usr/local/pgsql/bin/createdb --template=template0 -E=SQL_ASCII ccontrol
Copy back the backup data:
/usr/local/pgsql/bin/psql cservice < cservice-backup.sql
/usr/local/pgsql/bin/psql ccontrol < ccontrol-backup.sql

0
README-Good-ToKnow.txt Normal file
View File

574
README-NEW-Features.txt Normal file
View File

@ -0,0 +1,574 @@
==============================================================================
2021.02.20 * Added -new suffixed web sql database files to use with the official webpage
Original files are kept for optional use with the original-old-webpage
------------------------------------------------------------------------------
Advanced database migration, or complete rebuilt of the database required
==============================================================================
2020.06.26 * FIX/UPDATE: Newly created users are created with no last_seen data
so without login within one day they expire.
------------------------------------------------------------------------------
Beside the usual update procedure, you must enter into postgresql command line:
/usr/local/pgsql/bin/psql cservice
and execute the command:
cservice=# DROP TRIGGER t_new_user ON users;
In case of new installation this step is not necessary!
==============================================================================
2020.06.12 * cservice HELLO now sends out a real email with the generated password
* cservice NEWPASS now clears TOTP authentication data as well!
------------------------------------------------------------------------------
The feature has to be enabled in cservice.conf:
hello_sendmail_enabled = 1
** IMPORTANT: mailutils or mailx package must be installed on your system!
For normal users NEWPASS command now can act as Password recovery in case the user is not logged in!
(For admins no change in the behavior)
If the user is logged in, the original new password generation mechanism applies.
So the new syntax is:
NEWPASS <new passphrase|username>
So for example a user lost it's password and is NOT logged in,
can recover it's password by passing the username as parameter, for example:
/msg x@channels.yournetwork.org NEWPASS SomeUser
otherwise if IS logged in, just want to change it's password:
/msg x@channels.yournetwork.org NEWPASS NewPassword
==============================================================================
2020.04.26 * SETHOST: Prevent setting some restricted/reserved hostnames
------------------------------------------------------------------------------
Restricted/reserved hostnames are set in cservice.conf.
Any number of "reservedHost = " entry is allowed.
To restrict admins/opers to set restricted/reserved hostnames edit
mod.cservice/cservice_config.h
#undef ADMINS_USE_RESTRICTED_SETHOSTS
==============================================================================
2016.02.18 * Added halfop support: mod.cservice HALFOPCommand and HALFDEOPCommand
------------------------------------------------------------------------------
To enable halfop command in mod.cservice you must
#define USING_NEFARIOUS
#define USE_HALFOPS
in mod.cservice/cservice_config.h
The syntax is very similar to op and deop.
/msg X halfop <#channel> [nick1 nick2 nick3]
/msg X haldefop <#channel> [nick1 nick2 nick3]
Warning! This feature requires Nefarious2 with it's halfop support.
Warning! Don't forget to enable halfops in ircd.conf:
"HALFOPS" = "TRUE";
If you have an existing installation, to upgrade read README-DO-UPDATES.txt
==============================================================================
2016.02.04 * Recognizing and handling Nefarious2's cloaked IP and cloaked Host
------------------------------------------------------------------------------
If you set "HOST_HIDING_STYLE" greater than 1 in Nefarious2's ircd.conf
gnuworld now will recognize the cloaked style
==============================================================================
2016.01.08 * Prevent users to set 'exotic' hostnames, like with colors, etc.
------------------------------------------------------------------------------
You might find lame to see colored/bolded/etc. hostnames, so if you enable
#define VALIDATE_SET_HOSTNAME
in mod.cservice/cservice_config.h only normal characters will be allowed.
Also it is a possibility of confusion/abuse to allow users to set hosts
with the network's hidden-host-suffix(eg. something.users.yournetwork.org)
so this is not allowed from now on.
============================================================================
2016.01.07 * Added mod.cservice SCANCommand
First puropse: find owner user of a nickname
----------------------------------------------------------------------------
To find an owner of a nickname:
/msg X scan nick|nickname <nick>
==============================================================================
2016.01.07 * mod.cservice NEWPASS: Admins can set target users a new password
------------------------------------------------------------------------------
Admins above access level level::newpass can set target users a new password:
Syntax:
/msg X@channels.yournetwork.org newpass <targetUser> <target New Password>
Note: Changing own password remained valid as originally:
/msg X@channels.yournetwork.org newpass <your new password>
==============================================================================
2016.01.06 * Nick protection through mod.cservice (nickreg/nickserv function)
------------------------------------------------------------------------------
Warning! This feature requires Nefarious2 with it's svsnick support.
Warning! This feature requires to patch Nefarious2 for a proper svsnick handling. Read README-DO-UPDATES.txt!
Also USING_NEFARIOUS must be #define in mod.cservice/cservice_config.h
If you have an existing installation, to upgrade read README-DO-UPDATES.txt
This nick protection works through an svsnick nick changing mechanism by gnuworld.
For the cservice user structure is added a nickname field, so gnuworld takes care any nick on the network is used by the 'right person'
by force-changing and generating an arbitrary 4 digits numbers ended nickname.
Syntax:
/msg X set nick|nickname <TheNick>
To clear any nickname:
/msg X set nick|nickname OFF
or simply
/msg X set nick|nickname
Also coders/admins with (levels.h -> level::nickset) access can set nickname for a target username.
/msg X set nick|nickname <targetUser> <targetNewNickname>
There is a new user flag too, AUTONICK:
/msg X set autonick <ON|OFF>
If it is ON, on login the saved nickname will be set for the client.
==============================================================================
2016.01.06 * Set welcome message-notice for channel joins through X
------------------------------------------------------------------------------
The command syntax for setting welcome message for a channel:
/msg X set #channel_name welcome <welcome_message>
To clear any welcome message:
/msg X set #channel_name welcome OFF
or simply
/msg X set #channel_name welcome
Done.
You can see the welcome message on any channel join.
==============================================================================
2015.08.06 * Set (fake)hostname for users
------------------------------------------------------------------------------
Warning! This feature requires Nefarious2 with it's Fake host support.
If you have an existing installation, to upgrade read README-DO-UPDATES.txt
The command syntax for setting a hostname for a username:
/msg X set hostname <anyhost.youwant.com>
To clear your hostname use:
/msg X set hostname off
The set hostname will be applied instantaneously (if +x), and on every login with +x
insted of the default users hiddenhost suffix
==============================================================================
* Status * command shows currently logged in officials
------------------------------------------------------------------------------
/msg X status *
-X- Status of currently logged '*' officials:
-X- Auth: SomeUser1/SomeNick1 (1000) SomeUser2/SomeNick2 (750) SomeUser3/SomeNick31 SomeNick32 (750) SomeUser4/SomeNick4 (600)
Note: The original function of status * is moved to stats *
==============================================================================
* Suspension of users on channels with reason
------------------------------------------------------------------------------
-X- SYNTAX: SUSPEND <#channel> <username> [duration] [level] [reason]
------------------------------------------------------------------------------
-X- Your reason must be 2 - 300 charcters long.
------------------------------------------------------------------------------
-> *x* access #coder-com Seven
-X- USER: Seven ACCESS: 499 L
-X- CHANNEL: #coder-com -- AUTOMODE: None
-X- *** SUSPENDED *** - Expires in 0 days, 00:09:48 (Level 400)
-X- Reason: Not proper behavior
-X- LAST SEEN: 0 days, 10:13:18 ago.
-X- End of access list
-X- SYNTAX: UNSUSPEND <#channel> <username> [reason]
-> *x* unsuspend #coder-com Seven I forgive you this time
-X- USER: Seven ACCESS: 499 L
-X- CHANNEL: #coder-com -- AUTOMODE: None
-X- UNSUSPENDED - I forgive you this time
-X- LAST SEEN: 0 days, 10:16:09 ago.
-X- End of access list
If the suspension expires, no reason will be show.
If no reason is supplied, reason will be "No reason supplied"
==============================================================================
* NOTEs is accessible for normal users too.
------------------------------------------------------------------------------
Notes can be used to bother the another, and maybe admins don't even want to get notes from normal users, for
this I introduced config lines in "cservice_config.h"
#define USE_NOTES
/**
* Do you want normal users to use the Noteserv functionality?
*/
#define USE_USERS_NOTES
/**
* Normal users can send notes to admins?
*/
#define USERS_NOTE_ADMINS
It can be choose between only admins use notes, admins and users, and admins can or cannot get notes from users.
An ignore option might be advisable.
==============================================================================
* Target users get notification about a new access modification.
------------------------------------------------------------------------------
... and if the target user is not logged in in the moment of modification, the notification will be saved and displayed when the user logs in.
-X- You have been added to channel #coder-com with access level 499
-X- Your access on #coder-com has been suspended.
-X- Your suspension on #coder-com has been cancelled.
-X- Your access on #coder-com has been modified from 499 to 400
-X- Your access from #coder-com has been removed by Admin.
The maxmimum amount of notification can be set up in "cservice.example.conf" at the "max_notes" line. Only the latest "max_notes" count will be stored.
-X- AUTHENTICATION SUCCESSFUL as Seven
-X- Remember: Nobody from CService will ever ask you for your password, do NOT give out your password to anyone claiming to be CService.
-X- You have been added to channel #coder-com with access level 499
-
-X- Your access on #coder-com has been suspended.
-
-X- Your suspension on #coder-com has been cancelled.
-
-X- Your access on #coder-com has been modified from 499 to 400
-
-X- Your access from #coder-com has been removed.
==============================================================================
* Completed users url, useable as a short description, motto, etc of the user (like we do with the Real Name).
------------------------------------------------------------------------------
It can be used with 3 keywords:
/msg X set URL <urlstring>
/msg X set DESC || DESCRIPTION <descstring>
/msg X set MOTTO <mottostring>
-> *x* set motto Escape from Paradise
-X- Set your MOTTO to Escape from Paradise.
-> *x* info seven
-X- Information about: Seven (2)
-X- Escape from Paradise
-X- Currently logged on via:
To clear a motto/desc/url must type:
/msg X set url off
-X- Cleared your URL
=============================================================================
* Chaninfo shows information about channels under registration
------------------------------------------------------------------------------
Admins get fullinformation about the channel:
-> *x* info #anychan
-X- Channel #anychan is in applications list at stage:
-X- *** PENDING SUPPORTERS CONFIRMATION ***
-X- Applicant: Seven - last seen: 0 days, 00:31:32 ago
-X- Real Name: Seven RealName
-X- Description: Channel for nobody
-X- Application posted on: Sun Jun 17 10:01:55 2012
-X- Supporters: johndoe/johndoe (0), NoBody (0)
Where johndoe/johndoe (0) means
username/nick (joincount)
If user has supported channel with YES, it will appear with bold letters
If the nick is currently on the channel it will appear with bold letters, if not, in plain, if not logged in then skipped.
If a user set it's support to NO, the username will appear with bold upper, and it will appear the decision.
Applicant and supporters don't get the joincount.
Non-supporters get's information Only about Status, Applicant and Description:
-X- Channel #anychan is in applications list at stage:
-X- *** PENDING SUPPORTERS CONFIRMATION ***
-X- Applicant: Seven - last seen: 0 days, 01:56:49 ago
-X- Description: Channel for nobody
=============================================================================
* Officials with *1+ can set nopurge for their user form IRC
-----------------------------------------------------------------------------
-> *x* set nopurge on
-X- Your NOPURGE setting is now ON
=============================================================================
 * Manual commands for channel ACCEPT/REJECT from IRC
-----------------------------------------------------------------------------
-> *x* reject #anychan For some reason rejected
-channels.homenetwork.org:#coder-com- [X] Admin (Admin) has rejected #anychan from Seven
-X- Rejected channel #anychan
-> *x* info #anychan
-X- Channel #anychan is in applications list at stage:
-X- *** REJECTED ***
-X- Applicant: Seven - last seen: 0 days, 00:00:50 ago
-X- Real Name: Seven RealName
-X- Description: Channel for nobody
-X- Application posted on: Sun Jun 17 11:28:30 2012
-X- Decision by CService Admin: For some reason rejected
-X- Supporters: johndoe/johndoe (0), NoBody (0)
-> *x* accept #anychan For some reason Still Accept
-channels.homenetwork.org:#coder-com- [X] Admin (Admin) has accepted #anychan to Seven
-X- Accepted channel #anychan
The from-IRC accept is superior realtive to web-accept, because it's no needed any sychronization time betweeen gnuworld and web,
the channel chache is refreshed instantaneously, +R appear, X can be asked to join immediately.
-X- Your reason must be 2 - 300 charcters long.
=============================================================================
 * Completed HELLO command with verification answer requirement
-----------------------------------------------------------------------------
-X- SYNTAX: HELLO <username> <email> <email> <1-3> <verification answer>
-X- Valid verification answer numbers are: 1 to 3
-X- 1: What's your mother's maiden name ?
-X- 2: What's your dog's(or cat's) name ?
-X- 3: What's your father's birth date ?
-X- Your verification answer must be 4 - 300 charcters long.
=============================================================================
 * Channel REGISTER and HELLO commands take into account NOREG/LOCKED's
-----------------------------------------------------------------------------
-> *x* hello duckyjoe duckyjoe_2001@yahoo.com duckyjoe_2001@yahoo.com 2 Rexy
-X- Invalid username (NOREG)
-X- Usernames matching *ducky* are disallowed for the following reason:
-X- Ducks are not allowed here
-> *x* hello duckijoe duckyjoe_2001@yahoo.com duckyjoe_2001@yahoo.com 2 Rexy
-X- Invalid email address (NOREG)
-X- Email addresses matching *ducky* are disallowed for the following reason:
-X- Ducks are not allowed here
-> *x* hello duckyjoe duckyjoe_2001@yahoo.com duckyjoe_2001@yahoo.com 2 Rexy
-X- Invalid username (LOCKED)
-X- Usernames matching *ducky* are disallowed for the following reason:
-X- Ducks must stay out from here
*** Also for locked verification answer ***
In cservice_config.h i'v separated 2 config line:
#define ALLOW_HELLO ==> enable HELLO command only for admins
#define ALLOW_USERS_HELLO ==> enable HELLO command for admins and users
Note: If HELLO is not enabled for admins, than also will not be for users.
Note2: Admins with access level above level::hello defined in mod.cservice/levels.h can bypass NOREG/LOCKED's, etc.
Tha same story for REGISTER command. (cheking for NOREG/LOCKED email, username, verification answer
+ target user must be logged in at least once on IRC
Note: Admins with access level above level::immune::registercmd defined in levels.h can bypass NOREG/LOCKED's, etc.
=============================================================================
 * POWER user flag, enables almighty admins
-----------------------------------------------------------------------------
/msg X set POWER [targetuser] ON|OFF
Many networks asked for a possbility of 'special' admins, with absolute administrative power, to be able to set another 1000 admin,
remove, etc.
Userid 1 always has the capability to set itself as POWER, other users can get only from an another POWER-ed user.
The POWER flag is visible in user info only to an another POWER-ed admin, for normal admins is not listed.
=============================================================================
 * SPECIAL channel flag is used for prevention of setting normal accesses above 499
-----------------------------------------------------------------------------
Logic dictate to not to allow to set accesses above 500, except for some special cases, those with SPECIAL channel flag:
-> *x* adduser #cservice Seven 501
-X- Access levels on regular channels cannot exceed 499 (except SPECIAL)
-> *x* adduser #cservice Seven 499
-X- Added user Seven to #cservice with access level 499
-> *x* modinfo #cservice access Seven 501
-X- Access levels on regular channels cannot exceed 499 (except SPECIAL)
=============================================================================
 * Expiration of users for more than 60 days are automatical from the gnuworld's internal timer
-----------------------------------------------------------------------------
In mod.cservice/ in cservice.h/cservice.cc it is declared a new timer looking after users expiration.
This can be fine tuned within cservice.example.conf
"users_expire_days"
config line.
For this, and for the channel expiration it is valid the
"hour_seconds" and "day_seconds" config lines.
The "users_db_idle" is the time interval in hours to check the users for the lastseen value.
=============================================================================
* Expiration of channels within gnuworld, with setting the proper MIA, LOCKED, DESC, URL's
-----------------------------------------------------------------------------
It is well known the steps of channel expiration, this does the same in automatic way.
In cservice.example.conf there are config lines for this
#
# Frequncy for check database for for channels for missing managers(in hours)
# cannot be 0, default 3 will be used
channels_db_idle = 1
# Set hour length in seconds
# (appliabale only for "new" features user and channel expires
# cannot be 0; 1 will be used
hour_seconds = 3600
# Set day length in seconds
# (appliabale only for "new" features user and channel expires
# cannot be 0; 1 will be used
day_seconds = 86400
#
# Set MIA flag on channels where manager missing for
# 0 = never expire
MIA_start_days = 21
#
# Purge MIA flagged channels after
#
MIA_end_days = 30
#
# Description for MIA starting period
#
MIA_start_desc = Manager has failed to login. To vote for new manager send mail to cservice@undernet.org
#
# MIA URL
#
MIA_URL = Only 400+ Ops
#
# Description for MIA ending period (manager has logged in)
#
MIA_end_desc = Manager has logged in. This was the last warning for failure to login
If the manager has logged in in the MIA period, a CAUTION channel flag will be set (LOCKED,MIA will be removed),
what will cause an immediate channel purge next time when the manager fails to log in in time.
=============================================================================
* Automode VOICE/OP are Not allowed in any kind below the required access levels.
-----------------------------------------------------------------------------
Everyone knows that automode voice/op can be set starting with 1 access. This is an issue to fix,
So:
-> *x* modinfo #coder-com access Seven 24
-X- Modified Seven's access level on channel #coder-com to 24
-> *x* modinfo #coder-com automode seven op
-X- Target user Seven on channel #coder-com has insufficient access for an automode OP
-> *x* modinfo #coder-com automode seven voice
-X- Target user Seven on channel #coder-com has insufficient access for an automode VOICE
-> *x* modinfo #coder-com access Seven 25
-X- Modified Seven's access level on channel #coder-com to 25
-> *x* modinfo #coder-com automode seven voice
-X- Set AUTOMODE to VOICE for Seven on channel #coder-com
-> *x* modinfo #coder-com automode seven op
-X- Target user Seven on channel #coder-com has insufficient access for an automode OP
-> *x* modinfo #coder-com access Seven 99
-X- Modified Seven's access level on channel #coder-com to 99
-> *x* modinfo #coder-com automode seven op
-X- Target user Seven on channel #coder-com has insufficient access for an automode OP
-> *x* modinfo #coder-com access Seven 100
-X- Modified Seven's access level on channel #coder-com to 100
-> *x* modinfo #coder-com automode seven op
-X- Set AUTOMODE to OP for Seven on channel #coder-com
In addition if channel has a userflag VOICE/OP, when the access level is modified to the required level, it will get the automode,
if the access is modified below, it will be lost, set to NONE.
=============================================================================
* RENAMECommand of the usernames
-----------------------------------------------------------------------------
-X- SYNTAX: RENAME <old_username> <new_username>
-> *x* rename seven George
-X- Successfully renamed username Seven to George
It is required an admin access level level::rename in mod.cservice/levels.h
=============================================================================
* Reimplemented NOFORCE channel flag
-----------------------------------------------------------------------------
Noforce channel flag prevents admins to force themselves on a channel.
-> *x* set #cservice noforce on
-X- NOFORCE for #cservice is ON
-X- Channel #cservice has 2 users (2 operators)
-X- Mode is: +tnR
-X- I'm currently in this channel.
-X- MassDeopPro: 3
-X- Flags set: NOFORCE AUTOJOIN
-X- Auth:
-> *x* force #cservice
-X- The NOFORCE flag is set on #cservice
Requires an adminlevel level::set::noforce
=============================================================================
* Implemented NOVOICE channel flag, homologous as NOOP
-----------------------------------------------------------------------------
/msg X set #anychan NOVOICE <on|off>
=============================================================================
* REGISTER command is available to normal users, to start a new channel registration from irc
-----------------------------------------------------------------------------
/msg X register #channel
and than follow X's instructions!
The admin registration method remains:
/msg X register #channel [targetuser]
=============================================================================
* NOTAKE channel flag prevents 'takeover' banning *!*@* through X
-----------------------------------------------------------------------------
/msg X set #channel NOTAKE <on|off>
The revenge action can be 3 types:
/msg X set #channel TAKEREVENGE <IGNORE|BAN|SUSPEND>
IGNORE - simply will do nothing on ban *!*@*
BAN - will ban and kick the person for 100 days at level 500
SUSPEND - will ban and kick and suspend for 100 days 500 level
=============================================================================
* PURGE command can delete users too
-----------------------------------------------------------------------------
/msg X purge <#channel|username>
If a username is provided, then will delete it.
=============================================================================
* Other minor enhancements
-----------------------------------------------------------------------------
* On Channel join (bursting channels) X looks after NOOP and NOVOICE channel flag, and deop/devoice everyone.
* Ban nicklength is now 50 instead of maximum of 15, ident legth is 25 instead of 12.
* Channel description length is now can be 128 charcters long, url is 75 charcters long.
Don't forget to adjust ircu's values too if needed.
* On user suspension on a channel, all logged clients corresponding the suspended account will be deopped instantaneously.
* On global user suspension, all clients corresponding to logged user, on all channels where is opped will be deopped instantaneously.

328
README.md Normal file
View File

@ -0,0 +1,328 @@
# 🌐 GNUWorld — Servicii IRC pentru Undernet/P10
## Prezentare Generală
**GNUWorld** este un cadru (framework) de servicii IRC scris în **C++**, proiectat pentru rețele bazate pe protocolul **P10** (ircu/Undernet). Arhitectura este modulară, permițând încărcarea dinamică a clienților de servicii (CService, CControl, ChanFix, DroneScan etc.) prin intermediul bibliotecii `libtool` (`lt_dlopen`).
Proiectul este o adaptare și extensie a GNUWorld original, personalizat pentru nevoile rețelei **Underchat**.
---
## 📐 Arhitectura Generală
### Ierarhia de Clase Principale
```
NetworkTarget ← Clasa de bază (adresare numerică P10 base64: YY + XXX)
├── iClient ← Utilizator de rețea (nick, user, host, moduri, canale)
├── iServer ← Server de rețea (uplink, stare burst, flag-uri)
├── xClient (+ TimerHandler) ← Client de servicii (bază pentru module: cservice, ccontrol etc.)
└── xServer (+ ConnectionManager ← Serverul principal — inima sistemului
+ ConnectionHandler
+ NetworkTarget)
Channel ← Canal IRC (moduri, utilizatori, ban-uri)
ChannelUser ← Asociere utilizator-canal (op, voice, half-op)
xNetwork ← Container global — stochează toți clienții, serverele și canalele
```
### Componentele Cheie
| Componentă | Locație | Descriere |
|---|---|---|
| **xServer** | `include/server.h`, `src/server.cc`, `src/main.cc` | Serverul principal — bucla de evenimente, gestionarea conexiunii, rutarea mesajelor |
| **xClient** | `include/client.h` | Clasa de bază pentru toate modulele de servicii |
| **xNetwork** | `include/Network.h`, `src/Network.cc` | Containerul global al rețelei — tabele pentru clienți, servere, canale |
| **ConnectionManager** | `libgnuworld/ConnectionManager.h`, `libgnuworld/ConnectionManager.cc` | Gestionarea conexiunilor I/O prin `select()` |
| **iClient / iServer** | `include/iClient.h`, `include/iServer.h` | Reprezentarea entităților de rețea |
| **Channel / ChannelUser** | `include/Channel.h`, `include/ChannelUser.h` | Reprezentarea canalelor și a utilizatorilor din canale |
| **Baza de Date** | `db/gnuworldDB.h`, `db/pgsqlDB.h` | Strat abstract cu implementare PostgreSQL |
---
## 🔄 Bucla Principală de Evenimente
Punctul de intrare este `main()` din `src/main.cc`, care instanțiază `xServer` și apelează `run()``mainLoop()`.
### Fluxul `mainLoop()` (din `src/main.cc`, linia 335):
```
┌─────────────────────────────────────────────┐
│ while( keepRunning ) │
│ │
│ 1. Verifică reconectarea (dacă e cazul) │
│ 2. Verifică dacă este ultima iterație │
│ 3. Calculează timeout-ul pe baza timerelor │
│ 4. ConnectionManager::Poll(seconds) │
│ └─> select() pe toate socket-urile │
│ └─> handleRead() / handleWrite() │
│ └─> OnRead() → Process() → dispatch │
│ 5. CheckTimers() — execută timerele │
│ 6. Verifică semnalele (Signal::getSignal) │
│ 7. PostSignal() către module │
│ │
│ La ieșire: doShutdown() │
└─────────────────────────────────────────────┘
```
### Multiplexarea I/O — `select()`
`ConnectionManager::Poll()` (din `libgnuworld/ConnectionManager.cc`, linia 559) folosește apelul **`select()`** clasic:
- Iterează prin `handlerMap` (mapare `ConnectionHandler* → set<Connection*>`)
- Configurează `fd_set` (readfds / writefds) pentru fiecare conexiune
- Apelează `::select(1 + highestFD, &readfds, &writefds, 0, &to)`
- Procesează rezultatele: citire, scriere, conexiuni noi, timeout-uri
> ⚠️ **Observație:** Se folosește `select()` și nu `poll()`/`epoll()`. Aceasta este o limitare pentru rețele foarte mari (limita FD_SETSIZE, de obicei 1024).
---
## 🔗 Procesarea BURST și Sincronizarea cu Rețeaua
Sincronizarea cu rețeaua urmează protocolul P10 complet:
### Secvența de Burst:
```
1. msg_Server → Creează iServer pentru uplink, pornește burst-ul
2. msg_S → Adaugă servere noi (EVT_NETJOIN)
3. msg_N → Adaugă clienți de rețea (iClient) în timpul burst-ului
4. msg_B → BURST canale: moduri, utilizatori (base64), ban-uri
(libircu/msg_B.cc — 541 linii, parser complex)
5. msg_EB → End of Burst:
├─ setUseHoldBuffer(false) — eliberează bufferul reținut
├─ BurstClients() — trimite clienții de servicii
├─ BurstChannels() — trimite canalele serviciilor
├─ setBursting(false)
├─ PostEvent(EVT_BURST_CMPLT)
├─ Trimite EB + EA
└─ WriteBurstBuffer() — golește datele reținute
6. msg_EA → End of Burst Acknowledge — confirmă sincronizarea
```
### Mecanismul `burstHoldBuffer`:
În timpul burst-ului, `Write()` redirecționează datele într-un `burstHoldBuffer` separat (variabila `useHoldBuffer`). Aceasta previne trimiterea prematură de date către rețea înainte ca sincronizarea să fie completă. După `msg_EB`, datele sunt transferate în bufferul normal de ieșire prin `WriteBurstBuffer()`.
---
## 🧩 Sistemul de Module (Pluginuri)
### Încărcare Dinamică
Modulele sunt încărcate prin `libtool` (`lt_dlopen`) folosind clasa template `moduleLoader<>` din `include/moduleLoader.h`.
**Două tipuri de module:**
1. **Module de Servicii** (`xClient`) — încărcate prin `loadClients()`:
- Fiecare subclasează `xClient`
- Exportă o funcție fabrică: `_gnuwinit_<nume>(configFile)`
- Exemple: `mod.cservice`, `mod.ccontrol`, `mod.chanfix`
2. **Handlere de Comenzi Server** (`ServerCommandHandler`) — încărcate prin `loadCommandHandlers()`:
- Fiecare procesează un mesaj P10 specific (B, N, Q, M, J, etc.)
- Exportă: `_gnuwinit_<msg_X>(xServer*)`
- Locație: `libircu/msg_*.cc` (~42 de handlere)
- Macrourile `CREATE_HANDLER` / `CREATE_LOADER` simplifică declararea
### Handlere P10 Disponibile (libircu/)
| Token | Handler | Descriere |
|---|---|---|
| `B` | `msg_B` | BURST — sincronizare canale |
| `N` | `msg_N` | NICK — client nou / schimbare nick |
| `S` | `msg_S` | SERVER — server nou |
| `J` | `msg_J` | JOIN — intrare în canal |
| `L` | `msg_L` | PART — ieșire din canal |
| `Q` | `msg_Q` | QUIT — deconectare client |
| `M` | `msg_M` | MODE — schimbare moduri |
| `P` | `msg_P` | PRIVMSG — mesaj privat |
| `K` | `msg_K` | KICK — eliminare din canal |
| `G` / `GL` | `msg_G` / `msg_GL` | GLINE — ban global |
| `EB` | `msg_EB` | End of Burst |
| `EA` | `msg_EA` | End of Burst Acknowledge |
| `SQ` | `msg_SQ` | SQUIT — deconectare server |
| `AC` | `msg_AC` | ACCOUNT — autentificare |
| `T` | `msg_T` | TOPIC |
| `CM` | `msg_CM` | CLEARMODE |
| `W` | `msg_W` | WHOIS |
| `I` | `msg_I` | INVITE |
| `XQ` / `XR` | `msg_XQ` / `msg_XR` | Interogări/Răspunsuri extinse |
---
## 📊 Sistemul de Evenimente
### Evenimente de Rețea (definite în `include/events.h`):
| Eveniment | Descriere |
|---|---|
| `EVT_NICK` | Client nou conectat |
| `EVT_QUIT` | Client deconectat |
| `EVT_KILL` | Client eliminat (kill) |
| `EVT_CHNICK` | Schimbare de nick |
| `EVT_OPER` | Operator IRC |
| `EVT_NETJOIN` | Server nou conectat |
| `EVT_NETBREAK` | Server deconectat (netsplit) |
| `EVT_BURST_CMPLT` | Burst complet |
| `EVT_BURST_ACK` | Confirmare burst |
| `EVT_GLINE` / `EVT_REMGLINE` | Adăugare/Ștergere GLINE |
| `EVT_ACCOUNT` | Autentificare cont |
### Evenimente de Canal:
| Eveniment | Descriere |
|---|---|
| `EVT_JOIN` | Intrare în canal |
| `EVT_PART` | Ieșire din canal |
| `EVT_KICK` | Eliminare din canal |
| `EVT_TOPIC` | Schimbare topic |
| `EVT_CREATE` | Canal creat |
Modulele se înregistrează prin `RegisterEvent()` / `RegisterChannelEvent()` și primesc notificări prin `OnEvent()` / `OnChannelEvent()`.
---
## 🗄️ Baza de Date
### Arhitectura:
```
gnuworldDB (abstract) ← db/gnuworldDB.h — Interfață abstractă (Exec, isConnected)
└── pgsqlDB ← db/pgsqlDB.h — Implementare PostgreSQL (libpq)
```
### Modele SQL per Modul (exemplu: mod.cservice):
| Clasă | Fișier | Descriere |
|---|---|---|
| `sqlUser` | `mod.cservice/sqlUser.h` | Utilizator CService |
| `sqlChannel` | `mod.cservice/sqlChannel.h` | Canal înregistrat |
| `sqlLevel` | `mod.cservice/sqlLevel.h` | Nivel de acces utilizator-canal |
| `sqlBan` | `mod.cservice/sqlBan.h` | Ban pe canal |
Scripturile SQL de inițializare se găsesc în directorul `doc/` (`cservice.sql`, `ccontrol.sql`, etc.).
---
## ⚠️ Gestionarea Memoriei — Probleme Identificate
### Folosire exclusivă de `new`/`delete` brut
Codul nu utilizează **deloc** smart pointers (`std::unique_ptr`, `std::shared_ptr`). Toate alocările sunt manuale:
```cpp
// Exemple de alocare tipice:
iClient* theClient = new (std::nothrow) iClient(...);
Channel* theChan = new (std::nothrow) Channel(...);
ChannelUser* chanUser = new (std::nothrow) ChannelUser(theClient);
```
### Zone Critice de Dealocare:
| Locație | Ce se dezalocă |
|---|---|
| `xServer::doShutdown()` | Clienți locali, clienți de rețea, canale, servere, gline-uri, timere |
| `xNetwork::removeClient()` | `ChannelUser` asociați, canale goale |
| `xNetwork::removeServer()` | Toți clienții de pe serverul eliminat |
| `msg_Q::Execute()` | iClient la QUIT |
| `msg_B::Execute()` | Channel + ChannelUser la BURST (cu verificare de erori) |
### Potențiale Scurgeri de Memorie:
1. **`doShutdown()` — Iterare cu break prematur:** Buclele de cleanup iterează și fac `break` dacă containerul devine gol, dar sar elemente intermediare dacă mai sunt.
2. **`msg_B::parseBurstBans()`** — Vectorul de ban-uri este creat cu `st.size()` elemente goale *și* apoi se face `push_back`, rezultând elemente duplicate goale.
3. **`channelEventMap`** — Listele alocate cu `new` pentru evenimentele de canal trebuie dezalocate manual.
4. **Excepții negestionate** — Fără RAII, orice excepție între `new` și `delete` creează o scurgere.
---
## 📁 Structura Directoarelor
```
underchat-gnuworld/
├── src/ ← Codul sursă principal (main.cc, server.cc, Network.cc)
├── include/ ← Fișierele header principale
├── libircu/ ← Handlere protocol P10 (msg_*.cc — ~42 fișiere)
├── libgnuworld/ ← Biblioteci auxiliare (ConnectionManager, ELog, EConfig, Buffer)
├── db/ ← Stratul de bază de date (abstract + PostgreSQL)
├── mod.cservice/ ← Modulul CService (X) — managementul canalelor
├── mod.ccontrol/ ← Modulul CControl — administrare rețea
├── mod.chanfix/ ← Modulul ChanFix — reparare canale
├── mod.dronescan/ ← Modulul DroneScan — detectare boți
├── mod.nickserv/ ← Modulul NickServ — servicii de nick
├── mod.openchanfix/ ← Modulul OpenChanFix
├── mod.scanner/ ← Modulul Scanner
├── mod.snoop/ ← Modulul Snoop — monitorizare
├── mod.stats/ ← Modulul Stats — statistici
├── mod.cloner/ ← Modulul Cloner (testare)
├── mod.gnutest/ ← Modulul de test
├── mod.clientExample/ ← Exemplu de modul client
├── bin/ ← Fișiere de configurare (.conf, .sh)
├── doc/ ← Documentație și scripturi SQL
├── contrib/ ← Utilitare auxiliare
├── test/ ← Teste
└── tools/ ← Unelte de dezvoltare
```
---
## ⚙️ Compilare și Instalare
### Cerințe:
- **Compilator C++** (GCC / G++ — standard pre-C++11)
- **PostgreSQL** (libpq-dev)
- **libtool** (pentru încărcarea dinamică a modulelor)
- **autotools** (autoconf, automake)
### Pași de compilare:
```bash
./autogen.sh
./configure
make
make install
```
### Configurare:
Fișierele de configurare se găsesc în directorul `bin/`:
- `GNUWorld.example.conf.in` — Configurația principală a serverului
- `cservice.example.conf.in` — Configurația CService
- `ccontrol.example.conf.in` — Configurația CControl
- Alte fișiere `.conf.in` pentru fiecare modul
---
## 🔧 Recomandări de Modernizare
| Zonă | Starea Curentă | Recomandare |
|---|---|---|
| **Multiplexare I/O** | `select()` | Migrare la `epoll()` (Linux) sau `kqueue()` (BSD) |
| **Gestionare Memorie** | `new`/`delete` brut | Adoptare `std::unique_ptr` / `std::shared_ptr` (RAII) |
| **Standard C++** | Pre-C++11 | Migrare la C++17 minim |
| **Încărcare Module** | `libtool` (`lt_dlopen`) | `dlopen()` nativ sau C++20 modules |
| **Bază de Date** | PostgreSQL sincron | Query-uri asincrone (`PQsendQuery`) |
| **Parsare Stringuri** | `StringTokenizer` propriu | `std::string_view` + `std::regex` |
| **Logging** | `ELog` propriu / `log4cplus` opțional | Standardizare pe `spdlog` sau similar |
| **Testare** | Minimală | Adăugare teste unitare (Google Test / Catch2) |
---
## 📜 Licență
Acest proiect este distribuit sub licența **GNU General Public License v2** (GPL-2.0).
---
## 🤝 Contribuții
Proiect menținut de echipa **Underchat**. Contribuțiile sunt binevenite prin intermediul serverului Gitea:
🔗 **Repository:** [https://gitlab.back.ro/underchat/gnuworld.git](https://gitlab.back.ro/underchat/gnuworld.git)
---
*Generat pe baza analizei codului sursă — Martie 2026*

5
TODO Normal file
View File

@ -0,0 +1,5 @@
- ****** DOCUMENTATION!!!! ******
- Improve how the configure script detects the postgresql installation
- Remove the link against the pgsql library in modules, if they need the
db interface they should just link against the db library

25
ac_cxx_namespaces.m4 Normal file
View File

@ -0,0 +1,25 @@
dnl @synopsis AC_CXX_NAMESPACES
dnl
dnl If the compiler can prevent names clashes using namespaces, define
dnl HAVE_NAMESPACES.
dnl
dnl @category Cxx
dnl @author Todd Veldhuizen
dnl @author Luc Maisonobe <luc@spaceroots.org>
dnl @version 2004-02-04
dnl @license AllPermissive
AC_DEFUN([AC_CXX_NAMESPACES],
[AC_CACHE_CHECK(whether the compiler implements namespaces,
ac_cv_cxx_namespaces,
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
AC_TRY_COMPILE([namespace Outer { namespace Inner { int i = 0; }}],
[using namespace Outer::Inner; return i;],
ac_cv_cxx_namespaces=yes, ac_cv_cxx_namespaces=no)
AC_LANG_RESTORE
])
if test "$ac_cv_cxx_namespaces" = yes; then
AC_DEFINE(HAVE_NAMESPACES,,[define if the compiler implements namespaces])
fi
])

10261
aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

10
autogen.sh Normal file
View File

@ -0,0 +1,10 @@
#!/bin/sh
# Regenerate auto-tools stuff...
aclocal
autoconf
libtoolize --automake --copy --ltdl
autoheader
automake -a -c

19505
autom4te.cache/output.0 Normal file

File diff suppressed because it is too large Load Diff

76
autom4te.cache/requests Normal file
View File

@ -0,0 +1,76 @@
# This file was generated by Autom4te Sun May 1 09:53:53 UTC 2011.
# It contains the lists of macros which have been traced.
# It can be safely removed.
@request = (
bless( [
'0',
1,
[
'/usr/share/autoconf'
],
[
'/usr/share/autoconf/autoconf/autoconf.m4f',
'aclocal.m4',
'configure.ac'
],
{
'_LT_AC_TAGCONFIG' => 1,
'AM_PROG_F77_C_O' => 1,
'AC_INIT' => 1,
'm4_pattern_forbid' => 1,
'AC_CANONICAL_TARGET' => 1,
'_AM_COND_IF' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'AC_SUBST' => 1,
'AC_CANONICAL_HOST' => 1,
'AC_FC_SRCEXT' => 1,
'AC_PROG_LIBTOOL' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AM_PATH_GUILE' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'LT_CONFIG_LTDL_DIR' => 1,
'AC_CONFIG_LINKS' => 1,
'AC_REQUIRE_AUX_FILE' => 1,
'm4_sinclude' => 1,
'LT_SUPPORTED_TAG' => 1,
'AM_MAINTAINER_MODE' => 1,
'AM_NLS' => 1,
'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
'_m4_warn' => 1,
'AM_MAKEFILE_INCLUDE' => 1,
'AM_PROG_CXX_C_O' => 1,
'_AM_COND_ENDIF' => 1,
'_AM_MAKEFILE_INCLUDE' => 1,
'AM_ENABLE_MULTILIB' => 1,
'AM_PROG_MOC' => 1,
'AM_SILENT_RULES' => 1,
'AC_CONFIG_FILES' => 1,
'include' => 1,
'LT_INIT' => 1,
'AM_GNU_GETTEXT' => 1,
'AM_PROG_AR' => 1,
'AC_LIBSOURCE' => 1,
'AC_CANONICAL_BUILD' => 1,
'AM_PROG_FC_C_O' => 1,
'AC_FC_FREEFORM' => 1,
'AH_OUTPUT' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'AM_PROG_CC_C_O' => 1,
'sinclude' => 1,
'm4_pattern_allow' => 1,
'AM_CONDITIONAL' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AM_XGETTEXT_OPTION' => 1,
'AC_CONFIG_HEADERS' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AM_POT_TOOLS' => 1,
'm4_include' => 1,
'_AM_COND_ELSE' => 1,
'AC_SUBST_TRACE' => 1
}
], 'Autom4te::Request' )
);

1011
autom4te.cache/traces.0 Normal file

File diff suppressed because it is too large Load Diff

48
ax_boost_thread.m4 Normal file
View File

@ -0,0 +1,48 @@
dnl @synopsis AX_BOOST_THREAD
dnl
dnl This macro checks to see if the Boost.Thread library is installed.
dnl It also attempts to guess the currect library name using several
dnl attempts. It tries to build the library name using a user supplied
dnl name or suffix and then just the raw library.
dnl
dnl If the library is found, HAVE_BOOST_THREAD is defined and
dnl BOOST_THREAD_LIB is set to the name of the library.
dnl
dnl This macro calls AC_SUBST(BOOST_THREAD_LIB).
dnl
dnl @category InstalledPackages
dnl @author Michael Tindal <mtindal@paradoxpoint.com>
dnl @version 2004-09-20
dnl @license GPLWithACException
AC_DEFUN([AX_BOOST_THREAD],
[AC_REQUIRE([AC_CXX_NAMESPACES])dnl
AC_CACHE_CHECK(whether the Boost::Thread library is available,
ax_cv_boost_thread,
[AC_LANG_SAVE
AC_LANG_CPLUSPLUS
CXXFLAGS_SAVE=$CXXFLAGS
dnl FIXME: need to include a generic way to check for the flag
dnl to turn on threading support.
CXXFLAGS="-pthread $CXXFLAGS"
AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[#include <boost/thread/thread.hpp>]],
[[boost::thread_group thrds; return 0;]]),
ax_cv_boost_thread=yes, ax_cv_boost_thread=no)
CXXFLAGS=$CXXFLAGS_SAVE
AC_LANG_RESTORE
])
if test "$ax_cv_boost_thread" = yes; then
AC_DEFINE(HAVE_BOOST_THREAD,,[define if the Boost::Thread library is available])
dnl Now determine the appropriate file names
AC_ARG_WITH([boost-thread],AS_HELP_STRING([--with-boost-thread],
[specify the boost thread library or suffix to use]),
[if test "x$with_boost_thread" != "xno"; then
ax_thread_lib=$with_boost_thread
ax_boost_thread_lib=boost_thread-$with_boost_thread
fi])
for ax_lib in $ax_thread_lib $ax_boost_thread_lib boost_thread; do
AC_CHECK_LIB($ax_lib, main, [BOOST_THREAD_LIB=-l$ax_lib break])
done
AC_SUBST(BOOST_THREAD_LIB)
fi
])dnl

10
bin/.arch-inventory Normal file
View File

@ -0,0 +1,10 @@
precious ^.*(\.conf)$
precious ^server_command_map$
precious ^gnuworld
backup \.log$
backup ^core$
backup ^gnuworld
backup \.log$
backup ^core$

44
bin/.cvsignore Normal file
View File

@ -0,0 +1,44 @@
*.la
*.so
*.0
*.log
*.Log
gnuworld.pid
gnuworld
ccontrol.conf
cservice.conf
GNUWorld.conf
cloner.conf
nickserv.conf
openchanfix.conf
stats.conf
scanner.conf
clientExample.conf
gnutest.conf
EVT_*
*.example.conf
users_per_channel
channels_per_user
Server_UnJupe
Server_Jupe
Oper_Up
Nick_Change
Net_Join
Net_Break
Gline_Remove
Gline_Add
Client_Quit
Client_Kill
Client_Connect
Channel_Topic_Change
Channel_Part
Channel_Kick
Channel_Join
Channel_Create
Burst_Complete
Burst_Acknowledge
Account_Login
server_command_map
logging.properties
.arch-ids

View File

@ -0,0 +1,74 @@
# $Id: GNUWorld.example.conf.in,v 1.15 2006/12/22 06:41:41 kewlio Exp $
# GNUWorld Core Configuration File
#
uplink = 127.0.0.1
port = 4400
password = 54321
name = channels.yournetwork.org
description = UnderNet Services
numeric = 51
# Set this variable to yes if you want the server to attempt
# to auto_reconnect when a connection is terminated, set
# to no otherwise.
# Be careful using this.
auto_reconnect = yes
# There is currently a bug in ircu which causes the first client
# of a multiclient server to be lost, but only if maxclients is set
# to an even number.
# Therefore, only use odd numbers for maxclients here.
maxclients = 1023
# This is the variable which defines the host suffix to be concatenated
# onto the user's account name for host hiding.
hidden_host_suffix = .users.yournetwork.org
# command_map is the name of the file which contains the mappings
# from module filenames (of server command handlers) to the
# message name to which it is associated.
# You probably will not need to ever change this.
command_map = server_command_map
# libdir is the path to the directory containing
# the gnuworld modules
libdir = ../lib
# To use a certain module, uncomment it below.
#module = libcservice.la cservice.example.conf
#module = libccontrol.la ccontrol.example.conf
#module = libchanfix.la openchanfix.example.conf
#module = libcloner.la cloner.example.conf
#module = libnickserv.la nickserv.example.conf
#module = libstats.la stats.example.conf
#module = libscanner.la scanner.example.conf
#module = libgnutest.la gnutest.example.conf
#module = libclientExample.la clientExample.example.conf
#module = libdronescan.la dronescan.example.conf
#module = libsnoop.la snoop.example.conf
# Control nicknames
# List here the nicknames to which you want the server to respond
# for control commands.
# You need not list any, it could be construed as a security
# risk, but adds very nice functionality.
# No clients are burst for control, instead control commands
# must be sent via MSG controlnick@server.name <command>
controlnick = control
# List the AC account usernames for those users you want to
# have access to the control commands.
# Be careful who you choose for this.
# AC account usernames are case sensitive.
allowcontrol = reppir
#################################################
# It is safe to leave the rest of this file alone
# These variables are for fine tuning
# The time between checks for expired glines (seconds)
glineUpdateInterval = 15
# The time between pings to the uplink (seconds)
pingUpdateInterval = 60

View File

@ -0,0 +1,88 @@
# $Id: ccontrol.example.conf.in,v 1.4 2009/06/09 05:55:55 hidden1 Exp $
# conf file for testClient
# database specifications
sql_host = 127.0.0.1
sql_port = 5432
# sql_db = Name of the database.
sql_db = ccontrol
#if you dont need user/pass just leave it with ''
sql_user = gnuworld
sql_pass = foo
# The following fields are required
username = UWorld
nickname = UWorld
hostname = UWorld.undernet.org
userdescription = UWorld
operchanmodes = +isn
mode = +iodkw
# make sure channel names are preceeded
# by the '#' character
operchan = #coder-com
# msgchan is also an operchan
msgchan = #coder-com
# Default gline length (in seconds)
glength = 3600
# Default reason for adding an oper chan
operchanreason = This is now an IRC Operator only channel
# Maximum numbers of channels to show with LIST channels command
# 0 = all
maxlistchannels = 0;
# report specification
# abuse_mail - the email that the report should be emailed to
abuse_mail = abuse@yournet.org
# ccemail - the email that ccontrol will put in the from field
# of the report
ccemail = uworld-report@yourdomain.com
# sendmail - full path to the sendmail program
sendmail = /usr/sbin/sendmail
# mail_report - set 1 for the bot to mail the report
# set to 0 if you dont want a report to be mailed
mail_report = 0
# gline_interval - the interval in which ccontrol should check
# for expired glines
gline_interval = 3600
# max_connection - the maximum connections a host can have before glined
max_connection = 5
# max_GLen - the length of the gline the for excessive
# connection (in seconds)
max_GLen = 86400
# max_threads - maximum number of gate checking threads to start
max_threads = 100
# check_gates - set 1 for the bot to check for open gates, or 0 for not
check_gates = 0
# check_clones - set 1 for the bot to check for clones, or 0 for not
check_clones = 0
# Expired_Interval
Expired_interval = 60
# dbinterval
dbinterval = 60
# showCGIpsInLogs - If set to 1, it shows channel glines IPs in lastcom logs and in daily logs sent by email
showCGIpsInLogs = 1
# AnnounceNick - Nick used by the fake client to make announcements using the ANNOUNCE command
AnnounceNick = A

View File

@ -0,0 +1,27 @@
# Configuration file for the GNUWorld ChanFix module
username = ChanFix
nickname = CF
hostname = undernet.org
userdescription = GNUWorld ChanFix
mode = +idk
# Console channel
consoleChannel = #chanfix
# Console channel modes
consoleModes = +ns
# Delay between linking and starting to count in seconds
startDelay = 120
# Number of points to allocate to an authed op per period
pointsAuth = 10
# Duration of a single period in seconds
period = 60
# Maximum points a user can gain
# Set this to be equal to 24 hours of ops
# ie (24*60*60) * (pointsAuth / period)
maxPoints = 100

View File

@ -0,0 +1,8 @@
# $Id: clientExample.example.conf.in,v 1.2 2003/06/05 01:38:01 dan_karrels Exp $
# conf file for testClient
username = clientEx
nickname = clientEx
hostname = undernet.org
userdescription = GNUWorld Test Client
mode = +i

View File

@ -0,0 +1,83 @@
# $Id: cloner.example.conf.in,v 1.5 2005/01/08 23:33:41 dan_karrels Exp $
# Configuration file for Cloner (mod.cloner)
# The following fields pertain to the client that connects and
# provides an interface to the server
username = Cloner
nickname = Cloner
hostname = undernet.org
userdescription = I am the clone man!
# The mode for the cloning client
mode = +iodk
# permit the given user -- by account login name -- to use the
# module. You may have as many of these as you like (including none).
# This is case-insensitive.
permit_user = reppir
permit_user = someotherusername
# Set this to true if you want to permit opers to use the module,
# set to false otherwise (will not affect other users who have access)
allow_opers = true
########
# The following fields are information about the clones
# and the server created to host them.
# The name of the server to which to connect the clones
fakeservername = spawn.undernet.org
# The server description of the fake clone server
fakeserverdescription = Clones really are my bag baby!
# fakehost's are used for clone host names
# There may be as many as you like
fakehost=this.is.a.fake.host.com
fakehost=whitehouse.gov
fakehost=cia.gov
fakehost=fbi.gov
fakehost=clone.fbi.gov
fakehost=i.hacked.cia.gov
fakehost=osd.gov
fakehost=af.mil
fakehost=army.mil
fakehost=marines.mil
fakehost=navy.mil
fakehost=coastguard.mil
# fakeuser's are used for clone usernames
# There may be as many as you like
fakeuser=bill
fakeuser=mcnamara
fakeuser=hillary
fakeuser=mccain
fakeuser=gore
fakeuser=big_al
fakeuser=george
fakeuser=cheney
fakeuser=lott
fakeuser=blair
fakeuser=bigdick
fakeuser=rumsfeld
fakeuser=hw
fakeuser=tenet
fakeuser=graham
fakeuser=clarke
fakeuser=rice
# Real name field of each clone
clonedescription = This is a clone, this is only a clone...
# Modes that each clone needs to set
clonemode = +d
# The minimum length of a clone nickname
minnicklength = 5
# The maximum length of a clone nickname (default max on normal
# non-edited IRCu is 9)
maxnicklength = 9
# The max number of clones to burst on each iteration
cloneburstcount = 35

322
bin/cservice.conf Normal file
View File

@ -0,0 +1,322 @@
# $Id: cservice.example.conf.in,v 1.9 2005/12/06 18:12:44 kewlio Exp $
# Channel Services configuration file.
#
# sql_host = Hostname/IP of the PostgreSQL server.
sql_host = 10.1.100.252
sql_port = 5432
# sql_db = Name of the database.
# (To create from the template, run cservice.sql through Postgres)
sql_db = cservice
# sql_user is the username to pass to Postgres on connection.
# Usefull if your account name is not the same as your Database
# username.
sql_user = gnuworld
sql_pass = foo
# General 'Bot' options.
nickname = X
username = cservice
hostname = underchat.org
userdescription = For help type: /msg X help
mode = +idk
#
# Channel to relay flood/warnings/exceptions, etc.
#
pending_page_url = http://cservice.underchat.org/live/view_app.php
relay_channel = #CSC
#
# Channel to relay useful information, but not quite as annoying
# as the debug_channel ! (a.k.a privileged user relay channel)
#
priv_relay_channel = #CSC
#
# Channel to relay useful debug information that otherwise
# annoy CS admins. :)
#
debug_channel = #CSC
#
# Coder channel.
#
# Channel used to extract levels to display coder access status.
coder_channel = #CSC
#
# Frequency in seconds to check the database for updates.
#
update_interval = 180
#
# Number of seconds to sample for flooding.
#
flood_duration = 30
#
# Input flood rate.
#
# Eg: 30, for 30 points amassed within "flood_duration" seconds.
#
input_flood = 3000
#
# Output flood rate.
#
# Eg: 20480 (20k within "flood_duration" seconds).
#
output_flood = 20480
#
# Minimum duration at which to set a topic in a non idle channel.
# (Seconds).
#
topic_duration = 1800
#
# Duration at which we check for idle user accounts in memory.
# (Seconds).
expire_interval = 3600
#
# How long those accounts should have been idle before they are
# uncached. (Seconds).
#
cache_interval = 3600
#
# How often to notify/commit changes to Pending channels.
# (Seconds).
pending_duration = 1800
#
# How often to check if the connection to the backend has
# fallen over? (Seconds).
#
connection_check_frequency = 10
#
# How many times do we try every 'connection_check_frequency' seconds
# to reconnect before finally giving up and exiting?
#
connection_retry_total = 5
#
# How often (in seconds) should we check all channels that have
# floating-limit set to see if they need a new limit setting?
#
# Note: 30 is a good value, try 1min if you have lots of chans
# and not so much CPU.
limit_check = 30
#
# How long (In seconds) should we wait before allowing
# logins after startup. (Incase you're on a busy network
# with a really large burst and need things to settle down
# first to ease up load on the Db).
#
login_delay = 5
#
# What is the period (in seconds) in which we will check to
# see if someone has sent too many notes, and what do we
# define "Too Many" as?
# Ie: You can send 'note_limit' notes in 'note_duration' seconds.
#
note_duration = 3600
note_limit = 5
#
# How many not(ic)es will be stored at one time
# 0 disallowed, 3 will be used
max_notes = 30;
#
# Pre-cache 'x' days worth of user accounts.
# This lets you preload all the users who have logged in during the last
# 'x' number of days to avoid a large number of queries when processing
# +r accounts during the initial net.burst.
#
preload_user_days = 1
#
# Specify the filename for the 'Admin Log'.
# Basically a log of all commands admins type.
#
admin_logfile = admin.log
#
# Specify the filename for the 'Command Log'
# A log of ALL commands issued by ALL users.
# requires USE_COMMAND_LOG in cservice_config.h
command_logfile = cs.log
#
# This option is used only if ALLOW_HELLO is defined in
# cservice_config.h, thus enabling the HELLO command in cservice.
# This is the time to block users attempting to flood the bot with
# hello commands, in seconds.
#
hello_block_period = 3600
#
# If this is set to 1, the password generated for the new user will be sent to the email
# otherwise displayed directly to the user
# ** IMPORTANT: mailutils or mailx package must be installed on your system
hello_sendmail_enabled = 0
#
# Sending email when new user registered
# Define here the "from address"
#
sendmail_from = cservice@underchat.org
#
# What is the period (in seconds) in which we will check for
# new webrelay messages
#
webrelay_interval = 10;
#
# How long the bot should stay in an idle channel before leaving it.
# This only takes into account join/parts, not privmsg.
# Default is 2 days (172800 seconds)
#
part_idle_chan = 172800
#
# Enable/Disable totp authentication (must be enabled in mod.cservice/cservice_config.h on compliation)
# 1 = totp enabled, 0 = totp disabled
enable_totp = 0
#
# Days to expire users
# 0 = never expire
users_expire_days = 365
#
# Set MIA flag on channels where manager missing for
# 0 = never expire
MIA_start_days = 90
#
# Purge MIA flagged channels after
#
MIA_end_days = 100
#
# Frequncy for check database for last seen users(in hours)
# cannot be 0, default 8 will be used
users_db_idle = 1
#
# Frequncy for check database for for channels for missing managers(in hours)
# cannot be 0, default 3 will be used
channels_db_idle = 1
# Set hour length in seconds
# (appliabale only for "new" features user and channel expires
# cannot be 0; 1 will be used
hour_seconds = 3600
# Set day length in seconds
# (appliabale only for "new" features user and channel expires
# cannot be 0; 1 will be used
day_seconds = 86400
#
# Description for MIA starting period
#
MIA_start_desc = Manager has failed to login. To vote for new manager send mail to cservice@underchat.org
#
# MIA URL
#
MIA_URL = Only 400+ Ops
#
# Description for MIA ending period (manager has logged in)
#
MIA_end_desc = Manager has logged in. This was the last warning for failure to login
# # #
# ***** The Judge ***** #
# # #
required_supporters = 2
judge_day_seconds = 360
min_days_before_reg = 1
min_days_before_support = 1
max_concurrent_supports = 3
noreg_days_on_nosupport = 1
reject_app_on_userfraud = 1
rewiev_on_object = 1
rewievs_expire_time = 100
pendings_expire_time = 30
max_days = 3
unique_joins = 5
joins = 10
min_supporters = 2
min_supporters_joins = 2
notify_days = 2
support_days = 1
reviewer_id = 1
# A welcome message for a newly accepted channel
# For empty use '' and it means disabled
welcome_newchan_message = Congratulations! Channel %s has been registered!
# A welcome topic for a newly accepted channel
# For empty use '' and it means disabled. Applies only on empty channel topic.
# TOPIC_TRACK must be #define in \include\gnuworld_config.h
welcome_newchan_topic = *** Congratulations! Your channel application has been accepted! ***
#
# Reserved/restricted hostnames.
# Cannot set by regular users. Wildcard match is accepted.
# The bot's hostname and hiddenhost suffix are automatically added to the list
#

View File

@ -0,0 +1,342 @@
# $Id: cservice.example.conf.in,v 1.9 2005/12/06 18:12:44 kewlio Exp $
# Channel Services configuration file.
#
# sql_host = Hostname/IP of the PostgreSQL server.
sql_host = 127.0.0.1
sql_port = 5432
# sql_db = Name of the database.
# (To create from the template, run cservice.sql through Postgres)
sql_db = cservice
# sql_user is the username to pass to Postgres on connection.
# Usefull if your account name is not the same as your Database
# username.
sql_user = gnuworld
sql_pass = foo
# General 'Bot' options.
nickname = X
username = cservice
hostname = yournetwork.org
userdescription = For help type: /msg X help
mode = +idk
#
# Channel to relay flood/warnings/exceptions, etc.
#
pending_page_url = http://www.yoursite.com/live/view_app.php
relay_channel = #coder-com
#
# Channel to relay useful information, but not quite as annoying
# as the debug_channel ! (a.k.a privileged user relay channel)
#
priv_relay_channel = #coder-com
#
# Channel to relay useful debug information that otherwise
# annoy CS admins. :)
#
debug_channel = #coder-com
#
# Coder channel.
#
# Channel used to extract levels to display coder access status.
coder_channel = #coder-com
#
# Frequency in seconds to check the database for updates.
#
update_interval = 180
#
# Number of seconds to sample for flooding.
#
flood_duration = 30
#
# Input flood rate.
#
# Eg: 30, for 30 points amassed within "flood_duration" seconds.
#
input_flood = 3000
#
# Output flood rate.
#
# Eg: 20480 (20k within "flood_duration" seconds).
#
output_flood = 20480
#
# Minimum duration at which to set a topic in a non idle channel.
# (Seconds).
#
topic_duration = 1800
#
# Duration at which we check for idle user accounts in memory.
# (Seconds).
expire_interval = 3600
#
# How long those accounts should have been idle before they are
# uncached. (Seconds).
#
cache_interval = 3600
#
# How often to notify/commit changes to Pending channels.
# (Seconds).
pending_duration = 1800
#
# How often to check if the connection to the backend has
# fallen over? (Seconds).
#
connection_check_frequency = 10
#
# How many times do we try every 'connection_check_frequency' seconds
# to reconnect before finally giving up and exiting?
#
connection_retry_total = 5
#
# How often (in seconds) should we check all channels that have
# floating-limit set to see if they need a new limit setting?
#
# Note: 30 is a good value, try 1min if you have lots of chans
# and not so much CPU.
limit_check = 30
#
# How long (In seconds) should we wait before allowing
# logins after startup. (Incase you're on a busy network
# with a really large burst and need things to settle down
# first to ease up load on the Db).
#
login_delay = 5
#
# What is the period (in seconds) in which we will check to
# see if someone has sent too many notes, and what do we
# define "Too Many" as?
# Ie: You can send 'note_limit' notes in 'note_duration' seconds.
#
note_duration = 3600
note_limit = 5
#
# How many not(ic)es will be stored at one time
# 0 disallowed, 3 will be used
max_notes = 30;
#
# Pre-cache 'x' days worth of user accounts.
# This lets you preload all the users who have logged in during the last
# 'x' number of days to avoid a large number of queries when processing
# +r accounts during the initial net.burst.
#
preload_user_days = 1
#
# Specify the filename for the 'Admin Log'.
# Basically a log of all commands admins type.
#
admin_logfile = admin.log
#
# Specify the filename for the 'Command Log'
# A log of ALL commands issued by ALL users.
# requires USE_COMMAND_LOG in cservice_config.h
command_logfile = cs.log
#
# This option is used only if ALLOW_HELLO is defined in
# cservice_config.h, thus enabling the HELLO command in cservice.
# This is the time to block users attempting to flood the bot with
# hello commands, in seconds.
#
hello_block_period = 3600
#
# If this is set to 1, the password generated for the new user will be sent to the email
# otherwise displayed directly to the user
# ** IMPORTANT: mailutils or mailx package must be installed on your system
hello_sendmail_enabled = 0
#
# Sending email when new user registered
# Define here the "from address"
#
sendmail_from = cservice@yournetwork.org
#
# What is the period (in seconds) in which we will check for
# new webrelay messages
#
webrelay_interval = 10;
#
# How long the bot should stay in an idle channel before leaving it.
# This only takes into account join/parts, not privmsg.
# Default is 2 days (172800 seconds)
#
part_idle_chan = 172800
#
# Enable/Disable totp authentication (must be enabled in mod.cservice/cservice_config.h on compliation)
# 1 = totp enabled, 0 = totp disabled
enable_totp = 0
#
# Days to expire users
# 0 = never expire
users_expire_days = 60
#
# Set MIA flag on channels where manager missing for
# 0 = never expire
MIA_start_days = 21
#
# Purge MIA flagged channels after
#
MIA_end_days = 30
#
# Frequncy for check database for last seen users(in hours)
# cannot be 0, default 8 will be used
users_db_idle = 1
#
# Frequncy for check database for for channels for missing managers(in hours)
# cannot be 0, default 3 will be used
channels_db_idle = 1
# Set hour length in seconds
# (appliabale only for "new" features user and channel expires
# cannot be 0; 1 will be used
hour_seconds = 3600
# Set day length in seconds
# (appliabale only for "new" features user and channel expires
# cannot be 0; 1 will be used
day_seconds = 86400
#
# Description for MIA starting period
#
MIA_start_desc = Manager has failed to login. To vote for new manager send mail to cservice@undernet.org
#
# MIA URL
#
MIA_URL = Only 400+ Ops
#
# Description for MIA ending period (manager has logged in)
#
MIA_end_desc = Manager has logged in. This was the last warning for failure to login
# # #
# ***** The Judge ***** #
# # #
required_supporters = 2
judge_day_seconds = 360
min_days_before_reg = 1
min_days_before_support = 1
max_concurrent_supports = 3
noreg_days_on_nosupport = 1
reject_app_on_userfraud = 1
rewiev_on_object = 1
rewievs_expire_time = 100
pendings_expire_time = 30
max_days = 5
unique_joins = 5
joins = 15
min_supporters = 2
min_supporters_joins = 3
notify_days = 2
support_days = 1
reviewer_id = 1
# A welcome message for a newly accepted channel
# For empty use '' and it means disabled
welcome_newchan_message = Congratulations! Channel %s has been registered!
# A welcome topic for a newly accepted channel
# For empty use '' and it means disabled. Applies only on empty channel topic.
# TOPIC_TRACK must be #define in \include\gnuworld_config.h
welcome_newchan_topic = *** Congratulations! Your channel application has been accepted! ***
#
# Reserved/restricted hostnames.
# Cannot set by regular users. Wildcard match is accepted.
# The bot's hostname and hiddenhost suffix are automatically added to the list
#
reservedHost = *anyhost.com
reservedHost = *.anyhost2.com

View File

@ -0,0 +1,160 @@
# $Id: dronescan.example.conf.in,v 1.19 2008/11/17 02:54:42 hidden1 Exp $
# What nickname should the bot use?
nickname = E
# What username should the bot use?
username = dronescan
# What hostname should the bot use?
hostname = undernet.org
# What should the bots real name be?
userdescription = Drone Scanner
# What user modes should the bot use?
mode = +idk
# Console channel name and initial modes
consoleChannel = #ds.console
consoleChannelModes = +ntsim
# enable autoTopic when dronescan joins? true or false
setAutoTopic = false
# SQL Setup
sqlHost = 127.0.0.1
sqlPort = 5432
sqlDB = dronescan
sqlUser = gnuworld
sqlPass = dronescan
# Margins
# Be careful with these. I wouldn't touch chanMargin too much but I suspect
# nickMargin will need tweaking from network to network. These defaults were
# taken from a fairly old burst from a small (2k5 user) network so beware!
# The fraction of users who must be `abnormal' in a channel for the channel
# to be reported.
channelMargin = 0.8
# The margin around the average entropy within which a nickname is considered
# `normal'. Outside this margin is `abnormal'. Note this is the margin *either
# side* of the center, ie 0.25 would give a 50% spread - from 25% to 75%.
nickMargin = 0.1
# The channel cutoff is the minimum amount of members a channel must have before
# it can be considered a drone channel.
channelCutoff = 10
# The minimum level of information shown in the console channels. Available
# levels are as follows:
# 0 - DEBUG Random debug things that you very probably are not interested in
# 1 - INFO Informational things - this is usually worth seeing
# 2 - WARN Warnings about drone channels and serious events.
# 3 - ERROR DroneScan core errors.
consoleLevel = 1
# The minimum amount of votes needed for a channel to be considered abnormal
voteCutoff = 30
# The interval (in seconds) during which a channel won't be reported again
# This is to stop repeated spamming of the same channel
dcInterval = 600
# The interval in seconds for how often we should attempt to refresh any
# caches from the database. The refreshes typically only trigger if any
# data has actually changed.
rcInterval = 300
# The level that an opered client without an account should be assumed
# to have.
# If you wish this functionality to be disabled, set the level to 0.
fakeOperLevel = 300
################
# JOIN COUNTER #
################
# The interval over which join counter checks for joins. This is in seconds.
jcInterval = 10
# The trigger level for which join counter warns. Note that the total join
# count must be OVER this level to trigger.
jcCutoff = 10
# The minimum time a client needs to join and part within a flood to be reported/glined
jcMinJoinToGline = 1
# Whether or not to gline join flood clients
jcGlineEnable = 0
# The minimum joins during join-floods required for an IP to be glined without a part (Can be on multiple channels)
jcMinJoinsPerIPToGline = 4
# The time within the joins.
jcJoinsPerIPTime = 14400
# The number of clients per IP required during *ONE* joinflood to set a gline if there are no parts
jcMinJoinToGlineJOnly = 2
# The join-flood size required to set a gline with no parts
jcMinJFJOnlySizeToGline = 25
# The minimum number of flooding clients required to gline
jcMinJFSizeToGline = 20
# The gline reason to set when glining join flood offenders
jcGlineReason = Flooding is not tollerated on this network!
# The length in seconds for glines which are issued on join flood offenders
jcGlineLength = 3600
################
# NICK COUNTER #
################
# The interval over which nick counter checks for nicks changes. This is in
# seconds.
ncInterval = 10
# The trigger level for which nick counter warns. Note that the total nick
# change count must be OVER this level to trigger.
ncCutoff = 10
#################
# CHANNEL RANGE #
#################
# The total range of entropy in a channel before it is considered abnormal
channelRange = 0.2
############
# MAXCHANS #
############
# The minimum channel membership before a client in a channel is considered
# normal:
maxChans = 2
##############
# COMMONREAL #
##############
# The amount of users who must have the same realname before being considered
# abnormal.
realCutoff = 4
###############
# GLINE QUEUE #
###############
# The number of clients to gline when processing the gline queue
gbCount = 2
# The interval (in seconds) processing the gline queue
gbInterval = 1

View File

@ -0,0 +1,10 @@
# $Id: gnutest.example.conf.in,v 1.3 2003/11/11 19:21:19 dan_karrels Exp $
# conf file for testClient
username = gnutest
nickname = gnutest
hostname = undernet.org
userdescription = GNUTest Test Client
mode = +iok
operchan = #Valhalla

1
bin/gnuworld.start.sh Normal file
View File

@ -0,0 +1 @@
./gnuworld -c -f GNUWorld.example.conf&

15
bin/logging.properties.in Normal file
View File

@ -0,0 +1,15 @@
log4cplus.logger.gnuworld.ds.jf.glined=INFO, DS-JFGLINED
log4cplus.appender.DS-JFGLINED=log4cplus::DailyRollingFileAppender
log4cplus.appender.DS-JFGLINED.File=jf-glined.log
log4cplus.appender.DS-JFGLINED.Schedule=Daily
log4cplus.appender.DS-JFGLINED.layout=log4cplus::PatternLayout
log4cplus.appender.DS-JFGLINED.layout.ConversionPattern=%d - %m%n
log4cplus.logger.gnuworld.ds.jf.cservice=INFO, DS-CSERVICE
log4cplus.appender.DS-CSERVICE=log4cplus::DailyRollingFileAppender
log4cplus.appender.DS-CSERVICE.File=jf-cservice.log
log4cplus.appender.DS-CSERVICE.Schedule=Daily
log4cplus.appender.DS-CSERVICE.layout=log4cplus::PatternLayout
log4cplus.appender.DS-CSERVICE.layout.ConversionPattern=%d - %m%n

View File

@ -0,0 +1,43 @@
# $Id: nickserv.example.conf.in,v 1.5 2003/06/05 01:38:01 dan_karrels Exp $
nickname = NS
username = nickserv
hostname = undernet.org
userdescription = NickServ
mode = +idk
# Console output for nickserv
consoleChannel = #ns.console
consoleChannelModes = +ntsim
# DB connection configuration
dbHost = 127.0.0.1
dbPort = 5432
dbDb = nickserv
dbUser = nickserv
dbPass = ""
# The frequency with which to check the queue
checkFreq = 60
# The initial startup wait.
# Note this does NOT include checkFreq so make sure to set
# a value somewhat higher than 0
startDelay = 60
# How frequently to commit to the database
# _freq is max time to wait, _count is max entries to wait
commitFreq = 5
commitCount = 1
# What level of debug stuff should be sent to the console channel?
# This is a bitfield, values as follows:
# 1 - PROTOCOL
# 2 - SQL
# 4 - DEBUG
# 8 - INFO
# 16 - WARNING
# 32 - ERROR
# Simply add the numbers together from the levels you want.
consoleLevel = 63

View File

@ -0,0 +1,163 @@
# $Id: openchanfix.example.conf.in,v 1.1 2006/12/22 06:41:41 kewlio Exp $
# chanfix configuration file
# ---------------------------------------------------------------------
# Nickname of bot
nickname = C
# Username of bot
username = chanfix
# Hostname of bot
hostname = evilnet.development
# Real name (info) of bot
userdescription = Oooh! Oooh! I can fix it!
# User modes bot should set
mode = +idk
# ---------------------------------------------------------------------
# Database specifications
# Host and port of database
sqlHost = 127.0.0.1
sqlPort = 5432
# Name of database
sqlDB = chanfix
# If you don't need user/pass just put "" for option(s) below
sqlcfUser = gnuworld
sqlPass = ""
# ---------------------------------------------------------------------
# Channels the bot should join
# Console channel name and initial modes
consoleChan = #coder-com
consoleChanModes = +nst
# Should the bot relay admin messages to the console channel?
# NOTE: This only disables relaying information sent to the
# adminLog. debugLog information is *always* relayed.
sendConsoleNotices = true
# Channel(s) that chanfix should join besides consoleChan (can be multiple)
joinChan = #chanfix
joinChan = #staff
# Initial modes all joinChans should have
joinChanModes = +nt
# ---------------------------------------------------------------------
# Fixing settings
# Should chanfix automatically fix opless channels?
enableAutoFix = true
# Should chanfix be able to manually fix channels?
enableChanFix = true
# Can channels be blocked by admins?
enableChannelBlocking = true
# Should chanfix join the channel its fixing? this avoids the hopping issue
joinChannels = true
# Should chanfix send notices saying the channel is being fixed for auto
# fixes. Also a notice after its finished saying its done?
autoFixNotice = true
# Should chanfix send notices saying the channel is being fixed for manual
# fixes Also a notice after its finished saying its done?
manualFixNotice = true
# Should auto fixes stop if an already reopped user ops another user?
stopAutoFixOnOp = true
# Should manual fixes stop if an already reopped user ops another user?
stopChanFixOnOp = true
# Should the top ops be allowed to perform fixes on their own channels?
allowTopOpFix = false
# Should the top op fixes be able to alert the top 10 ops who are not in
# the channel at the time of the fix automatically? If no/false then the
# database help entry for REQUESTOP will need to be updated.
allowTopOpAlert = true
# How much percentage within the top score should the top ops score be
# before they are allowed to perform fixes. Dont include a %.
topOpPercent = 10
# Minimum score an op has be before they can issue fixes in their own
# channel without requiring an oper to do them.
minFixScore = 1000
# Minimum score an op has to be before they can use the CANFIX command for
# a channel they are ops in.
minCanFixScore = 500
# Minimum time required between REQUESTOP fixes. (In seconds). The last
# fix time is updated at the start of a fix so allow time for the first
# fix aswell as time for a gap.
minRequestOpTime = 720
# ---------------------------------------------------------------------
# Network settings
# Version of IRCu used on the network (11 or 12)
# Use 11 for u2.10.11 and 12 for u2.10.12
# NOTE: You MUST restart GNUWorld for this change to take place.
version = 12
# Should burst be used to fix takeovers (through a manual fix)?
# Burst guarantees that the abusers will not be reopped due to
# a netsplit, but it can cause problems due to lowering timestamp.
# NOTE: You MUST restart GNUWorld for this change to take place.
useBurstToFix = true
# Total number of servers on the network
numServers = 10
# The minimum percentage of servers that need to be linked;
# if there are fewer servers linked, chanfix will not fix
# any channels, be it automatic or manual.
minServersPresent = 75
# The full server name of the channel service. This is used in
# checking whether the channel service is currently linked or
# not to the network.
chanServName = channels.undernet.org
# ---------------------------------------------------------------------
# Interface settings
# The amount of scores to report when issuing the SCORE #channel
# command. Do not set this to a higher value than 10.
numTopScores = 10
# ---------------------------------------------------------------------
# Database settings
# Minimum clients needed in a channel for it to be scored
minClients = 4
# Which clients score a point if they are opped?
# Client needs to be idented (no ~ before username)
clientNeedsIdent = false
# ---------------------------------------------------------------------
# Miscellaneous settings
# Frequency (in seconds) between database connection status checks
connectCheckFreq = 10
# File where all admin commands sent to backchan are logged and saved
adminLogFile = chanfix-admin.log
# File where all debug information sent to backchan is logged and saved
debugLogFile = chanfix-debug.log
# End of config file.
# ---------------------------------------------------------------------

View File

@ -0,0 +1,11 @@
# $Id: scanner.example.conf.in,v 1.2 2003/06/05 01:38:01 dan_karrels Exp $
# Config file for the scanner client
nickname = netscan
username = netscan
hostname = undernet.org
userdescription = Don't be afraid, I won't hurt you...
mode = +iok
# The maximum number of outgoing connections to establish
max_connects = 1500

55
bin/server_command_map.in Normal file
View File

@ -0,0 +1,55 @@
# $Id: server_command_map.in,v 1.6 2009/07/25 18:12:33 hidden1 Exp $
# The mapping from module to message name for server command handlers
# format: module_file_name module_loader_symbol command_key
# example: libircu msg_AC AC
# example: libircu msg_P P
# example: libircu msg_NOOP Z
libircu msg_AC AC
libircu msg_AD AD
libircu msg_B B
libircu msg_C C
libircu msg_CM CM
libircu msg_D D
libircu msg_NOOP DE
libircu msg_DS DS
libircu msg_EA EA
libircu msg_EB EB
libircu msg_G G
libircu msg_GL GL
libircu msg_I I
libircu msg_J J
libircu msg_JU JU
libircu msg_K K
libircu msg_L L
libircu msg_M351 351
libircu msg_M391 391
libircu msg_M M
libircu msg_N N
libircu msg_NOOP NOOP
libircu msg_PA PA
libircu msg_PA PASS
libircu msg_O O
libircu msg_OM OM
libircu msg_P P
libircu msg_Q Q
libircu msg_R R
libircu msg_RI RI
libircu msg_RO RO
libircu msg_S S
libircu msg_Server SERVER
libircu msg_SQ SQ
libircu msg_T T
libircu msg_V V
libircu msg_WA WA
libircu msg_W W
libircu msg_Y Y
libircu msg_Y ERROR
libircu msg_NOOP Z
libircu msg_NOOP A
libircu msg_NOOP U
libircu msg_NOOP WU
libircu msg_NOOP MO
libircu msg_NOOP 482
libircu msg_NOOP 443
libircu msg_FA FA

34
bin/snoop.example.conf.in Normal file
View File

@ -0,0 +1,34 @@
# $Id: snoop.example.conf.in,v 1.2 2003/12/06 22:11:36 dan_karrels Exp $
# conf file for snoop bot
username = snoopy
nickname = snoopy_
hostname = undernet.org
userdescription = Inquiring Minds Want to Know
mode = +i
# permit the given user -- by account login name -- to use the
# module. You may have as many of these as you like (including none).
# This is case-insensitive.
#permit_user = reppir
#permit_user = Jeekay
# Set this to true if you want to permit opers to use the module,
# set to false otherwise (will not affect other users who have access)
allow_opers = true
# The command character (or string) to which the bot will respond
# in channels. This can be any length, but can only be one word.
cmdchar = snoopy
# The channel in which the bot will accept channel commands
adminchan = #2010
# The channel to which relay information will be sent
relaychan = #coder-com
# The default quit message for spawned clients
defaultquitmessage = Exiting
# The maximum nickname length for your network
maxnicklen = 9

28
bin/stats.example.conf.in Normal file
View File

@ -0,0 +1,28 @@
# $Id: stats.example.conf.in,v 1.6 2003/07/24 21:14:25 dan_karrels Exp $
# conf file for stats bot
username = ubercow
nickname = ubercow
hostname = undernet.org
userdescription = UnderNet Statistical Services
mode = +iok
# permit the given user -- by account login name -- to use the
# module. You may have as many of these as you like (including none).
# This is case-insensitive.
permit_user = reppir
permit_user = Jeekay
# Set this to true if you want to permit opers to use the module,
# set to false otherwise (will not affect other users who have access)
allow_opers = true
# Set this value to "true" to enable stats logging during burst (it chews
# the hard drive/CPU)
logDuringBurst = false
# Path to where you want output files to be placed
data_path = .
part_message = Im too sexy for this channel

2
config-h.in Normal file
View File

@ -0,0 +1,2 @@
/* Nothing here */

1407
config.guess vendored Normal file

File diff suppressed because it is too large Load Diff

1504
config.sub vendored Normal file

File diff suppressed because it is too large Load Diff

19519
configure vendored Normal file

File diff suppressed because it is too large Load Diff

497
configure.ac Normal file
View File

@ -0,0 +1,497 @@
dnl $Id: configure.ac,v 1.42 2008/04/16 15:25:49 danielaustin Exp $
dnl ----------------------------------------------------------
echo Configuring GNUWorld...
echo
AC_REVISION($Revision: 1.42 $)
AC_INIT
AC_CONFIG_SRCDIR([src/main.cc])
AM_INIT_AUTOMAKE(gnuworld,3.0)
AM_CONFIG_HEADER(include/defs.h)
AC_PROG_CXX
AC_LANG([C++])
AC_PROG_MAKE_SET(gmake)
AC_DISABLE_STATIC
AC_ENABLE_SHARED
AC_PROG_INSTALL
dnl Enable building of the convenience library
dnl and set LIBLTDL accordingly
AC_LIBLTDL_CONVENIENCE
dnl Substitute INCLTDL and LIBLTDL in the Makefiles
dnl For some reason, INCLTDL and LIBLTDL aren't set
dnl properly on OpenBSD
LIBLTDL="\$(top_builddir)/libltdl/libltdlc.la"
AM_MAINTAINER_MODE
AC_ISC_POSIX
dnl Check for dlopen support
AC_LIBTOOL_DLOPEN
dnl Configure libtool
AC_PROG_LIBTOOL
CXXFLAGS="-W -Wall -pipe -I\$(top_srcdir)/libltdl"
CXXFLAGS="$CXXFLAGS -I\$(top_srcdir)/db"
CFLAGS="$CFLAGS"
AC_PREFIX_DEFAULT(`pwd`)
dnl Configure libltdl
AC_CONFIG_SUBDIRS(libltdl)
AC_MSG_CHECKING([whether to detect pthread libraries])
AC_ARG_ENABLE([threads],
AC_HELP_STRING([--disable-threads],
[disable the linking of the pthread library (default = no)]),
[check_threadLib=$enable_threads],
[check_threadLib=yes])
AC_MSG_RESULT([$check_threadLib])
dnl Do we need an explicit lib for the pthreads?
gcc_support_pthread=no
if test "$check_threadLib" = yes; then
dnl usually, gcc needs -pthread
AC_MSG_CHECKING([whether gcc accepts the -pthread option])
pthreadtest=`$CXX -pthread 2>&1 | grep -c unrecognized`
if [ test "x$pthreadtest" = "x0" ]; then
gcc_support_pthread=yes
AC_SUBST(threadLib)
threadLib=-pthread
else
gcc_support_pthread=no
fi
AC_MSG_RESULT([$gcc_support_pthread])
fi
if [ test x"$gcc_support_pthread" = xno ]; then
pthread_found=no
AC_CHECK_LIB(pthread, pthread_create, pthread_found=yes)
if [ test x"$pthread_found" = xyes ]; then
AC_SUBST(threadLib)
threadLib=-lpthread
else
AC_CHECK_LIB(c_r, pthread_create,threadLib=-lc_r)
AC_CHECK_LIB(gcc_r, main, threadLib=-gcc_r)
fi
fi
dnl The below algorithm is incorrect because gcc is given no
dnl input files
dnl ----------------------------------------------------------
dnl ----------------------------------------------------------
dnl
dnl System specific checks
dnl
dnl ----------------------------------------------------------
dnl ----------------------------------------------------------
AC_CHECK_LIB(socket,socket)
AC_CHECK_LIB(nsl,gethostbyname)
dnl Check for pcre for building a test program.
dnl If it is not present, just don't build the program.
AC_CHECK_LIB(pcre,pcre_compile,
AM_CONDITIONAL(COND_PCRE,[/bin/true]),
AM_CONDITIONAL(COND_PCRE,[/bin/false]))
dnl AC_CHECK_LIB(z,inflate)
dnl AC_CHECK_LIB(pthread,pthread_create)
dnl AC_SEARCH_LIBS(pthread_create,lthread pthread c c_r)
dnl AC_SEARCH_LIBS(pthread_kill,lthread pthread c c_r)
dnl AC_CHECK_FUNCS(pthread_create)
dnl ----------------------------------------------------------
dnl
dnl Checking for headers, functions, and a type declarations
dnl
AC_CHECK_HEADERS(sys/file.h unistd.h sys/stat.h sys/ioctl.h sys/resource.h )
AC_CHECK_HEADERS(sys/time.h asm/ioctls.h xti_inet.h sys/filio.h getopt.h)
AC_CHECK_HEADERS(sys/types.h sys/socket.h netinet/in.h sys/un.h pthread.h)
AC_HEADER_STDC
AC_HEADER_TIME
AC_TYPE_SIGNAL
AC_TYPE_MODE_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_UID_T
found_socklen_t=no
AC_EGREP_HEADER(socklen_t,sys/socket.h, AC_DEFINE(HAVE_SOCKLEN_T) found_socklen_t=yes)
if test $found_socklen_t = yes; then
AC_EGREP_HEADER(socklen_t,bits/socket.h,
AC_DEFINE([HAVE_SOCKLEN_T],[],[Socket length type]))
fi
if test $found_socklen_t = yes; then
AC_MSG_CHECKING(for socklen_t)
AC_MSG_RESULT(yes)
else
AC_CHECK_TYPE(socklen_t,int)
fi
AC_ARG_WITH(debug,
AC_HELP_STRING([--without-debug],
[Disable debugging in the executables]),
[dummy=true],
[CXXFLAGS="$CXXFLAGS -g"]
)
dnl By default, do NOT build test directory
build_testdir=false
AC_ARG_WITH(test,
AC_HELP_STRING([--with-test],
[Enable building of test programs]),
[build_testdir=true]
)
AM_CONDITIONAL(COND_TESTDIR,[test $build_testdir = true])
AC_ARG_WITH(pedantic,
AC_HELP_STRING([--with-pedantic],
[Add -pedantic to compile options]),
[CXXFLAGS="$CXXFLAGS -pedantic"]
)
AC_ARG_WITH(optimization,
AC_HELP_STRING([--with-optimization],
[Optimize the executables]),
[CXXFLAGS="$CXXFLAGS -O2"],
[CXXFLAGS="$CXXFLAGS -O0"]
)
AC_ARG_WITH(prof,
AC_HELP_STRING([--with-prof],
[Generate profiling information]),
[CXXFLAGS="$CXXFLAGS -pg"]
)
dnl The idea with this pgsql code is to check for a system installed
dnl postgresql and use it if found. However, if the user specifies
dnl an alternate install location, use that instead.
dnl Prepare to capture the user's input for the location of a pgsql
dnl installation.
AC_ARG_WITH(pgconfig,
AC_HELP_STRING([--with-pgconfig=FILE],
[Specify an alternate pg_config location.]),
[pg_config_binary=$withval], [pg_config_binary=""]
)
if test "x$pg_config_binary" = "x"; then
dnl pg_config was not specified; search for it it in PATH.
AC_PATH_PROG([pg_config_binary], [pg_config])
if test "x$pg_config_binary" = "x"; then
AC_MSG_ERROR([Could not find pg_config. Ensure that PostgreSQL is installed, or specify pg_config location using --with-pgconfig.])
fi
elif test -f $pg_config_binary; then
AC_MSG_RESULT([Using pg_config: $pg_config_binary])
else
AC_MSG_ERROR([pg_config file $pg_config_binary does not exist])
fi
pgsql_includedir=$($pg_config_binary --includedir)
pgsql_libdir=$($pg_config_binary --libdir)
CXXFLAGS="$CXXFLAGS -I$pgsql_includedir"
CPPFLAGS="$CPPFLAGS -I$pgsql_includedir"
LIBS="$LIBS -L$pgsql_libdir"
dnl Check for the pgsql library and header file.
dnl Need to generalize when mysql support is added.
AC_CHECK_LIB(pq, PQconnectdb)
AC_CHECK_HEADER([libpq-fe.h])
AC_DEFINE([HAVE_PGSQL],[],[Using PostGreSQL])
dnl Enable log4cplus if required
AC_ARG_WITH(log4cplus,
AC_HELP_STRING([--with-log4cplus],
[Check log4cplus, if not enabled some modules may not have logging support]),
[check_log4cplus=$withval]
)
LOG4CPLUS_LIB="${check_log4cplus}/lib"
AC_ARG_WITH(log4cplus-lib,
AC_HELP_STRING([--with-log4cplus-lib=LOG4CPLUSLIBDIR],
[Specify location to find liblog4cplus.so]),
[LOG4CPLUS_LIB=$withval]
)
LOG4CPLUS_INCLUDE="${check_log4cplus}/include"
AC_ARG_WITH(log4cplus-include,
AC_HELP_STRING([--with-log4cplus-include=LOG4CPLUSINCLUDEDIR],
[Specify location to find logger.h]),
[LOG4CPLUS_INCLUDE=$withval]
)
if [test "x$check_log4cplus" != "x" ]; then
AC_MSG_CHECKING(for liblog4cplus.so)
if [test -f "$LOG4CPLUS_LIB/liblog4cplus.so"]; then
/bin/true
else
AC_MSG_ERROR( Unable to find liblog4cplus.so, \
please use the --with-log4cplus-lib argument to point to the right path)
fi
AC_MSG_RESULT(yes)
AC_MSG_CHECKING(for log4cplus/logger.h)
if [test -f "$LOG4CPLUS_INCLUDE/log4cplus/logger.h"]; then
/bin/true
else
AC_MSG_ERROR( Unable to find log4cplus/logger.h, \
please use the --with-log4cplus-include argument to point to the right path)
fi
AC_MSG_RESULT(yes)
AC_DEFINE([ENABLE_LOG4CPLUS], [], [Enable LOG4CPLUS])
LDFLAGS="${LDFLAGS} -L${LOG4CPLUS_LIB} -llog4cplus"
CXXFLAGS="${CXXFLAGS} -I${LOG4CPLUS_INCLUDE}"
fi
dnl Enable liboath if required
AC_ARG_WITH(liboath,
AC_HELP_STRING([--with-liboath],
[Check liboath, if not enabled TOTP functionality will not be available]),
[check_liboath=$withval]
)
if [test "$check_liboath" == "yes"]; then
check_liboath=/usr/local
fi
OATH_LIB="${check_liboath}/lib"
AC_ARG_WITH(liboath-lib,
AC_HELP_STRING([--with-liboath-lib=LIBOATHLIBDIR],
[Specify location to find liboath.so]),
[OATH_LIB=$withval]
)
OATH_INCLUDE="${check_liboath}/include"
AC_ARG_WITH(liboath-include,
AC_HELP_STRING([--with-liboath-include=OATHINCLUDEDIR],
[Specify location to find oath.h]),
[OATH_INCLUDE=$withval]
)
if [test "x$check_liboath" != "x" ]; then
LDFLAGS="${LDFLAGS} -L${OATH_LIB}"
CXXFLAGS="${CXXFLAGS} -I${OATH_INCLUDE} -L${OATH_LIB}"
dnl AC_CHECK_FILE("$OATH_LIB/liboath.so",, [AC_MSG_ERROR([Unable to find liboath.so, \
dnl please use the --with-liboath-lib argument to point to the right path],1)])
AC_CHECK_LIB(oath,oath_totp_validate,, [AC_MSG_ERROR([Unable to find liboath.so, please use the --with-liboath-lib argument to point to the right path],1)])
AC_CHECK_FILE("$OATH_INCLUDE/liboath/oath.h",, [AC_MSG_ERROR([Unable to find oath.h, please use the --with-liboath-include argument to point to the right path],1)])
dnl AC_DEFINE([ENABLE_LIBOATH], [], [Enable LIBOATH])
fi
dnl Allow selection of additional includes and libraries paths
dnl just in case!
AC_ARG_WITH(extra-includes,
AC_HELP_STRING([--with-extra-includes=INCLUDESDIR],
[Specify location to find additional include files]),
[CXXFLAGS="$CXXFLAGS -I$withval"]
)
AC_ARG_WITH(extra-libraries,
AC_HELP_STRING([--with-extra-libraries=LIBRARYDIR],
[Specify location to find additional libraries]),
[LDFLAGS="$LDFLAGS -L$withval"]
)
dnl This calls a macro in ax_boost_thread.m4
m4_include([ac_cxx_namespaces.m4])
m4_include([ax_boost_thread.m4])
CXXFLAGS="$CXXFLAGS $threadLib"
AX_BOOST_THREAD
echo
echo "Detecting modules..."
echo
build_modccontrol=false
build_modchanfix=false
build_modclientExample=false
build_modcloner=false
build_modcservice=false
build_moddronescan=false
build_modgnutest=false
build_modnickserv=false
build_modopenchanfix=false
build_modscanner=false
build_modstats=false
build_modsnoop=false
NEW_MODS=""
MOD_DIRS=""
searchForMods=yes
AC_ARG_ENABLE(modules,
AC_HELP_STRING([--enable-modules=mods],
[Enable one or more modules; all modules found in the \
current directory are enabled by default. Specify "no" (without quotes) \
to build server only]),
[
dnl echo "enableval: $enableval"
if [test $enableval = "yes"]; then
searchForMods=yes
elif [test $enableval = "no"]; then
searchForMods=no
else
tmp="mod.$enableval"
dnl echo "tmp: $tmp"
tmp=`echo $tmp | sed 's/,/ mod./g'`
dnl echo "tmp: $tmp"
MOD_DIRS="$MOD_DIRS $tmp"
searchForMods=no
dnl Prepare for conditionals
for moduleName in $MOD_DIRS; do
case "$moduleName" in
mod.ccontrol) build_modccontrol=true;;
mod.chanfix) build_modchanfix=true;;
mod.clientExample) build_modclientExample=true;;
mod.cloner) build_modcloner=true;;
mod.cservice) build_modcservice=true;;
mod.dronescan) build_moddronescan=true;;
mod.gnutest) build_modgnutest=true;;
mod.nickserv) build_modnickserv=true;;
mod.openchanfix) build_modopenchanfix=true;;
mod.scanner) build_modscanner=true;;
mod.stats) build_modstats=true;;
mod.snoop) build_modsnoop=true;;
*) NEW_MODS="$NEW_MODS $moduleName";;
esac
done
fi
],
[
dnl echo "running later"
searchForMods=yes
]) dnl AC_ARG_ENABLE
dnl echo "searchForMods: $searchForMods"
if [test $searchForMods = yes]; then
mod_list=`\ls $srcdir | \grep "mod."`
dnl echo "mod_list: $mod_list"
for file in $mod_list; do
if [ ! test -d $srcdir/$file ]; then
echo "$srcdir/$file is not a directory!"
continue
fi
if [ test -f $srcdir/$file/Makefile.in ]; then
echo Adding module `echo $file | \cut -f2 -d"."`
case "$file" in
mod.ccontrol) build_modccontrol=true;;
mod.chanfix) build_modchanfix=true;;
mod.clientExample) build_modclientExample=true;;
mod.cloner) build_modcloner=true;;
mod.cservice) build_modcservice=true;;
mod.dronescan) build_moddronescan=true;;
mod.gnutest) build_modgnutest=true;;
mod.nickserv) build_modnickserv=true;;
mod.openchanfix) build_modopenchanfix=true;;
mod.scanner) build_modscanner=true;;
mod.stats) build_modstats=true;;
mod.snoop) build_modsnoop=true;;
*) NEW_MODS="$NEW_MODS $file";;
esac
fi
done
fi
AM_CONDITIONAL(COND_MODCCONTROL,[test $build_modccontrol = true])
AM_CONDITIONAL(COND_MODCHANFIX,[test $build_modchanfix = true])
AM_CONDITIONAL(COND_MODCLIENTEXAMPLE,[test $build_modclientExample = true])
AM_CONDITIONAL(COND_MODCLONER,[test $build_modcloner = true])
AM_CONDITIONAL(COND_MODCSERVICE,[test $build_modcservice = true])
AM_CONDITIONAL(COND_MODDRONESCAN,[test $build_moddronescan = true])
AM_CONDITIONAL(COND_MODGNUTEST,[test $build_modgnutest = true])
AM_CONDITIONAL(COND_MODNICKSERV,[test $build_modnickserv = true])
AM_CONDITIONAL(COND_MODOPENCHANFIX,[test $build_modopenchanfix = true])
AM_CONDITIONAL(COND_MODSCANNER,[test $build_modscanner = true])
AM_CONDITIONAL(COND_MODSTATS,[test $build_modstats = true])
AM_CONDITIONAL(COND_MODSNOOP,[test $build_modsnoop = true])
for file in $NEW_MODS; do
AC_CONFIG_SUBDIRS($file)
done
LIBGNUWORLD="\$(top_builddir)/libgnuworld/libgnuworld.la"
AC_SUBST(LIBGNUWORLD)
AC_SUBST(NEW_MODS)
AC_SUBST(CXXFLAGS)
AC_SUBST(INCLTDL)
AC_SUBST(LIBLTDL)
AC_SUBST(LIBTOOL_DEPS)
AC_SUBST(pgsql_includedir)
AC_SUBST(pgsql_libdir)
AC_CONFIG_FILES([Makefile \
db/Makefile \
libgnuworld/Makefile \
libircu/Makefile \
src/Makefile \
test/Makefile \
mod.ccontrol/Makefile \
mod.chanfix/Makefile \
mod.clientExample/Makefile \
mod.cloner/Makefile \
mod.cservice/Makefile \
mod.dronescan/Makefile \
mod.gnutest/Makefile \
mod.nickserv/Makefile \
mod.openchanfix/Makefile \
mod.scanner/Makefile \
mod.stats/Makefile \
mod.snoop/Makefile \
bin/server_command_map \
bin/ccontrol.example.conf \
bin/chanfix.example.conf \
bin/clientExample.example.conf \
bin/cloner.example.conf \
bin/cservice.example.conf \
bin/gnutest.example.conf \
bin/GNUWorld.example.conf \
bin/nickserv.example.conf \
bin/openchanfix.example.conf \
bin/scanner.example.conf \
bin/stats.example.conf \
bin/snoop.example.conf \
bin/dronescan.example.conf \
bin/logging.properties \
tools/checkgnuworld.sh])
AC_OUTPUT
echo ""
echo "##########################"
echo "# GNUWorld Configuration #"
echo "##########################"
echo ""
echo "Configuration of GNUWorld is complete - you're almost ready to run 'make'..."
echo ""
echo "Check the following files for modification before building:"
echo " include/gnuworld_config.h"
if [test $build_modcservice = true]; then
echo " mod.cservice/cservice_config.h"
fi
if [test $build_modopenchanfix = true]; then
echo " mod.openchanfix/chanfix_config.h"
fi
echo ""

1
contrib/.cvsignore Normal file
View File

@ -0,0 +1 @@
.arch-ids

3
contrib/00INDEX.TXT Normal file
View File

@ -0,0 +1,3 @@
encrypt.sh Program to generate cmaster password hashes
chktrans.py Program to generate a report on the translations table
00INDEX.TXT This file.

80
contrib/chktrans.py Normal file
View File

@ -0,0 +1,80 @@
#!/usr/bin/env python
# Check GNUWorld's mod.cservice translations
# (C) 2001 Alex Badea <vampire@go.ro>
# Use the following command in the mod.cservice directory to get the grep data:
# grep -n "language::" *.cc > grep-data
import sys
from string import *
language_id = '8'
responses = {}
resp_used = {}
trans = {}
alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
f = open("language_table.sql", "r")
for line in f.readlines():
line = strip(line)
toks = split(line, '\t')
if len(toks) < 4: continue
if toks[0] != language_id: continue
if toks[len(toks)-1] != "31337": continue
if trans.has_key(toks[1]):
print "* Duplicate translation, ID: ", toks[1]
trans[toks[1]] = toks[2]
f.close()
print "* Read %d translations from language_table.sql" % len(trans)
f = open("responses.h", "r")
for line in f.readlines():
line = strip(line)
toks = split(line)
if len(toks) < 2: continue
if toks[0] != "const": continue
if toks[1] != "int": continue
if responses.has_key(toks[2]):
print "* Duplicate response, name: ", toks[2]
responses[toks[2]] = toks[4][:-1]
resp_used[toks[2]] = 0
f.close()
print "* Read %d responses from responses.h" % len(responses)
f = open("grep-data", "r")
line = f.readline()
while line:
try: start = index(line, "language::")
except ValueError: start = -1
if start >= 0:
start = start + 10
end = start
while (line[end] in alpha) and (end < len(line)):
end = end + 1
id = line[start:end]
toks = split(line, ':')
fname = ""
fline = 0
if len(toks) > 0: fname = toks[0]
if len(toks) > 1: fline = int(toks[1])
try: numeric = responses[id]
except KeyError: numeric = '****';
try: text = trans[numeric]
except KeyError: text = '**UNASSIGNED**';
try: resp_used[id] = 1
except: pass
print "%-25s (%4d): %-30s (%4s) -> %s" % (fname, fline, id, numeric, text)
line = f.readline()
f.close()
for resp in resp_used.keys():
if not resp_used[resp]:
try: numeric = responses[resp]
except KeyError: numeric = '****';
try: text = trans[numeric]
except KeyError: text = '**UNASSIGNED**';
print "%-25s : %-30s (%4s) -> %s" % ("* Unused response", resp, numeric, text)
print "* Done"

27
contrib/encrypt.sh Normal file
View File

@ -0,0 +1,27 @@
function encrypt() {
pass=$1
COOKIE=`mcookie|cut -b-8`
export COOKIE pass
echo ${COOKIE}`echo ${COOKIE}${pass} | md5sum | cut -f1 -d' '`
}
if [ $# -eq 0 ]; then
while read pass; do
encrypt $pass
done
exit 0
fi
if [ "$1" = "--help" ]; then
echo $0 -- generate passwords for gnuworld
echo
echo usage:
echo $0 password
echo or
echo cat passwords \| $0
exit 0
fi
encrypt $1

6
db/.cvsignore Normal file
View File

@ -0,0 +1,6 @@
.deps
.libs
*.la
*.lo
Makefile
.arch-ids

12
db/Makefile.am Normal file
View File

@ -0,0 +1,12 @@
## Process this file with automake to produce Makefile.in
## $Id: Makefile.am,v 1.14 2007/09/18 15:34:47 dan_karrels Exp $
lib_LTLIBRARIES = libgnuworldDB.la
libgnuworldDB_la_SOURCES = gnuworldDB.cc \
pgsqlDB.cc
##libgnuworldDB_la_CXXFLAGS = -I$(pgsql_includedir)
libgnuworldDB_la_LDFLAGS = -L$(pgsql_libdir) -lpq
EXTRA_DIST = gnuworldDB.h \
pgsqlDB.h \
dbHandle.h

543
db/Makefile.in Normal file
View File

@ -0,0 +1,543 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = db
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/ac_cxx_namespaces.m4 \
$(top_srcdir)/ax_boost_thread.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/include/defs.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(libdir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
libgnuworldDB_la_LIBADD =
am_libgnuworldDB_la_OBJECTS = gnuworldDB.lo pgsqlDB.lo
libgnuworldDB_la_OBJECTS = $(am_libgnuworldDB_la_OBJECTS)
libgnuworldDB_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
$(CXXFLAGS) $(libgnuworldDB_la_LDFLAGS) $(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(libgnuworldDB_la_SOURCES)
DIST_SOURCES = $(libgnuworldDB_la_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BOOST_THREAD_LIB = @BOOST_THREAD_LIB@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INCLTDL = @INCLTDL@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBGNUWORLD = @LIBGNUWORLD@
LIBLTDL = @LIBLTDL@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LTDLDEPS = @LTDLDEPS@
LTDLINCL = @LTDLINCL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NEW_MODS = @NEW_MODS@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
pgsql_includedir = @pgsql_includedir@
pgsql_libdir = @pgsql_libdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
subdirs = @subdirs@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
threadLib = @threadLib@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
lib_LTLIBRARIES = libgnuworldDB.la
libgnuworldDB_la_SOURCES = gnuworldDB.cc \
pgsqlDB.cc
libgnuworldDB_la_LDFLAGS = -L$(pgsql_libdir) -lpq
EXTRA_DIST = gnuworldDB.h \
pgsqlDB.h \
dbHandle.h
all: all-am
.SUFFIXES:
.SUFFIXES: .cc .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu db/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu db/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
list2=; for p in $$list; do \
if test -f $$p; then \
list2="$$list2 $$p"; \
else :; fi; \
done; \
test -z "$$list2" || { \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
}
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
for p in $$list; do \
$(am__strip_dir) \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
done
clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libgnuworldDB.la: $(libgnuworldDB_la_OBJECTS) $(libgnuworldDB_la_DEPENDENCIES)
$(libgnuworldDB_la_LINK) -rpath $(libdir) $(libgnuworldDB_la_OBJECTS) $(libgnuworldDB_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnuworldDB.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pgsqlDB.Plo@am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
.cc.obj:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.cc.lo:
@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
for dir in "$(DESTDIR)$(libdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-libLTLIBRARIES
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-libLTLIBRARIES
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libLTLIBRARIES clean-libtool ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am \
install-libLTLIBRARIES install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-libLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

50
db/dbHandle.h Normal file
View File

@ -0,0 +1,50 @@
/**
* dbHandle.h
*/
#ifndef __DBHANDLE_H
#define __DBHANDLE_H "$Id: dbHandle.h,v 1.1 2007/08/28 16:09:58 dan_karrels Exp $"
#include <string>
#include <exception>
#include "defs.h"
#ifdef HAVE_PGSQL
#include "pgsqlDB.h"
#endif
namespace gnuworld
{
class dbHandle
#ifdef HAVE_PGSQL
: public pgsqlDB
#endif
{
public:
dbHandle( const std::string& dbHost,
const unsigned short int dbPort,
const std::string& dbName,
const std::string& userName,
const std::string& password )
#ifdef HAVE_PGSQL
: pgsqlDB( dbHost,
dbPort,
dbName,
userName,
password )
#endif
{}
dbHandle( const std::string& connectInfo )
#ifdef HAVE_PGSQL
: pgsqlDB( connectInfo )
#endif
{}
virtual ~dbHandle() {}
} ;
} // namespace gnuworld
#endif // __DBHANDLE_H

60
db/gnuworldDB.cc Normal file
View File

@ -0,0 +1,60 @@
/**
* gnuworldDB.cc
* Author: Daniel Karrels (dan@karrels.com)
* Copyright (C) 2002 Daniel Karrels <dan@karrels.com>
*
* 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.
*
* $Id: gnuworldDB.cc,v 1.5 2008/01/02 23:32:17 kewlio Exp $
*/
#include <string>
#include "gnuworldDB.h"
const char gnuworldDB_cc_rcsId[] = "$Id: gnuworldDB.cc,v 1.5 2008/01/02 23:32:17 kewlio Exp $" ;
const char gnuworldDB_h_rcsId[] = __GNUWORLDDB_H ;
namespace gnuworld
{
using std::string ;
gnuworldDB::gnuworldDB( )
{
/* dummy to prevent issues with pedantic compilers */
}
gnuworldDB::gnuworldDB( const string& _dbHost,
const unsigned short int _dbPort,
const string& _dbName,
const string& _userName,
const string& _password )
: dbHost( _dbHost ),
dbPort( _dbPort ),
dbName( _dbName ),
userName( _userName ),
password( _password )
{}
gnuworldDB::gnuworldDB( const string& /* connectInfo */ )
{
// TODO
}
gnuworldDB::~gnuworldDB()
{}
} // namespace gnuworld

114
db/gnuworldDB.h Normal file
View File

@ -0,0 +1,114 @@
/**
* gnuworldDB.h
* Copyright (C) 2002 Daniel Karrels <dan@karrels.com>
*
* 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.
*
* $Id: gnuworldDB.h,v 1.5 2009/07/26 18:30:37 mrbean_ Exp $
*/
#ifndef __GNUWORLDDB_H
#define __GNUWORLDDB_H "$Id: gnuworldDB.h,v 1.5 2009/07/26 18:30:37 mrbean_ Exp $"
#include <string>
#include <sstream>
#include <sys/types.h>
namespace gnuworld
{
class gnuworldDB
{
protected:
std::string dbHost ;
unsigned short int dbPort ;
std::string dbName ;
std::string userName ;
std::string password ;
public:
gnuworldDB() ;
gnuworldDB( const std::string& dbHost,
const unsigned short int dbPort,
const std::string& dbName,
const std::string& userName,
const std::string& password ) ;
gnuworldDB( const std::string& connectInfo ) ;
virtual ~gnuworldDB() ;
/**
* The Exec method will execute an SQL command with the database.
* The "returnData" argument is false by default, and indicated
* whether or not data is expected back.
* If data is expected back, pass true to this method,
* and the return value will indicate if data was successfully
* returned.
* Otherwise, no data is expected back, and the method will
* return true if the command was successfully executed
* (with no data returned).
*/
virtual bool Exec( const std::stringstream&,
bool returnData = false ) = 0 ;
/**
* The Exec method will execute an SQL command with the database.
* The "returnData" argument is false by default, and indicated
* whether or not data is expected back.
* If data is expected back, pass true to this method,
* and the return value will indicate if data was successfully
* returned.
* Otherwise, no data is expected back, and the method will
* return true if the command was successfully executed
* (with no data returned).
*/
virtual bool Exec( const std::string&,
bool returnData = false ) = 0 ;
virtual bool isConnected() const = 0 ;
virtual bool ConnectionBad() const
{ return !isConnected() ; }
virtual unsigned int countTuples() const = 0 ;
virtual unsigned int Tuples() const
{ return countTuples() ; }
virtual const std::string ErrorMessage() const = 0 ;
virtual const std::string GetValue( unsigned int row,
unsigned int column ) const = 0 ;
virtual const std::string GetValue( unsigned int row,
const std::string& colName )
const = 0 ;
virtual bool PutLine( const std::string& ) = 0 ;
virtual bool StartCopyIn( const std::string& ) = 0 ;
virtual bool StopCopyIn() = 0 ;
inline const std::string& getDBHost() const
{ return dbHost ; }
inline const unsigned short int& getDBPort() const
{ return dbPort ; }
inline const std::string& getDBName() const
{ return dbName ; }
inline const std::string& getUserName() const
{ return userName ; }
inline const std::string& getPassword() const
{ return password ; }
} ;
} // namespace gnuworld
#endif // __GNUWORLDDB_H

230
db/pgsqlDB.cc Normal file
View File

@ -0,0 +1,230 @@
/**
* pgsqlDB.cc
* Author: Daniel Karrels (dan@karrels.com)
* Copyright (C) 2002 Daniel Karrels <dan@karrels.com>
*
* 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.
*
* $Id: pgsqlDB.cc,v 1.5 2009/07/25 16:59:48 mrbean_ Exp $
*/
#include <sys/types.h>
#include <new>
#include <iostream>
#include <exception>
#include <sstream>
#include <string>
#include "libpq-fe.h"
#include "gnuworldDB.h"
#include "pgsqlDB.h"
const char pgsqlDB_cc_rcsId[] = "$Id: pgsqlDB.cc,v 1.5 2009/07/25 16:59:48 mrbean_ Exp $" ;
const char pgsqlDB_h_rcsId[] = __PGSQLDB_H ;
namespace gnuworld
{
using std::cout ;
using std::endl ;
using std::ends ;
using std::string ;
using std::stringstream ;
pgsqlDB::pgsqlDB( const string& dbHost,
const unsigned short int dbPort,
const string& dbName,
const string& userName,
const string& password )
: gnuworldDB( dbHost, dbPort, dbName, userName, password ),
theDB( 0 ),
lastResult( 0 )
{
stringstream s ;
s << "host=" << dbHost
<< " dbname=" << dbName
<< " port=" << dbPort ;
if( !userName.empty() )
{
s << " user=" << userName ;
}
if( !password.empty() )
{
s << " password=" << password ;
}
s << ends ;
// Allow exception to be thrown
theDB = PQconnectdb( s.str().c_str() ) ;
if( 0 == theDB )
{
cout << "pgsqlDB> Failed to allocate memory for db handle"
<< endl ;
throw std::exception() ;
}
if( !isConnected() )
{
cout << "pgsqlDB> Failed to connect to db: "
<< ErrorMessage()
<< endl ;
throw std::exception() ;
}
}
pgsqlDB::pgsqlDB( const string& connectInfo )
{
// TODO
// Allow exception to be thrown
lastResult = 0;
theDB = PQconnectdb( connectInfo.c_str() ) ;
if( 0 == theDB )
{
cout << "pgsqlDB> Failed to allocate memory for db handle"
<< endl ;
throw std::exception() ;
}
if( !isConnected() )
{
cout << "pgsqlDB> Failed to connect to db: "
<< ErrorMessage()
<< endl ;
throw std::exception() ;
}
}
pgsqlDB::~pgsqlDB()
{
if( theDB != 0 )
{
PQfinish( theDB ) ;
theDB = 0 ;
}
if( lastResult != 0 )
{
PQclear( lastResult ) ;
lastResult = 0 ;
}
}
bool pgsqlDB::Exec( const string& theQuery, bool dataRet )
{
// It is necessary to manually deallocate the last result
// to prevent memory leaks.
if( lastResult != 0 )
{
PQclear( lastResult ) ;
lastResult = 0 ;
}
lastResult = PQexec( theDB, theQuery.c_str() ) ;
ExecStatusType status = PQresultStatus( lastResult ) ;
if( dataRet )
{
// User is expecting data back, so return status according
// to tuples being returned
if (PGRES_COPY_IN == status) return true;
if (PGRES_TUPLES_OK == status) return true;
if (PGRES_COMMAND_OK == status) return true;
return false;
}
else
{
// Command execution with no data returned.
if (PGRES_COPY_IN == status) return true;
if (PGRES_TUPLES_OK == status) return true;
if (PGRES_COMMAND_OK == status) return true;
return false;
}
}
bool pgsqlDB::Exec( const stringstream& theQuery, bool retData )
{
return Exec( theQuery.str(), retData ) ;
}
bool pgsqlDB::StartCopyIn( const string& writeMe )
{
return Exec( writeMe ) ;
}
bool pgsqlDB::StopCopyIn()
{
if( 0 == lastResult )
{
return false ;
}
return (PQputCopyEnd( theDB, 0 ) != -1) ;
}
bool pgsqlDB::PutLine( const string& writeMe )
{
if( 0 == lastResult )
{
return false ;
}
return (PQputline( theDB, writeMe.c_str() ) != -1) ;
}
unsigned int pgsqlDB::countTuples() const
{
if( 0 == lastResult )
{
return 0 ;
}
return PQntuples( lastResult ) ;
}
const string pgsqlDB::ErrorMessage() const
{
return string( PQerrorMessage( theDB ) ) ;
}
const string pgsqlDB::GetValue( unsigned int rowNumber,
unsigned int columnNumber ) const
{
if( 0 == lastResult )
{
return string() ;
}
return PQgetvalue( lastResult, rowNumber, columnNumber ) ;
}
const string pgsqlDB::GetValue( unsigned int rowNumber,
const string& columnName ) const
{
if( 0 == lastResult )
{
return string( "No result stored" ) ;
}
// Retrieve the column number for this name.
const int columnNumber = PQfnumber( lastResult, columnName.c_str() ) ;
if( -1 == columnNumber )
{
return (string( "No such column: " ) + columnName) ;
}
return PQgetvalue( lastResult, rowNumber, columnNumber ) ;
}
bool pgsqlDB::isConnected() const
{
return (CONNECTION_OK == PQstatus( theDB )) ;
}
} // namespace gnuworld

74
db/pgsqlDB.h Normal file
View File

@ -0,0 +1,74 @@
/**
* pgsqlDB.h
* Copyright (C) 2002 Daniel Karrels <dan@karrels.com>
*
* 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.
*
* $Id: pgsqlDB.h,v 1.3 2007/08/28 16:09:59 dan_karrels Exp $
*/
#ifndef __PGSQLDB_H
#define __PGSQLDB_H "$Id: pgsqlDB.h,v 1.3 2007/08/28 16:09:59 dan_karrels Exp $"
#include <sys/types.h>
#include <string>
#include <exception>
#include "libpq-fe.h"
#include "gnuworldDB.h"
namespace gnuworld
{
class pgsqlDB : public gnuworldDB
{
protected:
PGconn *theDB ;
PGresult *lastResult ;
public:
pgsqlDB( const std::string& dbHost,
const unsigned short int dbPort,
const std::string& dbName,
const std::string& userName,
const std::string& password ) ;
pgsqlDB( const std::string& connectInfo ) ;
virtual ~pgsqlDB() ;
virtual bool Exec( const std::string&, bool = false ) ;
virtual bool Exec( const std::stringstream&, bool = false ) ;
virtual bool isConnected() const ;
virtual bool PutLine( const std::string& ) ;
virtual bool StartCopyIn( const std::string& ) ;
virtual bool StopCopyIn() ;
virtual unsigned int countTuples() const ;
virtual const std::string ErrorMessage() const ;
// tuple number, field number (row,col)
virtual const std::string GetValue( unsigned int,
unsigned int ) const ;
virtual const std::string GetValue( unsigned int row,
const std::string& colName )
const ;
} ;
} // namespace gnuworld
#endif // __PGSQLDB_H

3
debug.log Normal file
View File

@ -0,0 +1,3 @@
EConfig> Unable to open file: GNUWorld.conf
EConfig::Require> Configuration requires value for key "uplink"

584
depcomp Normal file
View File

@ -0,0 +1,584 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
scriptversion=2006-10-15.18
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
# Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
case $1 in
'')
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
Run PROGRAMS ARGS to compile a file, generating dependencies
as side-effects.
Environment variables:
depmode Dependency tracking mode.
source Source file read by `PROGRAMS ARGS'.
object Object file output by `PROGRAMS ARGS'.
DEPDIR directory where to store dependencies.
depfile Dependency file to output.
tmpdepfile Temporary file to use when outputing dependencies.
libtool Whether libtool is used (yes/no).
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "depcomp $scriptversion"
exit $?
;;
esac
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
fi
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
depfile=${depfile-`echo "$object" |
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
# Some modes work just like other modes, but use different flags. We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write. Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
# HP compiler uses -M and no extra arg.
gccflag=-M
depmode=gcc
fi
if test "$depmode" = dashXmstdout; then
# This is just like dashmstdout with a different argument.
dashmflag=-xM
depmode=dashmstdout
fi
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
## the command line argument order; so add the flags where they
## appear in depend2.am. Note that the slowdown incurred here
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
for arg
do
case $arg in
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
*) set fnord "$@" "$arg" ;;
esac
shift # fnord
shift # $arg
done
"$@"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
mv "$tmpdepfile" "$depfile"
;;
gcc)
## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
## up in a subdir. Having to rename by hand is ugly.
## (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
## -MM, not -M (despite what the docs say).
## - Using -M directly means running the compiler twice (even worse
## than renaming).
if test -z "$gccflag"; then
gccflag=-MD,
fi
"$@" -Wp,"$gccflag$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
## The second -e expression handles DOS-style file names with drive letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the `deleted header file' problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
tr ' ' '
' < "$tmpdepfile" |
## Some versions of gcc put a space before the `:'. On the theory
## that the space means something, we add a space to the output as
## well.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
sgi)
if test "$libtool" = yes; then
"$@" "-Wp,-MDupdate,$tmpdepfile"
else
"$@" -MDupdate "$tmpdepfile"
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
echo "$object : \\" > "$depfile"
# Clip off the initial element (the dependent). Don't try to be
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
# the IRIX cc adds comments like `#:fec' to the end of the
# dependency line.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
tr '
' ' ' >> $depfile
echo >> $depfile
# The second pass generates a dummy entry for each header file.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> $depfile
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. In older versions, this file always lives in the
# current directory. Also, the AIX compiler puts `$object:' at the
# start of each line; $object doesn't have directory information.
# Version 6 uses the directory in both cases.
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
tmpdepfile="$stripped.u"
if test "$libtool" = yes; then
"$@" -Wc,-M
else
"$@" -M
fi
stat=$?
if test -f "$tmpdepfile"; then :
else
stripped=`echo "$stripped" | sed 's,^.*/,,'`
tmpdepfile="$stripped.u"
fi
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
if test -f "$tmpdepfile"; then
outname="$stripped.o"
# Each line is of the form `foo.o: dependent.h'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
icc)
# Intel's C compiler understands `-MD -MF file'. However on
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
# ICC 7.0 will fill foo.d with something like
# foo.o: sub/foo.c
# foo.o: sub/foo.h
# which is wrong. We want:
# sub/foo.o: sub/foo.c
# sub/foo.o: sub/foo.h
# sub/foo.c:
# sub/foo.h:
# ICC 7.1 will output
# foo.o: sub/foo.c sub/foo.h
# and will wrap long lines using \ :
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
"$@" -MD -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
# Each line is of the form `foo.o: dependent.h',
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
# Some versions of the HPUX 10.20 sed can't process this invocation
# correctly. Breaking it into two sed invocations is a workaround.
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp2)
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
# compilers, which have integrated preprocessors. The correct option
# to use with these is +Maked; it writes dependencies to a file named
# 'foo.d', which lands next to the object file, wherever that
# happens to be.
# Much of this is similar to the tru64 case; see comments there.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
tmpdepfile1=$dir$base.d
tmpdepfile2=$dir.libs/$base.d
"$@" -Wc,+Maked
else
tmpdepfile1=$dir$base.d
tmpdepfile2=$dir$base.d
"$@" +Maked
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
# Add `dependent.h:' lines.
sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile" "$tmpdepfile2"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in `foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
# With Tru64 cc, shared objects can also be used to make a
# static library. This mechanism is used in libtool 1.4 series to
# handle both shared and static libraries in a single compilation.
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
#
# With libtool 1.5 this exception was removed, and libtool now
# generates 2 separate objects for the 2 libraries. These two
# compilations output dependencies in $dir.libs/$base.o.d and
# in $dir$base.o.d. We have to check for both files, because
# one of the two compilations can be disabled. We should prefer
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
# automatically cleaned when .libs/ is deleted, while ignoring
# the former would cause a distcleancheck panic.
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
tmpdepfile2=$dir$base.o.d # libtool 1.5
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
"$@" -Wc,-MD
else
tmpdepfile1=$dir$base.o.d
tmpdepfile2=$dir$base.d
tmpdepfile3=$dir$base.d
tmpdepfile4=$dir$base.d
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a tab and a space in the [].
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
test -z "$dashmflag" && dashmflag=-M
# Require at least two characters before searching for `:'
# in the target name. This is to cope with DOS-style filenames:
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
"$@" $dashmflag |
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tr ' ' '
' < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
dashXmstdout)
# This case only exists to satisfy depend.m4. It is never actually
# run, as this mode is specially recognized in the preamble.
exit 1
;;
makedepend)
"$@" || exit $?
# Remove any Libtool call
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# X makedepend
shift
cleared=no
for arg in "$@"; do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
# Strip any option that makedepend may not understand. Remove
# the object too, otherwise makedepend will parse it as a source file.
-*|$object)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix="`echo $object | sed 's/^.*\././'`"
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
sed '1,2d' "$tmpdepfile" | tr ' ' '
' | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" "$tmpdepfile".bak
;;
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
"$@" -E |
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
"$@" || exit $?
IFS=" "
for arg
do
case "$arg" in
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift
shift
;;
esac
done
"$@" -E |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
echo " " >> "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
none)
exec "$@"
;;
*)
echo "Unknown depmode $depmode" 1>&2
exit 1
;;
esac
exit 0
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

1
doc/.cvsignore Normal file
View File

@ -0,0 +1 @@
.arch-ids

21
doc/README Normal file
View File

@ -0,0 +1,21 @@
-- "$Id: README,v 1.5 2002/08/30 10:38:15 nighty Exp $"
--
-- For more detailed information about setting up GNUworld, visit :
-- http://coder-com.undernet.org/gnuworld-setup/
--
--
-- 2001-10-04: nighty <nighty@undernet.org>
--
Main Help Section
README - This file
README.pgsql - How to setup pgsql for GNUworld
README.ccontrol - How to prepare things to use the 'ccontrol' module
README.cservice - How to prepare things to use the 'cservice' module
REAMDE.sharedmemory - How to tweak shared memory to run more pgsl threads
The GNUworld development team.

23
doc/README.appjudge Normal file
View File

@ -0,0 +1,23 @@
-- "$Id: README.appjudge,v 1.5 2002/08/30 10:38:15 nighty Exp $"
--
-- For more detailed information about setting up GNUworld, visit :
-- http://coder-com.undernet.org/gnuworld-setup/
--
-- 2001-10-16: nighty <nighty@undernet.org>
--
- copy cmaster/regproc/ and its subdirs to /usr/local/pgsql
- make it owned by your gnuworld user (the one running the postgres) :
chown -R gnuworld /usr/local/pgsql/regproc
- edit the file /usr/local/pgsql/regproc/appjudge-config and set your preferences.
- crontab the content of /usr/local/pgsql/regproc/cron-judge.in :
as root : crontab -u gnuworld /usr/local/pgsql/regproc/cron-judge.in
or, as gnuworld : crontab /usr/local/pgsql/regproc/cron-judge.in
- you're done!

65
doc/README.ccontrol Normal file
View File

@ -0,0 +1,65 @@
-- "$Id: README.ccontrol,v 1.10 2008/08/06 19:35:58 hidden1 Exp $"
--
-- For more detailed information about setting up GNUworld, visit :
-- http://coder-com.undernet.org/gnuworld-setup/
--
-- 2001-10-04: nighty <nighty@undernet.org>
--
Setting up ccontrol for the first time
---------------------------------------------------------------
Follow these steps to setup the database for the ccontrol module. This
file assumes that postgresql is running and configured, and that you have
access to add and modify databases within it.
Create the database
-------------------
> createdb ccontrol
Note that this assumes that the ccontrol database does not already exist.
Load the schema
---------------
Make sure you are in the gnuworld/doc directory.
> psql ccontrol < ccontrol.sql
> psql ccontrol < ccontrol.help.sql
> psql ccontrol < ccontrol.shells.sql
Add yourself
------------
After all this is done, you need to add yourself to the bot , to do that simply run
> psql ccontrol < ccontrol.addme.sql
Note: the script add the user Admin , with all commands enabled .
the host that will be added is *!*@* , you should change it
the first time that you login to the bot along with the pass
which is temPass , for more help /msg bot help modoper.
then you should
> psql ccontrol < ccontrol.commands.sql
If you have problems with an upgrade of GNUworld with ccontrol module on certain features,
you may want to upgrade your old tables to fit, then do the following :
> psql ccontrol < ccontrol.update.sql
NOTE: in the default GNUworld.conf use rather 'ccontrol.conf' as a default for CControl
than the 'gnuworld3.conf' file (it's not complete).
All Done
--------
That's it for the sql stuff. Be sure to edit the configuration file for
cmaster (../bin/ccontrol.conf), giving username, nickname, etc, and
database information.
The GNUworld development team.

76
doc/README.cservice Normal file
View File

@ -0,0 +1,76 @@
-- "$Id: README.cservice,v 1.19 2005/09/30 00:48:43 kewlio Exp $"
--
-- For more detailed information about setting up GNUworld, visit :
-- http://coder-com.undernet.org/gnuworld-setup/
--
--
-- 2001-10-04: nighty <nighty@undernet.org>
--
Follow these steps to setup the database for the cservice module. This
file assumes that postgresql is running and configured, and that you have
access to add and modify databases within it.
Create the database
-------------------
> createdb cservice
Note that this assumes that the cservice database does not already exist.
Install the pl language
-----------------------
The following command assumes (in addition to above conditions) that the
pgsql libraries are located in /usr/local/pgsql/lib:
> createlang -L /usr/local/pgsql/lib plpgsql cservice
Load the schema
---------------
Make sure you are in the gnuworld/doc directory.
> psql cservice < cservice.sql
> psql cservice < languages.sql
> psql cservice < language_table.sql
> psql cservice < cservice.help.sql
> psql cservice < cservice.web.sql
> psql cservice < cservice.config.sql
> psql cservice < greeting.sql
Create a local (for the www) Database called 'local_db' for webcookies
(without this local db the website will NOT work)
Tho you can also choose to name the 'cservice' db 'local_db' for a
strictly and whole local use of DB + webserver, and issue the
following to the same db and then forgot the other 'createdb' thing.
This database will also hosts the pending verif q/a reset requests.
---------------------------------------------------------------------
> createdb local_db
> psql local_db < local_db.sql
Add administrator account
-------------------------
This command will add an account called 'Admin' with level 1000 access on
channel '*'...use this power wisely, The Dark Side is very powerful.
This will also register channel #coder-com to 'Admin' to make the VERIFY
command work on authenticated users.
> psql cservice < cservice.addme.sql
Using this account you will be able to login as Admin online with your
cservice bot.
Username: Admin
Password: temPass (be sure to change this after login online)
All Done
--------
That's it for the sql stuff. Be sure to edit the configuration file for
cmaster (../bin/cservice.conf), giving username, nickname, etc, and
database information.
For the website, be sure to edit website/php_includes/config.inc to configure your website.
The GNUWorld development team

21
doc/README.dronescan Normal file
View File

@ -0,0 +1,21 @@
Creating dronescan DB configuration
-----------------------------------
First, create the dronescan database in pgql:
/usr/local/pgsql/bin/createdb dronescan
Next, add the dronescan user:
/usr/local/pgsql/bin/createuser dronescan
Just answer yes to all questions.
Finally, add the .sql file:
/usr/local/pgsql/bin/psql dronescan < dronescan.sql
This will create the database called dronescan, and db user dronescan,
with default (empty) password.

87
doc/README.pgsql Normal file
View File

@ -0,0 +1,87 @@
-- "$Id: README.pgsql,v 1.10 2002/08/30 10:38:15 nighty Exp $"
--
-- Building PostgreSQL for GNUworld
--
-- For more detailed information about setting up GNUworld, visit :
-- http://coder-com.undernet.org/gnuworld-setup/
--
--
-- 2001-10-14 : nighty <nighty@undernet.org>
--
in order to build postgres you need :
- a recent version of gmake (GNU make 3.79 ftp://gnu.wwc.edu/make/make-3.79.tar.gz)
- a recent version of TCL (TCL 8+ http://dev.scriptics.com/ftp/tcl/tcl8_3/tcl8.3.3.tar.gz)
NOTE: for FreeBSD users *only* :
root:# cd /usr/ports/lang/tcl83
root:# make
it will auto-download it.
root:# make install
- unpack the postgresql tarball (latest is version 7.1.3 : ftp://ftp.us.postgresql.org/v7.1.3/postgresql-7.1.3.tar.gz) :
tar -xzvf postgresql-7.1.3.tar.gz
- 'cd' to the directory :
cd postgresql-7.1.3/
- use the following configure options :
--with-CXX : needed for several things like GNUworld or PHP to have pgsql support.
--with-tcl --without-tk : needed to compile pgtclsh (TCL interpreter)
which is needed for the script gnuworld/doc/cmaster/regproc/appjudge
and this script is the one making the applications advance in registration process.
To install this properly, see the included README.appjudge file.
- build pgsql
root:# ./configure --with-CXX --with-tcl --without-tk
root:# gmake
root:# gmake install
- add the pgsl library directories to the lib PATH, this varies from system to another
(if you don't do this, GNUworld wille *NOT* be able to compile)
on Linux type OS's you will need to edit :
/etc/ld.so.conf
and add the line :
/usr/local/pgsql/lib
save, then run 'ldconfig'.
on FreeBSD or other systems you may need to set the LD_LIBRARY_PATH environment variable
you can add the line :
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib
into /etc/profile for bash.
zsh, sh and ksh use 'export' too in their respective .shrc .zshrc .kshrc ~ files.
for csh and tcsh you will need to use 'setenv' instead :
setenv LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib
- create a data directory for PGSL :
root:# mkdir /usr/local/pgsql/data
change its permissions to the gnuworld user (the one that run postgres) :
root:# chown gnuworld /usr/local/pgsql/data
- do the final process to set the database UP :
root:# su - gnuworld
gnuworld:$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
start postgresql with default values :
gnuworld:$ /usr/local/pgsql/bin/postmaster -S -B 64 -N 32 -i -D /usr/local/pgsql/data -o -F
NOTE: this will only allow 32 threads simultaneously .. this should be large enough for small networks
if you want to increase this .. please view the 'README.sharedmemory' in this directory.
now go look README.ccontrol and README.cservice ;)

97
doc/README.sharedmemory Normal file
View File

@ -0,0 +1,97 @@
-- "$Id: README.sharedmemory,v 1.6 2002/08/30 10:38:15 nighty Exp $"
--
-- For more detailed information about setting up GNUworld, visit :
-- http://coder-com.undernet.org/gnuworld-setup/
--
-- Manipulating shared memory
--
-- 2001-12-25: nighty <nighty@undernet.org>: fixed example
-- 2001-10-04: nighty <nighty@undernet.org>
--
PostgreSQL runs 32 maximum threads by default
if you want to increase this (-N parameter) you will need
to increase the -B paramter as well (buffers)
and '-B' must be at least twice '-N' but you will prefer
set -B bigger on more important networks.
for example :
/usr/local/pgsql/bin/postmaster -S -B 1024 -N 200 -i -D /usr/local/pgsql/data -o -F
for 200 threads,
you would need to tweak max # of shared memory segments etc...
we will explain two cases, /proc/* compatible linux, and FreeBSD kernel options.
1) The '/proc/*' Linux case
---------------------------
add the following to /etc/rc.d/rc.local (or equivalent) :
echo -n 100000000 > /proc/sys/kernel/shmmax
echo -n 100000000 > /proc/sys/kernel/shmall
You may also issue them directly on the shell as root to avoid rebooting,
it will be in the startup file in case reboot happen.
2) The FreeBSD kernel tweaking case
-----------------------------------
You need your kernel sources installed.
do all the following as root :
# cd /usr/src/sys/i386/conf
if you don't have a config already here, do this :
# cp GENERIC YOURCONF
then...
# vi YOURCONF
set 'maxusers' to 512.
and add the following lines :
options SYSVSHM
options SYSVMSG
options SYSVSEM
options SHMMAXPGS=100000000
options SHMMAX=100000000
options SHMALL=100000000
options SHMMNI=8192
options SHMMIN=1
options SHMSEG=512
options SEMMNI=32
options SEMMNS=2048
options SEMMNU=30
options SEMMAP=30
options SEMMSL=512
configure your new kernel :
# /usr/sbin/config YOURCONF
build it.
# cd ../../compile/YOURCONF
# make depend
# make
# make install
then reboot the machine
# reboot

1
doc/api/.cvsignore Normal file
View File

@ -0,0 +1 @@
.arch-ids

71
doc/autokill.sql Normal file
View File

@ -0,0 +1,71 @@
--
-- $Id: autokill.sql,v 1.17 2008/04/18 11:33:26 danielaustin Exp $
--
--
-- Starting the process...
\qecho [*] Starting autokill.sql..
BEGIN WORK;
--
-- Clean up the temporary table from last time.
DROP TABLE IF EXISTS to_die;
-- Select all user_id's idle > 60 days into a temp table.
--
\qecho [*] Fetching list of idle user accounts:
SELECT users_lastseen.user_id,users_lastseen.last_seen,users.user_name INTO TABLE to_die FROM users_lastseen,users WHERE (users_lastseen.last_seen <= extract(epoch from now() - interval '60 days')::integer) AND users.id=users_lastseen.user_id;
-- Remove any who currently have a pending application (Shouldn't happen <g>)
\qecho [*] Moving those with old channel applications to user "AutoPurged".
UPDATE pending SET manager_id = (SELECT id FROM users WHERE lower(user_name) = 'AutoPurged') WHERE pending.manager_id IN (select user_id from to_die);
\qecho [*] Not deleting those users who have the NoPurge flag.
DELETE FROM to_die WHERE user_id IN (SELECT id FROM users WHERE (flags::int4 & 32) = 32);
-- Output who are are going to kill, log stdout.
\qecho [*] Listing Final Accounts to be removed:
SELECT users.user_name,to_die.last_seen FROM users,to_die WHERE users.id IN (SELECT user_id);
--
-- Clean up userlogs.
\qecho [*] Removing userlogs..
DELETE FROM userlog WHERE user_id IN (SELECT user_id FROM to_die);
--
-- Clean up level records.
\qecho [*] Removing access levels..
DELETE FROM levels WHERE user_id IN (SELECT user_id FROM to_die);
--
-- Clean up FRAUD USERNAMES.
\qecho [*] Removing FRAUD USERNAME records..
DELETE FROM noreg WHERE type=4 AND user_name IN (SELECT user_name FROM to_die);
--
-- Clean up supporter records.
\qecho [*] Removing supporter records..
DELETE FROM supporters WHERE user_id IN (SELECT user_id FROM to_die);
--
-- Clean up objection records.
\qecho [*] Removing Objection records..
DELETE FROM objections WHERE user_id IN (SELECT user_id FROM to_die);
-- Clean up mailq records.
--\qecho [*] Removing mailq records..
--DELETE FROM mailq WHERE user_id IN (SELECT user_id FROM to_die);
--
-- Clean up notes records.
\qecho [*] Removing notes received and/or sent..
DELETE FROM notes WHERE user_id IN (SELECT user_id FROM to_die) OR from_user_id IN (SELECt user_id FROM to_die);
--
-- Clean up webaccessteam records..
--\qecho [*] Removing webaccessteam records..
--DELETE FROM webaccessteam where admin_id IN (SELECT admin_id FROM to_die);
--
-- Clean up fraud_lists records..
\qecho [*] Removing fraud_list_data..
DELETE FROM fraud_list_data WHERE user_id IN (SELECT user_id FROM to_die);
--
-- Clean up last_seens.
\qecho [*] Removing last_seens..
DELETE FROM users_lastseen WHERE user_id IN (SELECT user_id FROM to_die);
--
-- Clean up users (Finally!).
\qecho [*] Removing user accounts..
DELETE FROM users WHERE user_name IN (SELECT user_name FROM to_die);
--
-- Commit all the work (if this line is not executed, you can "undo" the done stuff using 'ROLLBACK WORK;'
\qecho [*] Comitting changes to database..
COMMIT WORK;

11
doc/ccontrol.addme.sql Normal file
View File

@ -0,0 +1,11 @@
-- "$Id: ccontrol.addme.sql,v 1.6 2002/08/30 10:15:12 nighty Exp $"
-- 2001-03-29 : |MrBean|
-- This script will add the first user to ccontrol
-- it will create a user with a coder access by the handle of Admin
-- with pass : temPass
-- the host that will be added is *!*@* , this is a security risk, and should be changed along with the password
-- Note: this script should be run only once , and when the database got no other opers
INSERT INTO OPERS (user_name,password,access,saccess,last_updated,isCODER) VALUES ('Admin','07d976a29bdb3ff42e19c102852151b28097bbad',2147483647,2147483647,extract(epoch FROM now())::int,'t');
INSERT INTO HOSTS (user_id,host) VALUES (1,'*!*@*');

56
doc/ccontrol.commands.sql Normal file
View File

@ -0,0 +1,56 @@
-- "$Id: ccontrol.commands.sql,v 1.8 2002/08/30 10:15:12 nighty Exp $"
-- Fills the commands table with the default values
-- Note: DO NOT EDIT THIS FILE BY HAND!
-- THESE ARE JUST DEFAULT VALUES
-- USE THE COMMANDS COMMAND TO CHANGE THEM
-- Last Updated : 26/07/01 |MrBean|
Delete from commands;
COPY "commands" FROM stdin;
ACCESS ACCESS 1 n n t 1 n
HELP HELP 2 n n t 1 n
LOGIN LOGIN 0 n t t 1 n
DEAUTH DEAUTH 4 n n t 1 n
NEWPASS NEWPASS 8 n n t 1 n
MODE MODE 16 n n n 1 n
OP OP 32 n n n 1 n
DEOP DEOP 64 n n n 1 n
MODERATE MODERATE 128 n n n 1 n
UNMODERATE UNMODERATE 256 n n n 1 n
INVITE INVITE 512 n n n 1 n
JUPE JUPE 1024 n n n 1 n
GLINE GLINE 2048 n n n 1 n
REMGLINE REMGLINE 4096 n n n 1 n
SCANGLINE SCANGLINE 8192 n n n 1 n
REMOPERCHAN REMOPERCHAN 16384 n n n 1 n
ADDOPERCHAN ADDOPERCHAN 32768 n n n 1 n
LISTOPERCHANS LISTOPERCHANS 65536 n n n 1 n
CHANINFO CHANINFO 131072 n n n 1 n
WHOIS WHOIS 262144 n n n 1 n
ADDUSER ADDUSER 524288 n n n 1 n
REMUSER REMUSER 1048576 n n n 1 n
MODUSER MODUSER 2097152 n n n 1 n
TRANSLATE TRANSLATE 4194304 n n n 1 n
KICK KICK 8388608 n n n 1 n
ADDCOMMAND ADDCOMMAND 16777216 n n n 1 n
REMCOMMAND REMCOMMAND 33554432 n n n 1 n
SUSPEND SUSPEND 67108864 n n n 1 n
UNSUSPEND UNSUSPEND 134217728 n n n 1 n
CLEARCHAN CLEARCHAN 268435456 n n n 1 n
LISTHOSTS LISTHOSTS 536870912 n n n 1 n
ADDSERVER ADDSERVER 1073741824 n n n 1 n
LEARNNET LEARNNET 1 n n n 1 t
REMSERVER REMSERVER 2 n n n 1 t
CHECKNET CHECKNET 4 n n n 1 t
LASTCOM LASTCOM 8 n n n 1 t
FORCEGLINE FORCEGLINE 16 n n n 1 t
EXCEPTIONS EXCEPTIONS 32 n n n 1 t
LISTIGNORES LISTIGNORES 64 n n n 1 t
REMIGNORE REMIGNORE 128 n n n 1 t
LIST LIST 256 n n n 1 t
COMMANDS COMMANDS 512 n n n 1 t
GCHAN GCHAN 1024 n n n 1 t
REMGCHAN REMGCHAN 2048 n n n 1 t
\.

334
doc/ccontrol.help.sql Normal file
View File

@ -0,0 +1,334 @@
-- 2001-03-02 |MrBean| "$Id: ccontrol.help.sql,v 1.20 2009/07/25 18:12:33 hidden1 Exp $"
-- Created the file and added all help topics to the database
-- 2201-03-11 |MrBean|
-- Added OP,DEOP,MODERATE,UNMODERATE,CLEARCHAN
-- Now the script first deletes previous help , and then reinsert all of the topics
-- Changed some commands. Also usage replaced with Syntax in the commands it was missing FWAP
-- Restructure help into alphabetical order, remove obselete commands, add new commands
-- Delete the current help entries
DELETE FROM help;
COPY "help" FROM stdin;
ADDCOMMAND 1 ****** ADDCOMMAND COMMAND ******
ADDCOMMAND 2 Gives permission to an oper to use a specified command
ADDCOMMAND 3 Syntax: /msg $BOT$ addcommand [-fr] <oper> <command>
ADDCOMMAND 4 -fr can only be specified by SMT+ to force addition
ADDCOMMAND 5 <oper> - the oper username you want to give the command to
ADDCOMMAND 6 <command> - the command you want to add
ADDCOMMAND 7 CODERS only: you can use /msg $BOT$ addcommand [-fr] <-allopers|-alladmins|-allsmts|-allcoders> <command>
ADDSERVER 1 ****** ADDSERVER COMMAND ******
ADDSERVER 2 Adds a new server to the bot database
ADDSERVER 3 Syntax: /msg $BOT$ addserver <server>
ADDSERVER 4 *note* The server has to be linked in order for this command to work
ADDUSER 1 ****** ADDUSER COMMAND ******
ADDUSER 2 Adds new oper to the bot access list
ADDUSER 3 Syntax: /msg $BOT$ adduser <username> <oper level> [server] <password>
ADDUSER 4 <username> - The username the bot will recognize the oper under
ADDUSER 5 <oper level> - Sets the initial oper commands, options are: oper, admin, smt, coder
ADDUSER 6 [server] - add the oper to the specified server, defaults to your home server
ADDUSER 7 <password> - the password of the new oper
ADDOPERCHAN 1 ****** ADDOPERCHAN COMMAND ******
ADDOPERCHAN 2 Marks a channel as ircoperators only
ADDOPERCHAN 3 Syntax: /msg $BOT$ addoperchan <channel>
ADDOPERCHAN 4 thous making the bot kick and ban everyone who is not an ircop
CHANINFO 1 ****** CHANINFO COMMAND ******
CHANINFO 2 Gives you all sort of information about a channel
CHANINFO 3 Syntax: /msg $BOT$ chaninfo <#channel>
CHANINFO 4 <#channel> - the channel you would like information about
CHECKNET 1 ****** CHECKNET COMMAND ******
CHECKNET 2 Lists all current missing servers
CHECKNET 3 Syntax: /msg $BOT$ checknet
CLEARCHAN 1 ****** CLEARCHAN COMMAND ******
CLEARCHAN 2 Clears a channel's modes
CLEARCHAN 3 Syntax: /msg $BOT$ clearchan <#channel> [mode string]
CLEARCHAN 4 <#channel> - the channel to clear modes in
CLEARCHAN 5 [mode string] - can be ALL (for all channel modes) or any combination of ilpskmntDob
CLEARCHAN 6 o = remove all channel ops
CLEARCHAN 7 b = remove all bans
CLEARCHAN 8 *NOTE* - if you dont specify a mode string the bot will remove modes obikl
COMMANDS 1 ****** COMMANDS COMMAND ******
COMMANDS 2 Changes a command's options
COMMANDS 3 Syntax: /msg $BOT$ commands <-ds|-en|-no|-nl|-na|-ml> <command> <option>
COMMANDS 4 -ds - disable the command
COMMANDS 5 -en - enable the command
COMMANDS 6 -no - toggles the need to be oper'd up to use the command
COMMANDS 7 -nl - toggles if the command should not be logged in the lastcom report
COMMANDS 8 -na - changes the name of the command
COMMANDS 9 -ml - set the minimum level a oper must have for this command to be added to
CONFIG 1 ****** CONFIG COMMAND ******
CONFIG 2 Sets internal configuration options within the bot
CONFIG 3 Syntax: /msg $BOT$ config <option> <value>
CONFIG 4 <option> may be:
CONFIG 5 -GTime <duration> - default gline time (accepts friendly times e.g. 900s, 30m, 3h, 1d)
CONFIG 6 -VClones <amount> - threshold for warning about virtual (realname) clones
CONFIG 7 -Clones <amount> - threshold for clones on a single IP
CONFIG 8 -CClones <amount> - threshold for CIDR clones (see below)
CONFIG 9 -CClonesCIDR <size> - CIDR bit length for clones (0-32)
CONFIG 10 -CClonesGline <Yes|No> - auto-gline for CIDR clones flag
CONFIG 11 -CClonesGTime <duration> - gline duration for CIDR clones (accepts friendly times)
CONFIG 12 -IClones <amount> - threshold for CIDR ident clones
CONFIG 13 -IClonesGline <Yes|No> - auto-gline for CIDR ident clones flag
CONFIG 14 -CClonesTime <duration> - time between clone warnings to msglog (accepts friendly times)
CONFIG 15 -GBCount <count> - number of glines to set at once
CONFIG 16 -GBInterval <duration> - time between setting gline bursts (accepts friendly times)
CONFIG 17 -SGline <Yes|No> - Save glines flag
DEAUTH 1 ****** DEAUTH COMMAND ******
DEAUTH 2 Deauthenticates you from the bot
DEAUTH 3 Syntax: /msg $BOT$ deauth
DEOP 1 ****** DEOP COMMAND ******
DEOP 2 Deops one or more users on a specific channel
DEOP 3 Syntax: /msg $BOT$ deop <#chan> <nick1> [nick2 nick3...]
DEOP 4 <#chan> - the channel to deop the users on
DEOP 5 <nick1, nick2..> - nicks to deop
EXCEPTIONS 1 ****** EXCEPTIONS COMMAND ******
EXCEPTIONS 2 Excepts users from the various glines/warnings within CONFIG
EXCEPTIONS 3 Syntax: /msg $BOT$ exceptions <add|del|list> <host mask> <connections>
EXCEPTIONS 4 <host mask> - user@host mask to except
EXCEPTIONS 5 <connections> - number of connections allowed before gline/warning
FORCECHANGLINE 1 ****** FORCECHANGLINE COMMAND ******
FORCECHANGLINE 2 Glines all users on the given channel
FORCECHANGLINE 3 Syntax: /msg $BOT$ forcechangline [-u] <#channel> [duration] <reason>
FORCECHANGLINE 4 <#channel> - the channel name to gline
FORCECHANGLINE 5 [duration] - Duration of the gline, may have s,m,h,d for secs,mins,hours,days
FORCECHANGLINE 6 <reason> - reason for the gline
FORCECHANGLINE 7 [-u] - only glines the unidented clients found on the channel with ~*@IP glines
FORCECHANGLINE 8 This type of chan gline is limited for 24 hours and cannot be issued on channels with opers or channels which are marked as nomode channels
FORCEGLINE 1 ****** FORCEGLINE COMMAND ******
FORCEGLINE 2 Glines a host for a certain amount of time
FORCEGLINE 3 Syntax: /msg $BOT$ forcegline [-fu] <nick|user@host> <duration[s/m/h/d]> <reason>
FORCEGLINE 4 -fu flag can only be specified by SMT+ (used to force)
FORCEGLINE 5 <nick|user@host> - the nick or user@host to gline (user@host supports CIDR)
FORCEGLINE 6 <duration> - duration of the gline (supports s,m,h,d for secs,mins,hours,days)
FORCEGLINE 7 <reason> - the reason for the gline
FORCEGLINE 8 This type of gline is used to gline for more than 14 days and/or for a gline which affects more than 255 users.
GCHAN 1 ****** GCHAN COMMAND ******
GCHAN 2 Sets a bad channel gline on a channel
GCHAN 3 Syntax: /msg $BOT$ gchan <#channel> <duration|-per> <reason>
GCHAN 4 <#channel> - the channel to badchannel gline
GCHAN 5 <duration> - duration of the gline (-per for permanent)
GCHAN 6 <reason> - reason for the badchannel gline
GLINE 1 ****** GLINE COMMAND ******
GLINE 2 glines a certain host from the network
GLINE 3 Syntax: /msg $BOT$ gline <user@host> [duration] <reason>
GLINE 4 <user@host> - the host to gline (CIDR not supported)
GLINE 5 <duration> - the duration of the gline (supports s,m,h,d for secs,mins,hours,days)
GLINE 6 <reason> - the reason for the gline
HELP 1 ****** HELP COMMAND ******
HELP 2 Shows help on commands (like this one!)
HELP 3 Syntax: /msg $BOT$ help [command]
HELP 4 If command is empty, this command shows the commands you have access to.
INVITE 1 ****** INVITE COMMAND ******
INVITE 2 Makes the bot invite you to an invite only channel
INVITE 3 Syntax: /msg $BOT$ invite <#channel>
INVITE 4 <#channel> - the channel to invite you to
JUPE 1 ****** JUPE COMMAND ******
JUPE 2 Jupe a server (prevent it connecting to the network)
JUPE 3 Syntax: /msg $BOT$ jupe <servername> <reason>
JUPE 4 <servername> - the name of the server to jupe
JUPE 5 <reason> - reason for the jupe
KICK 1 ****** KICK COMMAND ******
KICK 2 Makes the bot kick a user from a channel
KICK 3 Syntax: /msg $BOT$ kick <#channel> <nick> <reason>
KICK 4 <#channel> - the channel to kick the user from
KICK 5 <nick> - the nick of the user you want to kick
KICK 6 <reason> - reason for the kick
LASTCOM 1 ****** LASTCOM COMMAND ******
LASTCOM 2 This command will paste all the last commands which where issued to the bot
LASTCOM 3 Syntax: /msg $BOT$ lastcom [numcommands] [from days ago - d]
LASTCOM 4 [numcommands] - The number of commands to show (default: 20)
LASTCOM 5 You can also specify the number of days ago
LASTCOMM 1 See /msg $BOT$ help lastcom
LEARNNET 1 ****** LEARNNET COMMAND ******
LEARNNET 2 Adds all the unknown servers which are currently connected to the network to the bot database
LEARNNET 3 Syntax: /msg $BOT$ learnnet
LIST 1 ****** LIST COMMAND ******
LIST 2 This command lists various internal lists
LIST 3 Syntax: /msg $BOT$ list <type>
LIST 4 <type> - glines, servers, badchannels, exceptions, channels, shells
LIST 5 (see /msg $BOT$ help list channels for more info on channels)
LIST CHANNELS 1 ****** LIST CHANNELS COMMAND ******
LIST CHANNELS 2 This command lists channels based on various criteria
LIST CHANNELS 3 Syntax: /msg $BOT$ list channels <type>
LIST CHANNELS 4 <type> may be:
LIST CHANNELS 5 key <key> - list all channels with the specified key (supports wildcards)
LIST CHANNELS 6 modes <modes> - list all channels with the modes, you may explicitly specify + or - modes
LIST CHANNELS 7 topic <topic> - list all channels with a topic matching the specified topic (supports wildcards)
LIST CHANNELS 8 topicby <nick!user@host> - list all channels with topics set by nick!user@host (supports wildcards)
LISTHOSTS 1 ****** LISTHOSTS COMMAND ******
LISTHOSTS 2 Lists all the hosts that an oper is allowed to login from
LISTHOSTS 3 Syntax: /msg $BOT$ listhosts <username>
LISTHOSTS 4 <username> - the username to lookup
LISTIGNORES 1 ****** LISTIGNORES COMMAND ******
LISTIGNORES 2 Shows the current ignore list of the bot
LISTIGNORES 3 Syntax: /msg $BOT$ listignores
LISTOPERCHANS 1 ****** LISTOPERCHANS COMMANDS ******
LISTOPERCHANS 2 Shows a list of the channels that are marked as ircops only
LISTOPERCHANS 3 Syntax: /msg $BOT$ listoperchans
LOGIN 1 ****** LOGIN COMMAND ******
LOGIN 2 Authenticates you with the bot
LOGIN 3 Syntax: /msg $BOT$ login <username> <password>
LOGIN 4 <handle> - your username on the bot
LOGIN 5 <password> - your password
LOGOUT 1 See /msg $BOT$ help deauth
MAXUSERS 1 ****** MAXUSERS COMMANDS ******
MAXUSERS 2 Shows the peak user level as seen by the bot
MAXUSERS 3 Syntax: /msg $BOT$ maxusers
MODE 1 ****** MODE COMMAND ******
MODE 2 Makes the bot change a channel's modes
MODE 3 Syntax: /msg $BOT$ mode <#channel> <mode string>
MODE 4 <#channel> - the channel to change the mode in
MODE 5 <mode string> - the string that contains the mode
MODERATE 1 ****** MODERATE COMMAND ******
MODERATE 2 Moderates a channel
MODERATE 3 Syntax: /msg $BOT$ moderate <#channel>
MODERATE 4 <#channel> - the channel to moderate
MODUSER 1 ****** MODUSER COMMAND ******
MODUSER 2 Modify an existing bot user
MODUSER 3 Syntax: /msg $BOT$ moduser <username> [-ah new host] [-dh host] [-s server] [-p password] [-gl on|off]
MODUSER 4 [-op on|off] [-ua] [-uf flags] [-e email] [-mt m|n]
MODUSER 5 <username> - username to modify
MODUSER 6 [-ah host] - adds a new host for the user
MODUSER 7 [-dh host] - removes a host for a user
MODUSER 8 [-s server] - associate the user with a server
MODUSER 9 [-p password] - changes the user's password
MODUSER 10 [-gl on|off] - toggles whether the logs will be messaged to the user
MODUSER 11 [-op on|off] - toggles if a user must be oper'd up to use the needop commands
MODUSER 12 [-ua] - resets the user access acording to his flags
MODUSER 13 [-uf flags] - updates the oper flags to new one (OPER|ADMIN|SMT|CODER)
MODUSER 14 [-e email] - updates the user's email
MODUSER 15 [-mt m|n] - change the way the bot communicates to the user (m=message,n=notice)
MODUSER 16 [-glag on|off] - toggles whether the server lag reports will be messaged to the user
NEWPASS 1 ****** NEWPASS COMMAND ******
NEWPASS 2 Changes your password for the bot
NEWPASS 3 Syntax: /msg $BOT$ newpass <newpass>
NOMODE 1 ****** NOMODE COMMAND ******
NOMODE 2 Managed the nomode list
NOMODE 3 Syntax: /msg $BOT$ nomode <#channel> <reason>
NOMODE 4 <#channel> - channel to ban modes from
NOMODE 5 <reason> - reason to give when someone tries
OP 1 ****** OP COMMAND ******
OP 2 Op users on a specific channel
OP 3 Syntax: /msg $BOT$ op <#channel> <nick1> [nick2 nickN...]
OP 4 <#channel> - channel to op the user(s) on
OP 5 <nick1 nick2...> - users to op
REMCOMMAND 1 ****** DELCOMMAND COMMAND ******
REMCOMMAND 2 Removes an oper's access to a certain command
REMCOMMAND 3 Syntax: /msg $BOT$ remcommand <command> <username>
REMCOMMAND 4 <command> - the command to remove access to
REMCOMMAND 5 <username> - the username of the oper you want to remove the command from
REMCOMMAND 6 CODERS only: you can use /msg $BOT$ remcommand <-allopers|-alladmins|-allsmts|-allcoders> <command>
REMGCHAN 1 ****** REMGCHAN COMMAND ******
REMGCHAN 2 Removes a gchan badchannel gline
REMGCHAN 3 Syntax: /msg $BOT$ remgchan <#channel>
REMGCHAN 4 <#channel> - channel to remove from badchannel gline list
REMGLINE 1 ****** REMGLINE COMMAND ******
REMGLINE 2 Removes a gline on a user@host
REMGLINE 3 Syntax: /msg $BOT$ remgline <user@host>
REMGLINE 4 <user@host> - the host to remove the gline for
REMIGNORE 1 ****** REMIGNORE COMMAND ******
REMIGNORE 2 Removes a host from the bot's ignore list
REMIGNORE 3 Syntax: /msg $BOT$ remignore <host>
REMIGNORE 4 <host> - the host to remove from the ignore list
REMOPERCHAN 1 ****** REMOPERCHAN COMMAND ******
REMOPERCHAN 2 Unmarks a channel as ircop only
REMOPERCHAN 3 Syntax: /msg $BOT$ remoperchan <#channel>
REMOPERCHAN 4 <#channel> - the channel you want to unmark as operchan
REMSERVER 1 ****** REMSERVER COMMAND ******
REMSERVER 2 Removes a server from the bot's database
REMSERVER 3 Syntax: /msg $BOT$ remserver <server name>
REMSERVER 4 NOTE: use with caution!
REMSGLINE 1 ****** REMSGLINE COMMAND ******
REMSGLINE 2 Removes an SGLINE from the network
REMSGLINE 3 Syntax: /msg $BOT$ remsgline <user@host>
REMSGLINE 4 <user@host> - the user@host to remove from the sgline list
REMUSER 1 ****** REMOVEOPER COMMAND ******
REMUSER 2 Removes an oper from the bot's access list
REMUSER 3 Syntax: /msg $BOT$ remuser <username>
REMUSER 4 <username> - username of the oper you want to remove
REOP 1 ****** REOP COMMAND ******
REOP 2 Removes all channel ops from a channel and ops the specified nick
REOP 3 Syntax: /msg $BOT$ reop <#channel> <nick>
REOP 4 <#channel> - channel to perform reop in
REOP 5 <nick> - nick to be opped once channel is deopped
SAY 1 ****** SAY COMMAND ******
SAY 2 Force the bot (or server) to talk in a channel or to a nick
SAY 3 Syntax: /msg $BOT$ say <-s|-b> <#channel|nick> <message>
SAY 4 <-s> - Message will originate from the server
SAY 5 <-b> - Message will originate from the bot ($BOT$)
SAY 6 <#channel|nick> - the channel or nick to receive the message
SAY 7 <message> - the message to send
SCAN 1 ****** SCAN COMMAND ******
SCAN 2 Scans the network for users matching the required criteria
SCAN 3 Syntax: /msg $BOT$ scan <-fh user@host | -h user@host> [-v] [-i]
SCAN 4 Syntax: /msg $BOT$ scan <-n realname> [-v] [-i]
SCAN 5 <-h user@host> - match user@host/host/IP mask (supports CIDR and wildcards)
SCAN 6 <-fh user@host> - match user@host (masked host only) (supports wildcards)
SCAN 7 <-n realname> - match the specified realname (supports wildcards)
SCAN 8 [-v] - display the first 15 matching users (rather than just a count)
SCAN 9 [-i] - perform an ident report (listing number of unique idents found within the match)
SCANGLINE 1 ****** SCANGLINE COMMAND ******
SCANGLINE 2 Scans the gline list for a gline matching a certain host
SCANGLINE 3 Syntax: /msg $BOT$ scangline <host mask>
SCANGLINE 4 <host mask> - the host mask to lookup
SCHANGLINE 1 ****** SCHANGLINE COMMAND ******
SCHANGLINE 2 Glines all users on the given channel
SCHANGLINE 3 Syntax: /msg $BOT$ schangline [-u] <#channel> [duration] <reason>
SCHANGLINE 4 <#channel> - the channel name to gline
SCHANGLINE 5 [duration] - Duration of the gline, may have s,m,h,d for secs,mins,hours,days
SCHANGLINE 6 <reason> - reason for the gline
SCHANGLINE 7 [-u] - only glines the unidented clients found on the channel with ~*@IP glines
SGLINE 1 ****** SGLINE COMMAND ******
SGLINE 2 gline a user@host with relaxed restrictions
SGLINE 3 Syntax: /msg $BOT$ sgline <user@host> [duration] <reason>
SGLINE 4 <user@host> - the user@host to gline from the network
SGLINE 5 [duration] - duration of the gline, supports s,m,h,d for secs,mins,hours,days
SGLINE 6 <reason> - reason for the gline
SHELLS 1 ****** SHELLS COMMAND ******
SHELLS 2 Add/remove/modify shells limits/exceptions
SHELLS 3 Syntax: /msg $BOT$ SHELLS <addcompany|addnetblock|delcompany|delnetblock|list|chlimit|chname|clearall> <Shell company|Netblock> <max connections>
SHELLS 4 <Shell company>: The name of the shell company
SHELLS 5 <Netblock>: CIDR netblock
SHELLS 6 <max connections>: The number of connections allowed before gline
SHUTDOWN 1 ****** SHUTDOWN COMMAND ******
SHUTDOWN 2 Shutdown the service and exit
SHUTDOWN 3 Syntax: /msg $BOT$ shutdown <reason>
SHUTDOWN 4 <reason> - the reason to use in the /squit message of the server
STATUS 1 ****** STATUS COMMAND ******
STATUS 2 Show all sorts of debug and status information about the bot and server
STATUS 3 Syntax: /msg $BOT$ status
SUSPEND 1 ****** SUSPEND COMMAND ******
SUSPEND 2 Suspends an oper from the bot for a certain amount of time
SUSPEND 3 Syntax: /msg $BOT$ suspend <username> <duration> [-l level] <reason>
SUSPEND 4 <username> - username to suspend
SUSPEND 5 <duration> - the duration of the suspend (supports s,m,h,d for secs,mins,hours,days)
SUSPEND 6 [-l level] - level at which the user is suspended (required minimum to unsuspend)
SUSPEND 7 <reason> - reason for suspension
TRANSLATE 1 ****** TRANSLATE COMMAND ******
TRANSLATE 2 Translates a numeric into a nick
TRANSLATE 3 Syntax: /msg $BOT$ translate <numeric>
TRANSLATE 4 <numeric> - the numeric you want to translate
UNJUPE 1 ****** UNJUPE COMMAND ******
UNJUPE 2 Removes a server jupe previously set by the jupe command
UNJUPE 3 Syntax: /msg $BOT$ unjupe <server>
UNJUPE 4 <server> - server name to unjupe
UNMODERATE 1 ****** UNMODERATE COMMAND ******
UNMODERATE 2 UnModerates a channel previously moderated with 'moderate'
UNMODERATE 3 Syntax: /msg $BOT$ unmoderate <#channel>
UNMODERATE 4 <#channel> - the channel to stop moderating
UNSUSPEND 1 ****** UNSUSPEND COMMAND ******
UNSUSPEND 2 UNSuspend an oper previously suspended
UNSUSPEND 3 Syntax: /msg $BOT$ unsuspend <username>
UNSUSPEND 4 <username> - username to unsuspend
USERINFO 1 ****** USERINFO COMMAND ******
USERINFO 2 Shows information about all the opers that their server/handle match the supplied mask
USERINFO 3 Syntax: /msg $BOT$ userinfo <server|username> [-cl]
USERINFO 4 <server|username> - the server or username to lookup (supports wildcards)
USERINFO 5 [-cl] - If this is specified, the command will also list all commands available to each user matched
WHOIS 1 ****** WHOIS COMMAND ******
WHOIS 2 Gives information about a user on the network
WHOIS 3 Syntax: /msg $BOT$ whois <nick>
WHOIS 4 <nick> - the person you want to get info about

17
doc/ccontrol.shells.sql Normal file
View File

@ -0,0 +1,17 @@
CREATE TABLE ShellCompanies (
id SERIAL,
name VARCHAR(200) UNIQUE NOT NULL,
active int4 NOT NULL DEFAULT 1,
addedby VARCHAR(200) NOT NULL,
addedon int4 NOT NULL,
lastmodby VARCHAR(200) NOT NULL,
lastmodon int4 NOT NULL,
maxlimit int4 NOT NULL
);
CREATE TABLE ShellNetblocks (
companyid int4 NOT NULL,
cidr VARCHAR(20) NOT NULL,
addedby VARCHAR(200) NOT NULL,
addedon int4 NOT NULL
);

164
doc/ccontrol.sql Normal file
View File

@ -0,0 +1,164 @@
-- "$Id: ccontrol.sql,v 1.34 2009/07/25 18:12:33 hidden1 Exp $"
-- 2009-01-16 : Spike
-- Merged ShellCompanies and ShellNetblocks tables in.
-- 2002-25-02 : |MrBean|
-- Added the Misc table
-- 2001-10-14 : nighty
-- corrected fieldname typo in "suspendReason" -> "suspend_reason"
-- 2001-13-02 : |MrBean|
-- Added level patch for ccontrol module
-- 2001-22-02 : |MrBean|
-- Added help table for a new help system being developed
-- 2001-13-03 : |MrBean|
-- Added Glines table
-- 2001-30-04 : |MrBean|
-- Added servers table
CREATE TABLE opers (
user_id SERIAL,
user_name TEXT NOT NULL UNIQUE,
password VARCHAR (40) NOT NULL,
access INT4 NOT NULL DEFAULT '0',
saccess INT4 NOT NULL DEFAULT '0',
-- For a full list of access mask see CControlCommands.h
server VARCHAR (128) NOT NULL DEFAULT 'undernet.org', -- the server the oper is assosiated to
flags INT4 NOT NULL DEFAULT '0',
isSuspended BOOLEAN NOT NULL DEFAULT 'n',
suspend_expires INT4,
suspend_level INT4,
suspended_by VARCHAR(128),
suspend_Reason VARCHAR(256),
isUHS BOOLEAN NOT NULL DEFAULT 'n',
isOPER BOOLEAN NOT NULL DEFAULT 'n',
isADMIN BOOLEAN NOT NULL DEFAULT 'n',
isSMT BOOLEAN NOT NULL DEFAULT 'n',
isCODER BOOLEAN NOT NULL DEFAULT 'n',
getLOGS BOOLEAN NOT NULL DEFAULT 'n',
GetLAG BOOLEAN NOT NULL DEFAULT 'n',
needOP BOOLEAN NOT NULL DEFAULT 'n',
email VARCHAR(128),
last_updated_by VARCHAR (128), -- nick!user@host
last_updated INT4 NOT NULL,
LastPassChangeTS INT4 NOT NULL DEFAULT '0',
notice BOOLEAN NOT NULL DEFAULT 't',
is_deleted BOOLEAN NOT NULL DEFAULT 'n',
PRIMARY KEY( user_id )
);
CREATE TABLE hosts (
user_id INT4 NOT NULL,
host VARCHAR(128) NOT NULL
);
CREATE TABLE help (
command VARCHAR(40) NOT NULL,
subcommand VARCHAR(40),
line INT4 NOT NULL DEFAULT '1',
help VARCHAR(255)
);
CREATE TABLE glines (
Id SERIAL,
Host VARCHAR(128) UNIQUE NOT NULL,
AddedBy VARCHAR(128) NOT NULL,
AddedOn INT4 NOT NULL,
ExpiresAt INT4 NOT NULL,
LastUpdated INT4 NOT NULL DEFAULT date_part('epoch', CURRENT_TIMESTAMP)::int,
Reason VARCHAR(255)
);
CREATE TABLE servers (
Name VARCHAR(100) NOT NULL,
LastUplink VARCHAR(100),
LastConnected INT4 NOT NULL DEFAULT '0',
SplitedOn INT4 NOT NULL DEFAULT '0',
LastNumeric VARCHAR(4),
SplitReason VARCHAR(512),
Version VARCHAR(256),
AddedOn INT4 NOT NULL,
LastUpdated INT4 NOT NULL,
ReportMissing BOOLEAN NOT NULL DEFAULT 't'
);
CREATE TABLE comlog (
ts INT4 NOT NULL,
oper text,
command VARCHAR(512)
);
CREATE TABLE opernews (
MessageId SERIAL,
MessageFlags INT4 NOT NULL DEFAULT '0',
PostTime INT4 NOT NULL,
PostedBy VARCHAR(128) NOT NULL,
Message VARCHAR(512) NOT NULL,
ExpiresOn INT4
);
CREATE TABLE exceptions (
Host VARCHAR(128) NOT NULL,
Connections INT4 NOT NULL,
AddedBy VARCHAR(128) NOT NULL,
AddedOn INT4 NOT NULL DEFAULT date_part('epoch', CURRENT_TIMESTAMP)::int,
Reason VARCHAR(450)
);
CREATE TABLE commands (
RealName VARCHAR(128) NOT NULL UNIQUE,
Name VARCHAR(128) NOT NULL UNIQUE,
Flags INT4 NOT NULL,
IsDisabled BOOLEAN NOT NULL DEFAULT 'n',
NeedOp BOOLEAN NOT NULL DEFAULT 'n',
NoLog BOOLEAN NOT NULL DEFAULT 'n',
MinLevel INT4 NOT NULL DEFAULT '1',
SAccess BOOLEAN NOT NULL DEFAULT 'n'
);
CREATE TABLE notes (
user_id INT4 NOT NULL REFERENCES opers (user_id),
sentby TEXT NOT NULL,
postedOn INT4 NOT NULL,
IsNew BOOLEAN NOT NULL DEFAULT 'n',
note VARCHAR (512)
);
CREATE TABLE Misc (
VarName VARCHAR(30) NOT NULL,
Value1 INT4,
Value2 INT4,
Value3 INT4,
Value4 VARCHAR(40),
Value5 VARCHAR(128)
);
CREATE TABLE BadChannels (
Name VARCHAR(400) NOT NULL,
Reason VARCHAR(512) NOT NULL,
AddedBy VARCHAR(200) NOT NULL
);
CREATE TABLE ShellCompanies (
id SERIAL,
name VARCHAR(200) UNIQUE NOT NULL,
active int4 NOT NULL DEFAULT 1,
addedby VARCHAR(200) NOT NULL,
addedon int4 NOT NULL,
lastmodby VARCHAR(200) NOT NULL,
lastmodon int4 NOT NULL,
maxlimit int4 NOT NULL
);
CREATE TABLE ShellNetblocks (
companyid int4 NOT NULL,
cidr VARCHAR(20) NOT NULL,
addedby VARCHAR(200) NOT NULL,
addedon int4 NOT NULL
);

128
doc/ccontrol.update.sql Normal file
View File

@ -0,0 +1,128 @@
-- "$Id: ccontrol.update.sql,v 1.28 2009/07/25 18:12:33 hidden1 Exp $"
-- ccontrol database changes update
-- this file will add the new features to an old database
-- this script will only update the opers who doesnt have getlogs enabled
-- because of misfunctionality of postgresql
-- Add missing columns
-- ALTER TABLE opers ADD isSuspended BOOLEAN NOT NULL DEFAULT 'n';
-- ALTER TABLE opers ADD suspend_Reason VARCHAR(256);
-- ALTER TABLE opers ADD email VARCHAR(128);
-- ALTER TABLE opers ADD isUHS BOOLEAN NOT NULL DEFAULT 'n';
-- ALTER TABLE opers ADD isOPER BOOLEAN NOT NULL DEFAULT 'n';
-- ALTER TABLE opers ADD isADMIN BOOLEAN NOT NULL DEFAULT 'n';
-- ALTER TABLE opers ADD isSMT BOOLEAN NOT NULL DEFAULT 'n';
-- ALTER TABLE opers ADD isCODER BOOLEAN NOT NULL DEFAULT 'n';
-- ALTER TABLE opers ADD getLOGS BOOLEAN NOT NULL DEFAULT 'n';
-- ALTER TABLE opers ADD needOP BOOLEAN NOT NULL DEFAULT 'n';
-- ALTER TABLE opers ADD saccess INT4 NOT NULL DEFAULT '0';
-- Update all the other opers to the new settings
-- UPDATE opers set isOPER = 't' where flags = 2;
-- UPDATE opers set isADMIN = 't' where flags = 4;
-- UPDATE opers set isSMT = 't' where flags = 8;
-- UPDATE opers set isCODER = 't' where flags = 32;
-- Create the commands table
-- CREATE TABLE commands (
-- RealName VARCHAR(128) NOT NULL UNIQUE,
-- Name VARCHAR(128) NOT NULL UNIQUE,
-- Flags INT4 NOT NULL,
-- IsDisabled BOOLEAN NOT NULL DEFAULT 'n',
-- NeedOp BOOLEAN NOT NULL DEFAULT 'n',
-- NoLog BOOLEAN NOT NULL DEFAULT 'n',
-- MinLevel INT4 NOT NULL DEFAULT '1'
-- SAccess BOOLEAN NOT NULL DEFAULT 'n'
-- );
-- For those who already have the commands table
--ALTER TABLE commands add SAccess BOOLEAN NOT NULL DEFAULT 'n';
-- Add the notes table
--CREATE TABLE notes (
-- user_id INT4 NOT NULL REFERENCES opers (user_id),
-- sentby TEXT NOT NULL,
-- postedOn INT4 NOT NULL,
-- IsNew BOOLEAN NOT NULL DEFAULT 'n',
-- note VARCHAR (512)
-- );
-- ALTER TABLE opers add suspend_level INT4 NOT NULL DEFAULT '0';
-- ALTER TABLE opers rename suspendreason to suspend_Reason;
-- ALTER TABLE servers add SplitReason VARCHAR(512);
-- 28/12/01 - Add some missing feilds to the servers table
-- alter TABLE servers add Version VARCHAR(256);
-- alter TABLE servers add AddedOn INT4 NOT NULL;
-- alter TABLE servers add LastUpdated INT4 NOT NULL;
-- 30/12/01 - Add notice column to the opers table
-- alter TABLE opers add Notice BOOLEAN NOT NULL DEFAULT 't';
-- update opers set notice = 't';
-- 02/01/02 - update all opers so that they'll have access for scan
-- update opers set saccess = (saccess | 65536);
-- 25/01/02 - update all opers who had access to LEARNNET to the new flags
-- update opers set saccess = (saccess | 131072) where (saccess & 1)=1;
-- 25/02/02 - Add the Misc table
-- CREATE TABLE Misc (
-- VarName VARCHAR(30) NOT NULL,
-- Value1 INT4,
-- Value2 INT4,
-- Value3 INT4,
-- Value4 VARCHAR(40),
-- Value5 VARCHAR(128)
-- );
-- 14/03/02 Add MaxUsers command for opers
--update opers set saccess = (saccess | 262144);
-- 20/03/02 Add LASTCOM command for opers
-- update opers set saccess = (saccess | 8);
-- 16/05/02 Add the BadChannels table
-- CREATE TABLE BadChannels (
-- Name VARCHAR(400) NOT NULL,
-- Reason VARCHAR(512) NOT NULL,
-- AddedBy VARCHAR(200) NOT NULL
-- );
-- update opers set saccess = (saccess | 2097152) where isCODER = 't';
-- 27/08/02 Add REOP command to opers
-- update opers set saccess = (saccess | 4194304);
-- 16/12/02 Added lastupdated to glines
-- alter table glines add LastUpdated INT4 NOT NULL DEFAULT date_part('epoch', CURRENT_TIMESTAMP)::int;
-- 28/04/02 Add reason to the exceptions table
-- alter table exceptions add Reason VARCHAR(450);
-- 13/03/04 Add is deleted fields
-- alter table opers add is_deleted BOOLEAN NOT NULL DEFAULT 'n';
-- 25/03/04 Add ReportMissing to servers
-- alter table servers add ReportMissing boolean not null default 't';
-- 04/06/04 Add UNJUPE command to the opers
-- update opers set saccess = (saccess | 33554432);
-- 05/06/04 Move MODUSER to the opers
-- update opers set access = (access | 2097152);
-- 2009/07/24 Add GETLAG and LastPassChangeTS to opers
alter TABLE opers add LastPassChangeTS INT4 NOT NULL DEFAULT '0';
alter TABLE opers add GetLAG BOOLEAN NOT NULL DEFAULT 'n';

1
doc/ccontrol/.cvsignore Normal file
View File

@ -0,0 +1 @@
.arch-ids

View File

@ -0,0 +1 @@
.arch-ids

View File

@ -0,0 +1 @@
.arch-ids

76
doc/checkvarargs.py Normal file
View File

@ -0,0 +1,76 @@
#!/usr/bin/env python
#
# Script to check GNUWorld's mod.cservice translations for mismatched
# variable arguments
# (C) 2001 Alex Badea <vampire@go.ro>
#
# Change this to suit your system
gnuworld_home = "../"
# English language ID (or, any language ID that is known to have
# valid translated strings)
english_id = 1
# Regular expression (don't ask me how I got to it)
regstr = "(%([0123456789]+\\$)?[-\\+ #'0]*[0123456789]*(\\.[0123456789]+)?([hjlLqtzZ]|hh|ll)?[diouxXfeEgGaAcspnm])"
# ---------------------------------------------------------------------------
import sys
import os
import re
from string import *
trans = {}
def read_language_table(fname):
print "* Reading translations from %s" % fname
f = open(fname, "r")
for line in f.readlines():
line = strip(line)
if len(line) < 2: continue
if line[0][:1] == "--": continue
if line[0][:1] == "\.": continue
toks = split(line, '\t')
if len(toks) < 4: continue
if toks[0] == "DELETE": continue
if toks[0] == "COPY": continue
try:
pk = (int(toks[0]), int(toks[1]))
except ValueError:
print "* Non-numeric IDs, line: %s" % `toks`
continue
if toks[len(toks)-2] != "31337":
print "* Translation ID (%d,%d) doesn't have a '31337' timestamp" % pk
if toks[len(toks)-1] != "0":
print "* Translation ID (%d,%d) doesn't have a '0' deleted flag" % pk
if trans.has_key(pk):
print "* Duplicate translation ID (%d,%d) Text: '%s' conflicts with '%s'" % (pk[0], pk[1], toks[2], trans[toks[1]])
trans[pk] = toks[2]
f.close()
print "* Read %d translations" % len(trans)
read_language_table(os.path.join(gnuworld_home, "doc", "language_table.sql"))
r = re.compile(regstr)
print "* Checking varargs..."
for (lang, tr) in trans.keys():
if lang == english_id: continue
ctext = trans[(lang, tr)]
cva_list = r.findall(ctext)
if not len(cva_list):
if count(ctext, '%'): print '* Possible missed vararg:', ctext
etext = trans[(english_id, tr)]
eva_list = r.findall(etext)
if cva_list != eva_list:
print "* Mismatched vararg list, translation ID %d:" % tr
print " %d> %s" % (lang, ctext)
print " %d> %s" % (english_id, etext)
print "* Done"

127
doc/chktrans.py Normal file
View File

@ -0,0 +1,127 @@
#!/usr/bin/env python
#
# Script to check GNUWorld's mod.cservice translations
# (C) 2001 Alex Badea <vampire@go.ro>
#
# Change this to suit your system
gnuworld_home = "../"
# Language ID to check
language_id = "8"
# The maximum distance, in lines, between a bot->Notice and a getResponse
notice_thresh = 1
# ---------------------------------------------------------------------------
import sys
import os
from string import *
responses = {}
resp_used = {}
trans = {}
trans_r = {}
alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
def read_language_table(fname):
f = open(fname, "r")
for line in f.readlines():
line = strip(line)
toks = split(line, '\t')
if len(toks) < 4: continue
if toks[0] != language_id: continue
if toks[len(toks)-1] != "31337": continue
if trans.has_key(toks[1]):
print "* Duplicate translation ID (%s) Text: '%s' conflicts with '%s' defined by ID %d" % (toks[1], toks[2], trans[toks[1]], trans_r[toks[2]])
if trans_r.has_key(toks[2]):
print "* Duplicate translation text '%s', ID %s already defined by ID %s" % (toks[2], toks[1], trans_r[toks[2]])
trans[toks[1]] = toks[2]
trans_r[toks[2]] = toks[1]
f.close()
print "* Read %d translations from %s" % (len(trans), fname)
def read_response_table(fname):
f = open(fname, "r")
for line in f.readlines():
line = strip(line)
toks = split(line)
if len(toks) < 2: continue
if toks[0] != "const": continue
if toks[1] != "int": continue
if responses.has_key(toks[2]):
print "* Duplicate response name (%s) ID: %s" % (toks[2], toks[4])
responses[toks[2]] = toks[4][:-1]
resp_used[toks[2]] = 0
f.close()
print "* Read %d responses from %s" % (len(responses), fname)
def parse_file(fname):
f = open(os.path.join(gnuworld_home, "mod.cservice", fname), "r")
line = f.readline()
lineno = 1
last_notice = 0
while line:
# Check the integrity of language:: references
try: start = index(line, "language::")
except ValueError: start = -1
if start >= 0:
start = start + 10
end = start
while (line[end] in alpha) and (end < len(line)):
end = end + 1
id = line[start:end]
numeric = 'UNDEFINED'
text = '[UNASSIGNED]'
if responses.has_key(id):
numeric = responses[id]
if trans.has_key(numeric):
text = trans[numeric]
resp_used[id] = 1
print "%s(%d): language::%s (%s) = '%s'" % (fname, lineno, id, numeric, text)
#print "%-25s (%4d): %-30s (%4s) -> %s" % (fname, lineno, id, numeric, text)
# Check for unlisted translations
try: start = index(line, "Notice")
except ValueError: start = -1
notice_done = 0
if (start >= 0) and (start == 0 or not line[start-1] in alpha):
last_notice = lineno
notice_line = strip(line[:-1])
if line[-2] == ";": notice_done = 1
try: start = index(line, "getResponse")
except ValueError: start = -1
if start >= 0:
last_notice = 0
if last_notice and (lineno > last_notice + notice_thresh or notice_done):
print "* Possible untranslated string in %s(%d): %s" % (fname, last_notice, notice_line)
last_notice = 0
lineno = lineno + 1
line = f.readline()
f.close()
read_language_table(os.path.join(gnuworld_home, "doc", "language_table.sql"))
read_response_table(os.path.join(gnuworld_home, "mod.cservice", "responses.h"))
files = os.listdir(os.path.join(gnuworld_home, "mod.cservice"))
for file in files:
if len(file) < 4: continue
if file[-3:] != ".cc": continue
parse_file(file)
for resp in resp_used.keys():
if not resp_used[resp]:
numeric = 'UNDEFINED'
text = '[UNASSIGNED]'
if responses.has_key(resp):
numeric = responses[resp]
if trans.has_key(numeric):
text = trans[numeric]
print "* Unused response language::%s (%s) = '%s'" % (resp, numeric, text)
print "* Done"

View File

@ -0,0 +1 @@
.arch-ids

1
doc/cloner/.cvsignore Normal file
View File

@ -0,0 +1 @@
.arch-ids

1
doc/cmaster/.cvsignore Normal file
View File

@ -0,0 +1 @@
.arch-ids

View File

@ -0,0 +1 @@
.arch-ids

View File

@ -0,0 +1 @@
.arch-ids

View File

@ -0,0 +1,365 @@
#!/bin/bash
# You can change the above to the good path to your "bash" binary if needed
#
# $Id: Manager1K.sh,v 1.4 2003/07/14 10:35:44 nighty Exp $
#
# some default script values
DBNAME="cservice"
DBHOST="127.0.0.1"
# default information to put in the db for those .., DO NOT USE a BLANK 'LASTMODIF', use "0".
LASTMODIFBY=`basename $0`
LASTMODIF="now()::abstime::int4"
# I suggest you dont modify stuff below this point unless you know what you are doing ;P
PSQLCMD=""
echo -n "Checking for 'psql' binary... "
if [ -x /usr/local/pgsql/bin/psql ]; then
PSQL="1"
PSQLCMD="/usr/local/pgsql/bin/psql"
else
PSQL="0"
if [ -x `which psql | head -n 1` ]; then
PSQL="1"
PSQLCMD="psql"
else
PSQL="0"
fi
fi
if [ "$PSQL" == "0" ]; then
echo "not found."
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
else
echo "Ok."
fi
echo "***********************************************************************"
echo "* *"
echo "* GNUworld/mod.cservice level 1000 management script *"
echo "* *"
echo "* With this script, you can make an existing user become a level 1000 *"
echo "* or create a new user that will be level 1000. *"
echo "* if you Modify a user already level 1000, he will be turned in 999. *"
echo "* *"
echo "* *"
echo "* Warning: This program stops on any input error. *"
echo "* *"
echo "***********************************************************************"
echo "\$Id: Manager1K.sh,v 1.4 2003/07/14 10:35:44 nighty Exp $"
echo "***********************************************************************"
echo "* Released under the GNU Public License *"
echo "***********************************************************************"
echo -n "<-- Database host/IP ? [$DBHOST] "
read -e NEWDBHOST
if [ "$NEWDBHOST" != "" ]; then
echo "--> Using custom: $NEWDBHOST"
DBHOST="$NEWDBHOST"
else
echo "--> Using default: $DBHOST"
fi
echo -n "<-- Database name ? [$DBNAME] "
read -e NEWDBNAME
if [ "$NEWDBNAME" != "" ]; then
echo "--> Using custom: $NEWDBNAME"
DBNAME="$NEWDBNAME"
else
echo "--> Using default: $DBNAME"
fi
echo -n "<-- (M)odify existing user or (C)reate new user ? [M] "
read -e REP1
if [ "$REP1" == "c" ]; then
REP1="C"
fi
if [ "$REP1" == "m" ]; then
REP1="M"
fi
if [ "$REP1" != "C" ]; then
if [ "$REP1" != "M" ]; then
REP1="M"
fi
fi
FROMC="0"
FORCEUSERNAME=""
if [ "$REP1" == "C" ]; then
echo "--> CREATE"
echo -n "<-- User name ? "
read -e REP2
if [ "$REP2" == "" ]; then
echo "--> ERROR: Invalid User name (blank)"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
NUMCHARU=`echo -n $REP2 | wc -c`
NOTOKU0=`expr $NUMCHARU \> 12`
NOTOKU1=`expr $NUMCHARU \< 2`
if [ "$NOTOKU0" == "1" ]; then
echo "--> ERROR: Too many chars in username ($NUMCHARU). Valid range: 2 to 12."
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
if [ "$NOTOKU1" == "1" ]; then
echo "--> ERROR: Too few chars in username ($NUMCHARU). Valid range: 2 to 12."
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
FORCEUSERNAME="$REP2"
if `echo -n "SELECT id FROM users WHERE lower(user_name)='$REP2'" | $PSQLCMD -h $DBHOST $DBNAME >/dev/null 2>&1`; then
USRID=`echo -n "SELECT id FROM users WHERE lower(user_name)='$REP2'" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }'`
if [ "$USRID" != "(0" ]; then
echo "--> ERROR: Invalid User name (already taken)"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
else
echo "--> ERROR: Credentials provided for database connection are either invalid or database setup isn't correct."
echo "--> ERROR: Connection to database '$DBNAME' at '$DBHOST' failed."
echo "--> Stopping..."
echo "--> exit(2)"
exit 2
fi
echo -n "<-- E-Mail address ? "
read -e REP2
if [ "$REP2" == "" ]; then
echo "--> ERROR: Invalid E-Mail address (blank)"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
USRID=`echo -n "SELECT id FROM users WHERE lower(email)='$REP2'" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }'`
if [ "$USRID" != "(0" ]; then
echo "--> ERROR: Invalid E-Mail address (already taken)"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
else
UEMAIL="$REP2"
echo "!!! NOTICE: E-Mail is OK (not in use), but not checked against SYNTAX/NOREG/DOMAINLOCK. Assuming you know what you do ;P"
fi
echo "--> (1) What's your mother's maiden name ?"
echo "--> (2) What's your dog's (or cat's) name ?"
echo "--> (3) What's your father's birth date ?"
echo -n "<-- What verification question (1, 2 or 3) ? [2] "
read -e REP2
REPOK="0"
if [ "$REP2" == "" ]; then
REP2="2"
fi
if [ "$REP2" == "1" ]; then
REPOK="1"
fi
if [ "$REP2" == "2" ]; then
REPOK="1"
fi
if [ "$REP2" == "3" ]; then
REPOK="1"
fi
if [ "$REPOK" == "0" ]; then
echo "--> ERROR: Invalid verification question choice ($REP2)"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
UQID="$REP2"
echo -n "<-- Answer to the verification question (4 chars minimum) ? "
read -e REP2
if [ "$REP2" == "" ]; then
echo "--> ERROR: Invalid answer (blank)"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
NUMCHAR=`echo -n $REP2 | wc -c`
NOTOK=`expr $NUMCHAR \< 4`
if [ "$NOTOK" == "1" ]; then
echo "--> ERROR: You need at least 4 chars !"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
UVA="$REP2"
echo -n "<-- Please specify the user password (no thing will be displayed on screen, 6 chars minimum) : "
read -es PASS1
echo ""
NUMCHARP=`echo -n $PASS1 | wc -c`
NOTOKP=`expr $NUMCHARP \< 6`
if [ "$NOTOKP" == "1" ]; then
echo "--> ERROR: You need at least 6 chars !"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
echo -n "<-- Please, this password again : "
read -es PASS2
echo ""
if [ "$PASS1" != "$PASS2" ]; then
echo "--> ERROR: Password mismatch"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
GENSALT=`mcookie | cut -b-8`
ENCPART=`echo -n $GENSALT$PASS1 | md5sum | cut -f1 -d' '`
ENCPASS="$GENSALT$ENCPART"
echo "--> Crypted password : $ENCPASS"
echo "--> ENCODED : [$ENCPART]"
echo "--> SALT : [$GENSALT]"
echo "--> Adding user '$FORCEUSERNAME'..."
DAQRY="INSERT INTO users (user_name,password,email,url,question_id,verificationdata,language_id,public_key,last_updated_by,last_updated,signup_cookie,signup_ip,tz_setting) VALUES ('$FORCEUSERNAME','$ENCPASS','$UEMAIL','',$UQID,'$UVA',1,'','$LASTMODIFBY',now()::abstime::int4,'Added from the console','127.0.0.1','')"
echo "--> DB: `echo -n \"$DAQRY\" | $PSQLCMD -h $DBHOST $DBNAME`"
FROMC="1"
REP1="M"
fi
if [ "$REP1" == "M" ]; then
if [ "$FORCEUSERNAME" == "" ]; then
echo "--> MODIFY"
echo -n "<-- User name ? "
read -e REP2
if [ "$REP2" == "" ]; then
echo "--> ERROR: Invalid User name (blank)"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
else
REP2="$FORCEUSERNAME"
fi
if `echo -n "SELECT id FROM users WHERE lower(user_name)='$REP2'" | $PSQLCMD -h $DBHOST $DBNAME >/dev/null 2>&1`; then
USRID=`echo -n "SELECT id FROM users WHERE lower(user_name)='$REP2'" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }'`
if [ "$USRID" == "(0" ]; then
echo "--> ERROR: Invalid User name (non existant)"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
else
echo "--> ERROR: Credentials provided for database connection are either invalid or database setup isn't correct."
echo "--> ERROR: Connection to database '$DBNAME' at '$DBHOST' failed."
echo "--> Stopping..."
echo "--> exit(2)"
exit 2
fi
if [ "$FROMC" == "1" ]; then
if [ "$USRID" == "1" ]; then
echo "--> NOTICE: It's the first user inserted.. which means you probably never used 'cservice.addme.sql' on that database ($DBNAME)"
echo "--> NOTICE: We will be running what should be at this moment just like if you ran 'cservice.addme.sql'"
echo "--> NOTICE: You will NOT need to run 'cservice.addme.sql' anymore, so don't run it ;P"
ADDADMCHAN="INSERT into channels (name,flags,channel_ts,registered_ts,last_updated) VALUES ('*',1,now()::abstime::int4,31337,now()::abstime::int4)"
ADDCODERCHAN="INSERT into channels (name,flags,channel_ts,registered_ts,last_updated) VALUES ('#coder-com',1,now()::abstime::int4,31337,now()::abstime::int4)"
ADDCODERACCESS="INSERT into levels (channel_id,user_id,access,added_by,added,last_modif_by,last_modif,last_updated) VALUES (2,1,500,'$LASTMODIFBY',$LASTMODIF,'$LASTMODIFBY',$LASTMODIF,now()::abstime::int4)"
echo "--> Inserting ADMIN (*) channel..."
echo "--> DB: `echo -n \"$ADDADMCHAN\" | $PSQLCMD -h $DBHOST $DBNAME`"
echo "--> Inserting CODER (#coder-com) channel..."
echo "--> DB: `echo -n \"$ADDCODERCHAN\" | $PSQLCMD -h $DBHOST $DBNAME`"
echo "--> Inserting level 500 access for '$FORCEUSERNAME' on '#coder-com'..."
echo "--> DB: `echo -n \"$ADDCODERACCESS\" | $PSQLCMD -h $DBHOST $DBNAME`"
fi
fi
ADMINLVL=`echo -n "SELECT access FROM levels WHERE channel_id=1 AND user_id=$USRID" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }'`
echo -n "--> users.id = $USRID current admin level = "
if [ "$ADMINLVL" == "(0" ]; then
echo "0"
else
echo $ADMINLVL
fi
if [ "$ADMINLVL" == "1000" ]; then
echo "--> Modifying ADMIN access from $ADMINLVL to 999..."
DAQRY="UPDATE levels SET access=999,last_modif_by='$LASTMODIFBY',last_modif=$LASTMODIF,last_updated=now()::abstime::int4 WHERE channel_id=1 AND user_id=$USRID AND access=$ADMINLVL"
echo "--> DB: `echo -n \"$DAQRY\" | $PSQLCMD -h $DBHOST $DBNAME`"
else
if [ "$ADMINLVL" == "(0" ]; then
echo "--> Adding ADMIN access at level 1000..."
DAQRY="INSERT INTO levels (channel_id,user_id,access,added_by,added,last_modif_by,last_modif,last_updated) VALUES (1,$USRID,1000,'$LASTMODIFBY',$LASTMODIF,'$LASTMODIFBY',$LASTMODIF,now()::abstime::int4)"
echo "--> DB: `echo -n \"$DAQRY\" | $PSQLCMD -h $DBHOST $DBNAME`"
else
echo "--> Modifying ADMIN access from $ADMINLVL to 1000..."
DAQRY="UPDATE levels SET access=1000,last_modif_by='$LASTMODIFBY',last_modif=$LASTMODIF,last_updated=now()::abstime::int4 WHERE channel_id=1 AND user_id=$USRID AND access=$ADMINLVL"
echo "--> DB: `echo -n \"$DAQRY\" | $PSQLCMD -h $DBHOST $DBNAME`"
fi
fi
fi
echo "--> Job finished !"
echo "--> NOTICE: Remember your CService bot updates his cache on a regular basis"
echo "--> NOTICE: depending on your cservice.conf file this can take a few minutes for the changes/addition to be available on IRC."
echo "--> Stopping..."
echo "--> exit(0)"
exit 0
# EOF

View File

@ -0,0 +1,288 @@
#!/bin/bash
# You can change the above to the good path to your "bash" binary if needed
#
# $Id: WipeUser.sh,v 1.7 2003/07/14 10:35:44 nighty Exp $
#
# some default script values
DBNAME="cservice"
DBHOST="127.0.0.1"
# I suggest you dont modify stuff below this point unless you know what you are doing ;P
PSQLCMD=""
echo -n "Checking for 'psql' binary... "
if [ -x /usr/local/pgsql/bin/psql ]; then
PSQL="1"
PSQLCMD="/usr/local/pgsql/bin/psql"
else
PSQL="0"
if [ -x `which psql | head -n 1` ]; then
PSQL="1"
PSQLCMD="psql"
else
PSQL="0"
fi
fi
if [ "$PSQL" == "0" ]; then
echo "not found."
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
else
echo "Ok."
fi
echo "***********************************************************************"
echo "* *"
echo "* GNUworld/mod.cservice Username Removal Tool *"
echo "* *"
echo "* With this script, you can totally remove a user's entry in your db *"
echo "* *"
echo "* Warning: This program stops on any input error. *"
echo "* *"
echo "***********************************************************************"
echo "\$Id: WipeUser.sh,v 1.7 2003/07/14 10:35:44 nighty Exp $"
echo "***********************************************************************"
echo "* Released under the GNU Public License *"
echo "***********************************************************************"
echo -n "<-- Database host/IP ? [$DBHOST] "
read -e NEWDBHOST
if [ "$NEWDBHOST" != "" ]; then
echo "--> Using custom: $NEWDBHOST"
DBHOST="$NEWDBHOST"
else
echo "--> Using default: $DBHOST"
fi
echo -n "<-- Database name ? [$DBNAME] "
read -e NEWDBNAME
if [ "$NEWDBNAME" != "" ]; then
echo "--> Using custom: $NEWDBNAME"
DBNAME="$NEWDBNAME"
else
echo "--> Using default: $DBNAME"
fi
echo -n "<-- User name to totally remove ? "
read -e REP2
if [ "$REP2" == "" ]; then
echo "--> ERROR: Invalid User name (blank)"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
FORCEUSERNAME="$REP2"
if `echo -n "SELECT id FROM users WHERE lower(user_name)='$REP2'" | $PSQLCMD -h $DBHOST $DBNAME >/dev/null 2>&1`; then
USRID=`echo -n "SELECT id FROM users WHERE lower(user_name)='$REP2'" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }'`
if [ "$USRID" == "(0" ]; then
echo "--> ERROR: Invalid User name (non existant)"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
else
echo "--> ERROR: Credentials provided for database connection are either invalid or database setup isn't correct."
echo "--> ERROR: Connection to database '$DBNAME' at '$DBHOST' failed."
echo "--> Stopping..."
echo "--> exit(2)"
exit 2
fi
if [ "$USRID" == "1" ]; then
echo "--> ERROR: Cannot remove master user (ID = 1)"
echo "--> Stopping..."
echo "--> exit(1)"
exit 1
fi
QC001="SELECT COUNT(user_id) FROM userlog WHERE user_id=$USRID"
QC002="SELECT COUNT(user_id) FROM levels WHERE user_id=$USRID"
QC003="SELECT COUNT(user_id) FROM levels WHERE access=500 AND user_id=$USRID"
QC004="SELECT COUNT(user_id) FROM supporters WHERE user_id=$USRID"
QC005="SELECT COUNT(user_id) FROM objections WHERE user_id=$USRID"
QC006="SELECT COUNT(user_id) FROM users_lastseen WHERE user_id=$USRID"
QC007="SELECT COUNT(manager_id) FROM pending WHERE manager_id=$USRID"
QC008="SELECT COUNT(user_id) FROM pending_emailchanges WHERE user_id=$USRID"
QC009="SELECT COUNT(user_id) FROM pending_pwreset WHERE user_id=$USRID"
QC010="SELECT COUNT(user_id) FROM acl WHERE user_id=$USRID"
QC011="SELECT COUNT(manager_id) FROM pending_mgrchange WHERE manager_id=$USRID"
QC012="SELECT COUNT(new_manager_id) FROM pending_mgrchange WHERE new_manager_id=$USRID"
QC013="SELECT COUNT(user_id) FROM mailq WHERE user_id=$USRID"
QC014="SELECT COUNT(user_id) FROM notes WHERE user_id=$USRID or from_user_id=$USRID"
QC015="SELECT COUNT(user_id) FROM fraud_list_data WHERE user_id=$USRID"
QC016="SELECT COUNT(user_id) FROM notices WHERE user_id=$USRID"
echo "--> Counting records..."
CNT01=`echo -n "$QC001" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT02=`echo -n "$QC002" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT03=`echo -n "$QC003" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT04=`echo -n "$QC004" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT05=`echo -n "$QC005" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT06=`echo -n "$QC006" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT07=`echo -n "$QC007" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT08=`echo -n "$QC008" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT09=`echo -n "$QC009" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT10=`echo -n "$QC010" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT11=`echo -n "$QC011" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT12=`echo -n "$QC012" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT13=`echo -n "$QC013" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT14=`echo -n "$QC014" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT15=`echo -n "$QC015" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
CNT16=`echo -n "$QC016" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
echo "--> The following entries would be removed if confirmed :"
echo "-->"
echo "--> $CNT01 userlog entries"
echo "--> $CNT02 channel accesses ($CNT03 level 500 (channels would be PURGED))"
echo "--> $CNT04 channel support entries"
echo "--> $CNT05 application objections"
echo "--> $CNT06 last_seen entry"
echo "--> $CNT07 channel applications (old and present)"
echo "--> $CNT08 pending email change entries"
echo "--> $CNT09 pending verif q/a reset entries"
echo "--> $CNT10 ACL entry"
echo "--> $CNT11 pending manager changes (user is old manager, channel will be PURGED)"
echo "--> $CNT12 pending manager changes (user is temp manager, channel will be PURGED)"
echo "--> $CNT13 mailq entries"
echo "--> $CNT14 notes sent/received"
echo "--> $CNT15 fraud list entries"
echo "--> $CNT16 notices entries"
echo "--> 1 user entry"
echo "-->"
echo -n "<-- Are you sure you want to totally and definetively remove those entries from your databse [y/N] ? [N] "
read -e YOUSURE
if [ "$YOUSURE" != "y" ]; then
if [ "$YOUSURE" != "Y" ]; then
YOUSURE="N"
else
YOUSURE="Y"
fi
else
YOUSURE="Y"
fi
if [ "$YOUSURE" == "N" ]; then
echo "--> You're such a weenie ;P"
echo "--> Aborting upon user request (nothing was removed)"
echo "--> Stopping..."
echo "--> exit(0)"
exit 0
fi
echo "--> Removing entries..."
QR001="DELETE FROM userlog WHERE user_id=$USRID"
QR002="DELETE FROM levels WHERE user_id=$USRID AND (access!=500 OR channel_id=1)"
QR003="SELECT channel_id FROM levels WHERE access=500 AND user_id=$USRID" # first set of channels to purge
QR004="DELETE FROM supporters WHERE user_id=$USRID"
QR005="DELETE FROM objections WHERE user_id=$USRID"
QR006="DELETE FROM users_lastseen WHERE user_id=$USRID"
QR007="DELETE FROM pending WHERE manager_id=$USRID"
QR008="DELETE FROM pending_emailchanges WHERE user_id=$USRID"
QR009="DELETE FROM pending_pwreset WHERE user_id=$USRID"
QR010="DELETE FROM acl WHERE user_id=$USRID"
QR011="SELECT channel_id FROM pending_mgrchange WHERE manager_id=$USRID" # second set of channels to purge
QR012="DELETE FROM pending_mgrchange WHERE new_manager_id=$USRID"
QR013="DELETE FROM mailq WHERE user_id=$USRID"
QR014="DELETE FROM notes WHERE user_id=$USRID or from_user_id=$USRID"
QR015="DELETE FROM fraud_list_data WHERE user_id=$USRID"
QR016="DELETE FROM notices WHERE user_id=$USRID"
QR099="DELETE FROM users WHERE id=$USRID"
REM01=`echo -n "$QR001" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM01"
REM02=`echo -n "$QR002" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM02"
echo -n "$QR003" | $PSQLCMD -h $DBHOST $DBNAME | grep "." | grep -v -- "--" | grep -v "rows" | grep -v "channel_id" | awk '{ print "DELETE FROM levels WHERE channel_id=" $1 }' | $PSQLCMD -h $DBHOST $DBNAME | xargs echo "--> DB:"
echo -n "$QR003" | $PSQLCMD -h $DBHOST $DBNAME | grep "." | grep -v -- "--" | grep -v "rows" | grep -v "channel_id" | awk '{ print "DELETE FROM channels WHERE id=" $1 }' | $PSQLCMD -h $DBHOST $DBNAME | xargs echo "--> DB:"
REM04=`echo -n "$QR004" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM04"
REM05=`echo -n "$QR005" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM05"
REM06=`echo -n "$QR006" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM06"
REM07=`echo -n "$QR007" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM07"
REM08=`echo -n "$QR008" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM08"
REM09=`echo -n "$QR009" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM09"
REM10=`echo -n "$QR010" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM10"
echo -n "$QR011" | $PSQLCMD -h $DBHOST $DBNAME | grep "." | grep -v -- "--" | grep -v "rows" | grep -v "channel_id" | awk '{ print "DELETE FROM pending_mgrchanges WHERE channel_id=" $1 }' | $PSQLCMD -h $DBHOST $DBNAME | xargs echo "--> DB:"
echo -n "$QR011" | $PSQLCMD -h $DBHOST $DBNAME | grep "." | grep -v -- "--" | grep -v "rows" | grep -v "channel_id" | awk '{ print "DELETE FROM channels WHERE id=" $1 }' | $PSQLCMD -h $DBHOST $DBNAME | xargs echo "--> DB:"
REM12=`echo -n "$QR012" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM12"
REM13=`echo -n "$QR013" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM13"
REM14=`echo -n "$QR014" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM14"
REM15=`echo -n "$QR015" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM15"
REM16=`echo -n "$QR016" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM16"
REM99=`echo -n "$QR099" | $PSQLCMD -h $DBHOST $DBNAME`
echo "--> DB: $REM99"
echo "--> Username '$FORCEUSERNAME' has been totally removed."
echo "--> Job finished !"
echo "--> NOTICE: Remember your CService bot updates his cache on a regular basis"
echo "--> NOTICE: depending on your cservice.conf file this can take a few minutes for the changes/addition to be available on IRC."
echo "--> Stopping..."
echo "--> exit(0)"
exit 0
# EOF

Some files were not shown because too many files have changed in this diff Show More