From: Andrew Bartlett Date: Tue, 19 Dec 2023 04:04:35 +0000 (+1300) Subject: samba-tool domain exportkeytab: Add support for -H to point to a different sam.ldb X-Git-Tag: tdb-1.4.11~1471 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9246ee480400d92a95d4b269971c8e0052730534;p=thirdparty%2Fsamba.git samba-tool domain exportkeytab: Add support for -H to point to a different sam.ldb Signed-off-by: Andrew Bartlett Reviewed-by: Jo Sutton --- diff --git a/python/samba/netcmd/domain/keytab.py b/python/samba/netcmd/domain/keytab.py index b0955ca5dbc..84e5e78e4e3 100644 --- a/python/samba/netcmd/domain/keytab.py +++ b/python/samba/netcmd/domain/keytab.py @@ -40,6 +40,7 @@ else: takes_optiongroups = { "sambaopts": options.SambaOptions, "credopts": options.CredentialsOptions, + "hostopts": options.HostOptions, "versionopts": options.VersionOptions, } @@ -49,7 +50,14 @@ else: takes_args = ["keytab"] - def run(self, keytab, credopts=None, sambaopts=None, versionopts=None, principal=None): + def run(self, + keytab, + credopts=None, + sambaopts=None, + versionopts=None, + hostopts=None, + principal=None): lp = sambaopts.get_loadparm() net = Net(None, lp) - net.export_keytab(keytab=keytab, principal=principal) + samdb = self.ldb_connect(hostopts, sambaopts, credopts) + net.export_keytab(samdb=samdb, keytab=keytab, principal=principal) diff --git a/source4/libnet/py_net_dckeytab.c b/source4/libnet/py_net_dckeytab.c index 0c3df8958ab..73a174d9f0d 100644 --- a/source4/libnet/py_net_dckeytab.c +++ b/source4/libnet/py_net_dckeytab.c @@ -26,23 +26,32 @@ #include "python/modules.h" #include "py_net.h" #include "libnet_export_keytab.h" +#include "pyldb.h" void initdckeytab(void); static PyObject *py_net_export_keytab(py_net_Object *self, PyObject *args, PyObject *kwargs) { struct libnet_export_keytab r; + PyObject *py_samdb = NULL; TALLOC_CTX *mem_ctx; - const char *kwnames[] = { "keytab", "principal", NULL }; + const char *kwnames[] = { "keytab", "samdb", "principal", NULL }; NTSTATUS status; r.in.principal = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|z:export_keytab", discard_const_p(char *, kwnames), + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|Oz:export_keytab", discard_const_p(char *, kwnames), &r.in.keytab_name, + &py_samdb, &r.in.principal)) { return NULL; } + if (py_samdb == NULL) { + r.in.samdb = NULL; + } else { + PyErr_LDB_OR_RAISE(py_samdb, r.in.samdb); + } + mem_ctx = talloc_new(self->mem_ctx); if (mem_ctx == NULL) { PyErr_NoMemory(); diff --git a/source4/libnet/wscript_build b/source4/libnet/wscript_build index 0ec06f29496..5bd3b04c072 100644 --- a/source4/libnet/wscript_build +++ b/source4/libnet/wscript_build @@ -2,6 +2,7 @@ pytalloc_util = bld.pyembed_libname('pytalloc-util') pyrpc_util = bld.pyembed_libname('pyrpc_util') +pyldb_util = bld.pyembed_libname('pyldb-util') provision = bld.pyembed_libname('PROVISION') name = bld.pyembed_libname('samba-net') auto_proto='libnet_proto.h' @@ -23,7 +24,7 @@ bld.SAMBA_PYTHON('python_net', bld.SAMBA_PYTHON('python_dckeytab', source='py_net_dckeytab.c libnet_export_keytab.c', - deps='%s db-glue krb5 com_err' % (pyrpc_util), + deps='%s %s db-glue krb5 com_err' % (pyrpc_util, pyldb_util), realname='samba/dckeytab.so', enabled=bld.CONFIG_SET('AD_DC_BUILD_IS_ENABLED') )