]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
samba-tool domain exportkeytab: Add support for -H to point to a different sam.ldb
authorAndrew Bartlett <abartlet@samba.org>
Tue, 19 Dec 2023 04:04:35 +0000 (17:04 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 14 Mar 2024 22:06:39 +0000 (22:06 +0000)
Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Jo Sutton <josutton@catalyst.net.nz>
python/samba/netcmd/domain/keytab.py
source4/libnet/py_net_dckeytab.c
source4/libnet/wscript_build

index b0955ca5dbcf3384ba0e568368194d1d1878ded7..84e5e78e4e3979e7fc5f275d33ff9959a0f71820 100644 (file)
@@ -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)
index 0c3df8958ab67a0d57d9864b6609f285d0579526..73a174d9f0d8f7bcb1951a1a321cad2e1d5933fe 100644 (file)
 #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();
index 0ec06f294967e4273cfe60b8200274ee83dd25da..5bd3b04c072c3918167e83bcfd08be32f202728b 100644 (file)
@@ -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')
         )