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 <[email protected]>
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 <[email protected]>

commit fb81cc080d40844010daae559e6be6a747c10ecd
Author: Andrew Tridgell <[email protected]>
Date:   Fri Sep 17 17:04:28 2010 +1000

    s4-pyrpc: allow python to access irpc interfaces
    
    Pair-Programmed-With: Andrew Bartlett <[email protected]>

commit 1c7c1a86ecf401f54b9462bb9d0946356ddb688d
Author: Andrew Tridgell <[email protected]>
Date:   Fri Sep 17 17:03:54 2010 +1000

    idl: build python interfaces for winbind and idmap IDL
    
    Pair-Programmed-With: Andrew Bartlett <[email protected]>

commit 39bd61e018d8495f9a7368d1656c6f52d422e6e3
Author: Andrew Bartlett <[email protected]>
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 <[email protected]>

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

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 <[email protected]> 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

Reply via email to