[SCM] Samba Shared Repository - branch master updated

Andrew Tridgell tridge at samba.org
Fri Sep 17 03:01:53 MDT 2010


The branch, master has been updated
       via  90d685a s4-devel: developer script for adding DNS entries via netlogon RPC
       via  fb81cc0 s4-pyrpc: allow python to access irpc interfaces
       via  1c7c1a8 idl: build python interfaces for winbind and idmap IDL
       via  39bd61e s4-winbind Add a proxy method to update DNS records with a read-write DC
      from  b772f4c testprogs: skip two tests in spoolss tester.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 90d685afe57e08ce7da575783c4d279e1be021f6
Author: Andrew Tridgell <tridge at samba.org>
Date:   Fri Sep 17 17:06:29 2010 +1000

    s4-devel: developer script for adding DNS entries via netlogon RPC
    
    this calls the netlogon DsrUpdateReadOnlyServerDnsRecords call to add
    DNS entries for a RODC via RPC calls. The call is routed via a IRPC
    call to winbind, as winbind is the one with the schannel credential
    chaining setup.
    
    Pair-Programmed-With: Andrew Bartlett <abartlet at samba.org>

commit fb81cc080d40844010daae559e6be6a747c10ecd
Author: Andrew Tridgell <tridge at samba.org>
Date:   Fri Sep 17 17:04:28 2010 +1000

    s4-pyrpc: allow python to access irpc interfaces
    
    Pair-Programmed-With: Andrew Bartlett <abartlet at samba.org>

commit 1c7c1a86ecf401f54b9462bb9d0946356ddb688d
Author: Andrew Tridgell <tridge at samba.org>
Date:   Fri Sep 17 17:03:54 2010 +1000

    idl: build python interfaces for winbind and idmap IDL
    
    Pair-Programmed-With: Andrew Bartlett <abartlet at samba.org>

commit 39bd61e018d8495f9a7368d1656c6f52d422e6e3
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Fri Sep 17 10:11:48 2010 +1000

    s4-winbind Add a proxy method to update DNS records with a read-write DC
    
    This must be done in winbindd as it already has the schannel connection
    and the credential chain.  If we re-established that elsewhere, we
    would break the chain in winbindd.
    
    Andrew Bartlett
    
    Signed-Off-By: Andrew Tridgell <tridge at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 librpc/idl/netlogon.idl                            |    2 +-
 librpc/idl/wscript_build                           |    7 +-
 source4/librpc/idl/winbind.idl                     |    5 +
 source4/librpc/rpc/pyrpc.h                         |   10 ++
 source4/librpc/rpc/pyrpc_util.c                    |   53 ++++++++--
 source4/librpc/wscript_build                       |   12 +++
 source4/scripting/devel/rodcdns                    |   43 ++++++++
 source4/winbind/wb_irpc.c                          |   50 ++++++++++
 source4/winbind/wb_server.h                        |    1 +
 .../{wb_sam_logon.c => wb_update_rodc_dns.c}       |  102 +++++++++-----------
 source4/winbind/wscript_build                      |    2 +-
 11 files changed, 219 insertions(+), 68 deletions(-)
 create mode 100755 source4/scripting/devel/rodcdns
 copy source4/winbind/{wb_sam_logon.c => wb_update_rodc_dns.c} (57%)


Changeset truncated at 500 lines:

diff --git a/librpc/idl/netlogon.idl b/librpc/idl/netlogon.idl
index 62d2af5..1685cf9 100644
--- a/librpc/idl/netlogon.idl
+++ b/librpc/idl/netlogon.idl
@@ -1715,7 +1715,7 @@ interface netlogon
 		uint32 status;
 	} NL_DNS_NAME_INFO;
 
-	typedef struct {
+	typedef [public] struct {
 		uint32 count;
 		[size_is(count)] NL_DNS_NAME_INFO *names;
 	} NL_DNS_NAME_INFO_ARRAY;
diff --git a/librpc/idl/wscript_build b/librpc/idl/wscript_build
index e8723ce..b8d11ba 100644
--- a/librpc/idl/wscript_build
+++ b/librpc/idl/wscript_build
@@ -20,6 +20,11 @@ bld.SAMBA_PIDL_LIST('PIDL',
                     output_dir='../gen_ndr')
 
 bld.SAMBA_PIDL_LIST('PIDL',
-                    'rap.idl idmap.idl dnsp.idl ntprinting.idl',
+                    'idmap.idl',
+                    options='--header --ndr-parser --client --python',
+                    output_dir='../gen_ndr')
+
+bld.SAMBA_PIDL_LIST('PIDL',
+                    'rap.idl dnsp.idl ntprinting.idl',
                     options='--header --ndr-parser',
                     output_dir='../gen_ndr')
diff --git a/source4/librpc/idl/winbind.idl b/source4/librpc/idl/winbind.idl
index 849b816..f9bccb8 100644
--- a/source4/librpc/idl/winbind.idl
+++ b/source4/librpc/idl/winbind.idl
@@ -47,4 +47,9 @@ interface winbind
 		[in,out] [size_is(count)] id_map ids[]
 	);
 
+	NTSTATUS winbind_DsrUpdateReadOnlyServerDnsRecords(
+		[in,unique] [string,charset(UTF16)] uint16 *site_name,
+		[in] uint32 dns_ttl,
+		[in,out,ref] NL_DNS_NAME_INFO_ARRAY *dns_names
+		);
 }
diff --git a/source4/librpc/rpc/pyrpc.h b/source4/librpc/rpc/pyrpc.h
index fb5f35f..651f8f1 100644
--- a/source4/librpc/rpc/pyrpc.h
+++ b/source4/librpc/rpc/pyrpc.h
@@ -42,4 +42,14 @@ typedef struct {
 	struct dcerpc_binding_handle *binding_handle;
 } dcerpc_InterfaceObject;
 
+
+/*
+  these prototypes should be generated by the python pidl backend, but
+  aren't yet. They are needed when one module that has python access
+  is accessed by another module
+ */
+union netr_LogonLevel *py_export_netr_LogonLevel(TALLOC_CTX *mem_ctx, int level, PyObject *in);
+union netr_Validation;
+PyObject *py_import_netr_Validation(TALLOC_CTX *mem_ctx, int level, union netr_Validation *in);
+
 #endif /* _PYRPC_H_ */
diff --git a/source4/librpc/rpc/pyrpc_util.c b/source4/librpc/rpc/pyrpc_util.c
index f3911ee..ba42c08 100644
--- a/source4/librpc/rpc/pyrpc_util.c
+++ b/source4/librpc/rpc/pyrpc_util.c
@@ -28,6 +28,8 @@
 #include "param/pyparam.h"
 #include "auth/credentials/pycredentials.h"
 #include "lib/events/events.h"
+#include "lib/messaging/messaging.h"
+#include "lib/messaging/irpc.h"
 
 #ifndef Py_TYPE /* Py_TYPE is only available on Python > 2.6 */
 #define Py_TYPE(ob)             (((PyObject*)(ob))->ob_type)
@@ -65,7 +67,31 @@ bool py_check_dcerpc_type(PyObject *obj, const char *module, const char *typenam
 	return ret;
 }
 
-PyObject *py_dcerpc_interface_init_helper(PyTypeObject *type, PyObject *args, PyObject *kwargs, const struct ndr_interface_table *table)
+/*
+  connect to a IRPC pipe from python
+ */
+static NTSTATUS pyrpc_irpc_connect(TALLOC_CTX *mem_ctx, const char *irpc_server,
+				   const struct ndr_interface_table *table,
+				   struct tevent_context *event_ctx,
+				   struct loadparm_context *lp_ctx,
+				   struct dcerpc_binding_handle **binding_handle)
+{
+	struct messaging_context *msg;
+
+	msg = messaging_client_init(mem_ctx, lpcfg_messaging_path(mem_ctx, lp_ctx), event_ctx);
+	NT_STATUS_HAVE_NO_MEMORY(msg);
+
+	*binding_handle = irpc_binding_handle_by_name(mem_ctx, msg, irpc_server, table);
+	if (*binding_handle == NULL) {
+		talloc_free(msg);
+		return NT_STATUS_INVALID_PIPE_STATE;
+	}
+
+	return NT_STATUS_OK;
+}
+
+PyObject *py_dcerpc_interface_init_helper(PyTypeObject *type, PyObject *args, PyObject *kwargs,
+					  const struct ndr_interface_table *table)
 {
 	dcerpc_InterfaceObject *ret;
 	const char *binding_string;
@@ -103,18 +129,17 @@ PyObject *py_dcerpc_interface_init_helper(PyTypeObject *type, PyObject *args, Py
 		talloc_free(mem_ctx);
 		return NULL;
 	}
-	credentials = cli_credentials_from_py_object(py_credentials);
-	if (credentials == NULL) {
-		PyErr_SetString(PyExc_TypeError, "Expected credentials");
-		talloc_free(mem_ctx);
-		return NULL;
-	}
+
 	ret = PyObject_New(dcerpc_InterfaceObject, type);
 	ret->mem_ctx = mem_ctx;
 
 	event_ctx = s4_event_context_init(ret->mem_ctx);
 
-	if (py_basis != Py_None) {
+	if (strncmp(binding_string, "irpc:", 5) == 0) {
+		ret->pipe = NULL;
+		status = pyrpc_irpc_connect(ret->mem_ctx, binding_string+5, table,
+					    event_ctx, lp_ctx, &ret->binding_handle);
+	} else if (py_basis != Py_None) {
 		struct dcerpc_pipe *base_pipe;
 		PyObject *py_base;
 		PyTypeObject *ClientConnection_Type;
@@ -144,6 +169,12 @@ PyObject *py_dcerpc_interface_init_helper(PyTypeObject *type, PyObject *args, Py
 
 		ret->pipe = talloc_steal(ret->mem_ctx, ret->pipe);
 	} else {
+		credentials = cli_credentials_from_py_object(py_credentials);
+		if (credentials == NULL) {
+			PyErr_SetString(PyExc_TypeError, "Expected credentials");
+			talloc_free(mem_ctx);
+			return NULL;
+		}
 		status = dcerpc_pipe_connect(event_ctx, &ret->pipe, binding_string,
 		             table, credentials, event_ctx, lp_ctx);
 	}
@@ -153,8 +184,10 @@ PyObject *py_dcerpc_interface_init_helper(PyTypeObject *type, PyObject *args, Py
 		return NULL;
 	}
 
-	ret->pipe->conn->flags |= DCERPC_NDR_REF_ALLOC;
-	ret->binding_handle = ret->pipe->binding_handle;
+	if (ret->pipe) {
+		ret->pipe->conn->flags |= DCERPC_NDR_REF_ALLOC;
+		ret->binding_handle = ret->pipe->binding_handle;
+	}
 	return (PyObject *)ret;
 }
 
diff --git a/source4/librpc/wscript_build b/source4/librpc/wscript_build
index 06bd8a7..65e8260 100755
--- a/source4/librpc/wscript_build
+++ b/source4/librpc/wscript_build
@@ -764,6 +764,18 @@ bld.SAMBA_PYTHON('python_irpc',
 	realname='samba/dcerpc/irpc.so'
 	)
 
+bld.SAMBA_PYTHON('python_winbind',
+	source='gen_ndr/py_winbind.c',
+	deps='RPC_NDR_WINBIND PYTALLOC pyrpc_util python_netlogon',
+	realname='samba/dcerpc/winbind.so'
+	)
+
+bld.SAMBA_PYTHON('python_idmap',
+	source='../../librpc/gen_ndr/py_idmap.c',
+	deps='NDR_IDMAP PYTALLOC pyrpc_util',
+	realname='samba/dcerpc/idmap.so'
+	)
+
 
 bld.SAMBA_PYTHON('python_drsuapi',
 	source='../../librpc/gen_ndr/py_drsuapi.c',
diff --git a/source4/scripting/devel/rodcdns b/source4/scripting/devel/rodcdns
new file mode 100755
index 0000000..bd24342
--- /dev/null
+++ b/source4/scripting/devel/rodcdns
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+
+# script to call a netlogon RODC DNS update
+
+import sys
+from optparse import OptionParser
+
+sys.path.insert(0, "bin/python")
+
+import samba
+import samba.getopt as options
+from samba.dcerpc import netlogon, winbind
+
+########### main code ###########
+if __name__ == "__main__":
+    parser = OptionParser("rodcdns [options]")
+    sambaopts = options.SambaOptions(parser)
+
+    parser.add_option("", "--weight", dest="weight", help="record weight", default=0, type='int')
+    parser.add_option("", "--priority", dest="priority", help="record priority", default=100, type='int')
+    parser.add_option("", "--port", dest="port", help="port number", default=389, type='int')
+    parser.add_option("", "--type", dest="type", help="record type", default=netlogon.NlDnsLdapAtSite, type='int')
+    parser.add_option("", "--site", dest="site", help="site name", default="Default-First-Site-Name")
+
+    (opts, args) = parser.parse_args()
+
+    lp = sambaopts.get_loadparm()
+
+    w = winbind.winbind("irpc:winbind_server", lp)
+
+    dns_names = netlogon.NL_DNS_NAME_INFO_ARRAY()
+    dns_names.count = 1
+    name = netlogon.NL_DNS_NAME_INFO()
+    name.type = opts.type
+    name.priority = opts.priority
+    name.weight   = opts.weight
+    name.port = opts.port
+    name.dns_register = True
+    dns_names.names = [ name ]
+    site_name = opts.site.decode('utf-8')
+
+    ret_names = w.DsrUpdateReadOnlyServerDnsRecords(site_name, 600, dns_names)
+    print("Status: %u" % ret_names.names[0].status)
diff --git a/source4/winbind/wb_irpc.c b/source4/winbind/wb_irpc.c
index bfb31e6..1eed89f 100644
--- a/source4/winbind/wb_irpc.c
+++ b/source4/winbind/wb_irpc.c
@@ -71,6 +71,52 @@ static void wb_irpc_SamLogon_callback(struct composite_context *ctx)
 	irpc_send_reply(s->msg, status);
 }
 
+struct wb_irpc_DsrUpdateReadOnlyServerDnsRecords_state {
+	struct irpc_message *msg;
+	struct winbind_DsrUpdateReadOnlyServerDnsRecords *req;
+};
+
+static void wb_irpc_DsrUpdateReadOnlyServerDnsRecords_callback(struct composite_context *ctx);
+
+static NTSTATUS wb_irpc_DsrUpdateReadOnlyServerDnsRecords(struct irpc_message *msg,
+				 struct winbind_DsrUpdateReadOnlyServerDnsRecords *req)
+{
+	struct wbsrv_service *service = talloc_get_type(msg->private_data,
+					struct wbsrv_service);
+	struct wb_irpc_DsrUpdateReadOnlyServerDnsRecords_state *s;
+	struct composite_context *ctx;
+
+	DEBUG(5, ("wb_irpc_DsrUpdateReadOnlyServerDnsRecords called\n"));
+
+	s = talloc(msg, struct wb_irpc_DsrUpdateReadOnlyServerDnsRecords_state);
+	NT_STATUS_HAVE_NO_MEMORY(s);
+
+	s->msg = msg;
+	s->req = req;
+
+	ctx = wb_update_rodc_dns_send(msg, service, req);
+	NT_STATUS_HAVE_NO_MEMORY(ctx);
+
+	ctx->async.fn = wb_irpc_DsrUpdateReadOnlyServerDnsRecords_callback;
+	ctx->async.private_data = s;
+
+	msg->defer_reply = true;
+	return NT_STATUS_OK;
+}
+
+static void wb_irpc_DsrUpdateReadOnlyServerDnsRecords_callback(struct composite_context *ctx)
+{
+	struct wb_irpc_DsrUpdateReadOnlyServerDnsRecords_state *s = talloc_get_type(ctx->async.private_data,
+					   struct wb_irpc_DsrUpdateReadOnlyServerDnsRecords_state);
+	NTSTATUS status;
+
+	DEBUG(5, ("wb_irpc_DsrUpdateReadOnlyServerDnsRecords_callback called\n"));
+
+	status = wb_update_rodc_dns_recv(ctx, s, s->req);
+
+	irpc_send_reply(s->msg, status);
+}
+
 struct wb_irpc_get_idmap_state {
 	struct irpc_message *msg;
 	struct winbind_get_idmap *req;
@@ -149,6 +195,10 @@ NTSTATUS wbsrv_init_irpc(struct wbsrv_service *service)
 			       wb_irpc_SamLogon, service);
 	NT_STATUS_NOT_OK_RETURN(status);
 
+	status = IRPC_REGISTER(service->task->msg_ctx, winbind, WINBIND_DSRUPDATEREADONLYSERVERDNSRECORDS,
+			       wb_irpc_DsrUpdateReadOnlyServerDnsRecords, service);
+	NT_STATUS_NOT_OK_RETURN(status);
+
 	status = IRPC_REGISTER(service->task->msg_ctx, winbind, WINBIND_GET_IDMAP,
 			       wb_irpc_get_idmap, service);
 	NT_STATUS_NOT_OK_RETURN(status);
diff --git a/source4/winbind/wb_server.h b/source4/winbind/wb_server.h
index ddb77d0..f20bc0a 100644
--- a/source4/winbind/wb_server.h
+++ b/source4/winbind/wb_server.h
@@ -176,6 +176,7 @@ struct wbsrv_samba3_call {
 struct netr_LMSessionKey;
 struct netr_UserSessionKey;
 struct winbind_SamLogon;
+struct winbind_DsrUpdateReadOnlyServerDnsRecords;
 
 #include "winbind/wb_async_helpers.h"
 #include "winbind/wb_proto.h"
diff --git a/source4/winbind/wb_sam_logon.c b/source4/winbind/wb_update_rodc_dns.c
similarity index 57%
copy from source4/winbind/wb_sam_logon.c
copy to source4/winbind/wb_update_rodc_dns.c
index 028871a..5ad2d0c 100644
--- a/source4/winbind/wb_sam_logon.c
+++ b/source4/winbind/wb_update_rodc_dns.c
@@ -1,22 +1,27 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
-   Do a netr_LogonSamLogon to a remote DC
+   Do a netr_DsrUpdateReadOnlyServerDnsRecords to a remote DC
+
+   Copyright (C) Andrew Bartlett 2010
+   Copyright (C) Andrew Tridgell 2010
+
+   based heavily on wb_sam_logon.c which is copyright:
 
    Copyright (C) Volker Lendecke 2005
-   Copyright (C) Andrew Bartlett <abartlet at samba.org> 2005
+   Copyright (C) Andrew Bartlett 2005
    Copyright (C) Stefan Metzmacher 2006
-   
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -30,35 +35,35 @@
 #include "librpc/gen_ndr/ndr_netlogon_c.h"
 #include "librpc/gen_ndr/winbind.h"
 
-struct wb_sam_logon_state {
+struct wb_update_rodc_dns_state {
 	struct composite_context *ctx;
 
-	struct winbind_SamLogon *req;
+	struct winbind_DsrUpdateReadOnlyServerDnsRecords *req;
 
         struct netlogon_creds_CredentialState *creds_state;
         struct netr_Authenticator auth1, auth2;
 
 	TALLOC_CTX *r_mem_ctx;
-        struct netr_LogonSamLogon r;
+        struct netr_DsrUpdateReadOnlyServerDnsRecords r;
 };
 
-static void wb_sam_logon_recv_domain(struct composite_context *ctx);
-static void wb_sam_logon_recv_samlogon(struct tevent_req *subreq);
+static void wb_update_rodc_dns_recv_domain(struct composite_context *ctx);
+static void wb_update_rodc_dns_recv_response(struct tevent_req *subreq);
 
 /*
     Find the connection to the DC (or find an existing connection)
 */
-struct composite_context *wb_sam_logon_send(TALLOC_CTX *mem_ctx,
+struct composite_context *wb_update_rodc_dns_send(TALLOC_CTX *mem_ctx,
 					    struct wbsrv_service *service,
-					    struct winbind_SamLogon *req)
+					    struct winbind_DsrUpdateReadOnlyServerDnsRecords *req)
 {
 	struct composite_context *c, *creq;
-	struct wb_sam_logon_state *s;
+	struct wb_update_rodc_dns_state *s;
 
 	c = composite_create(mem_ctx, service->task->event_ctx);
 	if (!c) return NULL;
 
-	s = talloc_zero(c, struct wb_sam_logon_state);
+	s = talloc_zero(c, struct wb_update_rodc_dns_state);
 	if (composite_nomem(s, c)) return c;
 	s->ctx = c;
 	s->req = req;
@@ -66,18 +71,18 @@ struct composite_context *wb_sam_logon_send(TALLOC_CTX *mem_ctx,
 	c->private_data = s;
 
 	creq = wb_sid2domain_send(s, service, service->primary_sid);
-	composite_continue(c, creq, wb_sam_logon_recv_domain, s);
+	composite_continue(c, creq, wb_update_rodc_dns_recv_domain, s);
 	return c;
 }
 
 /*
     Having finished making the connection to the DC
-    Send of a SamLogon request to authenticate a user.
+    Send of a DsrUpdateReadOnlyServerDnsRecords request to authenticate a user.
 */
-static void wb_sam_logon_recv_domain(struct composite_context *creq)
+static void wb_update_rodc_dns_recv_domain(struct composite_context *creq)
 {
-	struct wb_sam_logon_state *s = talloc_get_type(creq->async.private_data,
-				       struct wb_sam_logon_state);
+	struct wb_update_rodc_dns_state *s = talloc_get_type(creq->async.private_data,
+				       struct wb_update_rodc_dns_state);
 	struct wbsrv_domain *domain;
 	struct tevent_req *subreq;
 
@@ -93,45 +98,40 @@ static void wb_sam_logon_recv_domain(struct composite_context *creq)
 
 	s->r.in.computer_name = cli_credentials_get_workstation(domain->libnet_ctx->cred);
 	s->r.in.credential = &s->auth1;
-	s->r.in.return_authenticator = &s->auth2;
-	s->r.in.logon_level = s->req->in.logon_level;
-	s->r.in.logon = &s->req->in.logon;
-	s->r.in.validation_level = s->req->in.validation_level;
-	s->r.out.return_authenticator = NULL;
-	s->r.out.validation = talloc(s, union netr_Validation);
-	if (composite_nomem(s->r.out.validation, s->ctx)) return;
-	s->r.out.authoritative = talloc(s, uint8_t);
-	if (composite_nomem(s->r.out.authoritative, s->ctx)) return;
-
+	s->r.out.return_authenticator = &s->auth2;
+	s->r.in.site_name = s->req->in.site_name;
+	s->r.in.dns_ttl = s->req->in.dns_ttl;
+	s->r.in.dns_names = s->req->in.dns_names;
+	s->r.out.dns_names = s->req->in.dns_names;
 
 	/*
-	 * use a new talloc context for the LogonSamLogon call
+	 * use a new talloc context for the DsrUpdateReadOnlyServerDnsRecords call
 	 * because then we can just to a talloc_steal on this context
 	 * in the final _recv() function to give the caller all the content of
-	 * the s->r.out.validation
+	 * the s->r.out.dns_names
 	 */
 	s->r_mem_ctx = talloc_new(s);
 	if (composite_nomem(s->r_mem_ctx, s->ctx)) return;
 
-	subreq = dcerpc_netr_LogonSamLogon_r_send(s,
+	subreq = dcerpc_netr_DsrUpdateReadOnlyServerDnsRecords_r_send(s,
 						  s->ctx->event_ctx,
 						  domain->netlogon_pipe->binding_handle,
 						  &s->r);
 	if (composite_nomem(subreq, s->ctx)) return;
-	tevent_req_set_callback(subreq, wb_sam_logon_recv_samlogon, s);
+	tevent_req_set_callback(subreq, wb_update_rodc_dns_recv_response, s);
 }
 
-/* 
-   NTLM Authentication 
-   
-   Check the SamLogon reply and decrypt the session keys
+/*
+   NTLM Authentication
+
+   Check the DsrUpdateReadOnlyServerDnsRecords reply and decrypt the session keys
 */
-static void wb_sam_logon_recv_samlogon(struct tevent_req *subreq)
+static void wb_update_rodc_dns_recv_response(struct tevent_req *subreq)
 {
-	struct wb_sam_logon_state *s = tevent_req_callback_data(subreq,
-				       struct wb_sam_logon_state);
+	struct wb_update_rodc_dns_state *s = tevent_req_callback_data(subreq,
+				       struct wb_update_rodc_dns_state);
 
-	s->ctx->status = dcerpc_netr_LogonSamLogon_r_recv(subreq, s->r_mem_ctx);
+	s->ctx->status = dcerpc_netr_DsrUpdateReadOnlyServerDnsRecords_r_recv(subreq, s->r_mem_ctx);
 	TALLOC_FREE(subreq);
 	if (!composite_is_ok(s->ctx)) return;
 
@@ -146,28 +146,20 @@ static void wb_sam_logon_recv_samlogon(struct tevent_req *subreq)
 		return;
 	}
 
-	/* Decrypt the session keys before we reform the info3, so the
-	 * person on the other end of winbindd pipe doesn't have to.
-	 * They won't have the encryption key anyway */
-	netlogon_creds_decrypt_samlogon(s->creds_state,
-					s->r.in.validation_level,
-					s->r.out.validation);
-
 	composite_done(s->ctx);
 }
 
-NTSTATUS wb_sam_logon_recv(struct composite_context *c,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list