[Mailman-Users] Mailman-2.1.23 and reCAPTCHA

Mark Sapiro mark at msapiro.net
Mon Jun 5 20:18:09 EDT 2017


On 06/05/2017 10:43 AM, sp2l wrote:

> When I ran "pip install recaptcha-client"
> I got the following message:
> 
>   root at linux:# pip install recaptcha-client
>   Requirement already satisfied (use --upgrade to upgrade): recaptcha-client in /usr/lib/python2.7/dist-packages
>   Cleaning up...
>   root at linux:#
> 
> So, it appears that installing python-recaptcha,
> module recaptcha-client got installed too.
> 
> Therefore I startet to look at issue from a different point of view.
> 
> The error message was:
>   admin(4038):    from recaptcha.client import captcha
>   admin(4038):    ImportError: No module named recaptcha.client
> 
> Looking at the directory tree I noticed the following chain:
> /usr / share / pyshared / recaptcha / client
> 
> There _IS NEITHER_  recaptcha.client
> _NOR_  recaptcha-client  directory.


You need to understand how Python imports work. The recaptcha/client
directory contains both __init__.py and captcha.py. Thus the

from recaptcha.client import captcha

statement will import the captcha.py file from recaptcha/client/

This is all as it should be. If the import fails it is because
/usr/share/pyshared/ is not in Python's path. This is not too surprising
as it this would normally be installed in
/usr/local/lib/python2.7/dist-packages/ rather than /usr/share/pyshared/.


> In patch supplied by this article:
>   https://www.dragonsreach.it/2014/05/03/adding-recaptcha-support-to-mailman/
> 
> there are twice two lines:
> 
>   sys.path.append("/usr/share/pyshared")
>   from recaptcha.client import captcha
> 
> Changed them to read:
> 
>   sys.path.append("/usr/share/pyshared/recaptcha")
>   from client import captcha
> 
> This way achieved success to have at least
> properly displayed and working recaptcha box.


OK. That's an acceptable work-around. Possibly the issue is there is no
__init__.py file in the distributed recaptcha/ directory. Possibly just

touch /usr/share/pyshared/recaptcha/__init__.py

would also enable this.


> Checked mailman error log file and noticed the following:
> 
>   Jun 05 20:20:03 2017 admin(23429): @@@@@@@@@@@@@@@@@@@.
>   admin(23429): [----- Mailman Version: 2.1.23 -----].
>   admin(23429): [----- Traceback ------].
>   admin(23429): Traceback (most recent call last):
>   admin(23429):   File "/usr/local/mailman/scripts/driver", line 102, in run_main
>   admin(23429):     pkg = __import__('Mailman.Cgi', globals(), locals(), [scriptname])
>   admin(23429):   File "/usr/local/mailman/Mailman/Cgi/subscribe.py", line 149
>   admin(23429):     if email == mlist.GetListEmail():
>   admin(23429):                                                       ^
>   admin(23429): IndentationError: unindent does not match any outer indentation level


In the process of applying the patch and/or editing the file, you have
broken the formatting of /usr/local/mailman/Mailman/Cgi/subscribe.py

The patched code beginning around line 130 should look like

     remote = os.environ.get('REMOTE_HOST',
                             os.environ.get('REMOTE_ADDR',
                                            'unidentified origin'))

     # recaptcha
     captcha_response = captcha.submit(
         cgidata.getvalue('recaptcha_challenge_field', ""),
         cgidata.getvalue('recaptcha_response_field', ""),
         mm_cfg.RECAPTCHA_PRIVATE_KEY,
         remote,
         )
     if not captcha_response.is_valid:
         results.append(_('Invalid captcha'))

      # Was an attempt made to subscribe the list to itself?
      if email == mlist.GetListEmail():
          syslog('mischief', 'Attempt to self subscribe %s: %s', email,
remote)

The lines

     remote = os.environ.get('REMOTE_HOST',
     # recaptcha
     captcha_response = captcha.submit(
     if not captcha_response.is_valid:
     # Was an attempt made to subscribe the list to itself?
     if email == mlist.GetListEmail():

in the above MUST be indented exactly 4 spaces, no tabs

> At this point I am simply stucked...
> All suggestions, advices are very welcomed.
> 
> BTW, should recaptcha box be positioned
> at the bottom of browser window?


Questions such as this should be addressed to the author of the patch.
See <https://wiki.list.org/x/12812344>.

-- 
Mark Sapiro <mark at msapiro.net>        The highway is for gamblers,
San Francisco Bay Area, California    better use your sense - B. Dylan


More information about the Mailman-Users mailing list