diff options
-rw-r--r-- | doc/guide.html | 4 | ||||
-rw-r--r-- | doc/guide.tex | 4 | ||||
-rwxr-xr-x | tools/captcha.sh | 87 |
3 files changed, 65 insertions, 30 deletions
diff --git a/doc/guide.html b/doc/guide.html index 0b647aae9..38247d69e 100644 --- a/doc/guide.html +++ b/doc/guide.html @@ -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’s Convert program, and Bash. Optional. For CAPTCHA challenges. See section <A HREF="#captcha">3.1.8</A>. +</LI><LI CLASS="li-itemize">ImageMagick’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>  <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>  <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’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"> diff --git a/doc/guide.tex b/doc/guide.tex index 7e8143a75..32b8f622a 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -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: diff --git a/tools/captcha.sh b/tools/captcha.sh index d68edfa03..560a048ad 100755 --- a/tools/captcha.sh +++ b/tools/captcha.sh @@ -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 \ |