[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-2283-gf533936

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


The branch, v3-2-test has been updated
       via  f53393677d2c4b5ca117eed3ed660fafc4c650da (commit)
       via  042173b00e023b4d4e7739524e24baa8803850bd (commit)
       via  2add8790199079753c21ec2797e14b8bed2d8278 (commit)
       via  6355a8ee9789b8a30b00876835c22a724e637cf1 (commit)
      from  2dd01f07411744f1f8fec0bff7af554db08ab960 (commit)

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


- Log -----------------------------------------------------------------
commit f53393677d2c4b5ca117eed3ed660fafc4c650da
Author: Günther Deschner <gd at samba.org>
Date:   Fri Feb 15 14:13:11 2008 +0100

    Convert "net rpc vampire/samdump" to pidl generated functions.
    
    Guenther

commit 042173b00e023b4d4e7739524e24baa8803850bd
Author: Günther Deschner <gd at samba.org>
Date:   Fri Feb 15 14:11:20 2008 +0100

    Use rpccli_netr_DatabaseSync2() in rpcclient.
    
    Guenther

commit 2add8790199079753c21ec2797e14b8bed2d8278
Author: Günther Deschner <gd at samba.org>
Date:   Fri Feb 15 14:08:24 2008 +0100

    Re-run make idl.
    
    Guenther

commit 6355a8ee9789b8a30b00876835c22a724e637cf1
Author: Günther Deschner <gd at samba.org>
Date:   Fri Feb 15 01:18:47 2008 +0100

    Fix IDL for netr_DatabaseSync2.
    
    Guenther

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

Summary of changes:
 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/rpcclient/cmd_netlogon.c      |   59 ++-
 source/utils/net_rpc_samsync.c       |  944 ++++++++++++++++++++--------------
 8 files changed, 652 insertions(+), 421 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/librpc/gen_ndr/cli_netlogon.c b/source/librpc/gen_ndr/cli_netlogon.c
index 5e15932..ef9eeaf 100644
--- a/source/librpc/gen_ndr/cli_netlogon.c
+++ b/source/librpc/gen_ndr/cli_netlogon.c
@@ -847,13 +847,13 @@ NTSTATUS rpccli_netr_DatabaseSync2(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,
 				   uint16_t restart_state,
 				   uint32_t *sync_context,
-				   uint32_t preferredmaximumlength,
-				   struct netr_DELTA_ENUM_ARRAY *delta_enum_array)
+				   struct netr_DELTA_ENUM_ARRAY **delta_enum_array,
+				   uint32_t preferredmaximumlength)
 {
 	struct netr_DatabaseSync2 r;
 	NTSTATUS status;
diff --git a/source/librpc/gen_ndr/cli_netlogon.h b/source/librpc/gen_ndr/cli_netlogon.h
index 0345941..35f9032 100644
--- a/source/librpc/gen_ndr/cli_netlogon.h
+++ b/source/librpc/gen_ndr/cli_netlogon.h
@@ -142,13 +142,13 @@ NTSTATUS rpccli_netr_DatabaseSync2(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,
 				   uint16_t restart_state,
 				   uint32_t *sync_context,
-				   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_DatabaseRedo(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 43a077f..e576648 100644
--- a/source/librpc/gen_ndr/ndr_netlogon.c
+++ b/source/librpc/gen_ndr/ndr_netlogon.c
@@ -10516,7 +10516,10 @@ static enum ndr_err_code ndr_push_netr_DatabaseSync2(struct ndr_push *ndr, int f
 		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");
 		}
@@ -10541,7 +10544,10 @@ static enum ndr_err_code ndr_push_netr_DatabaseSync2(struct ndr_push *ndr, int f
 		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;
@@ -10549,9 +10555,12 @@ static enum ndr_err_code ndr_push_netr_DatabaseSync2(struct ndr_push *ndr, int f
 
 static enum ndr_err_code ndr_pull_netr_DatabaseSync2(struct ndr_pull *ndr, int flags, struct netr_DatabaseSync2 *r)
 {
+	uint32_t _ptr_delta_enum_array;
+	TALLOC_CTX *_mem_save_credential_0;
 	TALLOC_CTX *_mem_save_return_authenticator_0;
 	TALLOC_CTX *_mem_save_sync_context_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);
 
@@ -10569,7 +10578,13 @@ static enum ndr_err_code ndr_pull_netr_DatabaseSync2(struct ndr_pull *ndr, int f
 		}
 		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);
 		}
@@ -10614,7 +10629,18 @@ static enum ndr_err_code ndr_pull_netr_DatabaseSync2(struct ndr_pull *ndr, int f
 		}
 		_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));
 	}
@@ -10633,7 +10659,10 @@ _PUBLIC_ void ndr_print_netr_DatabaseSync2(struct ndr_print *ndr, const char *na
 		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);
@@ -10660,7 +10689,12 @@ _PUBLIC_ void ndr_print_netr_DatabaseSync2(struct ndr_print *ndr, const char *na
 		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 83879e2..c18527d 100644
--- a/source/librpc/gen_ndr/netlogon.h
+++ b/source/librpc/gen_ndr/netlogon.h
@@ -1105,7 +1105,7 @@ struct netr_DatabaseSync2 {
 	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;
 		uint16_t restart_state;
 		uint32_t preferredmaximumlength;
@@ -1114,7 +1114,7 @@ struct netr_DatabaseSync2 {
 	} 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] */
 		uint32_t *sync_context;/* [ref] */
 		NTSTATUS result;
diff --git a/source/librpc/gen_ndr/srv_netlogon.c b/source/librpc/gen_ndr/srv_netlogon.c
index 5965490..98ba48a 100644
--- a/source/librpc/gen_ndr/srv_netlogon.c
+++ b/source/librpc/gen_ndr/srv_netlogon.c
@@ -1358,7 +1358,7 @@ static bool api_netr_DatabaseSync2(pipes_struct *p)
 	ZERO_STRUCT(r->out);
 	r->out.return_authenticator = r->in.return_authenticator;
 	r->out.sync_context = r->in.sync_context;
-	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 e790962..60bf075 100644
--- a/source/librpc/idl/netlogon.idl
+++ b/source/librpc/idl/netlogon.idl
@@ -865,13 +865,13 @@ interface netlogon
 	NTSTATUS netr_DatabaseSync2(
 		[in]     [string,charset(UTF16)] uint16 logon_server[],
 		[in]     [string,charset(UTF16)] uint16 computername[],
-		[in]     netr_Authenticator credential,
+		[in]     netr_Authenticator *credential,
 		[in,out,ref] netr_Authenticator *return_authenticator,
 		[in]     netr_SamDatabaseID database_id,
 		[in]     uint16 restart_state,
 		[in,out,ref] uint32 *sync_context,
-		[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/rpcclient/cmd_netlogon.c b/source/rpcclient/cmd_netlogon.c
index cf52da7..49098b1 100644
--- a/source/rpcclient/cmd_netlogon.c
+++ b/source/rpcclient/cmd_netlogon.c
@@ -554,37 +554,66 @@ static void display_sam_sync(struct netr_DELTA_ENUM_ARRAY *r)
 
 /* Perform sam synchronisation */
 
-static NTSTATUS cmd_netlogon_sam_sync(struct rpc_pipe_client *cli, 
+static NTSTATUS cmd_netlogon_sam_sync(struct rpc_pipe_client *cli,
                                       TALLOC_CTX *mem_ctx, int argc,
                                       const char **argv)
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-        uint32 database_id = 0, num_deltas;
-        SAM_DELTA_HDR *hdr_deltas;
-        SAM_DELTA_CTR *deltas;
+	const char *logon_server = cli->cli->desthost;
+	const char *computername = global_myname();
+	struct netr_Authenticator credential;
+	struct netr_Authenticator return_authenticator;
+	enum netr_SamDatabaseID database_id = SAM_DATABASE_DOMAIN;
+	uint16_t restart_state = 0;
+	uint32_t sync_context = 0;
 
         if (argc > 2) {
                 fprintf(stderr, "Usage: %s [database_id]\n", argv[0]);
                 return NT_STATUS_OK;
         }
 
-        if (argc == 2)
-                database_id = atoi(argv[1]);
+	if (argc == 2) {
+		database_id = atoi(argv[1]);
+	}
+
+	/* Synchronise sam database */
+
+	do {
+		struct netr_DELTA_ENUM_ARRAY *delta_enum_array = NULL;
 
-        /* Synchronise sam database */
+		netlogon_creds_client_step(cli->dc, &credential);
 
-	result = rpccli_netlogon_sam_sync(cli, mem_ctx, database_id,
-				       0, &num_deltas, &hdr_deltas, &deltas);
+		result = rpccli_netr_DatabaseSync2(cli, mem_ctx,
+						   logon_server,
+						   computername,
+						   &credential,
+						   &return_authenticator,
+						   database_id,
+						   restart_state,
+						   &sync_context,
+						   &delta_enum_array,
+						   0xffff);
 
-	if (!NT_STATUS_IS_OK(result))
-		goto done;
+		/* Check returned credentials. */
+		if (!netlogon_creds_client_check(cli->dc,
+						 &return_authenticator.cred)) {
+			DEBUG(0,("credentials chain check failed\n"));
+			return NT_STATUS_ACCESS_DENIED;
+		}
 
-        /* Display results */
+		if (NT_STATUS_IS_ERR(result)) {
+			break;
+		}
 
-/*        display_sam_sync(num_deltas, hdr_deltas, deltas); */
+		/* Display results */
 
- done:
-        return result;
+		display_sam_sync(delta_enum_array);
+
+		TALLOC_FREE(delta_enum_array);
+
+	} while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
+
+	return result;
 }
 
 /* Perform sam delta synchronisation */
diff --git a/source/utils/net_rpc_samsync.c b/source/utils/net_rpc_samsync.c
index e1f0cd3..569bbea 100644
--- a/source/utils/net_rpc_samsync.c
+++ b/source/utils/net_rpc_samsync.c
@@ -1,4 +1,4 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
    dump the remote SAM using rpc samsync operations
 
@@ -12,12 +12,12 @@
    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/>.
 */
@@ -31,57 +31,62 @@ static uint32 ldif_uid = 999;
 /* Keep track of ldap initialization */
 static int init_ldap = 1;
 
-static void display_group_mem_info(uint32 rid, SAM_GROUP_MEM_INFO *g)
+static void display_group_mem_info(uint32_t rid,
+				   struct netr_DELTA_GROUP_MEMBER *r)
 {
 	int i;
 	d_printf("Group mem %u: ", rid);
-	for (i=0;i<g->num_members;i++) {
-		d_printf("%u ", g->rids[i]);
+	for (i=0; i< r->num_rids; i++) {
+		d_printf("%u ", r->rids[i]);
 	}
 	d_printf("\n");
 }
 
-static void display_alias_info(uint32 rid, SAM_ALIAS_INFO *a)
+static void display_alias_info(uint32_t rid,
+			       struct netr_DELTA_ALIAS *r)
 {
-	d_printf("Alias '%s' ", unistr2_static(&a->uni_als_name));
-	d_printf("desc='%s' rid=%u\n", unistr2_static(&a->uni_als_desc), a->als_rid);
+	d_printf("Alias '%s' ", r->alias_name.string);
+	d_printf("desc='%s' rid=%u\n", r->description.string, r->rid);
 }
 
-static void display_alias_mem(uint32 rid, SAM_ALIAS_MEM_INFO *a)
+static void display_alias_mem(uint32_t rid,
+			      struct netr_DELTA_ALIAS_MEMBER *r)
 {
 	int i;
 	d_printf("Alias rid %u: ", rid);
-	for (i=0;i<a->num_members;i++) {
-		d_printf("%s ", sid_string_tos(&a->sids[i].sid));
+	for (i=0; i< r->sids.num_sids; i++) {
+		d_printf("%s ", sid_string_tos(r->sids.sids[i].sid));
 	}
 	d_printf("\n");
 }
 
-static void display_account_info(uint32 rid, SAM_ACCOUNT_INFO *a)
+static void display_account_info(uint32_t rid,
+				 struct netr_DELTA_USER *r)
 {
 	fstring hex_nt_passwd, hex_lm_passwd;
 	uchar lm_passwd[16], nt_passwd[16];
 	static uchar zero_buf[16];
 
 	/* Decode hashes from password hash (if they are not NULL) */
-	
-	if (memcmp(a->pass.buf_lm_pwd, zero_buf, 16) != 0) {
-		sam_pwd_hash(a->user_rid, a->pass.buf_lm_pwd, lm_passwd, 0);
-		pdb_sethexpwd(hex_lm_passwd, lm_passwd, a->acb_info);
+
+	if (memcmp(r->lmpassword.hash, zero_buf, 16) != 0) {
+		sam_pwd_hash(r->rid, r->lmpassword.hash, lm_passwd, 0);
+		pdb_sethexpwd(hex_lm_passwd, lm_passwd, r->acct_flags);
 	} else {
 		pdb_sethexpwd(hex_lm_passwd, NULL, 0);
 	}
 
-	if (memcmp(a->pass.buf_nt_pwd, zero_buf, 16) != 0) {
-		sam_pwd_hash(a->user_rid, a->pass.buf_nt_pwd, nt_passwd, 0);
-		pdb_sethexpwd(hex_nt_passwd, nt_passwd, a->acb_info);
+	if (memcmp(r->ntpassword.hash, zero_buf, 16) != 0) {
+		sam_pwd_hash(r->rid, r->ntpassword.hash, nt_passwd, 0);
+		pdb_sethexpwd(hex_nt_passwd, nt_passwd, r->acct_flags);
 	} else {
 		pdb_sethexpwd(hex_nt_passwd, NULL, 0);
 	}
-	
-	printf("%s:%d:%s:%s:%s:LCT-0\n", unistr2_static(&a->uni_acct_name),
-	       a->user_rid, hex_lm_passwd, hex_nt_passwd,
-	       pdb_encode_acct_ctrl(a->acb_info, NEW_PW_FORMAT_SPACE_PADDED_LEN));
+
+	printf("%s:%d:%s:%s:%s:LCT-0\n",
+		r->account_name.string,
+		r->rid, hex_lm_passwd, hex_nt_passwd,
+		pdb_encode_acct_ctrl(r->acct_flags, NEW_PW_FORMAT_SPACE_PADDED_LEN));
 }
 
 static time_t uint64s_nt_time_to_unix_abs(const uint64 *src)
@@ -91,102 +96,201 @@ static time_t uint64s_nt_time_to_unix_abs(const uint64 *src)
 	return nt_time_to_unix_abs(&nttime);
 }
 
-static void display_domain_info(SAM_DOMAIN_INFO *a)
+static void display_domain_info(struct netr_DELTA_DOMAIN *r)
 {
 	time_t u_logout;
 
-	u_logout = uint64s_nt_time_to_unix_abs(&a->force_logoff);
+	u_logout = uint64s_nt_time_to_unix_abs((const uint64 *)&r->force_logoff_time);
 
-	d_printf("Domain name: %s\n", unistr2_static(&a->uni_dom_name));
+	d_printf("Domain name: %s\n", r->domain_name.string);
 
-	d_printf("Minimal Password Length: %d\n", a->min_pwd_len);
-	d_printf("Password History Length: %d\n", a->pwd_history_len);
+	d_printf("Minimal Password Length: %d\n", r->min_password_length);
+	d_printf("Password History Length: %d\n", r->password_history_length);
 
 	d_printf("Force Logoff: %d\n", (int)u_logout);
 
-	d_printf("Max Password Age: %s\n", display_time(a->max_pwd_age));
-	d_printf("Min Password Age: %s\n", display_time(a->min_pwd_age));
+	d_printf("Max Password Age: %s\n", display_time(r->max_password_age));
+	d_printf("Min Password Age: %s\n", display_time(r->min_password_age));
 
+#if 0
+	/* FIXME - gd */
 	d_printf("Lockout Time: %s\n", display_time(a->account_lockout.lockout_duration));
 	d_printf("Lockout Reset Time: %s\n", display_time(a->account_lockout.reset_count));
-
 	d_printf("Bad Attempt Lockout: %d\n", a->account_lockout.bad_attempt_lockout);
-	d_printf("User must logon to change password: %d\n", a->logon_chgpass);
+#endif
+	d_printf("User must logon to change password: %d\n", r->logon_to_chgpass);
 }
 
-static void display_group_info(uint32 rid, SAM_GROUP_INFO *a)
+static void display_group_info(uint32_t rid, struct netr_DELTA_GROUP *r)
 {
-	d_printf("Group '%s' ", unistr2_static(&a->uni_grp_name));
-	d_printf("desc='%s', rid=%u\n", unistr2_static(&a->uni_grp_desc), rid);
+	d_printf("Group '%s' ", r->group_name.string);
+	d_printf("desc='%s', rid=%u\n", r->description.string, rid);
 }
 
-static void display_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta)
+static void display_sam_entry(struct netr_DELTA_ENUM *r)
 {
-	switch (hdr_delta->type) {
-	case SAM_DELTA_ACCOUNT_INFO:
-		display_account_info(hdr_delta->target_rid, &delta->account_info);
+	union netr_DELTA_UNION u = r->delta_union;
+	union netr_DELTA_ID_UNION id = r->delta_id_union;
+
+	switch (r->delta_type) {
+	case NETR_DELTA_DOMAIN:
+		display_domain_info(u.domain);
+		break;
+	case NETR_DELTA_GROUP:
+		display_group_info(id.rid, u.group);
+		break;
+#if 0
+	case NETR_DELTA_DELETE_GROUP:
+		printf("Delete Group: %d\n",
+			u.delete_account.unknown);
+		break;
+	case NETR_DELTA_RENAME_GROUP:
+		printf("Rename Group: %s -> %s\n",
+			u.rename_group->OldName.string,
+			u.rename_group->NewName.string);
+		break;
+#endif
+	case NETR_DELTA_USER:
+		display_account_info(id.rid, u.user);
+		break;
+#if 0
+	case NETR_DELTA_DELETE_USER:
+		printf("Delete User: %d\n",
+			id.rid);
+		break;
+	case NETR_DELTA_RENAME_USER:
+		printf("Rename user: %s -> %s\n",
+			u.rename_user->OldName.string,
+			u.rename_user->NewName.string);
+		break;
+#endif
+	case NETR_DELTA_GROUP_MEMBER:
+		display_group_mem_info(id.rid, u.group_member);
+		break;
+	case NETR_DELTA_ALIAS:
+		display_alias_info(id.rid, u.alias);
+		break;
+#if 0
+	case NETR_DELTA_DELETE_ALIAS:
+		printf("Delete Alias: %d\n",
+			id.rid);
+		break;
+	case NETR_DELTA_RENAME_ALIAS:
+		printf("Rename alias: %s -> %s\n",
+			u.rename_alias->OldName.string,
+			u.rename_alias->NewName.string);
+		break;
+#endif


-- 
Samba Shared Repository


More information about the samba-cvs mailing list