From a623359fb8a54083b81436d14b7ba022c11efb18 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 18 Sep 2013 14:27:26 -0700 Subject: python/drs: Ensure to pass in the local invocationID during the domain join This ensures (and asserts) that we never write an all-zero GUID as an invocationID to the database in replPropertyMetaData. Andrew Bartlett Signed-off-by: Andrew Bartlett Reviewed-by: Stefan Metzmacher --- source4/libnet/py_net.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'source4/libnet') diff --git a/source4/libnet/py_net.c b/source4/libnet/py_net.c index acb0a37759..7981aad022 100644 --- a/source4/libnet/py_net.c +++ b/source4/libnet/py_net.c @@ -22,6 +22,7 @@ #include #include "includes.h" #include +#include #include "libnet.h" #include "auth/credentials/pycredentials.h" #include "libcli/security/security.h" @@ -33,6 +34,7 @@ #include "libcli/finddc.h" #include "dsdb/samdb/samdb.h" #include "py_net.h" +#include "librpc/rpc/pyrpc_util.h" void initnet(void); @@ -363,16 +365,17 @@ struct replicate_state { */ static PyObject *py_net_replicate_init(py_net_Object *self, PyObject *args, PyObject *kwargs) { - const char *kwnames[] = { "samdb", "lp", "drspipe", NULL }; - PyObject *py_ldb, *py_lp, *py_drspipe; + const char *kwnames[] = { "samdb", "lp", "drspipe", "invocation_id", NULL }; + PyObject *py_ldb, *py_lp, *py_drspipe, *py_invocation_id; struct ldb_context *samdb; struct loadparm_context *lp; struct replicate_state *s; NTSTATUS status; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOO", + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOOO", discard_const_p(char *, kwnames), - &py_ldb, &py_lp, &py_drspipe)) { + &py_ldb, &py_lp, &py_drspipe, + &py_invocation_id)) { return NULL; } @@ -392,6 +395,12 @@ static PyObject *py_net_replicate_init(py_net_Object *self, PyObject *args, PyOb talloc_free(s); return NULL; } + if (!py_check_dcerpc_type(py_invocation_id, "samba.dcerpc.misc", "GUID")) { + + talloc_free(s); + return NULL; + } + s->dest_dsa.invocation_id = *pytalloc_get_type(py_invocation_id, struct GUID); s->drs_pipe = (dcerpc_InterfaceObject *)(py_drspipe); -- cgit