mirror of
https://github.com/nginx/nginx.git
synced 2024-11-21 16:28:40 +00:00
Internal md5 and sha1 implementations are now always used.
This reduces the number of moving parts in ABI compatibility checks. Additionally, it also allows to use OpenSSL in FIPS mode while still using md5 for non-security tasks.
This commit is contained in:
parent
fb6c764921
commit
c60b61a290
@ -12,4 +12,3 @@ CC_TEST_FLAGS="-Ae"
|
|||||||
|
|
||||||
PCRE_OPT="$PCRE_OPT -Ae"
|
PCRE_OPT="$PCRE_OPT -Ae"
|
||||||
ZLIB_OPT="$ZLIB_OPT -Ae"
|
ZLIB_OPT="$ZLIB_OPT -Ae"
|
||||||
MD5_OPT="$MD5_OPT -Ae"
|
|
||||||
|
@ -66,12 +66,6 @@ else
|
|||||||
PCRE_OPT="$PCRE_OPT -pipe"
|
PCRE_OPT="$PCRE_OPT -pipe"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ".$MD5_OPT" = "." ]; then
|
|
||||||
MD5_OPT="-O2 -pipe $CPU_OPT"
|
|
||||||
else
|
|
||||||
MD5_OPT="$MD5_OPT -pipe"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ".$ZLIB_OPT" = "." ]; then
|
if [ ".$ZLIB_OPT" = "." ]; then
|
||||||
ZLIB_OPT="-O2 -pipe $CPU_OPT"
|
ZLIB_OPT="-O2 -pipe $CPU_OPT"
|
||||||
else
|
else
|
||||||
|
@ -128,12 +128,6 @@ else
|
|||||||
PCRE_OPT="$PCRE_OPT $PIPE"
|
PCRE_OPT="$PCRE_OPT $PIPE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ".$MD5_OPT" = "." ]; then
|
|
||||||
MD5_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
|
|
||||||
else
|
|
||||||
MD5_OPT="$MD5_OPT $PIPE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ".$ZLIB_OPT" = "." ]; then
|
if [ ".$ZLIB_OPT" = "." ]; then
|
||||||
ZLIB_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
|
ZLIB_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
|
||||||
else
|
else
|
||||||
|
@ -43,10 +43,6 @@ if [ ".$PCRE_OPT" = "." ]; then
|
|||||||
PCRE_OPT="-O $CPU_OPT"
|
PCRE_OPT="-O $CPU_OPT"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ".$MD5_OPT" = "." ]; then
|
|
||||||
MD5_OPT="-O $CPU_OPT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ".$ZLIB_OPT" = "." ]; then
|
if [ ".$ZLIB_OPT" = "." ]; then
|
||||||
ZLIB_OPT="-O $CPU_OPT"
|
ZLIB_OPT="-O $CPU_OPT"
|
||||||
fi
|
fi
|
||||||
|
@ -145,10 +145,6 @@ if [ ".$PCRE_OPT" = "." ]; then
|
|||||||
PCRE_OPT="$ngx_fast $IPO $CPU_OPT"
|
PCRE_OPT="$ngx_fast $IPO $CPU_OPT"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ".$MD5_OPT" = "." ]; then
|
|
||||||
MD5_OPT="$ngx_fast $IPO $CPU_OPT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ".$ZLIB_OPT" = "." ]; then
|
if [ ".$ZLIB_OPT" = "." ]; then
|
||||||
ZLIB_OPT="$ngx_fast $IPO $CPU_OPT"
|
ZLIB_OPT="$ngx_fast $IPO $CPU_OPT"
|
||||||
fi
|
fi
|
||||||
|
@ -25,35 +25,6 @@ if [ $USE_OPENSSL = YES ]; then
|
|||||||
. auto/lib/openssl/conf
|
. auto/lib/openssl/conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $USE_MD5 = YES ]; then
|
|
||||||
|
|
||||||
if [ $USE_OPENSSL = YES ]; then
|
|
||||||
have=NGX_HAVE_OPENSSL_MD5_H . auto/have
|
|
||||||
have=NGX_OPENSSL_MD5 . auto/have
|
|
||||||
have=NGX_HAVE_MD5 . auto/have
|
|
||||||
MD5=YES
|
|
||||||
MD5_LIB=OpenSSL
|
|
||||||
|
|
||||||
else
|
|
||||||
. auto/lib/md5/conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $USE_SHA1 = YES ]; then
|
|
||||||
|
|
||||||
if [ $USE_OPENSSL = YES ]; then
|
|
||||||
have=NGX_HAVE_OPENSSL_SHA1_H . auto/have
|
|
||||||
have=NGX_HAVE_SHA1 . auto/have
|
|
||||||
SHA1=YES
|
|
||||||
SHA1_LIB=OpenSSL
|
|
||||||
|
|
||||||
else
|
|
||||||
. auto/lib/sha1/conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $USE_ZLIB = YES ]; then
|
if [ $USE_ZLIB = YES ]; then
|
||||||
. auto/lib/zlib/conf
|
. auto/lib/zlib/conf
|
||||||
fi
|
fi
|
||||||
|
@ -7,14 +7,6 @@ if [ $PCRE != NONE -a $PCRE != NO -a $PCRE != YES ]; then
|
|||||||
. auto/lib/pcre/make
|
. auto/lib/pcre/make
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $MD5 != NONE -a $MD5 != NO -a $MD5 != YES ]; then
|
|
||||||
. auto/lib/md5/make
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $SHA1 != NONE -a $SHA1 != NO -a $SHA1 != YES ]; then
|
|
||||||
. auto/lib/sha1/make
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $OPENSSL != NONE -a $OPENSSL != NO -a $OPENSSL != YES ]; then
|
if [ $OPENSSL != NONE -a $OPENSSL != NO -a $OPENSSL != YES ]; then
|
||||||
. auto/lib/openssl/make
|
. auto/lib/openssl/make
|
||||||
fi
|
fi
|
||||||
|
@ -1,103 +0,0 @@
|
|||||||
|
|
||||||
# Copyright (C) Igor Sysoev
|
|
||||||
# Copyright (C) Nginx, Inc.
|
|
||||||
|
|
||||||
|
|
||||||
if [ $MD5 != NONE ]; then
|
|
||||||
|
|
||||||
if grep MD5_Init $MD5/md5.h 2>&1 >/dev/null; then
|
|
||||||
# OpenSSL md5
|
|
||||||
OPENSSL_MD5=YES
|
|
||||||
have=NGX_HAVE_OPENSSL_MD5 . auto/have
|
|
||||||
have=NGX_OPENSSL_MD5 . auto/have
|
|
||||||
else
|
|
||||||
# rsaref md5
|
|
||||||
OPENSSL_MD5=NO
|
|
||||||
fi
|
|
||||||
|
|
||||||
have=NGX_HAVE_MD5 . auto/have
|
|
||||||
CORE_INCS="$CORE_INCS $MD5"
|
|
||||||
|
|
||||||
case "$NGX_CC_NAME" in
|
|
||||||
|
|
||||||
msvc | owc | bcc)
|
|
||||||
LINK_DEPS="$LINK_DEPS $MD5/md5.lib"
|
|
||||||
CORE_LIBS="$CORE_LIBS $MD5/md5.lib"
|
|
||||||
;;
|
|
||||||
|
|
||||||
icc)
|
|
||||||
LINK_DEPS="$LINK_DEPS $MD5/libmd5.a"
|
|
||||||
|
|
||||||
# to allow -ipo optimization we link with the *.o but not library
|
|
||||||
CORE_LIBS="$CORE_LIBS $MD5/md5_dgst.o"
|
|
||||||
|
|
||||||
if [ $MD5_ASM = YES ]; then
|
|
||||||
CORE_LIBS="$CORE_LIBS $MD5/asm/mx86-elf.o"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
LINK_DEPS="$LINK_DEPS $MD5/libmd5.a"
|
|
||||||
CORE_LIBS="$CORE_LIBS $MD5/libmd5.a"
|
|
||||||
#CORE_LIBS="$CORE_LIBS -L $MD5 -lmd5"
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
if [ "$NGX_PLATFORM" != win32 ]; then
|
|
||||||
|
|
||||||
MD5=NO
|
|
||||||
|
|
||||||
# FreeBSD, Solaris 10
|
|
||||||
|
|
||||||
ngx_feature="md5 in system md library"
|
|
||||||
ngx_feature_name=NGX_HAVE_MD5
|
|
||||||
ngx_feature_run=no
|
|
||||||
ngx_feature_incs="#include <md5.h>"
|
|
||||||
ngx_feature_path=
|
|
||||||
ngx_feature_libs="-lmd"
|
|
||||||
ngx_feature_test="MD5_CTX md5; MD5Init(&md5)"
|
|
||||||
. auto/feature
|
|
||||||
|
|
||||||
ngx_md5_lib="system md"
|
|
||||||
|
|
||||||
if [ $ngx_found = no ]; then
|
|
||||||
|
|
||||||
# Solaris 8/9
|
|
||||||
|
|
||||||
ngx_feature="md5 in system md5 library"
|
|
||||||
ngx_feature_libs="-lmd5"
|
|
||||||
. auto/feature
|
|
||||||
|
|
||||||
ngx_md5_lib="system md5"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $ngx_found = no ]; then
|
|
||||||
|
|
||||||
# OpenSSL crypto library
|
|
||||||
|
|
||||||
ngx_feature="md5 in system OpenSSL crypto library"
|
|
||||||
ngx_feature_name="NGX_OPENSSL_MD5"
|
|
||||||
ngx_feature_incs="#include <openssl/md5.h>"
|
|
||||||
ngx_feature_libs="-lcrypto"
|
|
||||||
ngx_feature_test="MD5_CTX md5; MD5_Init(&md5)"
|
|
||||||
. auto/feature
|
|
||||||
|
|
||||||
ngx_md5_lib="system crypto"
|
|
||||||
|
|
||||||
if [ $ngx_found = yes ]; then
|
|
||||||
have=NGX_HAVE_OPENSSL_MD5_H . auto/have
|
|
||||||
have=NGX_HAVE_MD5 . auto/have
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $ngx_found = yes ]; then
|
|
||||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
|
||||||
MD5=YES
|
|
||||||
MD5_LIB=$ngx_md5_lib
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
@ -1,96 +0,0 @@
|
|||||||
|
|
||||||
# Copyright (C) Igor Sysoev
|
|
||||||
# Copyright (C) Nginx, Inc.
|
|
||||||
|
|
||||||
|
|
||||||
case "$NGX_CC_NAME" in
|
|
||||||
|
|
||||||
msvc)
|
|
||||||
ngx_makefile=makefile.msvc
|
|
||||||
ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC MD5_ASM=$MD5_ASM"
|
|
||||||
ngx_md5="MD5=\"$MD5\""
|
|
||||||
;;
|
|
||||||
|
|
||||||
owc)
|
|
||||||
ngx_makefile=makefile.owc
|
|
||||||
ngx_opt="CPU_OPT=\"$CPU_OPT\""
|
|
||||||
ngx_md5=`echo MD5=\"$MD5\" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
|
||||||
;;
|
|
||||||
|
|
||||||
bcc)
|
|
||||||
ngx_makefile=makefile.bcc
|
|
||||||
ngx_opt="-DCPU_OPT=\"$CPU_OPT\" -DMD5_ASM=$MD5_ASM"
|
|
||||||
ngx_md5=`echo \-DMD5=\"$MD5\" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
done=NO
|
|
||||||
|
|
||||||
|
|
||||||
case "$NGX_PLATFORM" in
|
|
||||||
|
|
||||||
win32)
|
|
||||||
cat << END >> $NGX_MAKEFILE
|
|
||||||
|
|
||||||
`echo "$MD5/md5.lib: $NGX_MAKEFILE" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
|
||||||
\$(MAKE) -f auto/lib/md5/$ngx_makefile $ngx_opt $ngx_md5
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
||||||
done=YES
|
|
||||||
;;
|
|
||||||
|
|
||||||
SunOS:*:i86pc)
|
|
||||||
if [ $MD5_ASM = YES ]; then
|
|
||||||
|
|
||||||
cat << END >> $NGX_MAKEFILE
|
|
||||||
|
|
||||||
$MD5/libmd5.a: $NGX_MAKEFILE
|
|
||||||
cd $MD5 \\
|
|
||||||
&& \$(MAKE) CFLAGS="$MD5_OPT -DSOL -DMD5_ASM -DL_ENDIAN" \\
|
|
||||||
CC="\$(CC)" CPP="\$(CPP)" \\
|
|
||||||
MD5_ASM_OBJ=asm/mx86-sol.o clean libmd5.a
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
||||||
done=YES
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
# FreeBSD: i386
|
|
||||||
# Linux: i686
|
|
||||||
|
|
||||||
*:i386 | *:i686)
|
|
||||||
if [ $MD5_ASM = YES ]; then
|
|
||||||
|
|
||||||
cat << END >> $NGX_MAKEFILE
|
|
||||||
|
|
||||||
$MD5/libmd5.a: $NGX_MAKEFILE
|
|
||||||
cd $MD5 \\
|
|
||||||
&& \$(MAKE) CFLAGS="$MD5_OPT -DELF -DMD5_ASM -DL_ENDIAN" \\
|
|
||||||
CC="\$(CC)" CPP="\$(CPP)" \\
|
|
||||||
MD5_ASM_OBJ=asm/mx86-elf.o clean libmd5.a
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
||||||
done=YES
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
if [ $done = NO ]; then
|
|
||||||
|
|
||||||
cat << END >> $NGX_MAKEFILE
|
|
||||||
|
|
||||||
$MD5/libmd5.a: $NGX_MAKEFILE
|
|
||||||
cd $MD5 \\
|
|
||||||
&& \$(MAKE) CFLAGS="$MD5_OPT" \\
|
|
||||||
CC="\$(CC)" MD5_ASM_OBJ= clean libmd5.a
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
||||||
fi
|
|
@ -1,22 +0,0 @@
|
|||||||
|
|
||||||
# Copyright (C) Igor Sysoev
|
|
||||||
# Copyright (C) Nginx, Inc.
|
|
||||||
|
|
||||||
|
|
||||||
CFLAGS = -q -O2 -tWM $(CPU_OPT) -DL_ENDIAN
|
|
||||||
|
|
||||||
!if "$(MD5_ASM)" == "YES"
|
|
||||||
|
|
||||||
md5.lib:
|
|
||||||
cd $(MD5)
|
|
||||||
bcc32 -c $(CFLAGS) -DMD5_ASM md5_dgst.c
|
|
||||||
tlib md5.lib +md5_dgst.obj +"asm\m-win32.obj"
|
|
||||||
|
|
||||||
!else
|
|
||||||
|
|
||||||
md5.lib:
|
|
||||||
cd $(MD5)
|
|
||||||
bcc32 -c $(CFLAGS) md5_dgst.c
|
|
||||||
tlib md5.lib +md5_dgst.obj
|
|
||||||
|
|
||||||
!endif
|
|
@ -1,22 +0,0 @@
|
|||||||
|
|
||||||
# Copyright (C) Igor Sysoev
|
|
||||||
# Copyright (C) Nginx, Inc.
|
|
||||||
|
|
||||||
|
|
||||||
CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) -D L_ENDIAN
|
|
||||||
|
|
||||||
!IF "$(MD5_ASM)" == "YES"
|
|
||||||
|
|
||||||
md5.lib:
|
|
||||||
cd $(MD5)
|
|
||||||
cl -c $(CFLAGS) -D MD5_ASM md5_dgst.c
|
|
||||||
link -lib -out:md5.lib md5_dgst.obj asm/m-win32.obj
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
md5.lib:
|
|
||||||
cd $(MD5)
|
|
||||||
cl -c $(CFLAGS) md5_dgst.c
|
|
||||||
link -lib -out:md5.lib md5_dgst.obj
|
|
||||||
|
|
||||||
!ENDIF
|
|
@ -1,11 +0,0 @@
|
|||||||
|
|
||||||
# Copyright (C) Igor Sysoev
|
|
||||||
# Copyright (C) Nginx, Inc.
|
|
||||||
|
|
||||||
|
|
||||||
CFLAGS = -zq -bt=nt -bm -ot -op -oi -oe -s $(CPU_OPT)
|
|
||||||
|
|
||||||
md5.lib:
|
|
||||||
cd $(MD5)
|
|
||||||
wcl386 -c $(CFLAGS) -dL_ENDIAN md5_dgst.c
|
|
||||||
wlib -n md5.lib md5_dgst.obj
|
|
@ -1,79 +0,0 @@
|
|||||||
|
|
||||||
# Copyright (C) Igor Sysoev
|
|
||||||
# Copyright (C) Nginx, Inc.
|
|
||||||
|
|
||||||
|
|
||||||
if [ $SHA1 != NONE ]; then
|
|
||||||
|
|
||||||
have=NGX_HAVE_SHA1 . auto/have
|
|
||||||
CORE_INCS="$CORE_INCS $SHA1"
|
|
||||||
|
|
||||||
case "$NGX_CC_NAME" in
|
|
||||||
|
|
||||||
msvc | owc | bcc)
|
|
||||||
LINK_DEPS="$LINK_DEPS $SHA1/sha1.lib"
|
|
||||||
CORE_LIBS="$CORE_LIBS $SHA1/sha1.lib"
|
|
||||||
;;
|
|
||||||
|
|
||||||
icc)
|
|
||||||
LINK_DEPS="$LINK_DEPS $SHA1/libsha.a"
|
|
||||||
|
|
||||||
# to allow -ipo optimization we link with the *.o but not library
|
|
||||||
CORE_LIBS="$CORE_LIBS $SHA1/sha1_dgst.o"
|
|
||||||
|
|
||||||
if [ $SHA1_ASM = YES ]; then
|
|
||||||
CORE_LIBS="$CORE_LIBS $SHA1/asm/sx86-elf.o"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
LINK_DEPS="$LINK_DEPS $SHA1/libsha.a"
|
|
||||||
CORE_LIBS="$CORE_LIBS $SHA1/libsha.a"
|
|
||||||
#CORE_LIBS="$CORE_LIBS -L $SHA1 -lsha"
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
if [ "$NGX_PLATFORM" != win32 ]; then
|
|
||||||
|
|
||||||
SHA1=NO
|
|
||||||
|
|
||||||
# FreeBSD
|
|
||||||
|
|
||||||
ngx_feature="sha1 in system md library"
|
|
||||||
ngx_feature_name=NGX_HAVE_SHA1
|
|
||||||
ngx_feature_run=no
|
|
||||||
ngx_feature_incs="#include <sha.h>"
|
|
||||||
ngx_feature_path=
|
|
||||||
ngx_feature_libs="-lmd"
|
|
||||||
ngx_feature_test="SHA_CTX sha1; SHA1_Init(&sha1)"
|
|
||||||
. auto/feature
|
|
||||||
|
|
||||||
ngx_sha1_lib="system md"
|
|
||||||
|
|
||||||
if [ $ngx_found = no ]; then
|
|
||||||
|
|
||||||
# OpenSSL crypto library
|
|
||||||
|
|
||||||
ngx_feature="sha1 in system OpenSSL crypto library"
|
|
||||||
ngx_feature_incs="#include <openssl/sha.h>"
|
|
||||||
ngx_feature_libs="-lcrypto"
|
|
||||||
. auto/feature
|
|
||||||
|
|
||||||
ngx_sha1_lib="system crypto"
|
|
||||||
|
|
||||||
if [ $ngx_found = yes ]; then
|
|
||||||
have=NGX_HAVE_OPENSSL_SHA1_H . auto/have
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $ngx_found = yes ]; then
|
|
||||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
|
||||||
SHA1=YES
|
|
||||||
SHA1_LIB=$ngx_sha1_lib
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
@ -1,96 +0,0 @@
|
|||||||
|
|
||||||
# Copyright (C) Igor Sysoev
|
|
||||||
# Copyright (C) Nginx, Inc.
|
|
||||||
|
|
||||||
|
|
||||||
case "$NGX_CC_NAME" in
|
|
||||||
|
|
||||||
msvc)
|
|
||||||
ngx_makefile=makefile.msvc
|
|
||||||
ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC SHA1_ASM=$SHA1_ASM"
|
|
||||||
ngx_sha1="SHA1=\"$SHA1\""
|
|
||||||
;;
|
|
||||||
|
|
||||||
owc)
|
|
||||||
ngx_makefile=makefile.owc
|
|
||||||
ngx_opt="CPU_OPT=\"$CPU_OPT\""
|
|
||||||
ngx_sha1=`echo SHA1=\"$SHA1\" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
|
||||||
;;
|
|
||||||
|
|
||||||
bcc)
|
|
||||||
ngx_makefile=makefile.bcc
|
|
||||||
ngx_opt="-DCPU_OPT=\"$CPU_OPT\" -DSHA1_ASM=$SHA1_ASM"
|
|
||||||
ngx_sha1=`echo \-DSHA1=\"$SHA1\" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
done=NO
|
|
||||||
|
|
||||||
|
|
||||||
case "$NGX_PLATFORM" in
|
|
||||||
|
|
||||||
win32)
|
|
||||||
cat << END >> $NGX_MAKEFILE
|
|
||||||
|
|
||||||
`echo "$SHA1/sha1.lib: $NGX_MAKEFILE" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
|
||||||
\$(MAKE) -f auto/lib/sha1/$ngx_makefile $ngx_opt $ngx_sha1
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
||||||
done=YES
|
|
||||||
;;
|
|
||||||
|
|
||||||
SunOS:*:i86pc)
|
|
||||||
if [ $SHA1_ASM = YES ]; then
|
|
||||||
|
|
||||||
cat << END >> $NGX_MAKEFILE
|
|
||||||
|
|
||||||
$SHA1/libsha.a: $NGX_MAKEFILE
|
|
||||||
cd $SHA1 \\
|
|
||||||
&& \$(MAKE) CFLAGS="$SHA1_OPT -DSOL -DSHA1_ASM -DL_ENDIAN" \\
|
|
||||||
CC="\$(CC)" CPP="\$(CPP)" \\
|
|
||||||
SHA_ASM_OBJ=asm/sx86-sol.o clean libsha.a
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
||||||
done=YES
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
# FreeBSD: i386
|
|
||||||
# Linux: i686
|
|
||||||
|
|
||||||
*:i386 | *:i686)
|
|
||||||
if [ $SHA1_ASM = YES ]; then
|
|
||||||
|
|
||||||
cat << END >> $NGX_MAKEFILE
|
|
||||||
|
|
||||||
$SHA1/libsha.a: $NGX_MAKEFILE
|
|
||||||
cd $SHA1 \\
|
|
||||||
&& \$(MAKE) CFLAGS="$SHA1_OPT -DELF -DSHA1_ASM -DL_ENDIAN" \\
|
|
||||||
CC="\$(CC)" CPP="\$(CPP)" \\
|
|
||||||
SHA_ASM_OBJ=asm/sx86-elf.o clean libsha.a
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
||||||
done=YES
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
if [ $done = NO ]; then
|
|
||||||
|
|
||||||
cat << END >> $NGX_MAKEFILE
|
|
||||||
|
|
||||||
$SHA1/libsha.a: $NGX_MAKEFILE
|
|
||||||
cd $SHA1 \\
|
|
||||||
&& \$(MAKE) CFLAGS="$SHA1_OPT" \\
|
|
||||||
CC="\$(CC)" SHA_ASM_OBJ= clean libsha.a
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
||||||
fi
|
|
@ -1,22 +0,0 @@
|
|||||||
|
|
||||||
# Copyright (C) Igor Sysoev
|
|
||||||
# Copyright (C) Nginx, Inc.
|
|
||||||
|
|
||||||
|
|
||||||
CFLAGS = -q -O2 -tWM $(CPU_OPT) -DL_ENDIAN
|
|
||||||
|
|
||||||
!if "$(SHA1_ASM)" == "YES"
|
|
||||||
|
|
||||||
sha1.lib:
|
|
||||||
cd $(SHA1)
|
|
||||||
bcc32 -c $(CFLAGS) -DSHA1_ASM sha1dgst.c
|
|
||||||
tlib sha1.lib +sha1dgst.obj +"asm\s-win32.obj"
|
|
||||||
|
|
||||||
!else
|
|
||||||
|
|
||||||
sha1.lib:
|
|
||||||
cd $(SHA1)
|
|
||||||
bcc32 -c $(CFLAGS) sha1dgst.c
|
|
||||||
tlib sha1.lib +sha1dgst.obj
|
|
||||||
|
|
||||||
!endif
|
|
@ -1,22 +0,0 @@
|
|||||||
|
|
||||||
# Copyright (C) Igor Sysoev
|
|
||||||
# Copyright (C) Nginx, Inc.
|
|
||||||
|
|
||||||
|
|
||||||
CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) -D L_ENDIAN
|
|
||||||
|
|
||||||
!IF "$(SHA1_ASM)" == "YES"
|
|
||||||
|
|
||||||
sha1.lib:
|
|
||||||
cd $(SHA1)
|
|
||||||
cl -c $(CFLAGS) -D SHA1_ASM sha1dgst.c
|
|
||||||
link -lib -out:sha1.lib sha1dgst.obj asm/s-win32.obj
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
sha1.lib:
|
|
||||||
cd $(SHA1)
|
|
||||||
cl -c $(CFLAGS) sha1dgst.c
|
|
||||||
link -lib -out:sha1.lib sha1dgst.obj
|
|
||||||
|
|
||||||
!ENDIF
|
|
@ -1,11 +0,0 @@
|
|||||||
|
|
||||||
# Copyright (C) Igor Sysoev
|
|
||||||
# Copyright (C) Nginx, Inc.
|
|
||||||
|
|
||||||
|
|
||||||
CFLAGS = -zq -bt=nt -bm -ot -op -oi -oe -s $(CPU_OPT)
|
|
||||||
|
|
||||||
sha1.lib:
|
|
||||||
cd $(SHA1)
|
|
||||||
wcl386 -c $(CFLAGS) -dL_ENDIAN sha1dgst.c
|
|
||||||
wlib -n sha1.lib sha1dgst.obj
|
|
18
auto/module
18
auto/module
@ -48,10 +48,14 @@ if [ "$ngx_module_link" = DYNAMIC ]; then
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
PCRE | OPENSSL | MD5 | SHA1 | ZLIB)
|
PCRE | OPENSSL | ZLIB)
|
||||||
eval USE_${lib}=YES
|
eval USE_${lib}=YES
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
MD5 | SHA1)
|
||||||
|
# obsolete
|
||||||
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
libs="$libs $lib"
|
libs="$libs $lib"
|
||||||
;;
|
;;
|
||||||
@ -79,10 +83,14 @@ elif [ "$ngx_module_link" = YES ]; then
|
|||||||
do
|
do
|
||||||
case $lib in
|
case $lib in
|
||||||
|
|
||||||
PCRE | OPENSSL | MD5 | SHA1 | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP)
|
PCRE | OPENSSL | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP)
|
||||||
eval USE_${lib}=YES
|
eval USE_${lib}=YES
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
MD5 | SHA1)
|
||||||
|
# obsolete
|
||||||
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
CORE_LIBS="$CORE_LIBS $lib"
|
CORE_LIBS="$CORE_LIBS $lib"
|
||||||
;;
|
;;
|
||||||
@ -109,10 +117,14 @@ elif [ "$ngx_module_link" = ADDON ]; then
|
|||||||
do
|
do
|
||||||
case $lib in
|
case $lib in
|
||||||
|
|
||||||
PCRE | OPENSSL | MD5 | SHA1 | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP)
|
PCRE | OPENSSL | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP)
|
||||||
eval USE_${lib}=YES
|
eval USE_${lib}=YES
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
MD5 | SHA1)
|
||||||
|
# obsolete
|
||||||
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
CORE_LIBS="$CORE_LIBS $lib"
|
CORE_LIBS="$CORE_LIBS $lib"
|
||||||
;;
|
;;
|
||||||
|
@ -101,7 +101,6 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
if [ $HTTP_CACHE = YES ]; then
|
if [ $HTTP_CACHE = YES ]; then
|
||||||
USE_MD5=YES
|
|
||||||
have=NGX_HTTP_CACHE . auto/have
|
have=NGX_HTTP_CACHE . auto/have
|
||||||
HTTP_SRCS="$HTTP_SRCS $HTTP_FILE_CACHE_SRCS"
|
HTTP_SRCS="$HTTP_SRCS $HTTP_FILE_CACHE_SRCS"
|
||||||
fi
|
fi
|
||||||
@ -522,8 +521,6 @@ if [ $HTTP_AUTH_REQUEST = YES ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $HTTP_AUTH_BASIC = YES ]; then
|
if [ $HTTP_AUTH_BASIC = YES ]; then
|
||||||
USE_MD5=YES
|
|
||||||
USE_SHA1=YES
|
|
||||||
have=NGX_CRYPT . auto/have
|
have=NGX_CRYPT . auto/have
|
||||||
|
|
||||||
ngx_module_name=ngx_http_auth_basic_module
|
ngx_module_name=ngx_http_auth_basic_module
|
||||||
@ -682,7 +679,6 @@ fi
|
|||||||
|
|
||||||
if [ $HTTP_PROXY = YES ]; then
|
if [ $HTTP_PROXY = YES ]; then
|
||||||
have=NGX_HTTP_X_FORWARDED_FOR . auto/have
|
have=NGX_HTTP_X_FORWARDED_FOR . auto/have
|
||||||
#USE_MD5=YES
|
|
||||||
|
|
||||||
ngx_module_name=ngx_http_proxy_module
|
ngx_module_name=ngx_http_proxy_module
|
||||||
ngx_module_incs=
|
ngx_module_incs=
|
||||||
@ -772,8 +768,6 @@ if [ $HTTP_BROWSER = YES ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $HTTP_SECURE_LINK = YES ]; then
|
if [ $HTTP_SECURE_LINK = YES ]; then
|
||||||
USE_MD5=YES
|
|
||||||
|
|
||||||
ngx_module_name=ngx_http_secure_link_module
|
ngx_module_name=ngx_http_secure_link_module
|
||||||
ngx_module_incs=
|
ngx_module_incs=
|
||||||
ngx_module_deps=
|
ngx_module_deps=
|
||||||
|
48
auto/options
48
auto/options
@ -136,16 +136,6 @@ PCRE_JIT=NO
|
|||||||
USE_OPENSSL=NO
|
USE_OPENSSL=NO
|
||||||
OPENSSL=NONE
|
OPENSSL=NONE
|
||||||
|
|
||||||
USE_MD5=NO
|
|
||||||
MD5=NONE
|
|
||||||
MD5_OPT=
|
|
||||||
MD5_ASM=NO
|
|
||||||
|
|
||||||
USE_SHA1=NO
|
|
||||||
SHA1=NONE
|
|
||||||
SHA1_OPT=
|
|
||||||
SHA1_ASM=NO
|
|
||||||
|
|
||||||
USE_ZLIB=NO
|
USE_ZLIB=NO
|
||||||
ZLIB=NONE
|
ZLIB=NONE
|
||||||
ZLIB_OPT=
|
ZLIB_OPT=
|
||||||
@ -333,13 +323,31 @@ use the \"--with-mail_ssl_module\" option instead"
|
|||||||
--with-openssl=*) OPENSSL="$value" ;;
|
--with-openssl=*) OPENSSL="$value" ;;
|
||||||
--with-openssl-opt=*) OPENSSL_OPT="$value" ;;
|
--with-openssl-opt=*) OPENSSL_OPT="$value" ;;
|
||||||
|
|
||||||
--with-md5=*) MD5="$value" ;;
|
--with-md5=*)
|
||||||
--with-md5-opt=*) MD5_OPT="$value" ;;
|
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||||
--with-md5-asm) MD5_ASM=YES ;;
|
$0: warning: the \"--with-md5\" option is deprecated"
|
||||||
|
;;
|
||||||
|
--with-md5-opt=*)
|
||||||
|
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||||
|
$0: warning: the \"--with-md5-opt\" option is deprecated"
|
||||||
|
;;
|
||||||
|
--with-md5-asm)
|
||||||
|
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||||
|
$0: warning: the \"--with-md5-asm\" option is deprecated"
|
||||||
|
;;
|
||||||
|
|
||||||
--with-sha1=*) SHA1="$value" ;;
|
--with-sha1=*)
|
||||||
--with-sha1-opt=*) SHA1_OPT="$value" ;;
|
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||||
--with-sha1-asm) SHA1_ASM=YES ;;
|
$0: warning: the \"--with-sha1\" option is deprecated"
|
||||||
|
;;
|
||||||
|
--with-sha1-opt=*)
|
||||||
|
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||||
|
$0: warning: the \"--with-sha1-opt\" option is deprecated"
|
||||||
|
;;
|
||||||
|
--with-sha1-asm)
|
||||||
|
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||||
|
$0: warning: the \"--with-sha1-asm\" option is deprecated"
|
||||||
|
;;
|
||||||
|
|
||||||
--with-zlib=*) ZLIB="$value" ;;
|
--with-zlib=*) ZLIB="$value" ;;
|
||||||
--with-zlib-opt=*) ZLIB_OPT="$value" ;;
|
--with-zlib-opt=*) ZLIB_OPT="$value" ;;
|
||||||
@ -511,14 +519,6 @@ cat << END
|
|||||||
--with-pcre-opt=OPTIONS set additional build options for PCRE
|
--with-pcre-opt=OPTIONS set additional build options for PCRE
|
||||||
--with-pcre-jit build PCRE with JIT compilation support
|
--with-pcre-jit build PCRE with JIT compilation support
|
||||||
|
|
||||||
--with-md5=DIR set path to md5 library sources
|
|
||||||
--with-md5-opt=OPTIONS set additional build options for md5
|
|
||||||
--with-md5-asm use md5 assembler sources
|
|
||||||
|
|
||||||
--with-sha1=DIR set path to sha1 library sources
|
|
||||||
--with-sha1-opt=OPTIONS set additional build options for sha1
|
|
||||||
--with-sha1-asm use sha1 assembler sources
|
|
||||||
|
|
||||||
--with-zlib=DIR set path to zlib library sources
|
--with-zlib=DIR set path to zlib library sources
|
||||||
--with-zlib-opt=OPTIONS set additional build options for zlib
|
--with-zlib-opt=OPTIONS set additional build options for zlib
|
||||||
--with-zlib-asm=CPU use zlib assembler sources optimized
|
--with-zlib-asm=CPU use zlib assembler sources optimized
|
||||||
|
14
auto/summary
14
auto/summary
@ -28,20 +28,6 @@ case $OPENSSL in
|
|||||||
*) echo " + using OpenSSL library: $OPENSSL" ;;
|
*) echo " + using OpenSSL library: $OPENSSL" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
case $MD5 in
|
|
||||||
YES) echo " + md5: using $MD5_LIB library" ;;
|
|
||||||
NONE) echo " + md5 library is not used" ;;
|
|
||||||
NO) echo " + using builtin md5 code" ;;
|
|
||||||
*) echo " + using md5 library: $MD5" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case $SHA1 in
|
|
||||||
YES) echo " + sha1: using $SHA1_LIB library" ;;
|
|
||||||
NONE) echo " + sha1 library is not used" ;;
|
|
||||||
NO) echo " + sha1 library is not found" ;;
|
|
||||||
*) echo " + using sha1 library: $SHA1" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case $ZLIB in
|
case $ZLIB in
|
||||||
YES) echo " + using system zlib library" ;;
|
YES) echo " + using system zlib library" ;;
|
||||||
NONE) echo " + zlib library is not used" ;;
|
NONE) echo " + zlib library is not used" ;;
|
||||||
|
@ -3,8 +3,6 @@
|
|||||||
* An internal implementation, based on Alexander Peslyak's
|
* An internal implementation, based on Alexander Peslyak's
|
||||||
* public domain implementation:
|
* public domain implementation:
|
||||||
* http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
|
* http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
|
||||||
* It is not expected to be optimal and is used only
|
|
||||||
* if no MD5 implementation was found in system.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -13,8 +11,6 @@
|
|||||||
#include <ngx_md5.h>
|
#include <ngx_md5.h>
|
||||||
|
|
||||||
|
|
||||||
#if !(NGX_HAVE_MD5)
|
|
||||||
|
|
||||||
static const u_char *ngx_md5_body(ngx_md5_t *ctx, const u_char *data,
|
static const u_char *ngx_md5_body(ngx_md5_t *ctx, const u_char *data,
|
||||||
size_t size);
|
size_t size);
|
||||||
|
|
||||||
@ -285,5 +281,3 @@ ngx_md5_body(ngx_md5_t *ctx, const u_char *data, size_t size)
|
|||||||
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -13,36 +13,6 @@
|
|||||||
#include <ngx_core.h>
|
#include <ngx_core.h>
|
||||||
|
|
||||||
|
|
||||||
#if (NGX_HAVE_MD5)
|
|
||||||
|
|
||||||
#if (NGX_HAVE_OPENSSL_MD5_H)
|
|
||||||
#include <openssl/md5.h>
|
|
||||||
#else
|
|
||||||
#include <md5.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
typedef MD5_CTX ngx_md5_t;
|
|
||||||
|
|
||||||
|
|
||||||
#if (NGX_OPENSSL_MD5)
|
|
||||||
|
|
||||||
#define ngx_md5_init MD5_Init
|
|
||||||
#define ngx_md5_update MD5_Update
|
|
||||||
#define ngx_md5_final MD5_Final
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define ngx_md5_init MD5Init
|
|
||||||
#define ngx_md5_update MD5Update
|
|
||||||
#define ngx_md5_final MD5Final
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#else /* !NGX_HAVE_MD5 */
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint64_t bytes;
|
uint64_t bytes;
|
||||||
uint32_t a, b, c, d;
|
uint32_t a, b, c, d;
|
||||||
@ -55,6 +25,4 @@ void ngx_md5_update(ngx_md5_t *ctx, const void *data, size_t size);
|
|||||||
void ngx_md5_final(u_char result[16], ngx_md5_t *ctx);
|
void ngx_md5_final(u_char result[16], ngx_md5_t *ctx);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _NGX_MD5_H_INCLUDED_ */
|
#endif /* _NGX_MD5_H_INCLUDED_ */
|
||||||
|
@ -119,17 +119,8 @@
|
|||||||
#define NGX_MODULE_SIGNATURE_16 "0"
|
#define NGX_MODULE_SIGNATURE_16 "0"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (NGX_HAVE_MD5)
|
|
||||||
#define NGX_MODULE_SIGNATURE_17 "1"
|
|
||||||
#else
|
|
||||||
#define NGX_MODULE_SIGNATURE_17 "0"
|
#define NGX_MODULE_SIGNATURE_17 "0"
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (NGX_HAVE_SHA1)
|
|
||||||
#define NGX_MODULE_SIGNATURE_18 "1"
|
|
||||||
#else
|
|
||||||
#define NGX_MODULE_SIGNATURE_18 "0"
|
#define NGX_MODULE_SIGNATURE_18 "0"
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (NGX_HAVE_OPENAT)
|
#if (NGX_HAVE_OPENAT)
|
||||||
#define NGX_MODULE_SIGNATURE_19 "1"
|
#define NGX_MODULE_SIGNATURE_19 "1"
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
* Copyright (C) Nginx, Inc.
|
* Copyright (C) Nginx, Inc.
|
||||||
*
|
*
|
||||||
* An internal SHA1 implementation.
|
* An internal SHA1 implementation.
|
||||||
* It is not expected to be optimal and is used only
|
|
||||||
* if no SHA1 implementation was found in system.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -14,8 +12,6 @@
|
|||||||
#include <ngx_sha1.h>
|
#include <ngx_sha1.h>
|
||||||
|
|
||||||
|
|
||||||
#if !(NGX_HAVE_SHA1)
|
|
||||||
|
|
||||||
static const u_char *ngx_sha1_body(ngx_sha1_t *ctx, const u_char *data,
|
static const u_char *ngx_sha1_body(ngx_sha1_t *ctx, const u_char *data,
|
||||||
size_t size);
|
size_t size);
|
||||||
|
|
||||||
@ -296,5 +292,3 @@ ngx_sha1_body(ngx_sha1_t *ctx, const u_char *data, size_t size)
|
|||||||
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -13,26 +13,6 @@
|
|||||||
#include <ngx_core.h>
|
#include <ngx_core.h>
|
||||||
|
|
||||||
|
|
||||||
#if (NGX_HAVE_SHA1)
|
|
||||||
|
|
||||||
#if (NGX_HAVE_OPENSSL_SHA1_H)
|
|
||||||
#include <openssl/sha.h>
|
|
||||||
#else
|
|
||||||
#include <sha.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
typedef SHA_CTX ngx_sha1_t;
|
|
||||||
|
|
||||||
|
|
||||||
#define ngx_sha1_init SHA1_Init
|
|
||||||
#define ngx_sha1_update SHA1_Update
|
|
||||||
#define ngx_sha1_final SHA1_Final
|
|
||||||
|
|
||||||
|
|
||||||
#else /* !NGX_HAVE_SHA1 */
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint64_t bytes;
|
uint64_t bytes;
|
||||||
uint32_t a, b, c, d, e, f;
|
uint32_t a, b, c, d, e, f;
|
||||||
@ -45,6 +25,4 @@ void ngx_sha1_update(ngx_sha1_t *ctx, const void *data, size_t size);
|
|||||||
void ngx_sha1_final(u_char result[20], ngx_sha1_t *ctx);
|
void ngx_sha1_final(u_char result[20], ngx_sha1_t *ctx);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _NGX_SHA1_H_INCLUDED_ */
|
#endif /* _NGX_SHA1_H_INCLUDED_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user