[WHATSNEW] Samba AD with MIT Kerberos + Version change

Rowland Penny rpenny at samba.org
Fri May 5 10:15:18 UTC 2017


On Fri, 05 May 2017 11:11:44 +0200
Daniele Dario <d.dario76 at gmail.com> wrote:

> 
> 
> 
> On gio, 2017-05-04 at 17:11 +0100, Rowland Penny via samba-technical
> wrote:
> > On Thu, 4 May 2017 17:49:14 +0200
> > "L.P.H. van Belle via samba-technical"
> > <samba-technical at lists.samba.org> wrote:
> > 
> > > Hai,
> > > 
> > > Now, prepair yourself im no coder.. but.. looks to me it imports
> > > only a directory Or sets it back to None. Im trying to read and
> > > follow the variables in the code. 
> > > 
> > > If i grep through the source and look for :
> > > samba.provision.kerberos
> > > 
> > 
> > I think the problem is here in
> > samba-master/python/samba/provision/kerberos.py:
> > 
> > def make_kdcconf(realm, domain, kdcconfdir, logdir):
> > 
> >     if _glue.is_heimdal_built:
> >         return
> > 
> > Which I changed to:
> > 
> >     if is_heimdal_built:
> >         return
> > 
> > The problem seems to be that 'is_heimdal_built' should be 'False'
> > and so shouldn't return, but it isn't, so it does return and
> > 'kdc.conf' doesn't get created. I commented the 'if' out and did
> > get 'kdc.conf' created, not that it helped, I still didn't get
> > anything listening on port 88.
> > 
> > I think the problem has something to do with whatever is setting
> > 'is_heimdal_built' to 'True', but I do not know what this is, or
> > indeed if it is the problem.
> > 
> > Rowland
> > 
> 
> Just curious but searching for "is_heimdal_built" in latest git tree I
> see:
> 
> find . -type f -print -follow | xargs grep -H -n -e 'is_heimdal_built'
> ./python/pyglue.c:155:static PyObject *py_is_heimdal_built(PyObject
> *self)
> ./python/pyglue.c:319:	{ "is_heimdal_built",
> (PyCFunction)py_is_heimdal_built, METH_NOARGS,
> ./python/samba/provision/kerberos.py:29:    if _glue.is_heimdal_built:
> ./python/samba/__init__.py:394:is_heimdal_built =
> _glue.is_heimdal_built ./python/samba/netcmd/domain.py:280:    if not
> samba.is_heimdal_built():
> 
> I'm not familiar with python so maybe this is not a problem but it
> looks like in kerberos.py and in __init__.py code checks for a pure
> variable and in domain.py checks the return value of a method.
> 
> As far as I understand, pyglue expose some methods and
> is_heimdal_built is a method that don't take arguments. Is it
> possible to refer to it as if it was a pure variable?
> 
> From a C perspective, I'd expect samba.is_heimdal_built to be the
> address of the method _glue.is_heimdal_built so it will have a value
> other than 0 and in an "if" statement I always expect to see it TRUE.
> 
> Instead, if I check _glue.is_heimdal_built() or
> samba.is_heimdal_built() I call the method exposed by pyglue/samba
> and check it's return value.
> 
> Just trying to learn something.
> 
> Daniele.
> 

Not sure, all I can say is that as written:

if _glue.is_heimdal_built:

Python didn't like it and threw an error ;-)

But when changed to:

if is_heimdal_built:

It worked, but because 'Heimdal' isn't built, 'is_heimdal_built' should
be False and the 'if' statement should be ignored, but it isn't being
ignored, so I suppose that 'is_heimdal_built' must be True.

I have moved on a bit, I have extracted kdc.conf from the python code
and created it manually, it now tries to start the kdc but fails with:

 krb5kdc: Unable to load requested database module 'samba': plugin
 symbol 'kdb_function_table' not found - while initializing database
 for realm TESTING.TLD

If I check samba.so for strings, 'kdb_function_table' is there.

Rowland




More information about the samba-technical mailing list