1
0
mirror of https://github.com/anope/anope.git synced 2026-07-03 09:13:12 +02:00

BUILD : 1.7.17 (1185) BUGS : N/A NOTES : Encryption now offers the choice of none, old and md5 - the md5 module is nicely taken from irc-services and actaully works, yes, real md5, in anope, wow eh?

git-svn-id: svn://svn.anope.org/anope/trunk@1185 31f1291d-b8d6-0310-a050-a5561fc1590b


git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@905 5417fbe8-f217-4b02-8779-1006273d7864
This commit is contained in:
rob rob@31f1291d-b8d6-0310-a050-a5561fc1590b
2006-10-17 20:42:40 +00:00
parent 3dbe219758
commit 9bf8366451
57 changed files with 1618 additions and 937 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
Anope Version S V N
--------------------
10/17 F Encryption, users can now pick none, old or real md5. [ #00]
Anope Version 1.7.17
--------------------
+24
View File
@@ -1,6 +1,30 @@
Anope Version S V N
--------------------
** ADDED CONFIGURATION DIRECTIVES **
###########################################################################
#
# Encryption settings
#
###########################################################################
# EncModule <module_name> [REQUIRED]
# The encryption module to use when dealing with passwords.
# This determines how the passwords are stored in the databases,
# and does not add any security as far as transmitting passwords over
# the network goes.
# enc_none provides no password encryption, storing the password in
# plain text, this is the most versiatle as passwords can easily be
# recovered.
#
# NOTE: users of anope's previous (broken) md5 implementation should
# select the enc_old option, or things may break.
#
# Plain Text - enc_none
# Previous (broken) MD5 - enc_old
# MD5 - enc_md5
#
EncModule "enc_none"
** MODIFIED CONFIGURATION DIRECTIVES **
-42
View File
@@ -53,10 +53,6 @@ if [ "$DATDEST" != "" ] ; then
WITH_DATA=" --with-datadir=$DATDEST"
fi
if [ "$ENCRYPTION" != "" ] ; then
WITH_ENC=" --with-encryption"
fi
if [ "$RUNGROUP" != "" ] ; then
WITH_RUN=" --with-rungroup=$RUNGROUP"
fi
@@ -97,7 +93,6 @@ DATDEST=$HOME/services
RUNGROUP=
UMASK=
IRCTYPE="no default"
ENCRYPTION=
CAN_QUICK="no"
###########################################################################
@@ -277,42 +272,6 @@ echo ""
####
if [ "$ENCRYPTION" = "ENCRYPT_MD5" ] ; then
DEF=yes
else
DEF=no
fi
ok=0
echo "Do you want to use the MD5 message-digest algorithm to encrypt passwords?"
echo "(Selecting "\"yes\"" protects your passwords from being stolen if someone"
echo "gains access to the Services databases, but makes it impossible to recover"
echo "forgotten passwords. There is no way to reverse this operation, so make"
echo "sure you really want to enable it.)"
while [ $ok -eq 0 ] ; do
echo2 "[$DEF] "
if read INPUT ; then : ; else echo "" ; exit 1 ; fi
if [ ! "$INPUT" ] ; then
INPUT=$DEF
fi
case $INPUT in
n*|N*)
ENCRYPTION=
ok=1
;;
y*|Y*)
ENCRYPTION=ENCRYPT_MD5
ok=1
;;
*)
echo "Please enter 'yes' or 'no'."
;;
esac
done
echo ""
####
ok=0
DEF=yes
echo "Allow anope to automatically check for mysql libaries?"
@@ -355,7 +314,6 @@ RUNGROUP="$RUNGROUP"
UMASK=$UMASK
IRCTYPE="$IRCTYPE"
IRCTYPE_DEF="$IRCTYPE_DEF"
ENCRYPTION="$ENCRYPTION"
MYSQL="$MYSQL"
EOT
echo "done."
Vendored
+148 -97
View File
@@ -846,7 +846,6 @@ Optional Packages:
--with-permissions=permissions Specify the default permissions for anope
--with-bindir=bindir Specify the default binary dir for anope
--with-datadir=datadir Specify the location of the services data folder
--with-encryption Use md5 database encryption
Some influential environment variables:
CC C compiler command
@@ -948,7 +947,7 @@ esac
else
echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi
cd "$ac_popdir"
cd $ac_popdir
done
fi
@@ -1872,7 +1871,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -1930,7 +1930,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2046,7 +2047,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2100,7 +2102,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2145,7 +2148,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2189,7 +2193,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2263,7 +2268,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2488,7 +2494,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2555,7 +2562,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2622,7 +2630,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2689,7 +2698,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2887,7 +2897,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3219,7 +3230,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3389,7 +3401,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3452,7 +3465,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3638,7 +3652,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3703,7 +3718,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3787,7 +3803,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3935,7 +3952,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3997,7 +4015,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4037,7 +4056,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4093,7 +4113,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4133,7 +4154,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4197,7 +4219,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4228,8 +4251,10 @@ See \`config.log' for more details." >&2;}
esac
else
if test "$cross_compiling" = yes; then
{ { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
See \`config.log' for more details." >&5
echo "$as_me: error: cannot run test program while cross compiling
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
else
cat >conftest.$ac_ext <<_ACEOF
@@ -4341,7 +4366,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4403,7 +4429,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4443,7 +4470,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4499,7 +4527,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4539,7 +4568,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4603,7 +4633,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4634,8 +4665,10 @@ See \`config.log' for more details." >&2;}
esac
else
if test "$cross_compiling" = yes; then
{ { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
See \`config.log' for more details." >&5
echo "$as_me: error: cannot run test program while cross compiling
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
else
cat >conftest.$ac_ext <<_ACEOF
@@ -4747,7 +4780,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4809,7 +4843,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4849,7 +4884,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4905,7 +4941,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4945,7 +4982,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5009,7 +5047,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5040,8 +5079,10 @@ See \`config.log' for more details." >&2;}
esac
else
if test "$cross_compiling" = yes; then
{ { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
See \`config.log' for more details." >&5
echo "$as_me: error: cannot run test program while cross compiling
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
else
cat >conftest.$ac_ext <<_ACEOF
@@ -5154,7 +5195,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5219,7 +5261,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5285,7 +5328,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5350,7 +5394,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5421,7 +5466,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5486,7 +5532,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5552,7 +5599,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5617,7 +5665,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5683,7 +5732,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5748,7 +5798,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5818,7 +5869,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5963,7 +6015,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6108,7 +6161,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6293,7 +6347,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6397,7 +6452,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6501,7 +6557,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6605,7 +6662,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6709,7 +6767,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6813,7 +6872,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6917,7 +6977,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7021,7 +7082,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7125,7 +7187,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7229,7 +7292,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7333,7 +7397,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7437,7 +7502,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7541,7 +7607,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7645,7 +7712,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7749,7 +7817,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7853,7 +7922,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7964,24 +8034,6 @@ fi;
# Check whether --with-encryption or --without-encryption was given.
if test "${with_encryption+set}" = set; then
withval="$with_encryption"
cat >>confdefs.h <<_ACEOF
#define USE_ENCRYPTION
_ACEOF
cat >>confdefs.h <<_ACEOF
#define ENCRYPT_MD5
_ACEOF
fi;
ac_config_files="$ac_config_files Makefile src/bin/anoperc"
@@ -8783,6 +8835,11 @@ esac
if test x"$ac_file" != x-; then
{ echo "$as_me:$LINENO: creating $ac_file" >&5
echo "$as_me: creating $ac_file" >&6;}
rm -f "$ac_file"
fi
# Let's still pretend it is `configure' which instantiates (i.e., don't
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
@@ -8821,12 +8878,6 @@ echo "$as_me: error: cannot find input file: $f" >&2;}
fi;;
esac
done` || { (exit 1); exit 1; }
if test x"$ac_file" != x-; then
{ echo "$as_me:$LINENO: creating $ac_file" >&5
echo "$as_me: creating $ac_file" >&6;}
rm -f "$ac_file"
fi
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
sed "$ac_vpsub
-5
View File
@@ -262,11 +262,6 @@ AC_ARG_WITH(datadir, [ --with-datadir=datadir Specify the location of the se
AC_SUBST(DATDEST)
AC_SUBST(MODULE_PATH)
AC_ARG_WITH(encryption, [ --with-encryption Use md5 database encryption], [
AC_DEFINE_UNQUOTED(USE_ENCRYPTION,,"has encryption")
AC_DEFINE_UNQUOTED(ENCRYPT_MD5,,"Use md5")
])
AC_CONFIG_FILES( \
Makefile \
src/bin/anoperc \
+24
View File
@@ -96,6 +96,30 @@
#IRCDModule "unreal32"
###########################################################################
#
# Encryption settings
#
###########################################################################
# EncModule <module_name> [REQUIRED]
# The encryption module to use when dealing with passwords.
# This determines how the passwords are stored in the databases,
# and does not add any security as far as transmitting passwords over
# the network goes.
# enc_none provides no password encryption, storing the password in
# plain text, this is the most versiatle as passwords can easily be
# recovered.
#
# NOTE: users of anope's previous (broken) md5 implementation should
# select the enc_old option, or things may break.
#
# Plain Text - enc_none
# Previous (broken) MD5 - enc_old
# MD5 - enc_md5
#
EncModule "enc_none"
###########################################################################
#
+8 -1
View File
@@ -12,4 +12,11 @@
*
*/
E int encrypt(const char *src, int len, char *dest, int size);
typedef struct encryption_ {
int (*encrypt)(const char *src, int len, char *dest, int size);
int (*encrypt_in_place)(char *buf, int size);
int (*encrypt_check_len)(int passlen, int bufsize);
int (*decrypt)(const char *src, char *dest, int size);
int (*check_password)(const char *plaintext, const char *password);
} Encryption;
+87 -77
View File
@@ -17,19 +17,22 @@
#ifndef _WIN32
#define E extern
#define I extern
#define EI extern
#else
#ifndef MODULE_COMPILE
#define E extern __declspec(dllexport)
#define I extern __declspec(dllimport)
#define EI extern __declspec(dllimport)
#else
#define E extern __declspec(dllimport)
#define I extern __declspec(dllexport)
#define EI extern __declspec(dllexport)
#endif
#endif
#include "slist.h"
E char *uplink;
/* IRC Variables */
@@ -39,7 +42,7 @@ E IRCDCAPAB *ircdcap;
E char *flood_mode_char_set;
E char *flood_mode_char_remove;
E int UseTSMODE; /* hack to get around bahamut clones that don't send TSMODE */
I unsigned long umodes[128];
EI unsigned long umodes[128];
E char csmodes[128];
E CMMode cmmodes[128];
E CBMode cbmodes[128];
@@ -553,7 +556,18 @@ E long unsigned int UserKey3;
E int convert_ircservices_44(void);
/**** encrypt.c ****/
E int check_password(const char *plaintext, const char *password);
E char *EncModule;
E void initEncryption();
E int enc_encrypt(const char *src, int len, char *dest, int size);
E int enc_encrypt_in_place(char *buf, int size);
E int enc_encrypt_check_len(int passlen, int bufsize);
E int enc_decrypt(const char *src, char *dest, int size);
E int enc_check_password(const char *plaintext, const char *password);
E void encmodule_encrypt(int (*func)(const char *src, int len, char *dest, int size));
E void encmodule_encrypt_in_place(int (*func)(char *buf, int size));
E void encmodule_encrypt_check_len(int (*func)(int passlen, int bufsize));
E void encmodule_decrypt(int (*func)(const char *src, char *dest, int size));
E void encmodule_check_password(int (*func)(const char *plaintext, const char *password));
/**** helpserv.c ****/
E void helpserv(User * u, char *buf);
@@ -846,6 +860,7 @@ E char *str_signed(unsigned char *str);
E void ntoa(struct in_addr addr, char *ipaddr, int len);
E char **buildStringList(char *src, int *number);
E void binary_to_hex(unsigned char *bin, char *hex, int length);
@@ -905,7 +920,7 @@ E int nick_identified(User * u);
E int nick_recognized(User * u);
E void expire_nicks(void);
E void expire_requests(void);
I int ns_do_register(User * u);
EI int ns_do_register(User * u);
E int delnick(NickAlias * na);
E NickAlias *findnick(const char *nick);
E NickCore *findcore(const char *nick);
@@ -1156,11 +1171,6 @@ E void db_mysql_load_news(void);
E unsigned int mysql_rand(void);
#endif
#ifdef USE_ENCRYPTION
E int encrypt_in_place(char *buf, int size);
#endif
E void privmsg(char *source, char *dest, const char *fmt, ...);
E void notice(char *source, char *dest, const char *fmt, ...);
@@ -1248,72 +1258,72 @@ E void anope_cmd_burst(); /* BURST - use eob to send burst 0 */
E void anope_cmd_svswatch(char *sender, char *nick, char *parm);
E void anope_cmd_ctcp(char *source, char *dest, const char *fmt, ...); /* CTCP */
I int anope_event_482(char *source, int ac, char **av);
I int anope_event_436(char *source, int ac, char **av);
I int anope_event_away(char *source, int ac, char **av);
I int anope_event_ping(char *source, int ac, char **av);
I int anope_event_motd(char *source, int ac, char **av);
I int anope_event_join(char *source, int ac, char **av);
I int anope_event_kick(char *source, int ac, char **av);
I int anope_event_kill(char *source, int ac, char **av);
I int anope_event_mode(char *source, int ac, char **av);
I int anope_event_tmode(char *source, int ac, char **av);
I int anope_event_quit(char *source, int ac, char **av);
I int anope_event_squit(char *source, int ac, char **av);
I int anope_event_topic(char *source, int ac, char **av);
I int anope_event_whois(char *source, int ac, char **av);
I int anope_event_part(char *source, int ac, char **av);
I int anope_event_server(char *source, int ac, char **av);
I int anope_event_sid(char *source, int ac, char **av);
I int anope_event_nick(char *source, int ac, char **av);
I int anope_event_bmask(char *source, int ac, char **av);
I int anope_event_gnotice(char *source, int ac, char **av);
I int anope_event_privmsg(char *source, int ac, char **av);
I int anope_event_capab(char *source, int ac, char **av);
I int anope_event_sjoin(char *source, int ac, char **av);
I int anope_event_cs(char *source, int ac, char **av);
I int anope_event_hs(char *source, int ac, char **av);
I int anope_event_ms(char *source, int ac, char **av);
I int anope_event_ns(char *source, int ac, char **av);
I int anope_event_os(char *source, int ac, char **av);
I int anope_event_vs(char *source, int ac, char **av);
I int anope_event_svinfo(char *source, int ac, char **av);
I int anope_event_chghost(char *source, int ac, char **av);
I int anope_event_sethost(char *source, int ac, char **av);
I int anope_event_chgident(char *source, int ac, char **av);
I int anope_event_setident(char *source, int ac, char **av);
I int anope_event_chgname(char *source, int ac, char **av);
I int anope_event_setname(char *source, int ac, char **av);
I int anope_event_svsinfo(char *source, int ac, char **av);
I int anope_event_snick(char *source, int ac, char **av);
I int anope_event_vhost(char *source, int ac, char **av);
I int anope_event_tkl(char *source, int ac, char **av);
I int anope_event_eos(char *source, int ac, char **av);
I int anope_event_eob(char *source, int ac, char **av);
I int anope_event_pass(char *source, int ac, char **av);
I int anope_event_netinfo(char *source, int ac, char **av);
I int anope_event_error(char *source, int ac, char **av);
I int anope_event_eb(char *source, int ac, char **av);
I int anope_event_netctrl(char *source, int ac, char **av);
I int anope_event_notice(char *source, int ac, char **av);
I int anope_event_snotice(char *source, int ac, char **av);
I int anope_event_sqline(char *source, int ac, char **av);
I int anope_event_smo(char *source, int ac, char **av);
I int anope_event_myid(char *source, int ac, char **av);
I int anope_event_vctrl(char *source, int ac, char **av);
I int anope_event_tctrl(char *source, int ac, char **av);
I int anope_event_snetinfo(char *source, int ac, char **av);
I int anope_event_umode2(char *source, int ac, char **av);
I int anope_event_globops(char *source, int ac, char **av);
I int anope_event_swhois(char *source, int ac, char **av);
I int anope_event_burst(char *source, int ac, char **av);
I int anope_event_luserslock(char *source, int ac, char **av);
I int anope_event_admin(char *source, int ac, char **av);
I int anope_event_credits(char *source, int ac, char **av);
I int anope_event_rehash(char *source, int ac, char **av);
I int anope_event_sdesc(char *source, int ac, char **av);
I int anope_event_netglobal(char *source, int ac, char **av);
I int anope_event_invite(char *source, int ac, char **av);
EI int anope_event_482(char *source, int ac, char **av);
EI int anope_event_436(char *source, int ac, char **av);
EI int anope_event_away(char *source, int ac, char **av);
EI int anope_event_ping(char *source, int ac, char **av);
EI int anope_event_motd(char *source, int ac, char **av);
EI int anope_event_join(char *source, int ac, char **av);
EI int anope_event_kick(char *source, int ac, char **av);
EI int anope_event_kill(char *source, int ac, char **av);
EI int anope_event_mode(char *source, int ac, char **av);
EI int anope_event_tmode(char *source, int ac, char **av);
EI int anope_event_quit(char *source, int ac, char **av);
EI int anope_event_squit(char *source, int ac, char **av);
EI int anope_event_topic(char *source, int ac, char **av);
EI int anope_event_whois(char *source, int ac, char **av);
EI int anope_event_part(char *source, int ac, char **av);
EI int anope_event_server(char *source, int ac, char **av);
EI int anope_event_sid(char *source, int ac, char **av);
EI int anope_event_nick(char *source, int ac, char **av);
EI int anope_event_bmask(char *source, int ac, char **av);
EI int anope_event_gnotice(char *source, int ac, char **av);
EI int anope_event_privmsg(char *source, int ac, char **av);
EI int anope_event_capab(char *source, int ac, char **av);
EI int anope_event_sjoin(char *source, int ac, char **av);
EI int anope_event_cs(char *source, int ac, char **av);
EI int anope_event_hs(char *source, int ac, char **av);
EI int anope_event_ms(char *source, int ac, char **av);
EI int anope_event_ns(char *source, int ac, char **av);
EI int anope_event_os(char *source, int ac, char **av);
EI int anope_event_vs(char *source, int ac, char **av);
EI int anope_event_svinfo(char *source, int ac, char **av);
EI int anope_event_chghost(char *source, int ac, char **av);
EI int anope_event_sethost(char *source, int ac, char **av);
EI int anope_event_chgident(char *source, int ac, char **av);
EI int anope_event_setident(char *source, int ac, char **av);
EI int anope_event_chgname(char *source, int ac, char **av);
EI int anope_event_setname(char *source, int ac, char **av);
EI int anope_event_svsinfo(char *source, int ac, char **av);
EI int anope_event_snick(char *source, int ac, char **av);
EI int anope_event_vhost(char *source, int ac, char **av);
EI int anope_event_tkl(char *source, int ac, char **av);
EI int anope_event_eos(char *source, int ac, char **av);
EI int anope_event_eob(char *source, int ac, char **av);
EI int anope_event_pass(char *source, int ac, char **av);
EI int anope_event_netinfo(char *source, int ac, char **av);
EI int anope_event_error(char *source, int ac, char **av);
EI int anope_event_eb(char *source, int ac, char **av);
EI int anope_event_netctrl(char *source, int ac, char **av);
EI int anope_event_notice(char *source, int ac, char **av);
EI int anope_event_snotice(char *source, int ac, char **av);
EI int anope_event_sqline(char *source, int ac, char **av);
EI int anope_event_smo(char *source, int ac, char **av);
EI int anope_event_myid(char *source, int ac, char **av);
EI int anope_event_vctrl(char *source, int ac, char **av);
EI int anope_event_tctrl(char *source, int ac, char **av);
EI int anope_event_snetinfo(char *source, int ac, char **av);
EI int anope_event_umode2(char *source, int ac, char **av);
EI int anope_event_globops(char *source, int ac, char **av);
EI int anope_event_swhois(char *source, int ac, char **av);
EI int anope_event_burst(char *source, int ac, char **av);
EI int anope_event_luserslock(char *source, int ac, char **av);
EI int anope_event_admin(char *source, int ac, char **av);
EI int anope_event_credits(char *source, int ac, char **av);
EI int anope_event_rehash(char *source, int ac, char **av);
EI int anope_event_sdesc(char *source, int ac, char **av);
EI int anope_event_netglobal(char *source, int ac, char **av);
EI int anope_event_invite(char *source, int ac, char **av);
E int anope_event_null(char *source, int ac, char **av);
E void anope_set_umode(User * user, int ac, char **av);
+1 -1
View File
@@ -97,7 +97,7 @@ typedef void * ano_module_t;
#endif
/*************************************************************************/
typedef enum { CORE,PROTOCOL,THIRD,SUPPORTED,QATESTED } MODType;
typedef enum { CORE,PROTOCOL,THIRD,SUPPORTED,QATESTED,ENCRYPTION } MODType;
typedef enum { MOD_OP_LOAD, MOD_OP_UNLOAD } ModuleOperation;
/*************************************************************************/
-6
View File
@@ -6,9 +6,6 @@
/* "No prefix needed for dlopen" */
#undef DL_PREFIX
/* "Use md5" */
#undef ENCRYPT_MD5
/* "Has sys/types.h" */
#undef HAS_SYS_TYPES_H
@@ -141,9 +138,6 @@
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* "has encryption" */
#undef USE_ENCRYPTION
/* "Modules available" */
#undef USE_MODULES
-10
View File
@@ -58,16 +58,6 @@ cat >version.h <<EOF
# define VER_DEBUG
#endif
#if defined(USE_ENCRYPTION)
# if defined(ENCRYPT_MD5)
# define VER_ENCRYPTION "E"
# else
# define VER_ENCRYPTION "E"
# endif
#else
# define VER_ENCRYPTION
#endif
#if defined(_WIN32)
# if _MSC_VER >= 1400
# define VER_OS "W"
+1 -19
View File
@@ -496,25 +496,7 @@ void load_cs_dbase(void)
SAFE(read_int32(&tmp32, f));
ci->last_topic_time = tmp32;
SAFE(read_int32(&ci->flags, f));
#ifdef USE_ENCRYPTION
if (!(ci->flags & (CI_ENCRYPTEDPW | CI_VERBOTEN))) {
if (debug)
alog("debug: %s: encrypting password for %s on load",
s_ChanServ, ci->name);
if (encrypt_in_place(ci->founderpass, PASSMAX) < 0)
fatal("%s: load database: Can't encrypt %s password!",
s_ChanServ, ci->name);
ci->flags |= CI_ENCRYPTEDPW;
}
#else
if (ci->flags & CI_ENCRYPTEDPW) {
/* Bail: it makes no sense to continue with encrypted
* passwords, since we won't be able to verify them */
fatal("%s: load database: password for %s encrypted "
"but encryption disabled, aborting",
s_ChanServ, ci->name);
}
#endif
/* Leaveops cleanup */
if (ver <= 13 && (ci->flags & 0x00000020))
ci->flags &= ~0x00000020;
+3 -1
View File
@@ -19,7 +19,7 @@
/* Configurable variables: */
char *IRCDModule;
char *EncModule;
char *RemoteServer;
int RemotePort;
char *RemotePassword;
@@ -445,6 +445,7 @@ Directive directives[] = {
{{PARAM_STRING, PARAM_RELOAD, &DefConAkillReason}}},
{"DefConOffMessage",
{{PARAM_STRING, PARAM_RELOAD, &DefConOffMessage}}},
{"EncModule", {{PARAM_STRING, 0, &EncModule}}},
{"ExceptionDB", {{PARAM_STRING, PARAM_RELOAD, &ExceptionDBName}}},
{"ExceptionExpiry", {{PARAM_TIME, PARAM_RELOAD, &ExceptionExpiry}}},
{"ExpireTimeout", {{PARAM_TIME, PARAM_RELOAD, &ExpireTimeout}}},
@@ -968,6 +969,7 @@ int read_config(int reload)
}
CHECK(IRCDModule);
CHECK(EncModule);
CHECK(NetworkName);
if (!reload) {
+15 -13
View File
@@ -38,11 +38,8 @@ int AnopeInit(int argc, char **argv)
moduleAddCommand(CHANSERV, c, MOD_UNIQUE);
moduleSetChanHelp(myChanServHelp);
#ifdef USE_ENCRYPTION
return MOD_STOP;
#else
return MOD_CONT;
#endif
}
/**
@@ -75,6 +72,7 @@ void myChanServHelp(User * u)
int do_getpass(User * u)
{
char *chan = strtok(NULL, " ");
char tmp_pass[PASSMAX];
ChannelInfo *ci;
if (!chan) {
@@ -86,15 +84,19 @@ int do_getpass(User * u)
} else if (CSRestrictGetPass && !is_services_root(u)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else {
alog("%s: %s!%s@%s used GETPASS on %s",
s_ChanServ, u->nick, u->username, u->host, ci->name);
if (WallGetpass) {
anope_cmd_global(s_ChanServ,
"\2%s\2 used GETPASS on channel \2%s\2",
u->nick, chan);
}
notice_lang(s_ChanServ, u, CHAN_GETPASS_PASSWORD_IS,
chan, ci->founderpass);
if(enc_decrypt(ci->founderpass,tmp_pass,PASSMAX)==1) {
alog("%s: %s!%s@%s used GETPASS on %s",
s_ChanServ, u->nick, u->username, u->host, ci->name);
if (WallGetpass) {
anope_cmd_global(s_ChanServ,
"\2%s\2 used GETPASS on channel \2%s\2",
u->nick, chan);
}
notice_lang(s_ChanServ, u, CHAN_GETPASS_PASSWORD_IS,
chan, ci->founderpass);
} else {
notice_lang(s_ChanServ, u, CHAN_GETPASS_UNAVAILABLE);
}
}
return MOD_CONT;
}
+1 -4
View File
@@ -17,9 +17,6 @@
int do_identify(User * u);
void myChanServHelp(User * u);
#ifdef _WIN32
extern MDE int check_password(const char *plaintext, const char *password);
#endif
/**
* Create the command, and tell anope about it.
@@ -92,7 +89,7 @@ int do_identify(User * u)
} else {
int res;
if ((res = check_password(pass, ci->founderpass)) == 1) {
if ((res = enc_check_password(pass, ci->founderpass)) == 1) {
if (!is_identified(u, ci)) {
uc = scalloc(sizeof(*uc), 1);
uc->next = u->founder_chans;
+9 -16
View File
@@ -75,9 +75,8 @@ int do_register(User * u)
ChannelInfo *ci;
struct u_chaninfolist *uc;
int is_servadmin = is_services_admin(u);
#ifdef USE_ENCRYPTION
char founderpass[PASSMAX + 1];
#endif
char tmp_pass[PASSMAX];
if (readonly) {
notice_lang(s_ChanServ, u, CHAN_REGISTER_DISABLED);
@@ -130,15 +129,12 @@ int do_register(User * u)
alog("%s: makechan() failed for REGISTER %s", s_ChanServ, chan);
notice_lang(s_ChanServ, u, CHAN_REGISTRATION_FAILED);
#ifdef USE_ENCRYPTION
} else if (strscpy(founderpass, pass, PASSMAX + 1),
encrypt_in_place(founderpass, PASSMAX) < 0) {
enc_encrypt_in_place(founderpass, PASSMAX) < 0) {
alog("%s: Couldn't encrypt password for %s (REGISTER)",
s_ChanServ, chan);
notice_lang(s_ChanServ, u, CHAN_REGISTRATION_FAILED);
delchan(ci);
#endif
} else {
c->ci = ci;
ci->c = c;
@@ -148,17 +144,12 @@ int do_register(User * u)
ci->memos.memomax = MSMaxMemos;
ci->last_used = ci->time_registered;
ci->founder = nc;
#ifdef USE_ENCRYPTION
if (strlen(pass) > PASSMAX)
notice_lang(s_ChanServ, u, PASSWORD_TRUNCATED, PASSMAX);
memset(pass, 0, strlen(pass));
memcpy(ci->founderpass, founderpass, PASSMAX);
ci->flags |= CI_ENCRYPTEDPW;
#else
if (strlen(pass) > PASSMAX - 1) /* -1 for null byte */
notice_lang(s_ChanServ, u, PASSWORD_TRUNCATED, PASSMAX - 1);
strscpy(ci->founderpass, pass, PASSMAX);
#endif
// ci->flags |= CI_ENCRYPTEDPW;
//
ci->desc = sstrdup(desc);
if (c->topic) {
ci->last_topic = sstrdup(c->topic);
@@ -174,9 +165,11 @@ int do_register(User * u)
alog("%s: Channel '%s' registered by %s!%s@%s", s_ChanServ, chan,
u->nick, u->username, u->host);
notice_lang(s_ChanServ, u, CHAN_REGISTERED, chan, u->nick);
#ifndef USE_ENCRYPTION
notice_lang(s_ChanServ, u, CHAN_PASSWORD_IS, ci->founderpass);
#endif
if(enc_decrypt(ci->founderpass,tmp_pass,PASSMAX) == 1) {
notice_lang(s_ChanServ, u, CHAN_PASSWORD_IS, ci->founderpass);
}
uc = scalloc(sizeof(*uc), 1);
uc->next = u->founder_chans;
uc->prev = NULL;
+32 -30
View File
@@ -37,15 +37,12 @@ int AnopeInit(int argc, char **argv)
moduleAddCommand(CHANSERV, c, MOD_UNIQUE);
moduleSetChanHelp(myChanServHelp);
#ifdef USE_ENCRYPTION
return MOD_STOP;
#else
if (UseMail) {
return MOD_CONT;
} else {
return MOD_STOP;
}
#endif
}
/**
@@ -89,35 +86,40 @@ int do_sendpass(User * u)
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else {
char buf[BUFSIZE];
MailInfo *mail;
char tmp_pass[PASSMAX];
if(enc_decrypt(ci->founderpass,tmp_pass,PASSMAX)==1) {
MailInfo *mail;
snprintf(buf, sizeof(buf),
getstring2(founder, CHAN_SENDPASS_SUBJECT), ci->name);
mail = MailBegin(u, founder, buf, s_ChanServ);
if (!mail)
return MOD_CONT;
snprintf(buf, sizeof(buf),
getstring2(founder, CHAN_SENDPASS_SUBJECT), ci->name);
mail = MailBegin(u, founder, buf, s_ChanServ);
if (!mail)
return MOD_CONT;
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_HEAD));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_1),
ci->name);
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_2),
ci->founderpass);
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_3));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_4));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_5),
NetworkName);
fprintf(mail->pipe, "\n.\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_HEAD));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_1),
ci->name);
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_2),
tmp_pass);
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_3));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_4));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring2(founder, CHAN_SENDPASS_LINE_5),
NetworkName);
fprintf(mail->pipe, "\n.\n");
MailEnd(mail);
MailEnd(mail);
alog("%s: %s!%s@%s used SENDPASS on %s", s_ChanServ, u->nick,
u->username, u->host, chan);
notice_lang(s_ChanServ, u, CHAN_SENDPASS_OK, chan);
alog("%s: %s!%s@%s used SENDPASS on %s", s_ChanServ, u->nick,
u->username, u->host, chan);
notice_lang(s_ChanServ, u, CHAN_SENDPASS_OK, chan);
} else {
notice_lang(s_ChanServ, u, CHAN_SENDPASS_UNAVAILABLE);
}
}
return MOD_CONT;
}
+2 -12
View File
@@ -14,9 +14,7 @@
/*************************************************************************/
#include "module.h"
#ifdef USE_ENCRYPTION
#include "encrypt.h"
#endif
int do_set(User * u);
int do_set_founder(User * u, ChannelInfo * ci, char *param);
@@ -368,14 +366,14 @@ int do_set_password(User * u, ChannelInfo * ci, char *param)
notice_lang(s_ChanServ, u, MORE_OBSCURE_PASSWORD);
return MOD_CONT;
}
#ifdef USE_ENCRYPTION
if (len > PASSMAX) {
len = PASSMAX;
param[len] = 0;
notice_lang(s_ChanServ, u, PASSWORD_TRUNCATED, PASSMAX);
}
if (encrypt(param, len, ci->founderpass, PASSMAX) < 0) {
if (enc_encrypt(param, len, ci->founderpass, PASSMAX) < 0) {
memset(param, 0, strlen(param));
alog("%s: Failed to encrypt password for %s (set)", s_ChanServ,
ci->name);
@@ -386,14 +384,6 @@ int do_set_password(User * u, ChannelInfo * ci, char *param)
memset(param, 0, strlen(param));
notice_lang(s_ChanServ, u, CHAN_PASSWORD_CHANGED, ci->name);
#else /* !USE_ENCRYPTION */
if (strlen(param) > PASSMAX - 1) /* -1 for null byte */
notice_lang(s_ChanServ, u, PASSWORD_TRUNCATED, PASSMAX - 1);
strscpy(ci->founderpass, param, PASSMAX);
notice_lang(s_ChanServ, u, CHAN_PASSWORD_CHANGED_TO, ci->name,
ci->founderpass);
#endif /* USE_ENCRYPTION */
if (get_access(u, ci) < ACCESS_FOUNDER) {
alog("%s: %s!%s@%s set password as Services admin for %s",
s_ChanServ, u->nick, u->username, u->host, ci->name);
+422
View File
@@ -0,0 +1,422 @@
/* Module for encryption using MD5.
*
* Modified for Anope.
* (C) 2003-2006 Anope Team
* Contact us at dev@anope.org
*
* Taken from IRC Services and is copyright (c) 1996-2002 Andrew Church.
* E-mail: <achurch@achurch.org>
* Parts written by Andrew Kempe and others.
* This program is free but copyrighted software; see the file COPYING for
* details.
*/
#include "module.h"
/*************************************************************************/
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
#include <string.h>
typedef unsigned int UINT4;
/* MD5 context. */
typedef struct {
UINT4 state[4]; /* state (ABCD) */
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD5_CTX;
/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
*/
typedef void *POINTER;
/* Constants for MD5Transform routine.
*/
#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21
void MD5Transform (UINT4 [4], unsigned char [64]);
void Encode (unsigned char *, UINT4 *, unsigned int);
void Decode (UINT4 *, unsigned char *, unsigned int);
static unsigned char PADDING[64] = {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/* F, G, H and I are basic MD5 functions.
*/
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))
/* ROTATE_LEFT rotates x left n bits.
*/
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
Rotation is separate from addition to prevent recomputation.
*/
#define FF(a, b, c, d, x, s, ac) { \
(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define GG(a, b, c, d, x, s, ac) { \
(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define HH(a, b, c, d, x, s, ac) { \
(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define II(a, b, c, d, x, s, ac) { \
(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
/* MD5 initialization. Begins an MD5 operation, writing a new context.
*/
void MD5Init (context)
MD5_CTX *context; /* context */
{
context->count[0] = context->count[1] = 0;
/* Load magic initialization constants.
*/
context->state[0] = 0x67452301;
context->state[1] = 0xefcdab89;
context->state[2] = 0x98badcfe;
context->state[3] = 0x10325476;
}
/* MD5 block update operation. Continues an MD5 message-digest
operation, processing another message block, and updating the
context.
*/
void MD5Update (context, input, inputLen)
MD5_CTX *context; /* context */
unsigned char *input; /* input block */
unsigned int inputLen; /* length of input block */
{
unsigned int i, index, partLen;
/* Compute number of bytes mod 64 */
index = (unsigned int)((context->count[0] >> 3) & 0x3F);
/* Update number of bits */
if ((context->count[0] += ((UINT4)inputLen << 3))
< ((UINT4)inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT4)inputLen >> 29);
partLen = 64 - index;
/* Transform as many times as possible.
*/
if (inputLen >= partLen) {
memcpy
((POINTER)&context->buffer[index], (POINTER)input, partLen);
MD5Transform (context->state, context->buffer);
for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform (context->state, &input[i]);
index = 0;
}
else
i = 0;
/* Buffer remaining input */
memcpy
((POINTER)&context->buffer[index], (POINTER)&input[i],
inputLen-i);
}
/* MD5 finalization. Ends an MD5 message-digest operation, writing the
the message digest and zeroizing the context.
*/
void MD5Final (digest, context)
unsigned char digest[16]; /* message digest */
MD5_CTX *context; /* context */
{
unsigned char bits[8];
unsigned int index, padLen;
/* Save number of bits */
Encode (bits, context->count, 8);
/* Pad out to 56 mod 64.
*/
index = (unsigned int)((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
MD5Update (context, PADDING, padLen);
/* Append length (before padding) */
MD5Update (context, bits, 8);
/* Store state in digest */
Encode (digest, context->state, 16);
/* Zeroize sensitive information.
*/
memset ((POINTER)context, 0, sizeof (*context));
}
/* MD5 basic transformation. Transforms state based on block.
*/
void MD5Transform (state, block)
UINT4 state[4];
unsigned char block[64];
{
UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
Decode (x, block, 64);
/* Round 1 */
FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
/* Round 2 */
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
/* Round 3 */
HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
/* Round 4 */
II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
/* Zeroize sensitive information.
*/
memset ((POINTER)x, 0, sizeof (x));
}
/* Encodes input (UINT4) into output (unsigned char). Assumes len is
a multiple of 4.
*/
void Encode (output, input, len)
unsigned char *output;
UINT4 *input;
unsigned int len;
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4) {
output[j] = (unsigned char)(input[i] & 0xff);
output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
}
}
/* Decodes input (unsigned char) into output (UINT4). Assumes len is
a multiple of 4.
*/
void Decode (output, input, len)
UINT4 *output;
unsigned char *input;
unsigned int len;
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4)
output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
(((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
}
/*************************************************************************/
/* Our own high-level routines. See encrypt.h for documentation. */
#define XTOI(c) ((c)>9 ? (c)-'A'+10 : (c)-'0')
int md5_encrypt(const char *src, int len, char *dest, int size)
{
MD5_CTX context;
char tmp[33];
if (size < 16)
return -1;
MD5Init(&context);
MD5Update(&context, src, len);
MD5Final(dest, &context);
if(debug) {
memset(tmp,0,33);
binary_to_hex(dest,tmp,16);
alog("enc_md5: Converted [%s] to [%s]",src,tmp);
}
return 0;
}
int md5_encrypt_in_place(char *buf, int size)
{
return md5_encrypt(buf, strlen(buf), buf, size);
}
int md5_encrypt_check_len(int passlen, int bufsize)
{
if (bufsize < 16)
fatal("enc_md5: md5_check_len(): buffer too small (%d)", bufsize);
return 0;
}
int md5_decrypt(const char *src, char *dest, int size)
{
return 0;
}
int md5_check_password(const char *plaintext, const char *password)
{
char buf[BUFSIZE];
if (md5_encrypt(plaintext, strlen(plaintext), buf, sizeof(buf)) < 0)
return -1;
if (memcmp(buf, password, 16) == 0)
return 1;
return 0;
}
/*************************************************************************/
/* Module stuff. */
int AnopeInit(int argc, char **argv) {
moduleAddAuthor("Anope");
moduleAddVersion("$Id$");
moduleSetType(ENCRYPTION);
encmodule_encrypt(md5_encrypt);
encmodule_encrypt_in_place(md5_encrypt_in_place);
encmodule_encrypt_check_len(md5_encrypt_check_len);
encmodule_decrypt(md5_decrypt);
encmodule_check_password(md5_check_password);
return MOD_CONT;
}
void AnopeFini(void) {
encmodule_encrypt(NULL);
encmodule_encrypt_in_place(NULL);
encmodule_encrypt_check_len(NULL);
encmodule_decrypt(NULL);
encmodule_check_password(NULL);
}
/*************************************************************************/
+76
View File
@@ -0,0 +1,76 @@
/* Module for encryption using MD5.
*
* (C) 2003-2006 Anope Team
* Contact us at dev@anope.org
*
* This program is free but copyrighted software; see the file COPYING for
* details.
*/
#include "module.h"
int plain_encrypt(const char *src,int len,char *dest,int size);
int plain_encrypt_in_place(char *buf, int size);
int plain_encrypt_check_len(int passlen, int bufsize);
int plain_decrypt(const char *src, char *dest, int size);
int plain_check_password(const char *plaintext, const char *password);
int AnopeInit(int argc, char **argv) {
moduleAddAuthor("Anope");
moduleAddVersion("$Id$");
moduleSetType(ENCRYPTION);
encmodule_encrypt(plain_encrypt);
encmodule_encrypt_in_place(plain_encrypt_in_place);
encmodule_encrypt_check_len(plain_encrypt_check_len);
encmodule_decrypt(plain_decrypt);
encmodule_check_password(plain_check_password);
return MOD_CONT;
}
void AnopeFini(void) {
encmodule_encrypt(NULL);
encmodule_encrypt_in_place(NULL);
encmodule_encrypt_check_len(NULL);
encmodule_decrypt(NULL);
encmodule_check_password(NULL);
}
int plain_encrypt(const char *src,int len,char *dest,int size) {
if(size>=len) {
memset(dest,0,size);
strncpy(dest,src,len);
return 0;
}
return -1;
}
int plain_encrypt_in_place(char *buf, int size) {
return 0;
}
int plain_encrypt_check_len(int passlen, int bufsize) {
if(bufsize>=passlen) {
return 0;
}
return bufsize;
}
int plain_decrypt(const char *src, char *dest, int size) {
memset(dest,0,size);
strncpy(dest,src,size);
return 1;
}
int plain_check_password(const char *plaintext, const char *password) {
if(strcmp(plaintext,password)==0) {
return 1;
}
return 0;
}
/* EOF */
+451
View File
@@ -0,0 +1,451 @@
/* Include file for high-level encryption routines.
*
* (C) 2003-2005 Anope Team
* Contact us at info@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id: encrypt.c 953 2006-01-14 11:36:29Z certus $
*
*/
#include "module.h"
void binary_to_hex(unsigned char *bin, char *hex, int length)
{
static const char trans[] = "0123456789ABCDEF";
int i;
for(i = 0; i < length; i++)
{
hex[i << 1] = trans[bin[i] >> 4];
hex[(i << 1) + 1] = trans[bin[i] & 0xf];
}
hex[i << 1] = '\0';
}
/*************************************************************************/
/******** Code specific to the type of encryption. ********/
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
#include <string.h>
typedef unsigned int UINT4;
/* MD5 context. */
typedef struct {
UINT4 state[4]; /* state (ABCD) */
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD5_CTX;
/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
*/
typedef void *POINTER;
/* Constants for MD5Transform routine.
*/
#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21
static void MD5Transform(UINT4[4], unsigned char[64]);
static void Encode(unsigned char *, UINT4 *, unsigned int);
static void Decode(UINT4 *, unsigned char *, unsigned int);
static unsigned char PADDING[64] = {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/* F, G, H and I are basic MD5 functions.
*/
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define MD5_I(x, y, z) ((y) ^ ((x) | (~z)))
/* ROTATE_LEFT rotates x left n bits.
*/
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
Rotation is separate from addition to prevent recomputation.
*/
#define FF(a, b, c, d, x, s, ac) { \
(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define GG(a, b, c, d, x, s, ac) { \
(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define HH(a, b, c, d, x, s, ac) { \
(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define II(a, b, c, d, x, s, ac) { \
(a) += MD5_I ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
/* MD5 initialization. Begins an MD5 operation, writing a new context.
*/
static void MD5Init(context)
MD5_CTX *context; /* context */
{
context->count[0] = context->count[1] = 0;
/* Load magic initialization constants.
*/
context->state[0] = 0x67452301;
context->state[1] = 0xefcdab89;
context->state[2] = 0x98badcfe;
context->state[3] = 0x10325476;
}
/* MD5 block update operation. Continues an MD5 message-digest
operation, processing another message block, and updating the
context.
*/
static void MD5Update(context, input, inputLen)
MD5_CTX *context; /* context */
unsigned char *input; /* input block */
unsigned int inputLen; /* length of input block */
{
unsigned int i, index, partLen;
/* Compute number of bytes mod 64 */
index = (unsigned int) ((context->count[0] >> 3) & 0x3F);
/* Update number of bits */
if ((context->count[0] += ((UINT4) inputLen << 3))
< ((UINT4) inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT4) inputLen >> 29);
partLen = 64 - index;
/* Transform as many times as possible.
*/
if (inputLen >= partLen) {
memcpy
((POINTER) & context->buffer[index], (POINTER) input, partLen);
MD5Transform(context->state, context->buffer);
for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform(context->state, &input[i]);
index = 0;
} else
i = 0;
/* Buffer remaining input */
memcpy
((POINTER) & context->buffer[index], (POINTER) & input[i],
inputLen - i);
}
/* MD5 finalization. Ends an MD5 message-digest operation, writing the
the message digest and zeroizing the context.
*/
static void MD5Final(digest, context)
unsigned char digest[16]; /* message digest */
MD5_CTX *context; /* context */
{
unsigned char bits[8];
unsigned int index, padLen;
/* Save number of bits */
Encode(bits, context->count, 8);
/* Pad out to 56 mod 64.
*/
index = (unsigned int) ((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
MD5Update(context, PADDING, padLen);
/* Append length (before padding) */
MD5Update(context, bits, 8);
/* Store state in digest */
Encode(digest, context->state, 16);
/* Zeroize sensitive information.
*/
memset((POINTER) context, 0, sizeof(*context));
}
/* MD5 basic transformation. Transforms state based on block.
*/
static void MD5Transform(state, block)
UINT4 state[4];
unsigned char block[64];
{
UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
Decode(x, block, 64);
/* Round 1 */
FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
/* Round 2 */
GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
/* Round 3 */
HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
/* Round 4 */
II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
/* Zeroize sensitive information.
*/
memset((POINTER) x, 0, sizeof(x));
}
/* Encodes input (UINT4) into output (unsigned char). Assumes len is
a multiple of 4.
*/
static void Encode(output, input, len)
unsigned char *output;
UINT4 *input;
unsigned int len;
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4) {
output[j] = (unsigned char) (input[i] & 0xff);
output[j + 1] = (unsigned char) ((input[i] >> 8) & 0xff);
output[j + 2] = (unsigned char) ((input[i] >> 16) & 0xff);
output[j + 3] = (unsigned char) ((input[i] >> 24) & 0xff);
}
}
/* Decodes input (unsigned char) into output (UINT4). Assumes len is
a multiple of 4.
*/
static void Decode(output, input, len)
UINT4 *output;
unsigned char *input;
unsigned int len;
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4)
output[i] = ((UINT4) input[j]) | (((UINT4) input[j + 1]) << 8) |
(((UINT4) input[j + 2]) << 16) | (((UINT4) input[j + 3]) <<
24);
}
/*************************************************************************/
/******** Our own high-level routines. ********/
#define XTOI(c) ((c)>9 ? (c)-'A'+10 : (c)-'0')
/* Encrypt `src' of length `len' and store the result in `dest'. If the
* resulting string would be longer than `size', return -1 and leave `dest'
* unchanged; else return 0.
*/
int old_encrypt(const char *src, int len, char *dest, int size)
{
MD5_CTX context;
char digest[33];
char tmp[33];
int i;
if (size < 16)
return -1;
memset(&context, 0, sizeof(context));
memset(&digest, 0, sizeof(digest));
MD5Init(&context);
MD5Update(&context, src, len);
MD5Final(digest, &context);
for (i = 0; i < 32; i += 2)
dest[i / 2] = XTOI(digest[i]) << 4 | XTOI(digest[i + 1]);
if(debug) {
memset(tmp,0,33);
binary_to_hex(dest,tmp,16);
alog("enc_old: Converted [%s] to [%s]",src,tmp);
}
return 0;
}
/* Shortcut for encrypting a null-terminated string in place. */
int old_encrypt_in_place(char *buf, int size)
{
return old_encrypt(buf, strlen(buf), buf, size);
}
int old_encrypt_check_len(int passlen, int bufsize)
{
if (bufsize < 16)
fatal("enc_old: old_check_len(): buffer too small (%d)", bufsize);
return 0;
}
/* Compare a plaintext string against an encrypted password. Return 1 if
* they match, 0 if not, and -1 if something went wrong. */
int old_check_password(const char *plaintext, const char *password)
{
char buf[BUFSIZE];
if (old_encrypt(plaintext, strlen(plaintext), buf, sizeof(buf)) < 0)
return -1;
if (memcmp(buf, password, 16) == 0)
return 1;
else
return 0;
}
int old_decrypt(const char *src, char *dest, int size)
{
return 0;
}
int AnopeInit(int argc, char **argv) {
moduleAddAuthor("Anope");
moduleAddVersion("$Id$");
moduleSetType(ENCRYPTION);
encmodule_encrypt(old_encrypt);
encmodule_encrypt_in_place(old_encrypt_in_place);
encmodule_encrypt_check_len(old_encrypt_check_len);
encmodule_decrypt(old_decrypt);
encmodule_check_password(old_check_password);
return MOD_CONT;
}
void AnopeFini(void) {
encmodule_encrypt(NULL);
encmodule_encrypt_in_place(NULL);
encmodule_encrypt_check_len(NULL);
encmodule_decrypt(NULL);
encmodule_check_password(NULL);
}
/*************************************************************************/
+12 -11
View File
@@ -39,11 +39,7 @@ int AnopeInit(int argc, char **argv)
moduleSetNickHelp(myNickServHelp);
#ifdef USE_ENCRYPTION
return MOD_STOP;
#else
return MOD_CONT;
#endif
}
/**
@@ -73,6 +69,7 @@ void myNickServHelp(User * u)
int do_getpass(User * u)
{
char *nick = strtok(NULL, " ");
char tmp_pass[PASSMAX];
NickAlias *na;
NickRequest *nr = NULL;
@@ -99,13 +96,17 @@ int do_getpass(User * u)
} else if (NSRestrictGetPass && !is_services_root(u)) {
notice_lang(s_NickServ, u, PERMISSION_DENIED);
} else {
alog("%s: %s!%s@%s used GETPASS on %s", s_NickServ, u->nick,
u->username, u->host, nick);
if (WallGetpass)
anope_cmd_global(s_NickServ, "\2%s\2 used GETPASS on \2%s\2",
u->nick, nick);
notice_lang(s_NickServ, u, NICK_GETPASS_PASSWORD_IS, nick,
na->nc->pass);
if(enc_decrypt(na->nc->pass,tmp_pass,PASSMAX)==1) {
alog("%s: %s!%s@%s used GETPASS on %s", s_NickServ, u->nick,
u->username, u->host, nick);
if (WallGetpass)
anope_cmd_global(s_NickServ, "\2%s\2 used GETPASS on \2%s\2",
u->nick, nick);
notice_lang(s_NickServ, u, NICK_GETPASS_PASSWORD_IS, nick,
na->nc->pass);
} else {
notice_lang(s_NickServ, u, NICK_GETPASS_UNAVAILABLE);
}
}
return MOD_CONT;
}
+1 -1
View File
@@ -85,7 +85,7 @@ int do_ghost(User * u)
} else if (stricmp(nick, u->nick) == 0) {
notice_lang(s_NickServ, u, NICK_NO_GHOST_SELF);
} else if (pass) {
int res = check_password(pass, na->nc->pass);
int res = enc_check_password(pass, na->nc->pass);
if (res == 1) {
char buf[NICKMAX + 32];
snprintf(buf, sizeof(buf), "GHOST command used by %s",
+1 -1
View File
@@ -165,7 +165,7 @@ int do_group(User * u)
&& !nick_is_services_admin(target->nc)) {
notice_lang(s_NickServ, u, NICK_GROUP_TOO_MANY, target->nick,
s_NickServ, s_NickServ);
} else if (check_password(pass, target->nc->pass) != 1) {
} else if (enc_check_password(pass, target->nc->pass) != 1) {
alog("%s: Failed GROUP for %s!%s@%s (invalid password)",
s_NickServ, u->nick, u->username, u->host);
notice_lang(s_NickServ, u, PASSWORD_INCORRECT);
+1 -1
View File
@@ -96,7 +96,7 @@ int do_identify(User * u)
notice_lang(s_NickServ, u, NICK_X_SUSPENDED, na->nick);
} else if (nick_identified(u)) {
notice_lang(s_NickServ, u, NICK_ALREADY_IDENTIFIED);
} else if (!(res = check_password(pass, na->nc->pass))) {
} else if (!(res = enc_check_password(pass, na->nc->pass))) {
alog("%s: Failed IDENTIFY for %s!%s@%s", s_NickServ, u->nick,
u->username, u->host);
notice_lang(s_NickServ, u, PASSWORD_INCORRECT);
+1 -1
View File
@@ -83,7 +83,7 @@ int do_recover(User * u)
} else if (stricmp(nick, u->nick) == 0) {
notice_lang(s_NickServ, u, NICK_NO_RECOVER_SELF);
} else if (pass) {
int res = check_password(pass, na->nc->pass);
int res = enc_check_password(pass, na->nc->pass);
if (res == 1) {
notice_lang(s_NickServ, u2, FORCENICKCHANGE_NOW);
+9 -19
View File
@@ -14,9 +14,7 @@
/*************************************************************************/
#include "module.h"
#ifdef USE_ENCRYPTION
#include "encrypt.h"
#endif
int do_confirm(User * u);
int do_register(User * u);
@@ -190,17 +188,10 @@ int do_register(User * u)
} else if (email && !MailValidate(email)) {
notice_lang(s_NickServ, u, MAIL_X_INVALID, email);
} else {
#ifdef USE_ENCRYPTION
if (strlen(pass) > PASSMAX) {
pass[PASSMAX] = 0;
notice_lang(s_NickServ, u, PASSWORD_TRUNCATED, PASSMAX);
}
#else
if (strlen(pass) > PASSMAX - 1) { /* -1 for null byte */
pass[PASSMAX] = 0;
notice_lang(s_NickServ, u, PASSWORD_TRUNCATED, PASSMAX - 1);
}
#endif
for (idx = 0; idx < 9; idx++) {
passcode[idx] =
chars[(1 +
@@ -316,11 +307,11 @@ int do_confirm(User * u)
if (na) {
int i;
char tsbuf[16];
char tmp_pass[PASSMAX];
#ifdef USE_ENCRYPTION
len = strlen(pass);
na->nc->pass = smalloc(PASSMAX);
if (encrypt(pass, len, na->nc->pass, PASSMAX) < 0) {
if (enc_encrypt(pass, len, na->nc->pass, PASSMAX) < 0) {
memset(pass, 0, strlen(pass));
alog("%s: Failed to encrypt password for %s (register)",
s_NickServ, nr->nick);
@@ -329,11 +320,8 @@ int do_confirm(User * u)
}
memset(pass, 0, strlen(pass));
na->status = (int16) (NS_IDENTIFIED | NS_RECOGNIZED);
na->nc->flags |= NI_ENCRYPTEDPW;
#else
na->nc->pass = sstrdup(pass);
na->status = (int16) (NS_IDENTIFIED | NS_RECOGNIZED);
#endif
/* na->nc->flags |= NI_ENCRYPTEDPW; */
na->nc->flags |= NSDefFlags;
for (i = 0; i < RootNumber; i++) {
if (!stricmp(ServicesRoots[i], nr->nick)) {
@@ -378,9 +366,10 @@ int do_confirm(User * u)
notice_lang(s_NickServ, u, NICK_REGISTERED_NO_MASK,
u->nick);
send_event(EVENT_NICK_REGISTERED, 1, u->nick);
#ifndef USE_ENCRYPTION
notice_lang(s_NickServ, u, NICK_PASSWORD_IS, na->nc->pass);
#endif
if(enc_decrypt(na->nc->pass,tmp_pass,PASSMAX)==1)
notice_lang(s_NickServ, u, NICK_PASSWORD_IS, tmp_pass);
u->lastnickreg = time(NULL);
if (ircd->modeonreg) {
len = strlen(ircd->modeonreg);
@@ -507,3 +496,4 @@ int do_sendregmail(User * u, NickRequest * nr)
MailEnd(mail);
return 0;
}
+1 -1
View File
@@ -82,7 +82,7 @@ int do_release(User * u)
} else if (!(na->status & NS_KILL_HELD)) {
notice_lang(s_NickServ, u, NICK_RELEASE_NOT_HELD, nick);
} else if (pass) {
int res = check_password(pass, na->nc->pass);
int res = enc_check_password(pass, na->nc->pass);
if (res == 1) {
release(na, 0);
notice_lang(s_NickServ, u, NICK_RELEASED);
+10 -11
View File
@@ -14,9 +14,7 @@
/*************************************************************************/
#include "module.h"
#ifdef USE_ENCRYPTION
#include "encrypt.h"
#endif
#include "encrypt.h"
int do_saset(User * u);
int do_saset_display(User * u, NickCore * nc, char *param);
@@ -221,6 +219,7 @@ int do_saset_display(User * u, NickCore * nc, char *param)
int do_saset_password(User * u, NickCore * nc, char *param)
{
int len = strlen(param);
char tmp_pass[PASSMAX];
if (NSSecureAdmins && u->na->nc != nc && nick_is_services_admin(nc)
&& !is_services_root(u)) {
@@ -235,10 +234,9 @@ int do_saset_password(User * u, NickCore * nc, char *param)
if (nc->pass)
free(nc->pass);
#ifdef USE_ENCRYPTION
nc->pass = smalloc(PASSMAX);
if (encrypt(param, len, nc->pass, PASSMAX) < 0) {
if (enc_encrypt(param, len, nc->pass, PASSMAX) < 0) {
memset(param, 0, len);
alog("%s: Failed to encrypt password for %s (set)", s_NickServ,
nc->display);
@@ -248,12 +246,13 @@ int do_saset_password(User * u, NickCore * nc, char *param)
}
memset(param, 0, len);
notice_lang(s_NickServ, u, NICK_SASET_PASSWORD_CHANGED, nc->display);
#else
nc->pass = sstrdup(param);
notice_lang(s_NickServ, u, NICK_SASET_PASSWORD_CHANGED_TO, nc->display,
nc->pass);
#endif
if(enc_decrypt(nc->pass,tmp_pass,PASSMAX)==1) {
notice_lang(s_NickServ, u, NICK_SASET_PASSWORD_CHANGED_TO, nc->display,
nc->pass);
} else {
notice_lang(s_NickServ, u, NICK_SASET_PASSWORD_CHANGED, nc->display);
}
alog("%s: %s!%s@%s used SASET PASSWORD on %s (e-mail: %s)", s_NickServ,
u->nick, u->username, u->host, nc->display,
+30 -28
View File
@@ -41,11 +41,8 @@ int AnopeInit(int argc, char **argv)
if (!UseMail) {
return MOD_STOP;
}
#ifdef USE_ENCRYPTION
return MOD_STOP;
#else
return MOD_CONT;
#endif
}
/**
@@ -86,34 +83,39 @@ int do_sendpass(User * u)
notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, na->nick);
} else {
char buf[BUFSIZE];
MailInfo *mail;
char tmp_pass[PASSMAX];
if(enc_decrypt(na->nc->pass,tmp_pass,PASSMAX)==1) {
MailInfo *mail;
snprintf(buf, sizeof(buf), getstring(na, NICK_SENDPASS_SUBJECT),
na->nick);
mail = MailBegin(u, na->nc, buf, s_NickServ);
if (!mail)
return MOD_CONT;
snprintf(buf, sizeof(buf), getstring(na, NICK_SENDPASS_SUBJECT),
na->nick);
mail = MailBegin(u, na->nc, buf, s_NickServ);
if (!mail)
return MOD_CONT;
fprintf(mail->pipe, getstring(na, NICK_SENDPASS_HEAD));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring(na, NICK_SENDPASS_LINE_1), na->nick);
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring(na, NICK_SENDPASS_LINE_2),
na->nc->pass);
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring(na, NICK_SENDPASS_LINE_3));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring(na, NICK_SENDPASS_LINE_4));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring(na, NICK_SENDPASS_LINE_5),
NetworkName);
fprintf(mail->pipe, "\n.\n");
fprintf(mail->pipe, getstring(na, NICK_SENDPASS_HEAD));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring(na, NICK_SENDPASS_LINE_1), na->nick);
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring(na, NICK_SENDPASS_LINE_2),
tmp_pass);
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring(na, NICK_SENDPASS_LINE_3));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring(na, NICK_SENDPASS_LINE_4));
fprintf(mail->pipe, "\n\n");
fprintf(mail->pipe, getstring(na, NICK_SENDPASS_LINE_5),
NetworkName);
fprintf(mail->pipe, "\n.\n");
MailEnd(mail);
MailEnd(mail);
alog("%s: %s!%s@%s used SENDPASS on %s", s_NickServ, u->nick,
u->username, u->host, nick);
notice_lang(s_NickServ, u, NICK_SENDPASS_OK, nick);
alog("%s: %s!%s@%s used SENDPASS on %s", s_NickServ, u->nick,
u->username, u->host, nick);
notice_lang(s_NickServ, u, NICK_SENDPASS_OK, nick);
} else {
notice_lang(s_NickServ, u, NICK_SENDPASS_UNAVAILABLE);
}
}
return MOD_CONT;
+8 -9
View File
@@ -14,9 +14,7 @@
/*************************************************************************/
#include "module.h"
#ifdef USE_ENCRYPTION
#include "encrypt.h"
#endif
int do_set(User * u);
int do_set_display(User * u, NickCore * nc, char *param);
@@ -205,6 +203,7 @@ int do_set_display(User * u, NickCore * nc, char *param)
int do_set_password(User * u, NickCore * nc, char *param)
{
int len = strlen(param);
char tmp_pass[PASSMAX];
if (stricmp(nc->display, param) == 0 || (StrictPasswords && len < 5)) {
notice_lang(s_NickServ, u, MORE_OBSCURE_PASSWORD);
@@ -214,10 +213,9 @@ int do_set_password(User * u, NickCore * nc, char *param)
if (nc->pass)
free(nc->pass);
#ifdef USE_ENCRYPTION
nc->pass = smalloc(PASSMAX);
if (encrypt(param, len, nc->pass, PASSMAX) < 0) {
if (enc_encrypt(param, len, nc->pass, PASSMAX) < 0) {
memset(param, 0, len);
alog("%s: Failed to encrypt password for %s (set)", s_NickServ,
nc->display);
@@ -226,11 +224,12 @@ int do_set_password(User * u, NickCore * nc, char *param)
}
memset(param, 0, len);
notice_lang(s_NickServ, u, NICK_SET_PASSWORD_CHANGED);
#else
nc->pass = sstrdup(param);
notice_lang(s_NickServ, u, NICK_SET_PASSWORD_CHANGED_TO, nc->pass);
#endif
if(enc_decrypt(nc->pass,tmp_pass,PASSMAX)==1) {
notice_lang(s_NickServ, u, NICK_SET_PASSWORD_CHANGED_TO, nc->pass);
} else {
notice_lang(s_NickServ, u, NICK_SET_PASSWORD_CHANGED);
}
alog("%s: %s!%s@%s (e-mail: %s) changed its password.", s_NickServ,
u->nick, u->username, u->host, (nc->email ? nc->email : "none"));
+22
View File
@@ -73,6 +73,7 @@ int do_modlist(User * u)
int showCore = 0;
int showThird = 1;
int showProto = 1;
int showEnc = 1;
int showSupported = 1;
int showQA = 1;
@@ -82,6 +83,7 @@ int do_modlist(User * u)
char core[] = "Core";
char third[] = "3rd";
char proto[] = "Protocol";
char enc[] = "Encryption";
char supported[] = "Supported";
char qa[] = "QATested";
@@ -91,6 +93,7 @@ int do_modlist(User * u)
showCore = 1;
showThird = 0;
showProto = 0;
showEnc = 0;
showSupported = 0;
showQA = 0;
} else if (stricmp(param, third) == 0) {
@@ -99,10 +102,12 @@ int do_modlist(User * u)
showSupported = 0;
showQA = 0;
showProto = 0;
showEnc = 0;
} else if (stricmp(param, proto) == 0) {
showCore = 0;
showThird = 0;
showProto = 1;
showEnc = 0;
showSupported = 0;
showQA = 0;
} else if (stricmp(param, supported) == 0) {
@@ -110,13 +115,22 @@ int do_modlist(User * u)
showThird = 0;
showProto = 0;
showSupported = 1;
showEnc = 0;
showQA = 0;
} else if (stricmp(param, qa) == 0) {
showCore = 0;
showThird = 0;
showProto = 0;
showSupported = 0;
showEnc = 0;
showQA = 1;
} else if (stricmp(param, enc) == 0) {
showCore = 0;
showThird = 0;
showProto = 0;
showSupported = 0;
showEnc = 1;
showQA = 0;
}
}
@@ -161,6 +175,14 @@ int do_modlist(User * u)
count++;
}
break;
case ENCRYPTION:
if (showEnc) {
notice_lang(s_OperServ, u, OPER_MODULE_LIST,
current->name, current->m->version, enc);
count++;
}
break;
}
}
+76 -387
View File
@@ -15,420 +15,109 @@
#include "services.h"
#include "encrypt.h"
#ifdef USE_ENCRYPTION
Encryption encryption;
/*************************************************************************/
/******** Code specific to the type of encryption. ********/
#ifdef /********/ ENCRYPT_MD5 /********/
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
#include <string.h>
typedef unsigned int UINT4;
/* MD5 context. */
typedef struct {
UINT4 state[4]; /* state (ABCD) */
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD5_CTX;
/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
*/
typedef void *POINTER;
/* Constants for MD5Transform routine.
*/
#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21
static void MD5Transform(UINT4[4], unsigned char[64]);
static void Encode(unsigned char *, UINT4 *, unsigned int);
static void Decode(UINT4 *, unsigned char *, unsigned int);
static unsigned char PADDING[64] = {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/* F, G, H and I are basic MD5 functions.
*/
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define MD5_I(x, y, z) ((y) ^ ((x) | (~z)))
/* ROTATE_LEFT rotates x left n bits.
*/
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
Rotation is separate from addition to prevent recomputation.
*/
#define FF(a, b, c, d, x, s, ac) { \
(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define GG(a, b, c, d, x, s, ac) { \
(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define HH(a, b, c, d, x, s, ac) { \
(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define II(a, b, c, d, x, s, ac) { \
(a) += MD5_I ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
/* MD5 initialization. Begins an MD5 operation, writing a new context.
*/
static void MD5Init(context)
MD5_CTX *context; /* context */
/******************************************************************************/
void
encmodule_encrypt(int (*func)
(const char *src, int len, char *dest, int size))
{
context->count[0] = context->count[1] = 0;
/* Load magic initialization constants.
*/
context->state[0] = 0x67452301;
context->state[1] = 0xefcdab89;
context->state[2] = 0x98badcfe;
context->state[3] = 0x10325476;
encryption.encrypt = func;
}
/* MD5 block update operation. Continues an MD5 message-digest
operation, processing another message block, and updating the
context.
*/
static void MD5Update(context, input, inputLen)
MD5_CTX *context; /* context */
unsigned char *input; /* input block */
unsigned int inputLen; /* length of input block */
void encmodule_encrypt_in_place(int (*func) (char *buf, int size))
{
unsigned int i, index, partLen;
/* Compute number of bytes mod 64 */
index = (unsigned int) ((context->count[0] >> 3) & 0x3F);
/* Update number of bits */
if ((context->count[0] += ((UINT4) inputLen << 3))
< ((UINT4) inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT4) inputLen >> 29);
partLen = 64 - index;
/* Transform as many times as possible.
*/
if (inputLen >= partLen) {
memcpy
((POINTER) & context->buffer[index], (POINTER) input, partLen);
MD5Transform(context->state, context->buffer);
for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform(context->state, &input[i]);
index = 0;
} else
i = 0;
/* Buffer remaining input */
memcpy
((POINTER) & context->buffer[index], (POINTER) & input[i],
inputLen - i);
encryption.encrypt_in_place = func;
}
/* MD5 finalization. Ends an MD5 message-digest operation, writing the
the message digest and zeroizing the context.
*/
static void MD5Final(digest, context)
unsigned char digest[16]; /* message digest */
MD5_CTX *context; /* context */
void encmodule_encrypt_check_len(int (*func) (int passlen, int bufsize))
{
unsigned char bits[8];
unsigned int index, padLen;
/* Save number of bits */
Encode(bits, context->count, 8);
/* Pad out to 56 mod 64.
*/
index = (unsigned int) ((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
MD5Update(context, PADDING, padLen);
/* Append length (before padding) */
MD5Update(context, bits, 8);
/* Store state in digest */
Encode(digest, context->state, 16);
/* Zeroize sensitive information.
*/
memset((POINTER) context, 0, sizeof(*context));
encryption.encrypt_check_len = func;
}
/* MD5 basic transformation. Transforms state based on block.
*/
static void MD5Transform(state, block)
UINT4 state[4];
unsigned char block[64];
void encmodule_decrypt(int (*func) (const char *src, char *dest, int size))
{
UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
Decode(x, block, 64);
/* Round 1 */
FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
/* Round 2 */
GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
/* Round 3 */
HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
/* Round 4 */
II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
/* Zeroize sensitive information.
*/
memset((POINTER) x, 0, sizeof(x));
encryption.decrypt = func;
}
/* Encodes input (UINT4) into output (unsigned char). Assumes len is
a multiple of 4.
*/
static void Encode(output, input, len)
unsigned char *output;
UINT4 *input;
unsigned int len;
void
encmodule_check_password(int (*func)
(const char *plaintext, const char *password))
{
unsigned int i, j;
encryption.check_password = func;
}
for (i = 0, j = 0; j < len; i++, j += 4) {
output[j] = (unsigned char) (input[i] & 0xff);
output[j + 1] = (unsigned char) ((input[i] >> 8) & 0xff);
output[j + 2] = (unsigned char) ((input[i] >> 16) & 0xff);
output[j + 3] = (unsigned char) ((input[i] >> 24) & 0xff);
/******************************************************************************/
/**
* Encrypt string `src' of length `len', placing the result in buffer
* `dest' of size `size'. Returns 0 on success, -1 on error.
**/
int enc_encrypt(const char *src, int len, char *dest, int size)
{
if (encryption.encrypt) {
return encryption.encrypt(src, len, dest, size);
}
return -1;
}
/* Decodes input (unsigned char) into output (UINT4). Assumes len is
a multiple of 4.
*/
static void Decode(output, input, len)
UINT4 *output;
unsigned char *input;
unsigned int len;
/**
* Encrypt null-terminated string stored in buffer `buf' of size `size',
* placing the result in the same buffer. Returns 0 on success, -1 on
* error.
**/
int enc_encrypt_in_place(char *buf, int size)
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4)
output[i] = ((UINT4) input[j]) | (((UINT4) input[j + 1]) << 8) |
(((UINT4) input[j + 2]) << 16) | (((UINT4) input[j + 3]) <<
24);
if (encryption.encrypt_in_place) {
return encryption.encrypt_in_place(buf, size);
}
return -1;
}
#endif /******** ENCRYPT_MD5 ********/
/*************************************************************************/
/******** Our own high-level routines. ********/
#define XTOI(c) ((c)>9 ? (c)-'A'+10 : (c)-'0')
/* Encrypt `src' of length `len' and store the result in `dest'. If the
* resulting string would be longer than `size', return -1 and leave `dest'
* unchanged; else return 0.
*/
int encrypt(const char *src, int len, char *dest, int size)
/**
* Check whether the result of encrypting a password of length `passlen'
* will fit in a buffer of size `bufsize'. Returns 0 if the encrypted
* password would fit in the buffer, otherwise returns the maximum length
* password that would fit (this value will be smaller than `passlen').
* If the result of encrypting even a 1-byte password would exceed the
* specified buffer size, generates a fatal error.
**/
int enc_encrypt_check_len(int passlen, int bufsize)
{
#ifdef ENCRYPT_MD5
MD5_CTX context;
char digest[33];
int i;
if (size < 16)
return -1;
memset(&context, 0, sizeof(context));
memset(&digest, 0, sizeof(digest));
MD5Init(&context);
MD5Update(&context, src, len);
MD5Final(digest, &context);
for (i = 0; i < 32; i += 2)
dest[i / 2] = XTOI(digest[i]) << 4 | XTOI(digest[i + 1]);
return 0;
#endif
return -1; /* unknown encryption algorithm */
if (encryption.encrypt_check_len) {
return encryption.encrypt_check_len(passlen, bufsize);
}
return -1;
}
/* Shortcut for encrypting a null-terminated string in place. */
int encrypt_in_place(char *buf, int size)
/**
* Decrypt encrypted string `src' into buffer `dest' of length `len'.
* Returns 1 (not 0) on success, 0 if the encryption algorithm does not
* allow decryption, and -1 if another failure occurred (e.g. destination
* buffer too small).
**/
int enc_decrypt(const char *src, char *dest, int size)
{
return encrypt(buf, strlen(buf), buf, size);
if (encryption.decrypt) {
return encryption.decrypt(src, dest, size);
}
return -1;
}
/* Compare a plaintext string against an encrypted password. Return 1 if
* they match, 0 if not, and -1 if something went wrong. */
int check_password(const char *plaintext, const char *password)
/**
* Check an input password `plaintext' against a stored, encrypted password
* `password'. Return value is:
* 1 if the password matches
* 0 if the password does not match
* -1 if an error occurred while checking
**/
int enc_check_password(const char *plaintext, const char *password)
{
char buf[BUFSIZE];
if (encrypt(plaintext, strlen(plaintext), buf, sizeof(buf)) < 0)
return -1;
#ifdef ENCRYPT_MD5
if (memcmp(buf, password, 16) == 0)
#else
if (0)
#endif
return 1;
else
return 0;
if (encryption.check_password) {
return encryption.check_password(plaintext, password);
}
return -1;
}
/*************************************************************************/
#else /* !USE_ENCRYPTION */
int encrypt(const char *src, int len, char *dest, int size)
{
if (size < len)
return -1;
memcpy(dest, src, len);
return 0;
}
int encrypt_in_place(char *buf, int size)
{
return 0;
}
int check_password(const char *plaintext, const char *password)
{
if (strcmp(plaintext, password) == 0)
return 1;
else
return 0;
}
#endif /* USE_ENCRYPTION */
/*************************************************************************/
/* EOF */
+4
View File
@@ -457,6 +457,10 @@ int init_primary(int ac, char **av)
return -1;
}
/* Add Encryption Module; exit if there are errors */
if (encryption_module_init()) {
return -1;
}
return 0;
}
+1 -2
View File
@@ -84,8 +84,7 @@ const char version_number_dotted[] = VERSION_STRING_DOTTED;
const char version_build[] =
"build #" BUILD ", compiled " __DATE__ " " __TIME__;
/* the space is needed cause if you build with nothing it will complain */
const char version_flags[] =
" " VER_DEBUG VER_ENCRYPTION VER_OS VER_MYSQL VER_MODULE;
const char version_flags[] = " " VER_DEBUG VER_OS VER_MYSQL VER_MODULE;
extern char *mod_current_buffer;
+21
View File
@@ -59,6 +59,27 @@ int tolower(char c)
}
}
/*************************************************************************/
/**
* Simple function to convert binary data to hex.
* Taken from hybrid-ircd ( http://ircd-hybrid.com/ )
*/
void binary_to_hex(unsigned char *bin, char *hex, int length)
{
static const char trans[] = "0123456789ABCDEF";
int i;
for(i = 0; i < length; i++)
{
hex[i << 1] = trans[bin[i] >> 4];
hex[(i << 1) + 1] = trans[bin[i] & 0xf];
}
hex[i << 1] = '\0';
}
/*************************************************************************/
/**
+47
View File
@@ -145,6 +145,26 @@ void modules_core_init(int number, char **list)
}
}
}
/**
*
**/
int encryption_module_init(void) {
int ret = 0;
Module *m;
m = createModule(EncModule);
mod_current_module = m;
mod_current_user = NULL;
alog("Loading Encryption Module: [%s]", mod_current_module->name);
ret = loadModule(mod_current_module, NULL);
moduleSetType(ENCRYPTION);
alog("status: [%d][%s]", ret, ModuleGetErrStr(ret));
mod_current_module = NULL;
if (ret != MOD_ERR_OK) {
destroyModule(m);
}
return ret;
}
/**
* Load the ircd protocol module up
@@ -458,6 +478,25 @@ int protocolModuleLoaded()
return 0;
}
/**
* Search all loaded modules looking for an encryption module.
* @ return 1 if one is loaded
**/
int encryptionModuleLoaded()
{
int idx = 0;
ModuleHash *current = NULL;
for (idx = 0; idx != MAX_CMD_HASH; idx++) {
for (current = MODULE_HASH[idx]; current; current = current->next) {
if (current->m->type == ENCRYPTION) {
return 1;
}
}
}
return 0;
}
/**
* Copy the module from the modules folder to the runtime folder.
* This will prevent module updates while the modules is loaded from
@@ -624,6 +663,9 @@ int loadModule(Module * m, User * u)
if (m->type == PROTOCOL && protocolModuleLoaded()) {
alog("You cannot load two protocol modules");
ret = MOD_STOP;
} else if (m->type == ENCRYPTION && encryptionModuleLoaded()) {
alog("You cannot load two encryption modules");
ret = MOD_STOP;
}
if (ret == MOD_STOP) {
alog("%s requested unload...", m->name);
@@ -671,6 +713,11 @@ int unloadModule(Module * m, User * u)
notice_lang(s_OperServ, u, OPER_MODULE_NO_UNLOAD);
}
return MOD_ERR_NOUNLOAD;
} else if(m->type == ENCRYPTION) {
if (u) {
notice_lang(s_OperServ, u, OPER_MODULE_NO_UNLOAD);
}
return MOD_ERR_NOUNLOAD;
}
if (prepForUnload(mod_current_module) != MOD_ERR_OK) {
+19 -57
View File
@@ -233,38 +233,33 @@ void db_mysql_save_ns_req(NickRequest * nr)
char *db_mysql_secure(char *pass)
{
char epass[BUFSIZE];
char tmp_pass[PASSMAX];
/* Initialize the buffer. Bug #86 */
memset(epass, '\0', BUFSIZE);
#ifdef USE_ENCRYPTION
if (pass) {
/* If we use the builtin encryption don't double encrypt! */
/* We couldnt decrypt the pass... */
if(enc_decrypt(pass,tmp_pass,PASSMAX)!=1) {
snprintf(epass, sizeof(epass), "'%s'", pass);
} else { /* if we could decrypt the pass */
if (tmp_pass) {
snprintf(epass, sizeof(epass), "''");
} else if ((!MysqlSecure) || (strcmp(MysqlSecure, "") == 0)) {
snprintf(epass, sizeof(epass), "'%s'", tmp_pass);
} else if (strcmp(MysqlSecure, "des") == 0) {
snprintf(epass, sizeof(epass), "ENCRYPT('%s')", tmp_pass);
} else if (strcmp(MysqlSecure, "md5") == 0) {
snprintf(epass, sizeof(epass), "MD5('%s')", tmp_pass);
} else if (strcmp(MysqlSecure, "sha") == 0) {
snprintf(epass, sizeof(epass), "SHA('%s')", tmp_pass);
} else {
snprintf(epass, sizeof(epass), "ENCODE('%s','%s')", tmp_pass,
MysqlSecure);
}
}
#else
if (!pass) {
snprintf(epass, sizeof(epass), "''");
} else if ((!MysqlSecure) || (strcmp(MysqlSecure, "") == 0)) {
snprintf(epass, sizeof(epass), "'%s'", pass);
} else if (strcmp(MysqlSecure, "des") == 0) {
snprintf(epass, sizeof(epass), "ENCRYPT('%s')", pass);
} else if (strcmp(MysqlSecure, "md5") == 0) {
snprintf(epass, sizeof(epass), "MD5('%s')", pass);
} else if (strcmp(MysqlSecure, "sha") == 0) {
snprintf(epass, sizeof(epass), "SHA('%s')", pass);
} else {
snprintf(epass, sizeof(epass), "ENCODE('%s','%s')", pass,
MysqlSecure);
}
#endif
return sstrdup(epass);
}
/*************************************************************************/
@@ -1191,23 +1186,7 @@ void db_mysql_load_cs_dbase(void)
snprintf(ci->last_topic_setter, NICKMAX, "%s", mysql_row[10]);
ci->last_topic_time = atoi(mysql_row[11]);
ci->flags = atoi(mysql_row[12]);
#ifdef USE_ENCRYPTION
if (!(ci->flags & (CI_ENCRYPTEDPW | CI_VERBOTEN))) {
if (debug)
alog("debug: %s: encrypting password for %s on load",
s_ChanServ, ci->name);
if (encrypt_in_place(ci->founderpass, PASSMAX) < 0)
fatal("%s: load database: Can't encrypt %s password!",
s_ChanServ, ci->name);
ci->flags |= CI_ENCRYPTEDPW;
}
#else
if (ci->flags & CI_ENCRYPTEDPW) {
fatal
("%s: load database: password for %s encrypted but encryption disabled, aborting",
s_ChanServ, ci->name);
}
#endif
ci->flags &= ~CI_INHABIT;
ci->forbidby = sstrdup(mysql_row[13]);
@@ -1478,23 +1457,6 @@ void db_mysql_load_ns_dbase(void)
if (!NSAllowKillImmed)
nc->flags &= ~NI_KILL_IMMED;
#ifdef USE_ENCRYPTION
if (nc->pass && !(nc->flags & NI_ENCRYPTEDPW)) {
if (debug)
alog("debug: %s: encrypting password for `%s' on load",
s_NickServ, nc->display);
if (encrypt_in_place(nc->pass, PASSMAX) < 0)
fatal("%s: Can't encrypt `%s' nickname password!",
s_NickServ, nc->display);
nc->flags |= NI_ENCRYPTEDPW;
}
#else
if (nc->flags & NI_ENCRYPTEDPW)
fatal
("%s: load database: password for %s encrypted but encryption disabled, aborting",
s_NickServ, nc->display);
#endif
if (nc->flags & NI_SERVICES_ADMIN)
slist_add(&servadmins, nc);
+1 -38
View File
@@ -323,25 +323,7 @@ void load_old_ns_dbase(void)
SAFE(read_int16(&na->status, f));
na->status &= ~NS_TEMPORARY;
#ifdef USE_ENCRYPTION
if (!(na->status & (NS_OLD_ENCRYPTEDPW | NS_VERBOTEN))) {
if (debug)
alog("debug: %s: encrypting password for `%s' on load",
s_NickServ, na->nick);
if (encrypt_in_place(bufp, PASSMAX) < 0)
fatal("%s: Can't encrypt `%s' nickname password!",
s_NickServ, na->nick);
na->status |= NS_OLD_ENCRYPTEDPW;
}
#else
if (na->status & NS_OLD_ENCRYPTEDPW) {
/* Bail: it makes no sense to continue with encrypted
* passwords, since we won't be able to verify them */
fatal
("%s: load database: password for %s encrypted but encryption disabled, aborting",
s_NickServ, na->nick);
}
#endif
if (ver >= 9) {
SAFE(read_string(&forbidby, f));
SAFE(read_string(&forbidreason, f));
@@ -606,25 +588,6 @@ void load_ns_dbase(void)
SAFE(read_int32(&nc->flags, f));
if (!NSAllowKillImmed)
nc->flags &= ~NI_KILL_IMMED;
#ifdef USE_ENCRYPTION
if (nc->pass && !(nc->flags & NI_ENCRYPTEDPW)) {
if (debug)
alog("debug: %s: encrypting password for `%s' on load",
s_NickServ, nc->display);
if (encrypt_in_place(nc->pass, PASSMAX) < 0)
fatal("%s: Can't encrypt `%s' nickname password!",
s_NickServ, nc->display);
nc->flags |= NI_ENCRYPTEDPW;
}
#else
if (nc->flags & NI_ENCRYPTEDPW) {
/* Bail: it makes no sense to continue with encrypted
* passwords, since we won't be able to verify them */
fatal
("%s: load database: password for %s encrypted but encryption disabled, aborting",
s_NickServ, nc->display);
}
#endif
SAFE(read_int16(&nc->language, f));
/* Add services opers and admins to the appropriate list, but
+3 -2
View File
@@ -1300,9 +1300,10 @@ int anope_event_ping(char *source, int ac, char **av)
void bahamut_cmd_351(char *source)
{
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule, version_build);
}
void bahamut_cmd_bot_nick(char *nick, char *user, char *host, char *real,
+2 -2
View File
@@ -1521,8 +1521,8 @@ int anope_event_tmode(char *source, int ac, char **av)
void charybdis_cmd_351(char *source)
{
send_cmd((UseTS6 ? TS6SID : ServerName),
"351 %s Anope-%s %s :%s - %s -- %s", source, version_number,
ServerName, ircd->name, version_flags, version_build);
"351 %s Anope-%s %s :%s - %s (%s) -- %s", source, version_number,
ServerName, ircd->name, version_flags, EncModule, version_build);
}
/* Event: PROTOCTL */
+3 -2
View File
@@ -800,9 +800,10 @@ void dreamforge_cmd_serv_privmsg(char *source, char *dest, char *msg)
void dreamforge_cmd_351(char *source)
{
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule, version_build);
}
/* QUIT */
+2 -2
View File
@@ -1199,9 +1199,9 @@ int anope_event_mode(char *source, int ac, char **av)
void hybrid_cmd_351(char *source)
{
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule, version_build);
}
/* Event: PROTOCTL */
+2 -2
View File
@@ -786,9 +786,9 @@ void inspircd_cmd_bot_chan_mode(char *nick, char *chan)
void inspircd_cmd_351(char *source)
{
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule, version_build);
}
/* QUIT */
+2 -2
View File
@@ -1475,9 +1475,9 @@ anope_event_mode (char *source, int ac, char **av)
void
plexus_cmd_351 (char *source)
{
send_cmd (ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd (ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule, version_build);
}
/* Event: PROTOCTL */
+2 -2
View File
@@ -1432,9 +1432,9 @@ anope_event_mode (char *source, int ac, char **av)
void
plexus_cmd_351 (char *source)
{
send_cmd (ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd (ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule, version_build);
}
/* Event: PROTOCTL */
+4 -2
View File
@@ -1339,9 +1339,11 @@ void ptlink_cmd_bot_nick(char *nick, char *user, char *host, char *real,
void ptlink_cmd_351(char *source)
{
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule, version_build);
}
/* SVSHOLD - set */
+2 -2
View File
@@ -931,9 +931,9 @@ int anope_event_ping(char *source, int ac, char **av)
void rageircd_cmd_351(char *source)
{
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule, version_build);
}
void rageircd_cmd_mode(char *source, char *dest, char *buf)
+3 -2
View File
@@ -1498,8 +1498,9 @@ int anope_event_tmode(char *source, int ac, char **av)
void ratbox_cmd_351(char *source)
{
send_cmd((UseTS6 ? TS6SID : ServerName),
"351 %s Anope-%s %s :%s - %s -- %s", source, version_number,
ServerName, ircd->name, version_flags, version_build);
"351 %s Anope-%s %s :%s - %s (%s) -- %s", source, version_number,
ServerName, ircd->name, version_flags, EncModule, version_build);
}
/* Event: PROTOCTL */
+2 -2
View File
@@ -1471,9 +1471,9 @@ int anope_event_tmode(char *source, int ac, char **av)
void shadowircd_cmd_351(char *source)
{
send_cmd(TS6SID,
"351 %s Anope-%s %s :%s (ShadowProtocol %d) - %s -- %s",
"351 %s Anope-%s %s :%s (ShadowProtocol %d) - %s (%s) -- %s",
source, version_number, ServerName, ircd->name,
PROTOCOL_REVISION, version_flags, version_build);
PROTOCOL_REVISION, version_flags, EncModule, version_build);
}
/* Event: PROTOCTL */
+4 -2
View File
@@ -1325,9 +1325,11 @@ int anope_event_ping(char *source, int ac, char **av)
void solidircd_cmd_351(char *source)
{
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s (%s)-- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule, version_build);
}
void solidircd_cmd_bot_nick(char *nick, char *user, char *host, char *real,
+2 -2
View File
@@ -1308,9 +1308,9 @@ void ultimate2_cmd_nick(char *nick, char *name, char *mode)
void ultimate2_cmd_351(char *source)
{
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule, version_build);
}
/* QUIT */
+3 -2
View File
@@ -1154,9 +1154,10 @@ void ultimate3_cmd_bot_chan_mode(char *nick, char *chan)
void ultimate3_cmd_351(char *source)
{
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule,version_build);
}
/* QUIT */
+2 -2
View File
@@ -670,9 +670,9 @@ void unreal_cmd_bot_chan_mode(char *nick, char *chan)
void unreal_cmd_351(char *source)
{
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule, version_build);
}
/* QUIT */
+2 -2
View File
@@ -709,9 +709,9 @@ void unreal_cmd_bot_chan_mode(char *nick, char *chan)
void unreal_cmd_351(char *source)
{
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, myIrcd->name,
version_flags, version_build);
version_flags, EncModule, version_build);
}
/* QUIT */
+2 -2
View File
@@ -1317,9 +1317,9 @@ void viagra_cmd_211(char *buf)
void viagra_cmd_351(char *source)
{
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s -- %s",
send_cmd(ServerName, "351 %s Anope-%s %s :%s - %s (%s) -- %s",
source, version_number, ServerName, ircd->name, version_flags,
version_build);
EncModule, version_build);
}
void viagra_cmd_bot_nick(char *nick, char *user, char *host, char *real,
+6 -1
View File
@@ -9,10 +9,15 @@ VERSION_MAJOR="1"
VERSION_MINOR="7"
VERSION_PATCH="17"
VERSION_EXTRA="-svn"
VERSION_BUILD="1184"
VERSION_BUILD="1185"
# $Log$
#
# BUILD : 1.7.17 (1185)
# BUGS : N/A
# NOTES : Encryption now offers the choice of none, old and md5 - the md5 module is nicely taken from irc-services and actaully works, yes, real md5, in anope, wow eh?
#
#
# BUILD : 1.7.17 (1184)
# BUGS :
# NOTES : Development Framework