[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-2279-g2dd01f0

Günther Deschner gd at samba.org
Fri Feb 15 13:08:00 GMT 2008


The branch, v3-2-test has been updated
       via  2dd01f07411744f1f8fec0bff7af554db08ab960 (commit)
       via  72ad42fee30242eb57ae0db825127fdb8f9375fd (commit)
       via  41d33a2507e3fae7837bb8e42b1ac30cc31c31dc (commit)
       via  06f2f4c4707d13bfc5510f3ff068534a01456fe5 (commit)
       via  a28729e48f5beffb4ffe324da30548d948fa51b4 (commit)
      from  1cd556f763da2ffba6078135b9436906987f1235 (commit)

http://gitweb.samba.org/?samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 2dd01f07411744f1f8fec0bff7af554db08ab960
Author: Günther Deschner <gd at samba.org>
Date:   Fri Feb 15 02:59:48 2008 +0100

    Remove unused marshalling for NET_SAM_DELTAS.
    
    Guenther

commit 72ad42fee30242eb57ae0db825127fdb8f9375fd
Author: Günther Deschner <gd at samba.org>
Date:   Fri Feb 15 13:55:18 2008 +0100

    Use rpccli_netr_DatabaseDeltas() in rpcclient.
    
    Guenther

commit 41d33a2507e3fae7837bb8e42b1ac30cc31c31dc
Author: Günther Deschner <gd at samba.org>
Date:   Fri Feb 15 13:51:54 2008 +0100

    Add netlogon_creds_client_check and netlogon_creds_client_step.
    
    Guenther

commit 06f2f4c4707d13bfc5510f3ff068534a01456fe5
Author: Günther Deschner <gd at samba.org>
Date:   Fri Feb 15 14:04:08 2008 +0100

    Re-run make idl.
    
    Guenther

commit a28729e48f5beffb4ffe324da30548d948fa51b4
Author: Günther Deschner <gd at samba.org>
Date:   Fri Feb 15 01:23:59 2008 +0100

    Fix IDL for netr_DatabaseDeltas.
    
    Guenther

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

Summary of changes:
 source/include/rpc_netlogon.h        |   29 ----
 source/librpc/gen_ndr/cli_netlogon.c |    6 +-
 source/librpc/gen_ndr/cli_netlogon.h |    6 +-
 source/librpc/gen_ndr/ndr_netlogon.c |   46 ++++++-
 source/librpc/gen_ndr/netlogon.h     |    4 +-
 source/librpc/gen_ndr/srv_netlogon.c |    2 +-
 source/librpc/idl/netlogon.idl       |    6 +-
 source/libsmb/credentials.c          |   31 +++++
 source/rpc_client/cli_netlogon.c     |   52 -------
 source/rpc_parse/parse_net.c         |  135 -------------------
 source/rpcclient/cmd_netlogon.c      |  246 ++++++++++++++++++++++------------
 11 files changed, 242 insertions(+), 321 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/rpc_netlogon.h b/source/include/rpc_netlogon.h
index c8a25cd..93b50c9 100644
--- a/source/include/rpc_netlogon.h
+++ b/source/include/rpc_netlogon.h
@@ -831,35 +831,6 @@ typedef struct net_r_sam_sync_info {
 	NTSTATUS status;
 } NET_R_SAM_SYNC;
 
-/* NET_Q_SAM_DELTAS */
-typedef struct net_q_sam_deltas_info {
-	UNISTR2 uni_srv_name;
-	UNISTR2 uni_cli_name;
-	DOM_CRED cli_creds;
-	DOM_CRED ret_creds;
-
-	uint32 database_id;
-	uint64 dom_mod_count;  /* domain mod count at last sync */
-
-	uint32 max_size;       /* preferred maximum length */
-} NET_Q_SAM_DELTAS;
-
-/* NET_R_SAM_DELTAS */
-typedef struct net_r_sam_deltas_info {
-	DOM_CRED srv_creds;
-
-	uint64 dom_mod_count;   /* new domain mod count */
-
-	uint32 ptr_deltas;
-	uint32 num_deltas;
-	uint32 num_deltas2;
-
-	SAM_DELTA_HDR *hdr_deltas;
-	SAM_DELTA_CTR *deltas;
-
-	NTSTATUS status;
-} NET_R_SAM_DELTAS;
-
 #define DSGETDC_VALID_FLAGS ( \
     DS_FORCE_REDISCOVERY | \
     DS_DIRECTORY_SERVICE_REQUIRED | \
diff --git a/source/librpc/gen_ndr/cli_netlogon.c b/source/librpc/gen_ndr/cli_netlogon.c
index 7efcae2..5e15932 100644
--- a/source/librpc/gen_ndr/cli_netlogon.c
+++ b/source/librpc/gen_ndr/cli_netlogon.c
@@ -363,12 +363,12 @@ NTSTATUS rpccli_netr_DatabaseDeltas(struct rpc_pipe_client *cli,
 				    TALLOC_CTX *mem_ctx,
 				    const char *logon_server,
 				    const char *computername,
-				    struct netr_Authenticator credential,
+				    struct netr_Authenticator *credential,
 				    struct netr_Authenticator *return_authenticator,
 				    enum netr_SamDatabaseID database_id,
 				    uint64_t *sequence_num,
-				    uint32_t preferredmaximumlength,
-				    struct netr_DELTA_ENUM_ARRAY *delta_enum_array)
+				    struct netr_DELTA_ENUM_ARRAY **delta_enum_array,
+				    uint32_t preferredmaximumlength)
 {
 	struct netr_DatabaseDeltas r;
 	NTSTATUS status;
diff --git a/source/librpc/gen_ndr/cli_netlogon.h b/source/librpc/gen_ndr/cli_netlogon.h
index f07c429..0345941 100644
--- a/source/librpc/gen_ndr/cli_netlogon.h
+++ b/source/librpc/gen_ndr/cli_netlogon.h
@@ -59,12 +59,12 @@ NTSTATUS rpccli_netr_DatabaseDeltas(struct rpc_pipe_client *cli,
 				    TALLOC_CTX *mem_ctx,
 				    const char *logon_server,
 				    const char *computername,
-				    struct netr_Authenticator credential,
+				    struct netr_Authenticator *credential,
 				    struct netr_Authenticator *return_authenticator,
 				    enum netr_SamDatabaseID database_id,
 				    uint64_t *sequence_num,
-				    uint32_t preferredmaximumlength,
-				    struct netr_DELTA_ENUM_ARRAY *delta_enum_array);
+				    struct netr_DELTA_ENUM_ARRAY **delta_enum_array,
+				    uint32_t preferredmaximumlength);
 NTSTATUS rpccli_netr_DatabaseSync(struct rpc_pipe_client *cli,
 				  TALLOC_CTX *mem_ctx,
 				  const char *logon_server,
diff --git a/source/librpc/gen_ndr/ndr_netlogon.c b/source/librpc/gen_ndr/ndr_netlogon.c
index d31e19a..43a077f 100644
--- a/source/librpc/gen_ndr/ndr_netlogon.c
+++ b/source/librpc/gen_ndr/ndr_netlogon.c
@@ -9009,7 +9009,10 @@ static enum ndr_err_code ndr_push_netr_DatabaseDeltas(struct ndr_push *ndr, int
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
 		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computername, ndr_charset_length(r->in.computername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
+		if (r->in.credential == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
 		if (r->in.return_authenticator == NULL) {
 			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
 		}
@@ -9033,7 +9036,10 @@ static enum ndr_err_code ndr_push_netr_DatabaseDeltas(struct ndr_push *ndr, int
 		if (r->out.delta_enum_array == NULL) {
 			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
 		}
-		NDR_CHECK(ndr_push_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.delta_enum_array));
+		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.delta_enum_array));
+		if (*r->out.delta_enum_array) {
+			NDR_CHECK(ndr_push_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.delta_enum_array));
+		}
 		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
 	}
 	return NDR_ERR_SUCCESS;
@@ -9041,9 +9047,12 @@ static enum ndr_err_code ndr_push_netr_DatabaseDeltas(struct ndr_push *ndr, int
 
 static enum ndr_err_code ndr_pull_netr_DatabaseDeltas(struct ndr_pull *ndr, int flags, struct netr_DatabaseDeltas *r)
 {
+	uint32_t _ptr_delta_enum_array;
+	TALLOC_CTX *_mem_save_credential_0;
 	TALLOC_CTX *_mem_save_return_authenticator_0;
 	TALLOC_CTX *_mem_save_sequence_num_0;
 	TALLOC_CTX *_mem_save_delta_enum_array_0;
+	TALLOC_CTX *_mem_save_delta_enum_array_1;
 	if (flags & NDR_IN) {
 		ZERO_STRUCT(r->out);
 
@@ -9061,7 +9070,13 @@ static enum ndr_err_code ndr_pull_netr_DatabaseDeltas(struct ndr_pull *ndr, int
 		}
 		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t)));
 		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computername, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->in.credential);
+		}
+		_mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, LIBNDR_FLAG_REF_ALLOC);
 		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
 			NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
 		}
@@ -9105,7 +9120,18 @@ static enum ndr_err_code ndr_pull_netr_DatabaseDeltas(struct ndr_pull *ndr, int
 		}
 		_mem_save_delta_enum_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
 		NDR_PULL_SET_MEM_CTX(ndr, r->out.delta_enum_array, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.delta_enum_array));
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_delta_enum_array));
+		if (_ptr_delta_enum_array) {
+			NDR_PULL_ALLOC(ndr, *r->out.delta_enum_array);
+		} else {
+			*r->out.delta_enum_array = NULL;
+		}
+		if (*r->out.delta_enum_array) {
+			_mem_save_delta_enum_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, *r->out.delta_enum_array, 0);
+			NDR_CHECK(ndr_pull_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.delta_enum_array));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_array_1, 0);
+		}
 		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_array_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
 	}
@@ -9124,7 +9150,10 @@ _PUBLIC_ void ndr_print_netr_DatabaseDeltas(struct ndr_print *ndr, const char *n
 		ndr->depth++;
 		ndr_print_string(ndr, "logon_server", r->in.logon_server);
 		ndr_print_string(ndr, "computername", r->in.computername);
-		ndr_print_netr_Authenticator(ndr, "credential", &r->in.credential);
+		ndr_print_ptr(ndr, "credential", r->in.credential);
+		ndr->depth++;
+		ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
+		ndr->depth--;
 		ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
 		ndr->depth++;
 		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
@@ -9150,7 +9179,12 @@ _PUBLIC_ void ndr_print_netr_DatabaseDeltas(struct ndr_print *ndr, const char *n
 		ndr->depth--;
 		ndr_print_ptr(ndr, "delta_enum_array", r->out.delta_enum_array);
 		ndr->depth++;
-		ndr_print_netr_DELTA_ENUM_ARRAY(ndr, "delta_enum_array", r->out.delta_enum_array);
+		ndr_print_ptr(ndr, "delta_enum_array", *r->out.delta_enum_array);
+		ndr->depth++;
+		if (*r->out.delta_enum_array) {
+			ndr_print_netr_DELTA_ENUM_ARRAY(ndr, "delta_enum_array", *r->out.delta_enum_array);
+		}
+		ndr->depth--;
 		ndr->depth--;
 		ndr_print_NTSTATUS(ndr, "result", r->out.result);
 		ndr->depth--;
diff --git a/source/librpc/gen_ndr/netlogon.h b/source/librpc/gen_ndr/netlogon.h
index 97089d4..83879e2 100644
--- a/source/librpc/gen_ndr/netlogon.h
+++ b/source/librpc/gen_ndr/netlogon.h
@@ -936,7 +936,7 @@ struct netr_DatabaseDeltas {
 	struct {
 		const char *logon_server;/* [charset(UTF16)] */
 		const char *computername;/* [charset(UTF16)] */
-		struct netr_Authenticator credential;
+		struct netr_Authenticator *credential;/* [ref] */
 		enum netr_SamDatabaseID database_id;
 		uint32_t preferredmaximumlength;
 		struct netr_Authenticator *return_authenticator;/* [ref] */
@@ -944,7 +944,7 @@ struct netr_DatabaseDeltas {
 	} in;
 
 	struct {
-		struct netr_DELTA_ENUM_ARRAY *delta_enum_array;/* [ref] */
+		struct netr_DELTA_ENUM_ARRAY **delta_enum_array;/* [ref] */
 		struct netr_Authenticator *return_authenticator;/* [ref] */
 		uint64_t *sequence_num;/* [ref] */
 		NTSTATUS result;
diff --git a/source/librpc/gen_ndr/srv_netlogon.c b/source/librpc/gen_ndr/srv_netlogon.c
index 8084934..5965490 100644
--- a/source/librpc/gen_ndr/srv_netlogon.c
+++ b/source/librpc/gen_ndr/srv_netlogon.c
@@ -599,7 +599,7 @@ static bool api_netr_DatabaseDeltas(pipes_struct *p)
 	ZERO_STRUCT(r->out);
 	r->out.return_authenticator = r->in.return_authenticator;
 	r->out.sequence_num = r->in.sequence_num;
-	r->out.delta_enum_array = talloc_zero(r, struct netr_DELTA_ENUM_ARRAY);
+	r->out.delta_enum_array = talloc_zero(r, struct netr_DELTA_ENUM_ARRAY *);
 	if (r->out.delta_enum_array == NULL) {
 		talloc_free(r);
 		return false;
diff --git a/source/librpc/idl/netlogon.idl b/source/librpc/idl/netlogon.idl
index 7f977a4..e790962 100644
--- a/source/librpc/idl/netlogon.idl
+++ b/source/librpc/idl/netlogon.idl
@@ -680,12 +680,12 @@ interface netlogon
 	NTSTATUS netr_DatabaseDeltas(
 		[in]      [string,charset(UTF16)] uint16 logon_server[],
 		[in]      [string,charset(UTF16)] uint16 computername[],
-		[in]      netr_Authenticator credential,
+		[in,ref]  netr_Authenticator *credential,
 		[in,out,ref]  netr_Authenticator *return_authenticator,
 		[in]      netr_SamDatabaseID database_id,
 		[in,out,ref]  udlong *sequence_num,
-		[in]      uint32 preferredmaximumlength,
-		[out,ref]     netr_DELTA_ENUM_ARRAY *delta_enum_array
+		[out,ref]     netr_DELTA_ENUM_ARRAY **delta_enum_array,
+		[in]      uint32 preferredmaximumlength
 		);
 
 
diff --git a/source/libsmb/credentials.c b/source/libsmb/credentials.c
index 1256a62..f03bf22 100644
--- a/source/libsmb/credentials.c
+++ b/source/libsmb/credentials.c
@@ -329,6 +329,25 @@ bool creds_client_check(const struct dcinfo *dc, const DOM_CHAL *rcv_srv_chal_in
 	return True;
 }
 
+bool netlogon_creds_client_check(const struct dcinfo *dc,
+				 const struct netr_Credential *rcv_srv_chal_in)
+{
+	if (memcmp(dc->srv_chal.data, rcv_srv_chal_in->data,
+		   sizeof(dc->srv_chal.data))) {
+
+		DEBUG(0,("netlogon_creds_client_check: credentials check failed.\n"));
+		DEBUGADD(5,("netlogon_creds_client_check: challenge : %s\n",
+			credstr(rcv_srv_chal_in->data)));
+		DEBUGADD(5,("calculated: %s\n", credstr(dc->srv_chal.data)));
+		return false;
+	}
+
+	DEBUG(10,("netlogon_creds_client_check: credentials check OK.\n"));
+
+	return true;
+}
+
+
 /****************************************************************************
   Step the client credentials to the next element in the chain, updating the
   current client and server credentials and the seed
@@ -345,3 +364,15 @@ void creds_client_step(struct dcinfo *dc, DOM_CRED *next_cred_out)
 	next_cred_out->challenge = dc->clnt_chal;
 	next_cred_out->timestamp.time = dc->sequence;
 }
+
+void netlogon_creds_client_step(struct dcinfo *dc,
+				struct netr_Authenticator *next_cred_out)
+{
+	dc->sequence += 2;
+	creds_step(dc);
+	creds_reseed(dc);
+
+	memcpy(&next_cred_out->cred.data, &dc->clnt_chal.data,
+		sizeof(next_cred_out->cred.data));
+	next_cred_out->timestamp = dc->sequence;
+}
diff --git a/source/rpc_client/cli_netlogon.c b/source/rpc_client/cli_netlogon.c
index d28df3c..0da482c 100644
--- a/source/rpc_client/cli_netlogon.c
+++ b/source/rpc_client/cli_netlogon.c
@@ -400,58 +400,6 @@ NTSTATUS rpccli_netlogon_sam_sync(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c
 	return result;
 }
 
-/* Sam synchronisation */
-
-NTSTATUS rpccli_netlogon_sam_deltas(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
-                                 uint32 database_id, uint64 seqnum,
-                                 uint32 *num_deltas, 
-                                 SAM_DELTA_HDR **hdr_deltas, 
-                                 SAM_DELTA_CTR **deltas)
-{
-	prs_struct qbuf, rbuf;
-	NET_Q_SAM_DELTAS q;
-	NET_R_SAM_DELTAS r;
-	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-        DOM_CRED clnt_creds;
-
-	ZERO_STRUCT(q);
-	ZERO_STRUCT(r);
-
-	/* Initialise input parameters */
-
-	creds_client_step(cli->dc, &clnt_creds);
-
-	init_net_q_sam_deltas(&q, cli->dc->remote_machine,
-                              global_myname(), &clnt_creds, 
-                              database_id, seqnum);
-
-	/* Marshall data and send request */
-
-	CLI_DO_RPC(cli, mem_ctx, PI_NETLOGON, NET_SAM_DELTAS,
-		q, r,
-		qbuf, rbuf,
-		net_io_q_sam_deltas,
-		net_io_r_sam_deltas,
-		NT_STATUS_UNSUCCESSFUL);
-
-        /* Return results */
-
-	result = r.status;
-        *num_deltas = r.num_deltas2;
-        *hdr_deltas = r.hdr_deltas;
-        *deltas = r.deltas;
-
-	if (!NT_STATUS_IS_ERR(result)) {
-		/* Check returned credentials. */
-		if (!creds_client_check(cli->dc, &r.srv_creds.challenge)) {
-			DEBUG(0,("cli_netlogon_sam_sync: credentials chain check failed\n"));
-			return NT_STATUS_ACCESS_DENIED;
-		}
-	}
-
-	return result;
-}
-
 /* Logon domain user */
 
 NTSTATUS rpccli_netlogon_sam_logon(struct rpc_pipe_client *cli,
diff --git a/source/rpc_parse/parse_net.c b/source/rpc_parse/parse_net.c
index 8105ac5..b4ed470 100644
--- a/source/rpc_parse/parse_net.c
+++ b/source/rpc_parse/parse_net.c
@@ -2571,138 +2571,3 @@ bool net_io_r_sam_sync(const char *desc,
 
 	return True;
 }
-
-/*******************************************************************
-makes a NET_Q_SAM_DELTAS structure.
-********************************************************************/
-bool init_net_q_sam_deltas(NET_Q_SAM_DELTAS *q_s, const char *srv_name, 
-                           const char *cli_name, DOM_CRED *cli_creds, 
-                           uint32 database_id, uint64 dom_mod_count)
-{
-	DEBUG(5, ("init_net_q_sam_deltas\n"));
-
-	init_unistr2(&q_s->uni_srv_name, srv_name, UNI_STR_TERMINATE);
-	init_unistr2(&q_s->uni_cli_name, cli_name, UNI_STR_TERMINATE);
-
-	memcpy(&q_s->cli_creds, cli_creds, sizeof(q_s->cli_creds));
-	memset(&q_s->ret_creds, 0, sizeof(q_s->ret_creds));
-
-	q_s->database_id = database_id;
-    q_s->dom_mod_count = dom_mod_count;
-	q_s->max_size = 0xffff;
-
-	return True;
-}
-
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-bool net_io_q_sam_deltas(const char *desc, NET_Q_SAM_DELTAS *q_s, prs_struct *ps,
-                         int depth)
-{
-	prs_debug(ps, depth, desc, "net_io_q_sam_deltas");
-	depth++;
-
-	if (!smb_io_unistr2("", &q_s->uni_srv_name, True, ps, depth))
-                return False;
-	if (!smb_io_unistr2("", &q_s->uni_cli_name, True, ps, depth))
-                return False;
-
-	if (!smb_io_cred("", &q_s->cli_creds, ps, depth))
-                return False;
-	if (!smb_io_cred("", &q_s->ret_creds, ps, depth))
-                return False;
-
-	if (!prs_uint32("database_id  ", ps, depth, &q_s->database_id))
-                return False;
-        if (!prs_uint64("dom_mod_count", ps, depth, &q_s->dom_mod_count))
-                return False;
-	if (!prs_uint32("max_size", ps, depth, &q_s->max_size))
-                return False;
-
-	return True;
-}
-
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-bool net_io_r_sam_deltas(const char *desc,
-                         NET_R_SAM_DELTAS *r_s, prs_struct *ps, int depth)
-{
-        unsigned int i;
-
-	prs_debug(ps, depth, desc, "net_io_r_sam_deltas");
-	depth++;
-
-	if (!smb_io_cred("srv_creds", &r_s->srv_creds, ps, depth))
-                return False;
-        if (!prs_uint64("dom_mod_count", ps, depth, &r_s->dom_mod_count))
-                return False;
-
-	if (!prs_uint32("ptr_deltas", ps, depth, &r_s->ptr_deltas))
-                return False;
-	if (!prs_uint32("num_deltas", ps, depth, &r_s->num_deltas))
-                return False;
-	if (!prs_uint32("ptr_deltas2", ps, depth, &r_s->num_deltas2))
-                return False;
-
-	if (r_s->num_deltas2 != 0)
-	{
-		if (!prs_uint32("num_deltas2 ", ps, depth, &r_s->num_deltas2))
-                        return False;
-
-		if (r_s->ptr_deltas != 0)
-		{
-			if (UNMARSHALLING(ps)) {
-	                        if (r_s->num_deltas) {
-					r_s->hdr_deltas = TALLOC_ARRAY(ps->mem_ctx, SAM_DELTA_HDR, r_s->num_deltas);
-					if (r_s->hdr_deltas == NULL) {
-						DEBUG(0, ("error tallocating memory "
-							"for %d delta headers\n", 
-							r_s->num_deltas));
-						return False;
-					}
-				} else {
-					r_s->hdr_deltas = NULL;
-				}
-			}
-
-			for (i = 0; i < r_s->num_deltas; i++)
-			{
-				net_io_sam_delta_hdr("", &r_s->hdr_deltas[i],
-                                                      ps, depth);
-			}
-                        
-			if (UNMARSHALLING(ps)) {
-				if (r_s->num_deltas) {
-					r_s->deltas = TALLOC_ARRAY(ps->mem_ctx, SAM_DELTA_CTR, r_s->num_deltas);
-					if (r_s->deltas == NULL) {
-						DEBUG(0, ("error tallocating memory "
-							"for %d deltas\n", 
-							r_s->num_deltas));
-						return False;
-					}
-				} else {
-					r_s->deltas = NULL;
-				}
-			}
-
-			for (i = 0; i < r_s->num_deltas; i++)
-			{
-				if (!net_io_sam_delta_ctr(
-                                        "",
-                                        &r_s->deltas[i],
-                                        r_s->hdr_deltas[i].type2,
-                                        ps, depth))
-                                        
-                                        return False;
-			}
-		}
-	}
-
-	prs_align(ps);
-	if (!prs_ntstatus("status", ps, depth, &r_s->status))
-                return False;
-
-	return True;
-}
diff --git a/source/rpcclient/cmd_netlogon.c b/source/rpcclient/cmd_netlogon.c
index ac27d38..cf52da7 100644
--- a/source/rpcclient/cmd_netlogon.c
+++ b/source/rpcclient/cmd_netlogon.c
@@ -439,70 +439,117 @@ static WERROR cmd_netlogon_logon_ctrl(struct rpc_pipe_client *cli,
 
 /* Display sam synchronisation information */
 
-static void display_sam_sync(uint32 num_deltas, SAM_DELTA_HDR *hdr_deltas,
-                             SAM_DELTA_CTR *deltas)
+static void display_sam_sync(struct netr_DELTA_ENUM_ARRAY *r)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list