Python ldap macOS - ValueError:选项错误

时间:2017-04-10 16:25:31

标签: python django macos

我正在尝试在macOS Sierra上设置python-ldap。 当我尝试使用模块(在我在CentOS上运行的实时环境中工作) 我得到以下错误,在搜索时看起来与在macOS上安装OpenLDAP或python-ldap有关,但我还没有找到解释如何修复它的文章。

到目前为止,我已经通过自制软件安装了OpenLDAP,但尚未修复此问题:

错误:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 42, in inner
    response = get_response(request)
  File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
    response = self._get_response(request)
  File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/views.py", line 47, in inner
    return func(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/django/views/decorators/debug.py", line 76, in sensitive_post_parameters_wrapper
    return view(request, *args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/views.py", line 81, in login
    if form.is_valid():
  File "/usr/local/lib/python2.7/site-packages/django/forms/forms.py", line 169, in is_valid
    return self.is_bound and not self.errors
  File "/usr/local/lib/python2.7/site-packages/django/forms/forms.py", line 161, in errors
    self.full_clean()
  File "/usr/local/lib/python2.7/site-packages/django/forms/forms.py", line 371, in full_clean
    self._clean_form()
  File "/usr/local/lib/python2.7/site-packages/django/forms/forms.py", line 398, in _clean_form
    cleaned_data = self.clean()
  File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/forms.py", line 191, in clean
    self.user_cache = authenticate(username=username, password=password)
  File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 74, in authenticate
    user = backend.authenticate(**credentials)
  File "/itapp/itapp/backend.py", line 39, in authenticate
    ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,settings.AD_CERT_FILE)
  File "/usr/local/lib/python2.7/site-packages/ldap/functions.py", line 135, in set_option
    return _ldap_function_call(None,_ldap.set_option,option,invalue)
  File "/usr/local/lib/python2.7/site-packages/ldap/functions.py", line 66, in _ldap_function_call
    result = func(*args,**kwargs)
ValueError: option error 

我已按照以下

通过brew安装了openldap
alexs-mbp:~ alex$ brew install openldap
Warning: openldap is a keg-only and another version is linked to opt.
Use `brew install --force` if you want to install this version
alexs-mbp:~ alex$ brew install openldap --force
Warning: openldap-2.4.44 already installed, it's just not linked.

我已经用pip安装了python-ldap

alexs-mbp:~ alex$ sudo pip install python-ldap
The directory '/Users/alex/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/alex/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Requirement already satisfied: python-ldap in /usr/local/lib/python2.7/site-packages
Requirement already satisfied: setuptools in /usr/local/lib/python2.7/site-packages (from python-ldap

2 个答案:

答案 0 :(得分:4)

我的解决方案是在执行SELECT id FROM rating WHERE category IN (1) ORDER BY RAND() LIMIT 10 UNION ALL SELECT id FROM rating WHERE category IN (2) ORDER BY RAND() LIMIT 10 UNION ALL SELECT id FROM rating WHERE category IN (3) ORDER BY RAND() LIMIT 10 时需要包含基于brew的openldap库

您可以通过pip install python-ldap找到您需要的信息,其中包含以下内容:

brew info openldap

我的openldap安装位于For compilers to find this software you may need to set: LDFLAGS: -L/usr/local/brew/opt/openldap/lib CPPFLAGS: -I/usr/local/brew/opt/openldap/include 所以这需要一个命令,如:

/usr/local/brew/opt/openldap/

尝试卸载python-ldap(LDFLAGS="-L/usr/local/brew/opt/openldap/lib" CPPFLAGS="-I/usr/local/brew/opt/openldap/include" pip install python-ldap ),然后运行pip uninstall python-ldap并使用特定路径到openldap lib并在上面的命令中包含目录

注意:我的clang编译器也没有找到MacOS SDK sasl.h的问题,但我不知道这是不是我。通过将brew info openldap添加到上面的命令行

来解决这个问题

答案 1 :(得分:2)

我在macOS Sierra 10.12.4上使用MacPorts安装了python-ldap(版本2.3.10_3):

sudo port install py27-ldap

这也拉动了OpenLDAP依赖(版本2.4.44_2)。

我可以执行代码:

import ldap
ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,'cacert-2017-01-18.pem')

没有错误(来自https://curl.haxx.se/ca/cacert-2017-01-18.pem的CA证书文件)

您在安装OpenLDAP和python-ldap时遵循了哪些步骤?

编辑:

我想我找到something relevant,您可以使用我链接的证书文件尝试上面的测试代码吗?

我怀疑是一种权限/ .pem格式错误