Why do I get a failed to connect to LDAP URL when using Samba's Ldb Python module?

Rowland Penny repenny241155 at gmail.com
Sat Aug 15 21:32:45 UTC 2015


On 15/08/15 21:40, Richard Sharpe wrote:
> On Sat, Aug 15, 2015 at 10:33 AM, Richard Sharpe
> <realrichardsharpe at gmail.com> wrote:
>> On Fri, Aug 14, 2015 at 11:01 PM, Andrew Bartlett <abartlet at samba.org> wrote:
>>> On Fri, 2015-08-14 at 15:36 -0700, Richard Sharpe wrote:
>>>> On Fri, Aug 14, 2015 at 1:59 PM, Richard Sharpe
>>>> <realrichardsharpe at gmail.com> wrote:
>>>>> Hi folks,
>>>>>
>>>>> I just got this:
>>>>>
>>>>>     >>> from samba import Ldb
>>>>>     >>> ldb_obj =
>>>>> Ldb('ldap://drtnasdcprod01.xxxx.yyyy.eng.someorg.com',
>>>>> credentials=creds)
>>>>>     Failed to connect to ldap URL
>>>>> 'ldap://drtnasdcprod01.xxxx.yyyy.eng.someorg.com' - LDAP client
>>>>> internal error: NT_STATUS_BAD_NETWORK_NAME
>>>>>     Failed to connect to
>>>>> 'ldap://drtnasdcprod01.xxxx.yyyy.eng.someorg.com' with backend
>>>>> 'ldap':(null)
>>>>>     Traceback (most recent call last):
>>>>>       File "<stdin>", line 1, in <module>
>>>>>       File "/usr/lib64/python2.6/site-packages/samba/__init__.py",
>>>>> line
>>>>> 114, in __init__
>>>>>          self.connect(url, flags, options)
>>>>>     _ldb.LdbError: (1, None)
>>>>>
>>>>> It looked so easy ... but wasn't.
>>>>>
>>>>> What have I done wrong?
>>>> OK, I seem to have made some progress on this:
>>>>
>>>>     >>> from samba.credentials import DONT_USE_KERBEROS
>>>>     >>> creds = Credentials()
>>>>     >>> creds.set_kerberos_state(DONT_USE_KERBEROS)
>>>>     >>> creds.set_username('administrator')
>>>>     >>> creds.set_password("some-pass")
>>>>     >>> creds.set_forced_sasl_mech("EXTERNAL")
>>> You probably don't want this line.
>>>
>>>>     >>> ldb_obj = Ldb("ldap://10.4.45.1", credentials=creds)
>> Well, except that when I use the dns name I get NT_STATUS_BAD_NETWORK_NAME.
>>
>> Then I tried this:
>>
>>>>> from samba import param
>>>>> lp = param.LoadParm()
>>>>> lp.load('/dev/null')
>>>>> from samba.credentials import Credentials
>>>>> from samba import Ldb
>>>>> creds=Credentials()
>>>>> creds.set_username('administrator')
>> True
>>>>> creds.set_password('the-real-password')
>> True
>>>>> ldb_obj=Ldb('ldap://10.4.45.1', lp=lp, credentials=creds)
>> Segmentation fault
>>
>> Not very inspiring. I will try to figure out how to do it.
> OK, after some time with gdb I now have something that works:
>
>     from samba.credentials import Credentials
>     from samba import param
>     lp = param.LoadParm()
>     lp.load("/dev/null")
>     creds=Credentials()
>     creds.set_username('administrator')
>     creds.set_password('the-real-password')
>     creds.set_domain('WORKGROUP')
>     creds.set_workstation('RICHARD')
>     from samba import Ldb
>     ldb_obj=Ldb('ldap://10.4.45.1', lp=lp, credentials=creds)
>     res=ldb_obj.search(expression='cn=filer-srathi')
>     m = res[0]
>     print "SPNS:"
>     for name in m["servicePrincipalName"]:
>         print name
>     if 'computer' in m["objectClass"]:
>        print "Is a computer"
>
> This is nice. It would be even nicer if things like
> m["servicePrincipalName"] returned a list although I guess I can
> convert it to a list really easily.
>
>

er, now I accept that I am an idiot, but why are you trying to re-invent 
the wheel ? :-P

Have you thought of examining 'class cmd_spn_list(Command):' from spn.py 
(part of samba-tool) ?

Rowland




More information about the samba-technical mailing list