[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-2961-g3bcda52

Günther Deschner gd at samba.org
Mon Jun 23 21:39:32 GMT 2008


The branch, v3-3-test has been updated
       via  3bcda522f025aff249678a8a086218679fc19c6b (commit)
       via  f020c947cfb1482176af8827ed9c361d7c21e26f (commit)
       via  64b48a07e714d7eb97dd49c11d9ca62951d79524 (commit)
       via  74d431270d9b4cc1524f79fa2ad743420afef417 (commit)
       via  1dbe6ea8607549649f69e1b63cc427efe67e0778 (commit)
       via  43579907c3cbd5a4c07fe1f8da13c9a2a7db3f32 (commit)
       via  8ec64a96e43d2e55e81f725fe693178ecdc65e88 (commit)
       via  58f54f180f0a942776455ab6e813628422493dac (commit)
      from  fa803ce183376c938f92b0f31a7d89d522fd309f (commit)

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


- Log -----------------------------------------------------------------
commit 3bcda522f025aff249678a8a086218679fc19c6b
Author: Günther Deschner <gd at samba.org>
Date:   Mon Jun 23 17:29:01 2008 +0200

    net_vampire: more libnet_samsync restructuring.
    
    Guenther

commit f020c947cfb1482176af8827ed9c361d7c21e26f
Author: Günther Deschner <gd at samba.org>
Date:   Mon Jun 23 17:03:53 2008 +0200

    net_vampire: prepend libnet_ to the public samsync functions.
    
    Guenther

commit 64b48a07e714d7eb97dd49c11d9ca62951d79524
Author: Günther Deschner <gd at samba.org>
Date:   Tue Jun 17 21:53:01 2008 +0200

    net_vampire: move out display routines to one file.
    
    Guenther

commit 74d431270d9b4cc1524f79fa2ad743420afef417
Author: Günther Deschner <gd at samba.org>
Date:   Tue Jun 17 21:44:30 2008 +0200

    net_vampire: move out passdb routines to one file.
    
    Guenther

commit 1dbe6ea8607549649f69e1b63cc427efe67e0778
Author: Günther Deschner <gd at samba.org>
Date:   Tue Jun 17 21:42:27 2008 +0200

    net_vampire: fix included header.
    
    Guenther

commit 43579907c3cbd5a4c07fe1f8da13c9a2a7db3f32
Author: Günther Deschner <gd at samba.org>
Date:   Tue Jun 17 21:32:12 2008 +0200

    net_vampire: display more deltas while doing samdump.
    
    Guenther

commit 8ec64a96e43d2e55e81f725fe693178ecdc65e88
Author: Günther Deschner <gd at samba.org>
Date:   Tue Jun 17 21:22:06 2008 +0200

    net_vampire: move pull_netr_AcctLockStr() to libnet.
    
    Guenther

commit 58f54f180f0a942776455ab6e813628422493dac
Author: Günther Deschner <gd at samba.org>
Date:   Mon Jun 16 13:36:53 2008 +0200

    time: move uint64s_nt_time_to_unix_abs() to lib/time.c
    
    Guenther

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

Summary of changes:
 source/Makefile.in                     |    2 +
 source/include/proto.h                 |    1 +
 source/lib/time.c                      |    7 +
 source/libnet/libnet_proto.h           |   22 +-
 source/libnet/libnet_samsync.c         |   86 ++-
 source/libnet/libnet_samsync.h         |   26 +-
 source/libnet/libnet_samsync_display.c |  302 +++++++++
 source/libnet/libnet_samsync_ldif.c    |    2 +-
 source/libnet/libnet_samsync_passdb.c  |  789 ++++++++++++++++++++++
 source/utils/net_rpc_samsync.c         | 1143 +-------------------------------
 10 files changed, 1223 insertions(+), 1157 deletions(-)
 create mode 100644 source/libnet/libnet_samsync_display.c
 create mode 100644 source/libnet/libnet_samsync_passdb.c


Changeset truncated at 500 lines:

diff --git a/source/Makefile.in b/source/Makefile.in
index b9270b7..67d4ed1 100644
--- a/source/Makefile.in
+++ b/source/Makefile.in
@@ -894,6 +894,8 @@ SMBCONFTORT_OBJ = $(SMBCONFTORT_OBJ0) \
 LIBNET_OBJ = libnet/libnet_join.o \
 	     libnet/libnet_samsync.o \
 	     libnet/libnet_samsync_ldif.o \
+	     libnet/libnet_samsync_passdb.o \
+	     libnet/libnet_samsync_display.o \
 	     librpc/gen_ndr/ndr_libnet_join.o
 
 NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_help.o \
diff --git a/source/include/proto.h b/source/include/proto.h
index 1d30a9a..68e3926 100644
--- a/source/include/proto.h
+++ b/source/include/proto.h
@@ -1234,6 +1234,7 @@ bool nt_time_equals(const NTTIME *nt1, const NTTIME *nt2);
 void TimeInit(void);
 void get_process_uptime(struct timeval *ret_time);
 time_t nt_time_to_unix_abs(const NTTIME *nt);
+time_t uint64s_nt_time_to_unix_abs(const uint64_t *src);
 void unix_timespec_to_nt_time(NTTIME *nt, struct timespec ts);
 void unix_to_nt_time_abs(NTTIME *nt, time_t t);
 bool null_mtime(time_t mtime);
diff --git a/source/lib/time.c b/source/lib/time.c
index 17990b9..9db88b3 100644
--- a/source/lib/time.c
+++ b/source/lib/time.c
@@ -1325,6 +1325,13 @@ time_t nt_time_to_unix_abs(const NTTIME *nt)
 	return (time_t)d;
 }
 
+time_t uint64s_nt_time_to_unix_abs(const uint64_t *src)
+{
+	NTTIME nttime;
+	nttime = *src;
+	return nt_time_to_unix_abs(&nttime);
+}
+
 /****************************************************************************
  Put a 8 byte filetime from a struct timespec. Uses GMT.
 ****************************************************************************/
diff --git a/source/libnet/libnet_proto.h b/source/libnet/libnet_proto.h
index b30b94a..2440cd3 100644
--- a/source/libnet/libnet_proto.h
+++ b/source/libnet/libnet_proto.h
@@ -45,18 +45,12 @@ _PUBLIC_ void ndr_print_libnet_UnjoinCtx(struct ndr_print *ndr, const char *name
 
 /* The following definitions come from libnet/libnet_samsync.c  */
 
-NTSTATUS samsync_fix_delta_array(TALLOC_CTX *mem_ctx,
-				 DATA_BLOB *session_key,
-				 bool rid_crypt,
-				 enum netr_SamDatabaseID database_id,
-				 struct netr_DELTA_ENUM_ARRAY *r);
-NTSTATUS samsync_init_context(TALLOC_CTX *mem_ctx,
-			      const struct dom_sid *domain_sid,
-			      const char *domain_name,
-			      enum net_samsync_mode mode,
-			      struct samsync_context **ctx_p);
-NTSTATUS samsync_process_database(struct rpc_pipe_client *pipe_hnd,
-				  enum netr_SamDatabaseID database_id,
-				  samsync_fn_t callback_fn,
-				  struct samsync_context *ctx);
+NTSTATUS libnet_samsync_init_context(TALLOC_CTX *mem_ctx,
+				     const struct dom_sid *domain_sid,
+				     struct samsync_context **ctx_p);
+NTSTATUS libnet_samsync(enum netr_SamDatabaseID database_id,
+			struct samsync_context *ctx);
+NTSTATUS pull_netr_AcctLockStr(TALLOC_CTX *mem_ctx,
+			       struct lsa_BinaryString *r,
+			       struct netr_AcctLockStr **str_p);
 #endif /*  _LIBNET_PROTO_H_  */
diff --git a/source/libnet/libnet_samsync.c b/source/libnet/libnet_samsync.c
index c86c5c1..e170acc 100644
--- a/source/libnet/libnet_samsync.c
+++ b/source/libnet/libnet_samsync.c
@@ -163,11 +163,11 @@ static NTSTATUS samsync_fix_delta(TALLOC_CTX *mem_ctx,
  * callback need only do the printing or application logic
  */
 
-NTSTATUS samsync_fix_delta_array(TALLOC_CTX *mem_ctx,
-				 DATA_BLOB *session_key,
-				 bool rid_crypt,
-				 enum netr_SamDatabaseID database_id,
-				 struct netr_DELTA_ENUM_ARRAY *r)
+static NTSTATUS samsync_fix_delta_array(TALLOC_CTX *mem_ctx,
+					DATA_BLOB *session_key,
+					bool rid_crypt,
+					enum netr_SamDatabaseID database_id,
+					struct netr_DELTA_ENUM_ARRAY *r)
 {
 	NTSTATUS status;
 	int i;
@@ -188,14 +188,12 @@ NTSTATUS samsync_fix_delta_array(TALLOC_CTX *mem_ctx,
 }
 
 /**
- * samsync_init_context
+ * libnet_samsync_init_context
  */
 
-NTSTATUS samsync_init_context(TALLOC_CTX *mem_ctx,
-			      const struct dom_sid *domain_sid,
-			      const char *domain_name,
-			      enum net_samsync_mode mode,
-			      struct samsync_context **ctx_p)
+NTSTATUS libnet_samsync_init_context(TALLOC_CTX *mem_ctx,
+				     const struct dom_sid *domain_sid,
+				     struct samsync_context **ctx_p)
 {
 	struct samsync_context *ctx;
 
@@ -204,11 +202,6 @@ NTSTATUS samsync_init_context(TALLOC_CTX *mem_ctx,
 	ctx = TALLOC_ZERO_P(mem_ctx, struct samsync_context);
 	NT_STATUS_HAVE_NO_MEMORY(ctx);
 
-	ctx->mode = mode;
-
-	ctx->domain_name = talloc_strdup(mem_ctx, domain_name);
-	NT_STATUS_HAVE_NO_MEMORY(ctx->domain_name);
-
 	if (domain_sid) {
 		ctx->domain_sid = sid_dup_talloc(mem_ctx, domain_sid);
 		NT_STATUS_HAVE_NO_MEMORY(ctx->domain_sid);
@@ -271,17 +264,15 @@ static const char *samsync_debug_str(TALLOC_CTX *mem_ctx,
 }
 
 /**
- * samsync_process_database
+ * libnet_samsync
  */
 
-NTSTATUS samsync_process_database(struct rpc_pipe_client *pipe_hnd,
-				  enum netr_SamDatabaseID database_id,
-				  samsync_fn_t callback_fn,
-				  struct samsync_context *ctx)
+NTSTATUS libnet_samsync(enum netr_SamDatabaseID database_id,
+			struct samsync_context *ctx)
 {
 	NTSTATUS result;
 	TALLOC_CTX *mem_ctx;
-	const char *logon_server = pipe_hnd->desthost;
+	const char *logon_server = ctx->cli->desthost;
 	const char *computername = global_myname();
 	struct netr_Authenticator credential;
 	struct netr_Authenticator return_authenticator;
@@ -292,7 +283,7 @@ NTSTATUS samsync_process_database(struct rpc_pipe_client *pipe_hnd,
 
 	ZERO_STRUCT(return_authenticator);
 
-	if (!(mem_ctx = talloc_init("samsync_process_database"))) {
+	if (!(mem_ctx = talloc_init("libnet_samsync"))) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
@@ -305,9 +296,9 @@ NTSTATUS samsync_process_database(struct rpc_pipe_client *pipe_hnd,
 		struct netr_DELTA_ENUM_ARRAY *delta_enum_array = NULL;
 		NTSTATUS callback_status;
 
-		netlogon_creds_client_step(pipe_hnd->dc, &credential);
+		netlogon_creds_client_step(ctx->cli->dc, &credential);
 
-		result = rpccli_netr_DatabaseSync2(pipe_hnd, mem_ctx,
+		result = rpccli_netr_DatabaseSync2(ctx->cli, mem_ctx,
 						   logon_server,
 						   computername,
 						   &credential,
@@ -322,7 +313,7 @@ NTSTATUS samsync_process_database(struct rpc_pipe_client *pipe_hnd,
 		}
 
 		/* Check returned credentials. */
-		if (!netlogon_creds_client_check(pipe_hnd->dc,
+		if (!netlogon_creds_client_check(ctx->cli->dc,
 						 &return_authenticator.cred)) {
 			DEBUG(0,("credentials chain check failed\n"));
 			return NT_STATUS_ACCESS_DENIED;
@@ -332,7 +323,7 @@ NTSTATUS samsync_process_database(struct rpc_pipe_client *pipe_hnd,
 			break;
 		}
 
-		session_key = data_blob_const(pipe_hnd->dc->sess_key, 16);
+		session_key = data_blob_const(ctx->cli->dc->sess_key, 16);
 
 		samsync_fix_delta_array(mem_ctx,
 					&session_key,
@@ -341,7 +332,8 @@ NTSTATUS samsync_process_database(struct rpc_pipe_client *pipe_hnd,
 					delta_enum_array);
 
 		/* Process results */
-		callback_status = callback_fn(mem_ctx, database_id, delta_enum_array, result, ctx);
+		callback_status = ctx->delta_fn(mem_ctx, database_id,
+						delta_enum_array, result, ctx);
 		if (!NT_STATUS_IS_OK(callback_status)) {
 			result = callback_status;
 			goto out;
@@ -375,3 +367,41 @@ NTSTATUS samsync_process_database(struct rpc_pipe_client *pipe_hnd,
 
 	return result;
 }
+
+/**
+ * pull_netr_AcctLockStr
+ */
+
+NTSTATUS pull_netr_AcctLockStr(TALLOC_CTX *mem_ctx,
+			       struct lsa_BinaryString *r,
+			       struct netr_AcctLockStr **str_p)
+{
+	struct netr_AcctLockStr *str;
+	enum ndr_err_code ndr_err;
+	DATA_BLOB blob;
+
+	if (!mem_ctx || !r || !str_p) {
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	*str_p = NULL;
+
+	str = TALLOC_ZERO_P(mem_ctx, struct netr_AcctLockStr);
+	if (!str) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	blob = data_blob_const(r->array, r->length);
+
+	ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, str,
+		       (ndr_pull_flags_fn_t)ndr_pull_netr_AcctLockStr);
+
+	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+		return ndr_map_error2ntstatus(ndr_err);
+	}
+
+	*str_p = str;
+
+	return NT_STATUS_OK;
+}
+
diff --git a/source/libnet/libnet_samsync.h b/source/libnet/libnet_samsync.h
index bd64c24..03d4f53 100644
--- a/source/libnet/libnet_samsync.h
+++ b/source/libnet/libnet_samsync.h
@@ -24,6 +24,14 @@ enum net_samsync_mode {
 	NET_SAMSYNC_MODE_DUMP = 2
 };
 
+struct samsync_context;
+
+typedef NTSTATUS (*samsync_delta_fn_t)(TALLOC_CTX *,
+				       enum netr_SamDatabaseID,
+				       struct netr_DELTA_ENUM_ARRAY *,
+				       NTSTATUS,
+				       struct samsync_context *);
+
 struct samsync_context {
 	enum net_samsync_mode mode;
 	const struct dom_sid *domain_sid;
@@ -34,17 +42,23 @@ struct samsync_context {
 	char *result_message;
 	char *error_message;
 
+	struct rpc_pipe_client *cli;
+	samsync_delta_fn_t delta_fn;
 	void *private_data;
 };
 
-typedef NTSTATUS (*samsync_fn_t)(TALLOC_CTX *,
-				 enum netr_SamDatabaseID,
-				 struct netr_DELTA_ENUM_ARRAY *,
-				 NTSTATUS,
-				 struct samsync_context *);
-
 NTSTATUS fetch_sam_entries_ldif(TALLOC_CTX *mem_ctx,
 				enum netr_SamDatabaseID database_id,
 				struct netr_DELTA_ENUM_ARRAY *r,
 				NTSTATUS result,
 				struct samsync_context *ctx);
+NTSTATUS fetch_sam_entries(TALLOC_CTX *mem_ctx,
+			   enum netr_SamDatabaseID database_id,
+			   struct netr_DELTA_ENUM_ARRAY *r,
+			   NTSTATUS status,
+			   struct samsync_context *ctx);
+NTSTATUS display_sam_entries(TALLOC_CTX *mem_ctx,
+			     enum netr_SamDatabaseID database_id,
+			     struct netr_DELTA_ENUM_ARRAY *r,
+			     NTSTATUS status,
+			     struct samsync_context *ctx);
diff --git a/source/libnet/libnet_samsync_display.c b/source/libnet/libnet_samsync_display.c
new file mode 100644
index 0000000..6e9a692
--- /dev/null
+++ b/source/libnet/libnet_samsync_display.c
@@ -0,0 +1,302 @@
+/*
+   Unix SMB/CIFS implementation.
+   dump the remote SAM using rpc samsync operations
+
+   Copyright (C) Andrew Tridgell 2002
+   Copyright (C) Tim Potter 2001,2002
+   Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2005
+   Modified by Volker Lendecke 2002
+   Copyright (C) Jeremy Allison 2005.
+   Copyright (C) Guenther Deschner 2008.
+
+   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/>.
+*/
+
+#include "includes.h"
+#include "libnet/libnet.h"
+
+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< r->num_rids; i++) {
+		d_printf("%u ", r->rids[i]);
+	}
+	d_printf("\n");
+}
+
+static void display_alias_info(uint32_t rid,
+			       struct netr_DELTA_ALIAS *r)
+{
+	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_t rid,
+			      struct netr_DELTA_ALIAS_MEMBER *r)
+{
+	int i;
+	d_printf("Alias rid %u: ", rid);
+	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_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(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(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",
+		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 void display_domain_info(struct netr_DELTA_DOMAIN *r)
+{
+	time_t u_logout;
+	struct netr_AcctLockStr *lockstr = NULL;
+	NTSTATUS status;
+	TALLOC_CTX *mem_ctx = talloc_tos();
+
+	status = pull_netr_AcctLockStr(mem_ctx, &r->account_lockout,
+				       &lockstr);
+	if (!NT_STATUS_IS_OK(status)) {
+		d_printf("failed to pull account lockout string: %s\n",
+			nt_errstr(status));
+	}
+
+	u_logout = uint64s_nt_time_to_unix_abs((const uint64 *)&r->force_logoff_time);
+
+	d_printf("Domain name: %s\n", r->domain_name.string);
+
+	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(r->max_password_age));
+	d_printf("Min Password Age: %s\n", display_time(r->min_password_age));
+
+	if (lockstr) {
+		d_printf("Lockout Time: %s\n", display_time((NTTIME)lockstr->lockout_duration));
+		d_printf("Lockout Reset Time: %s\n", display_time((NTTIME)lockstr->reset_count));
+		d_printf("Bad Attempt Lockout: %d\n", lockstr->bad_attempt_lockout);
+	}
+
+	d_printf("User must logon to change password: %d\n", r->logon_to_chgpass);
+}
+
+static void display_group_info(uint32_t rid, struct netr_DELTA_GROUP *r)
+{
+	d_printf("Group '%s' ", r->group_name.string);
+	d_printf("desc='%s', rid=%u\n", r->description.string, rid);
+}
+
+static void display_delete_group(uint32_t rid)
+{
+	d_printf("Delete Group '%d' ", rid);
+}
+
+static void display_rename_group(uint32_t rid, struct netr_DELTA_RENAME *r)
+{
+	d_printf("Rename Group '%d' ", rid);
+	d_printf("Rename Group: %s -> %s\n",
+		r->OldName.string, r->NewName.string);
+}
+
+static void display_delete_user(uint32_t rid)
+{
+	d_printf("Delete User '%d' ", rid);
+}
+
+static void display_rename_user(uint32_t rid, struct netr_DELTA_RENAME *r)
+{
+	d_printf("Rename User '%d' ", rid);
+	d_printf("Rename User: %s -> %s\n",
+		r->OldName.string, r->NewName.string);
+}
+
+static void display_delete_alias(uint32_t rid)
+{
+	d_printf("Delete Alias '%d' ", rid);
+}
+
+static void display_rename_alias(uint32_t rid, struct netr_DELTA_RENAME *r)
+{
+	d_printf("Rename Alias '%d' ", rid);
+	d_printf("Rename Alias: %s -> %s\n",
+		r->OldName.string, r->NewName.string);
+}
+
+static NTSTATUS display_sam_entry(TALLOC_CTX *mem_ctx,
+				  enum netr_SamDatabaseID database_id,
+				  struct netr_DELTA_ENUM *r,
+				  NTSTATUS status,
+				  struct samsync_context *ctx)
+{
+	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;
+	case NETR_DELTA_DELETE_GROUP:
+		display_delete_group(id.rid);
+		break;
+	case NETR_DELTA_RENAME_GROUP:
+		display_rename_group(id.rid, u.rename_group);
+		break;
+	case NETR_DELTA_USER:
+		display_account_info(id.rid, u.user);
+		break;
+	case NETR_DELTA_DELETE_USER:
+		display_delete_user(id.rid);
+		break;
+	case NETR_DELTA_RENAME_USER:
+		display_rename_user(id.rid, u.rename_user);
+		break;
+	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;
+	case NETR_DELTA_DELETE_ALIAS:
+		display_delete_alias(id.rid);
+		break;
+	case NETR_DELTA_RENAME_ALIAS:
+		display_rename_alias(id.rid, u.rename_alias);
+		break;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list