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

Günther Deschner gd at samba.org
Fri Jul 18 15:30:08 GMT 2008


The branch, v3-3-test has been updated
       via  bf8453da9af1be788955204cc581c5143a854072 (commit)
      from  f93090037798ffb4d9b875a4320f970ae10a64b6 (commit)

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


- Log -----------------------------------------------------------------
commit bf8453da9af1be788955204cc581c5143a854072
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jul 17 22:44:24 2008 +0200

    netapi: add caching of samr policy handles.
    
    Guenther

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

Summary of changes:
 source/lib/netapi/group.c      |   73 ++++++++++++++++-----------------
 source/lib/netapi/localgroup.c |   88 +++++++++++++++++++++-------------------
 source/lib/netapi/netapi.h     |    1 +
 source/lib/netapi/user.c       |   56 ++++++++++++++------------
 4 files changed, 112 insertions(+), 106 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/lib/netapi/group.c b/source/lib/netapi/group.c
index f856ec0..15580b3 100644
--- a/source/lib/netapi/group.c
+++ b/source/lib/netapi/group.c
@@ -204,11 +204,10 @@ WERROR NetGroupAdd_r(struct libnetapi_ctx *ctx,
 	if (is_valid_policy_hnd(&group_handle)) {
 		rpccli_samr_Close(pipe_cli, ctx, &group_handle);
 	}
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
 	}
 
 	return werr;
@@ -374,11 +373,10 @@ WERROR NetGroupDel_r(struct libnetapi_ctx *ctx,
 	if (is_valid_policy_hnd(&group_handle)) {
 		rpccli_samr_Close(pipe_cli, ctx, &group_handle);
 	}
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
 	}
 
 	return werr;
@@ -562,11 +560,10 @@ WERROR NetGroupSetInfo_r(struct libnetapi_ctx *ctx,
 	if (is_valid_policy_hnd(&group_handle)) {
 		rpccli_samr_Close(pipe_cli, ctx, &group_handle);
 	}
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
 	}
 
 	return werr;
@@ -750,11 +747,10 @@ WERROR NetGroupGetInfo_r(struct libnetapi_ctx *ctx,
 	if (is_valid_policy_hnd(&group_handle)) {
 		rpccli_samr_Close(pipe_cli, ctx, &group_handle);
 	}
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
 	}
 
 	return werr;
@@ -880,11 +876,10 @@ WERROR NetGroupAddUser_r(struct libnetapi_ctx *ctx,
 	if (is_valid_policy_hnd(&group_handle)) {
 		rpccli_samr_Close(pipe_cli, ctx, &group_handle);
 	}
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
 	}
 
 	return werr;
@@ -1009,11 +1004,10 @@ WERROR NetGroupDelUser_r(struct libnetapi_ctx *ctx,
 	if (is_valid_policy_hnd(&group_handle)) {
 		rpccli_samr_Close(pipe_cli, ctx, &group_handle);
 	}
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
 	}
 
 	return werr;
@@ -1195,7 +1189,7 @@ WERROR NetGroupEnum_r(struct libnetapi_ctx *ctx,
 	uint32_t total_size = 0;
 	uint32_t returned_size = 0;
 
-	NTSTATUS status;
+	NTSTATUS status = NT_STATUS_OK;
 	WERROR werr, tmp_werr;
 
 	ZERO_STRUCT(connect_handle);
@@ -1283,14 +1277,17 @@ WERROR NetGroupEnum_r(struct libnetapi_ctx *ctx,
 	if (!cli) {
 		return werr;
 	}
-#if 0
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	/* if last query */
+	if (NT_STATUS_IS_OK(status) ||
+	    NT_STATUS_IS_ERR(status)) {
+
+		if (ctx->disable_policy_handle_cache) {
+			libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+			libnetapi_samr_close_connect_handle(ctx, &connect_handle);
+		}
 	}
-#endif
+
 	return werr;
 }
 
diff --git a/source/lib/netapi/localgroup.c b/source/lib/netapi/localgroup.c
index 2c1e9df..faf57cc 100644
--- a/source/lib/netapi/localgroup.c
+++ b/source/lib/netapi/localgroup.c
@@ -187,7 +187,9 @@ WERROR NetLocalGroupAdd_r(struct libnetapi_ctx *ctx,
 						    SAMR_ALIAS_ACCESS_LOOKUP_INFO,
 						    &alias_handle);
 
-	rpccli_samr_Close(pipe_cli, ctx, &builtin_handle);
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_builtin_handle(ctx, &builtin_handle);
+	}
 
 	if (W_ERROR_IS_OK(werr)) {
 		werr = WERR_ALIAS_EXISTS;
@@ -244,14 +246,11 @@ WERROR NetLocalGroupAdd_r(struct libnetapi_ctx *ctx,
 	if (is_valid_policy_hnd(&alias_handle)) {
 		rpccli_samr_Close(pipe_cli, ctx, &alias_handle);
 	}
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&builtin_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &builtin_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_builtin_handle(ctx, &builtin_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
 	}
 
 	return werr;
@@ -315,7 +314,9 @@ WERROR NetLocalGroupDel_r(struct libnetapi_ctx *ctx,
 						    SEC_STD_DELETE,
 						    &alias_handle);
 
-	rpccli_samr_Close(pipe_cli, ctx, &builtin_handle);
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_builtin_handle(ctx, &builtin_handle);
+	}
 
 	if (W_ERROR_IS_OK(werr)) {
 		goto delete_alias;
@@ -339,7 +340,9 @@ WERROR NetLocalGroupDel_r(struct libnetapi_ctx *ctx,
 						    SEC_STD_DELETE,
 						    &alias_handle);
 
-	rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+	}
 
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
@@ -366,14 +369,11 @@ WERROR NetLocalGroupDel_r(struct libnetapi_ctx *ctx,
 	if (is_valid_policy_hnd(&alias_handle)) {
 		rpccli_samr_Close(pipe_cli, ctx, &alias_handle);
 	}
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&builtin_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &builtin_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_builtin_handle(ctx, &builtin_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
 	}
 
 	return werr;
@@ -493,7 +493,9 @@ WERROR NetLocalGroupGetInfo_r(struct libnetapi_ctx *ctx,
 						    SAMR_ALIAS_ACCESS_LOOKUP_INFO,
 						    &alias_handle);
 
-	rpccli_samr_Close(pipe_cli, ctx, &builtin_handle);
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_builtin_handle(ctx, &builtin_handle);
+	}
 
 	if (W_ERROR_IS_OK(werr)) {
 		goto query_alias;
@@ -517,7 +519,9 @@ WERROR NetLocalGroupGetInfo_r(struct libnetapi_ctx *ctx,
 						    SAMR_ALIAS_ACCESS_LOOKUP_INFO,
 						    &alias_handle);
 
-	rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+	}
 
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
@@ -547,14 +551,11 @@ WERROR NetLocalGroupGetInfo_r(struct libnetapi_ctx *ctx,
 	if (is_valid_policy_hnd(&alias_handle)) {
 		rpccli_samr_Close(pipe_cli, ctx, &alias_handle);
 	}
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&builtin_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &builtin_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_builtin_handle(ctx, &builtin_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
 	}
 
 	return werr;
@@ -672,7 +673,9 @@ WERROR NetLocalGroupSetInfo_r(struct libnetapi_ctx *ctx,
 						    SAMR_ALIAS_ACCESS_SET_INFO,
 						    &alias_handle);
 
-	rpccli_samr_Close(pipe_cli, ctx, &builtin_handle);
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_builtin_handle(ctx, &builtin_handle);
+	}
 
 	if (W_ERROR_IS_OK(werr)) {
 		goto set_alias;
@@ -698,7 +701,9 @@ WERROR NetLocalGroupSetInfo_r(struct libnetapi_ctx *ctx,
 		goto done;
 	}
 
-	rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+	}
 
  set_alias:
 
@@ -727,14 +732,11 @@ WERROR NetLocalGroupSetInfo_r(struct libnetapi_ctx *ctx,
 	if (is_valid_policy_hnd(&alias_handle)) {
 		rpccli_samr_Close(pipe_cli, ctx, &alias_handle);
 	}
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&builtin_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &builtin_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_builtin_handle(ctx, &builtin_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
 	}
 
 	return werr;
@@ -915,9 +917,11 @@ WERROR NetLocalGroupEnum_r(struct libnetapi_ctx *ctx,
 		return werr;
 	}
 
-	libnetapi_samr_close_domain_handle(ctx, &domain_handle);
-	libnetapi_samr_close_builtin_handle(ctx, &builtin_handle);
-	libnetapi_samr_close_connect_handle(ctx, &connect_handle);
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_builtin_handle(ctx, &builtin_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
+	}
 
 	return werr;
 }
diff --git a/source/lib/netapi/netapi.h b/source/lib/netapi/netapi.h
index 300bae5..7d32ffc 100644
--- a/source/lib/netapi/netapi.h
+++ b/source/lib/netapi/netapi.h
@@ -331,6 +331,7 @@ struct libnetapi_ctx {
 	char *password;
 	char *krb5_cc_env;
 	int use_kerberos;
+	int disable_policy_handle_cache;
 
 	void *private_data;
 };
diff --git a/source/lib/netapi/user.c b/source/lib/netapi/user.c
index 2c18cd0..8d69536 100644
--- a/source/lib/netapi/user.c
+++ b/source/lib/netapi/user.c
@@ -284,11 +284,10 @@ WERROR NetUserAdd_r(struct libnetapi_ctx *ctx,
 	if (is_valid_policy_hnd(&user_handle)) {
 		rpccli_samr_Close(pipe_cli, ctx, &user_handle);
 	}
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
 	}
 
 	return werr;
@@ -410,14 +409,11 @@ WERROR NetUserDel_r(struct libnetapi_ctx *ctx,
 	if (is_valid_policy_hnd(&user_handle)) {
 		rpccli_samr_Close(pipe_cli, ctx, &user_handle);
 	}
-	if (is_valid_policy_hnd(&builtin_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &builtin_handle);
-	}
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_builtin_handle(ctx, &builtin_handle);
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
 	}
 
 	return werr;
@@ -786,11 +782,14 @@ WERROR NetUserEnum_r(struct libnetapi_ctx *ctx,
 		return werr;
 	}
 
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+	/* if last query */
+	if (NT_STATUS_IS_OK(status) ||
+	    NT_STATUS_IS_ERR(status)) {
+
+		if (ctx->disable_policy_handle_cache) {
+			libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+			libnetapi_samr_close_connect_handle(ctx, &connect_handle);
+		}
 	}
 
 	return werr;
@@ -982,7 +981,7 @@ WERROR NetQueryDisplayInformation_r(struct libnetapi_ctx *ctx,
 	uint32_t total_size = 0;
 	uint32_t returned_size = 0;
 
-	NTSTATUS status;
+	NTSTATUS status = NT_STATUS_OK;
 	WERROR werr;
 
 	ZERO_STRUCT(connect_handle);
@@ -1044,11 +1043,14 @@ WERROR NetQueryDisplayInformation_r(struct libnetapi_ctx *ctx,
 		return werr;
 	}
 
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(pipe_cli, ctx, &connect_handle);
+	/* if last query */
+	if (NT_STATUS_IS_OK(status) ||
+	    NT_STATUS_IS_ERR(status)) {
+
+		if (ctx->disable_policy_handle_cache) {
+			libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+			libnetapi_samr_close_connect_handle(ctx, &connect_handle);
+		}
 	}
 
 	return werr;
@@ -1189,8 +1191,10 @@ WERROR NetUserGetInfo_r(struct libnetapi_ctx *ctx,
 		rpccli_samr_Close(pipe_cli, ctx, &user_handle);
 	}
 
-	libnetapi_samr_close_domain_handle(ctx, &domain_handle);
-	libnetapi_samr_close_connect_handle(ctx, &connect_handle);
+	if (ctx->disable_policy_handle_cache) {
+		libnetapi_samr_close_domain_handle(ctx, &domain_handle);
+		libnetapi_samr_close_connect_handle(ctx, &connect_handle);
+	}
 
 	return werr;
 }


-- 
Samba Shared Repository


More information about the samba-cvs mailing list