Change captcha.sh to not depend on bash (thanks to Konstantin Khomoutov)(EJAB-1105)

SVN Revision: 2749
This commit is contained in:
Badlop 2009-11-23 12:43:15 +00:00
parent 1716b090f9
commit 7fd3d67ff3
3 changed files with 65 additions and 30 deletions

View File

@ -351,7 +351,7 @@ GNU Make
</LI><LI CLASS="li-itemize">Erlang pgsql library. Optional. For PostgreSQL authentication or storage. See section <A HREF="#compilepgsql">3.2.3</A>.
</LI><LI CLASS="li-itemize">PAM library. Optional. For Pluggable Authentication Modules (PAM). See section <A HREF="#pam">3.1.4</A>.
</LI><LI CLASS="li-itemize">GNU Iconv 1.8 or higher, for the IRC Transport (mod_irc). Optional. Not needed on systems with GNU Libc. See section <A HREF="#modirc">3.3.8</A>.
</LI><LI CLASS="li-itemize">ImageMagick&#X2019;s Convert program, and Bash. Optional. For CAPTCHA challenges. See section <A HREF="#captcha">3.1.8</A>.
</LI><LI CLASS="li-itemize">ImageMagick&#X2019;s Convert program. Optional. For CAPTCHA challenges. See section <A HREF="#captcha">3.1.8</A>.
</LI><LI CLASS="li-itemize">exmpp 0.9.1 or higher. Optional. For import/export user data with <A HREF="http://xmpp.org/extensions/xep-0227.html">XEP-0227</A> XML files.
</LI></UL><P> <A NAME="download"></A> </P><!--TOC subsection Download Source Code-->
<H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc10">2.4.2</A>&#XA0;&#XA0;<A HREF="#download">Download Source Code</A></H3><!--SEC END --><P> <A NAME="download"></A>
@ -1243,7 +1243,7 @@ In order to take effect there must be a translation file
<H3 CLASS="subsection"><!--SEC ANCHOR --><A NAME="htoc29">3.1.8</A>&#XA0;&#XA0;<A HREF="#captcha">CAPTCHA</A></H3><!--SEC END --><P> <A NAME="captcha"></A>
</P><P>Some <TT>ejabberd</TT> modules can be configured to require a CAPTCHA challenge on certain actions.
If the client does not support CAPTCHA Forms (<A HREF="http://xmpp.org/extensions/xep-0158.html">XEP-0158</A>),
a web link is provided so the user can fill the challenge in a web browser.</P><P>An example Bash script is provided that generates the image
a web link is provided so the user can fill the challenge in a web browser.</P><P>An example script is provided that generates the image
using ImageMagick&#X2019;s Convert program.</P><P>The configurable options are:
</P><DL CLASS="description"><DT CLASS="dt-description">
<B><TT>{captcha_cmd, Path}</TT></B></DT><DD CLASS="dd-description">

View File

@ -315,7 +315,7 @@ To compile \ejabberd{} on a `Unix-like' operating system, you need:
\item Erlang pgsql library. Optional. For PostgreSQL authentication or storage. See section \ref{compilepgsql}.
\item PAM library. Optional. For Pluggable Authentication Modules (PAM). See section \ref{pam}.
\item GNU Iconv 1.8 or higher, for the IRC Transport (mod\_irc). Optional. Not needed on systems with GNU Libc. See section \ref{modirc}.
\item ImageMagick's Convert program, and Bash. Optional. For CAPTCHA challenges. See section \ref{captcha}.
\item ImageMagick's Convert program. Optional. For CAPTCHA challenges. See section \ref{captcha}.
\item exmpp 0.9.1 or higher. Optional. For import/export user data with \xepref{0227} XML files.
\end{itemize}
@ -1546,7 +1546,7 @@ Some \ejabberd{} modules can be configured to require a CAPTCHA challenge on cer
If the client does not support CAPTCHA Forms (\xepref{0158}),
a web link is provided so the user can fill the challenge in a web browser.
An example Bash script is provided that generates the image
An example script is provided that generates the image
using ImageMagick's Convert program.
The configurable options are:

View File

@ -1,35 +1,70 @@
#!/bin/bash
#!/bin/sh
INPUT=$1
WAVE1_AMPLITUDE=$((2 + $RANDOM % 5))
WAVE1_LENGTH=$((50 + $RANDOM % 25))
WAVE2_AMPLITUDE=$((2 + $RANDOM % 5))
WAVE2_LENGTH=$((50 + $RANDOM % 25))
WAVE3_AMPLITUDE=$((2 + $RANDOM % 5))
WAVE3_LENGTH=$((50 + $RANDOM % 25))
W1_LINE_START_Y=$((10 + $RANDOM % 40))
W1_LINE_STOP_Y=$((10 + $RANDOM % 40))
W2_LINE_START_Y=$((10 + $RANDOM % 40))
W2_LINE_STOP_Y=$((10 + $RANDOM % 40))
W3_LINE_START_Y=$((10 + $RANDOM % 40))
W3_LINE_STOP_Y=$((10 + $RANDOM % 40))
if test -n ${BASH_VERSION:-''} ; then
get_random ()
{
R=$RANDOM
}
else
for n in `od -A n -t u2 -N 48 /dev/urandom`; do RL="$RL$n "; done
get_random ()
{
R=${RL%% *}
RL=${RL#* }
}
fi
B1_LINE_START_Y=$(($RANDOM % 40))
B1_LINE_STOP_Y=$(($RANDOM % 40))
B2_LINE_START_Y=$(($RANDOM % 40))
B2_LINE_STOP_Y=$(($RANDOM % 40))
#B3_LINE_START_Y=$(($RANDOM % 40))
#B3_LINE_STOP_Y=$(($RANDOM % 40))
get_random
WAVE1_AMPLITUDE=$((2 + $R % 5))
get_random
WAVE1_LENGTH=$((50 + $R % 25))
get_random
WAVE2_AMPLITUDE=$((2 + $R % 5))
get_random
WAVE2_LENGTH=$((50 + $R % 25))
get_random
WAVE3_AMPLITUDE=$((2 + $R % 5))
get_random
WAVE3_LENGTH=$((50 + $R % 25))
get_random
W1_LINE_START_Y=$((10 + $R % 40))
get_random
W1_LINE_STOP_Y=$((10 + $R % 40))
get_random
W2_LINE_START_Y=$((10 + $R % 40))
get_random
W2_LINE_STOP_Y=$((10 + $R % 40))
get_random
W3_LINE_START_Y=$((10 + $R % 40))
get_random
W3_LINE_STOP_Y=$((10 + $R % 40))
B1_LINE_START_X=$(($RANDOM % 20))
B1_LINE_STOP_X=$((100 + $RANDOM % 40))
B2_LINE_START_X=$(($RANDOM % 20))
B2_LINE_STOP_X=$((100 + $RANDOM % 40))
#B3_LINE_START_X=$(($RANDOM % 20))
#B3_LINE_STOP_X=$((100 + $RANDOM % 40))
get_random
B1_LINE_START_Y=$(($R % 40))
get_random
B1_LINE_STOP_Y=$(($R % 40))
get_random
B2_LINE_START_Y=$(($R % 40))
get_random
B2_LINE_STOP_Y=$(($R % 40))
#B3_LINE_START_Y=$(($R % 40))
#B3_LINE_STOP_Y=$(($R % 40))
ROLL_X=$(($RANDOM % 40))
get_random
B1_LINE_START_X=$(($R % 20))
get_random
B1_LINE_STOP_X=$((100 + $R % 40))
get_random
B2_LINE_START_X=$(($R % 20))
get_random
B2_LINE_STOP_X=$((100 + $R % 40))
#B3_LINE_START_X=$(($R % 20))
#B3_LINE_STOP_X=$((100 + $R % 40))
get_random
ROLL_X=$(($R % 40))
convert -size 180x60 xc:none -pointsize 40 \
\( -clone 0 -fill white \