[SCM] Samba Shared Repository - branch v4-11-test updated

Karolin Seeger kseeger at samba.org
Mon May 4 11:36:02 UTC 2020


The branch, v4-11-test has been updated
       via  24e21906a33 s3: pass DCE RPC handle type to create_policy_hnd
       via  08c012642f7 ctdb: Fix a memleak
       via  40a7250da76 libsmb: Don't try to find posix stat info in SMBC_getatr()
      from  e12887cdaec VERSION: Bump version up to 4.11.9.

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-11-test


- Log -----------------------------------------------------------------
commit 24e21906a339488d84a740783eb1d47e15ffc195
Author: Alexander Bokovoy <ab at samba.org>
Date:   Tue Apr 28 21:59:46 2020 +0300

    s3: pass DCE RPC handle type to create_policy_hnd
    
    Various RPC services expect policy handles of a specific type.
    
    s3 RPC server did not allow to create policy handles with a specific
    type while actually requiring that policy handle type itself in some
    places.
    
    Make sure we are able to specify the policy on-wire handle type when
    creating the policy handle. The changes follow s4 DCE RPC server
    implementation.
    
    The original logic to always set on-wire handle type to 0 can be tracked
    down to commit fdeea341ed1bae670382e45eb731db1b5838ad21 when we didn't
    really know about differences in on-wire handle types.
    
    All but LSA trusted domain RPC calls do not check the on-wire handle
    type in s3 RPC server.
    
    Fixes trusted domain operations when Samba RPC client attempts to call
    s3 RPC server to perform lsa_lsaRSetForestTrustInformation in FreeIPA.
    This fix is a pre-requisite for FreeIPA-FreeIPA forest trust.
    
    Signed-off-by: Alexander Bokovoy <ab at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Tue Apr 28 22:55:29 UTC 2020 on sn-devel-184
    
    (cherry picked from commit c7a4578d06427a82ead287f0c5248c1a54cc9336)
    
    Autobuild-User(v4-11-test): Karolin Seeger <kseeger at samba.org>
    Autobuild-Date(v4-11-test): Mon May  4 11:35:51 UTC 2020 on sn-devel-184

commit 08c012642f710c9005d2d89d5e5d3d89deb6d8e1
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Apr 16 14:38:34 2020 +0200

    ctdb: Fix a memleak
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=14348
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Martin Schwenke <martin at meltin.net>
    
    Autobuild-User(master): Martin Schwenke <martins at samba.org>
    Autobuild-Date(master): Fri Apr 17 08:32:35 UTC 2020 on sn-devel-184
    
    (cherry picked from commit ad4b53f2d95de3d3609f3a23d96602f3dd516705)

commit 40a7250da766e2ff24c36cb7efda8d6202136d6c
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Mar 19 11:01:41 2020 +0100

    libsmb: Don't try to find posix stat info in SMBC_getatr()
    
    This wrongly used "frame" instead of "fname", which can never have
    worked. A first attempt to fix in 51551e0d53fa6 caused a few followup
    patches in an attempt to clean up the test failures 51551e0d53fa6
    introduced. They were reverted after a few discussions. So rather than
    changing behaviour, just remove the code that introduced the valgrind
    error again.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Fri Mar 20 05:06:07 UTC 2020 on sn-devel-184
    
    (cherry picked from commit 39c910fd9cba3caf7414274b678b9eee33d7e20b)

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

Summary of changes:
 ctdb/server/ctdb_recoverd.c                   |  1 +
 source3/include/libsmb_internal.h             |  1 -
 source3/libsmb/libsmb_file.c                  | 20 -------
 source3/libsmb/libsmb_server.c                |  9 ---
 source3/rpc_server/epmapper/srv_epmapper.c    |  7 ++-
 source3/rpc_server/eventlog/srv_eventlog_nt.c |  2 +-
 source3/rpc_server/lsa/srv_lsa_nt.c           |  2 +-
 source3/rpc_server/mdssvc/srv_mdssvc_nt.c     |  2 +-
 source3/rpc_server/rpc_handles.c              | 30 ++++++----
 source3/rpc_server/rpc_pipes.h                | 19 ++++--
 source3/rpc_server/samr/srv_samr_nt.c         | 84 ++++++++++++++++++++-------
 source3/rpc_server/spoolss/srv_spoolss_nt.c   |  2 +-
 source3/rpc_server/svcctl/srv_svcctl_nt.c     |  2 +-
 source3/rpc_server/winreg/srv_winreg_nt.c     |  6 +-
 14 files changed, 109 insertions(+), 78 deletions(-)


Changeset truncated at 500 lines:

diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c
index ef453d4737b..2c029256c02 100644
--- a/ctdb/server/ctdb_recoverd.c
+++ b/ctdb/server/ctdb_recoverd.c
@@ -2078,6 +2078,7 @@ static int verify_local_ip_allocation(struct ctdb_context *ctdb,
 	/* Return early if disabled... */
 	if (ctdb_config.failover_disabled ||
 	    ctdb_op_is_disabled(rec->takeover_run)) {
+		talloc_free(mem_ctx);
 		return  0;
 	}
 
diff --git a/source3/include/libsmb_internal.h b/source3/include/libsmb_internal.h
index af56df58792..edd19c7c15b 100644
--- a/source3/include/libsmb_internal.h
+++ b/source3/include/libsmb_internal.h
@@ -76,7 +76,6 @@ typedef struct DOS_ATTR_DESC {
 struct _SMBCSRV {
 	struct cli_state *cli;
 	dev_t dev;
-	bool try_posixinfo;
 	bool no_pathinfo;
 	bool no_pathinfo2;
 	bool no_pathinfo3;
diff --git a/source3/libsmb/libsmb_file.c b/source3/libsmb/libsmb_file.c
index 1577010e490..f0a16c61a83 100644
--- a/source3/libsmb/libsmb_file.c
+++ b/source3/libsmb/libsmb_file.c
@@ -504,26 +504,6 @@ SMBC_getatr(SMBCCTX * context,
 		return False;
 	}
 
-	if (srv->try_posixinfo) {
-		SMB_STRUCT_STAT sbuf;
-
-		status = cli_posix_stat(targetcli, frame, &sbuf);
-		if (NT_STATUS_IS_OK(status)) {
-			setup_stat_from_stat_ex(&sbuf, path, sb);
-
-			TALLOC_FREE(frame);
-			return true;
-		}
-		if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED) ||
-		    NT_STATUS_EQUAL(status, NT_STATUS_INVALID_LEVEL)) {
-			/*
-			 * Turn this off if the server doesn't
-			 * support it.
-			 */
-			srv->try_posixinfo = false;
-		}
-	}
-
 	if (!srv->no_pathinfo2) {
 		status = cli_qpathinfo2(targetcli,
 					targetpath,
diff --git a/source3/libsmb/libsmb_server.c b/source3/libsmb/libsmb_server.c
index d4f71d8c8b7..0067df48cac 100644
--- a/source3/libsmb/libsmb_server.c
+++ b/source3/libsmb/libsmb_server.c
@@ -657,15 +657,6 @@ SMBC_server_internal(TALLOC_CTX *ctx,
 	ZERO_STRUCTP(srv);
 	DLIST_ADD(srv->cli, c);
 	srv->dev = (dev_t)(str_checksum(server) ^ str_checksum(share));
-	srv->try_posixinfo = false;
-	/*
-	 * Until SMB2 POSIX is done, only
-	 * try POSIX stat on SMB1 with POSIX capabilities.
-	 */
-	if ((smbXcli_conn_protocol(c->conn) < PROTOCOL_SMB2_02) &&
-	    (smb1cli_conn_capabilities(c->conn) & CAP_UNIX)) {
-		srv->try_posixinfo = true;
-	}
         srv->no_pathinfo = False;
         srv->no_pathinfo2 = False;
 	srv->no_pathinfo3 = False;
diff --git a/source3/rpc_server/epmapper/srv_epmapper.c b/source3/rpc_server/epmapper/srv_epmapper.c
index d0e2d546c47..6fab4652aa9 100644
--- a/source3/rpc_server/epmapper/srv_epmapper.c
+++ b/source3/rpc_server/epmapper/srv_epmapper.c
@@ -27,6 +27,9 @@
 #include "srv_epmapper.h"
 #include "auth.h"
 
+/* handle types for this module */
+enum handle_types {HTYPE_LOOKUP};
+
 typedef uint32_t error_status_t;
 
 /* An endpoint combined with an interface description */
@@ -681,7 +684,7 @@ error_status_t _epm_Lookup(struct pipes_struct *p,
 			goto done;
 		}
 
-		ok = create_policy_hnd(p, r->out.entry_handle, eps);
+		ok = create_policy_hnd(p, r->out.entry_handle, HTYPE_LOOKUP, eps);
 		if (!ok) {
 			rc = EPMAPPER_STATUS_NO_MEMORY;
 			goto done;
@@ -1073,7 +1076,7 @@ error_status_t _epm_Map(struct pipes_struct *p,
 		}
 		/* end of "some algorithm" */
 
-		ok = create_policy_hnd(p, r->out.entry_handle, eps);
+		ok = create_policy_hnd(p, r->out.entry_handle, HTYPE_LOOKUP, eps);
 		if (!ok) {
 			rc = EPMAPPER_STATUS_NO_MEMORY;
 			goto done;
diff --git a/source3/rpc_server/eventlog/srv_eventlog_nt.c b/source3/rpc_server/eventlog/srv_eventlog_nt.c
index 5093125a6f6..1435403351c 100644
--- a/source3/rpc_server/eventlog/srv_eventlog_nt.c
+++ b/source3/rpc_server/eventlog/srv_eventlog_nt.c
@@ -267,7 +267,7 @@ static NTSTATUS elog_open( struct pipes_struct * p, const char *logname, struct
 
 	/* create the policy handle */
 
-	if ( !create_policy_hnd( p, hnd, elog ) ) {
+	if ( !create_policy_hnd( p, hnd, 0, elog ) ) {
 		TALLOC_FREE(elog);
 		return NT_STATUS_NO_MEMORY;
 	}
diff --git a/source3/rpc_server/lsa/srv_lsa_nt.c b/source3/rpc_server/lsa/srv_lsa_nt.c
index 4adb3b2bf6c..614cc06261a 100644
--- a/source3/rpc_server/lsa/srv_lsa_nt.c
+++ b/source3/rpc_server/lsa/srv_lsa_nt.c
@@ -371,7 +371,7 @@ static NTSTATUS create_lsa_policy_handle(TALLOC_CTX *mem_ctx,
 		}
 	}
 
-	if (!create_policy_hnd(p, handle, info)) {
+	if (!create_policy_hnd(p, handle, type, info)) {
 		talloc_free(info);
 		ZERO_STRUCTP(handle);
 		return NT_STATUS_NO_MEMORY;
diff --git a/source3/rpc_server/mdssvc/srv_mdssvc_nt.c b/source3/rpc_server/mdssvc/srv_mdssvc_nt.c
index c4bf995ce14..28a5a8c6860 100644
--- a/source3/rpc_server/mdssvc/srv_mdssvc_nt.c
+++ b/source3/rpc_server/mdssvc/srv_mdssvc_nt.c
@@ -124,7 +124,7 @@ static NTSTATUS create_mdssvc_policy_handle(TALLOC_CTX *mem_ctx,
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
-	if (!create_policy_hnd(p, handle, mds_ctx)) {
+	if (!create_policy_hnd(p, handle, 0, mds_ctx)) {
 		talloc_free(mds_ctx);
 		ZERO_STRUCTP(handle);
 		return NT_STATUS_NO_MEMORY;
diff --git a/source3/rpc_server/rpc_handles.c b/source3/rpc_server/rpc_handles.c
index cf5bc2770ea..99fc2490dd0 100644
--- a/source3/rpc_server/rpc_handles.c
+++ b/source3/rpc_server/rpc_handles.c
@@ -250,8 +250,11 @@ bool init_pipe_handles(struct pipes_struct *p, const struct ndr_syntax_id *synta
   data_ptr is TALLOC_FREE()'ed
 ****************************************************************************/
 
-static struct dcesrv_handle *create_rpc_handle_internal(struct pipes_struct *p,
-				struct policy_handle *hnd, void *data_ptr)
+static struct dcesrv_handle *create_rpc_handle_internal(
+				struct pipes_struct *p,
+				struct policy_handle *hnd,
+				uint8_t handle_type,
+				void *data_ptr)
 {
 	struct dcesrv_handle *rpc_hnd;
 	static uint32_t pol_hnd_low  = 0;
@@ -279,8 +282,7 @@ static struct dcesrv_handle *create_rpc_handle_internal(struct pipes_struct *p,
 		pol_hnd_high++;
 	}
 
-	/* first bit must be null */
-	SIVAL(&rpc_hnd->wire_handle.handle_type, 0 , 0);
+	rpc_hnd->wire_handle.handle_type = handle_type;
 
 	/* second bit is incrementing */
 	SIVAL(&rpc_hnd->wire_handle.uuid.time_low, 0 , pol_hnd_low);
@@ -307,12 +309,14 @@ static struct dcesrv_handle *create_rpc_handle_internal(struct pipes_struct *p,
 	return rpc_hnd;
 }
 
-bool create_policy_hnd(struct pipes_struct *p, struct policy_handle *hnd,
-		       void *data_ptr)
+bool create_policy_hnd(struct pipes_struct *p,
+			struct policy_handle *hnd,
+			uint8_t handle_type,
+			void *data_ptr)
 {
 	struct dcesrv_handle *rpc_hnd;
 
-	rpc_hnd = create_rpc_handle_internal(p, hnd, data_ptr);
+	rpc_hnd = create_rpc_handle_internal(p, hnd, handle_type, data_ptr);
 	if (rpc_hnd == NULL) {
 		return false;
 	}
@@ -448,9 +452,13 @@ bool pipe_access_check(struct pipes_struct *p)
 	return True;
 }
 
-void *_policy_handle_create(struct pipes_struct *p, struct policy_handle *hnd,
-			    uint32_t access_granted, size_t data_size,
-			    const char *type, NTSTATUS *pstatus)
+void *_policy_handle_create(struct pipes_struct *p,
+			struct policy_handle *hnd,
+			uint8_t handle_type,
+			uint32_t access_granted,
+			size_t data_size,
+			const char *type,
+			NTSTATUS *pstatus)
 {
 	struct dcesrv_handle *rpc_hnd;
 	void *data;
@@ -472,7 +480,7 @@ void *_policy_handle_create(struct pipes_struct *p, struct policy_handle *hnd,
 	}
 	talloc_set_name_const(data, type);
 
-	rpc_hnd = create_rpc_handle_internal(p, hnd, data);
+	rpc_hnd = create_rpc_handle_internal(p, hnd, handle_type, data);
 	if (rpc_hnd == NULL) {
 		TALLOC_FREE(data);
 		*pstatus = NT_STATUS_NO_MEMORY;
diff --git a/source3/rpc_server/rpc_pipes.h b/source3/rpc_server/rpc_pipes.h
index 8a8f8e58169..5cdf2fdf6a2 100644
--- a/source3/rpc_server/rpc_pipes.h
+++ b/source3/rpc_server/rpc_pipes.h
@@ -199,18 +199,25 @@ int close_internal_rpc_pipe_hnd(struct pipes_struct *p);
 
 size_t num_pipe_handles(struct pipes_struct *p);
 bool init_pipe_handles(struct pipes_struct *p, const struct ndr_syntax_id *syntax);
-bool create_policy_hnd(struct pipes_struct *p, struct policy_handle *hnd, void *data_ptr);
+bool create_policy_hnd(struct pipes_struct *p,
+			struct policy_handle *hnd,
+			uint8_t handle_type,
+			void *data_ptr);
 bool find_policy_by_hnd(struct pipes_struct *p, const struct policy_handle *hnd,
 			void **data_p);
 bool close_policy_hnd(struct pipes_struct *p, struct policy_handle *hnd);
 void close_policy_by_pipe(struct pipes_struct *p);
 bool pipe_access_check(struct pipes_struct *p);
 
-void *_policy_handle_create(struct pipes_struct *p, struct policy_handle *hnd,
-			    uint32_t access_granted, size_t data_size,
-			    const char *type, NTSTATUS *pstatus);
-#define policy_handle_create(_p, _hnd, _access, _type, _pstatus) \
-	(_type *)_policy_handle_create((_p), (_hnd), (_access), sizeof(_type), #_type, \
+void *_policy_handle_create(struct pipes_struct *p,
+			struct policy_handle *hnd,
+			uint8_t handle_type,
+			uint32_t access_granted,
+			size_t data_size,
+			const char *type,
+			NTSTATUS *pstatus);
+#define policy_handle_create(_p, _hnd, _hnd_type, _access, _type, _pstatus) \
+	(_type *)_policy_handle_create((_p), (_hnd), (_hnd_type), (_access), sizeof(_type), #_type, \
 				       (_pstatus))
 
 void *_policy_handle_find(struct pipes_struct *p,
diff --git a/source3/rpc_server/samr/srv_samr_nt.c b/source3/rpc_server/samr/srv_samr_nt.c
index 124d6d38cd7..7b8c42271bb 100644
--- a/source3/rpc_server/samr/srv_samr_nt.c
+++ b/source3/rpc_server/samr/srv_samr_nt.c
@@ -62,6 +62,14 @@
 #define MAX_SAM_ENTRIES_W2K 0x400 /* 1024 */
 #define MAX_SAM_ENTRIES_W95 50
 
+enum samr_handle {
+	SAMR_HANDLE_CONNECT,
+	SAMR_HANDLE_DOMAIN,
+	SAMR_HANDLE_USER,
+	SAMR_HANDLE_GROUP,
+	SAMR_HANDLE_ALIAS
+};
+
 struct samr_connect_info {
 	uint8_t dummy;
 };
@@ -495,8 +503,12 @@ NTSTATUS _samr_OpenDomain(struct pipes_struct *p,
 		return NT_STATUS_NO_SUCH_DOMAIN;
 	}
 
-	dinfo = policy_handle_create(p, r->out.domain_handle, acc_granted,
-				     struct samr_domain_info, &status);
+	dinfo = policy_handle_create(p,
+				r->out.domain_handle,
+				SAMR_HANDLE_DOMAIN,
+				acc_granted,
+				struct samr_domain_info,
+				&status);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -2214,8 +2226,12 @@ NTSTATUS _samr_OpenUser(struct pipes_struct *p,
 	/* If we did the rid admins hack above, allow access. */
 	acc_granted |= extra_access;
 
-	uinfo = policy_handle_create(p, r->out.user_handle, acc_granted,
-				     struct samr_user_info, &nt_status);
+	uinfo = policy_handle_create(p,
+				r->out.user_handle,
+				SAMR_HANDLE_USER,
+				acc_granted,
+				struct samr_user_info,
+				&nt_status);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		return nt_status;
 	}
@@ -3776,8 +3792,12 @@ NTSTATUS _samr_CreateUser2(struct pipes_struct *p,
 		return nt_status;
 	}
 
-	uinfo = policy_handle_create(p, r->out.user_handle, acc_granted,
-				     struct samr_user_info, &nt_status);
+	uinfo = policy_handle_create(p,
+				r->out.user_handle,
+				SAMR_HANDLE_USER,
+				acc_granted,
+				struct samr_user_info,
+				&nt_status);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		return nt_status;
 	}
@@ -3845,9 +3865,12 @@ NTSTATUS _samr_Connect(struct pipes_struct *p,
 
 	/* set up the SAMR connect_anon response */
 
-	(void)policy_handle_create(p, &hnd, acc_granted,
-				    struct samr_connect_info,
-				    &status);
+	(void)policy_handle_create(p,
+				&hnd,
+				SAMR_HANDLE_CONNECT,
+				acc_granted,
+				struct samr_connect_info,
+				&status);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -3909,8 +3932,12 @@ NTSTATUS _samr_Connect2(struct pipes_struct *p,
 	if ( !NT_STATUS_IS_OK(nt_status) )
 		return nt_status;
 
-	(void)policy_handle_create(p, &hnd, acc_granted,
-				    struct samr_connect_info, &nt_status);
+	(void)policy_handle_create(p,
+				&hnd,
+				SAMR_HANDLE_CONNECT,
+				acc_granted,
+				struct samr_connect_info,
+				&nt_status);
         if (!NT_STATUS_IS_OK(nt_status)) {
                 return nt_status;
         }
@@ -4146,8 +4173,12 @@ NTSTATUS _samr_OpenAlias(struct pipes_struct *p,
 
 	}
 
-	ainfo = policy_handle_create(p, r->out.alias_handle, acc_granted,
-				     struct samr_alias_info, &status);
+	ainfo = policy_handle_create(p,
+				r->out.alias_handle,
+				SAMR_HANDLE_ALIAS,
+				acc_granted,
+				struct samr_alias_info,
+				&status);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -5818,9 +5849,12 @@ NTSTATUS _samr_CreateDomainGroup(struct pipes_struct *p,
 	if ( !NT_STATUS_IS_OK(status) )
 		return status;
 
-	ginfo = policy_handle_create(p, r->out.group_handle,
-				     GENERIC_RIGHTS_GROUP_ALL_ACCESS,
-				     struct samr_group_info, &status);
+	ginfo = policy_handle_create(p,
+				r->out.group_handle,
+				SAMR_HANDLE_GROUP,
+				GENERIC_RIGHTS_GROUP_ALL_ACCESS,
+				struct samr_group_info,
+				&status);
         if (!NT_STATUS_IS_OK(status)) {
                 return status;
         }
@@ -5892,9 +5926,12 @@ NTSTATUS _samr_CreateDomAlias(struct pipes_struct *p,
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	ainfo = policy_handle_create(p, r->out.alias_handle,
-				     GENERIC_RIGHTS_ALIAS_ALL_ACCESS,
-				     struct samr_alias_info, &result);
+	ainfo = policy_handle_create(p,
+				r->out.alias_handle,
+				SAMR_HANDLE_ALIAS,
+				GENERIC_RIGHTS_ALIAS_ALL_ACCESS,
+				struct samr_alias_info,
+				&result);
         if (!NT_STATUS_IS_OK(result)) {
                 return result;
         }
@@ -6296,9 +6333,12 @@ NTSTATUS _samr_OpenGroup(struct pipes_struct *p,
 
 	TALLOC_FREE(map);
 
-	ginfo = policy_handle_create(p, r->out.group_handle,
-				     acc_granted,
-				     struct samr_group_info, &status);
+	ginfo = policy_handle_create(p,
+				r->out.group_handle,
+				SAMR_HANDLE_GROUP,
+				acc_granted,
+				struct samr_group_info,
+				&status);
         if (!NT_STATUS_IS_OK(status)) {
                 return status;
         }
diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c
index f32b465afb6..a00fc032a03 100644
--- a/source3/rpc_server/spoolss/srv_spoolss_nt.c
+++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c
@@ -713,7 +713,7 @@ static WERROR open_printer_hnd(struct pipes_struct *p,
 	talloc_set_destructor(new_printer, printer_entry_destructor);
 
 	/* This also steals the printer_handle on the policy_handle */
-	if (!create_policy_hnd(p, hnd, new_printer)) {
+	if (!create_policy_hnd(p, hnd, 0, new_printer)) {
 		TALLOC_FREE(new_printer);
 		return WERR_INVALID_HANDLE;
 	}
diff --git a/source3/rpc_server/svcctl/srv_svcctl_nt.c b/source3/rpc_server/svcctl/srv_svcctl_nt.c
index ae787066873..9ba6fbb1fce 100644
--- a/source3/rpc_server/svcctl/srv_svcctl_nt.c
+++ b/source3/rpc_server/svcctl/srv_svcctl_nt.c
@@ -257,7 +257,7 @@ static WERROR create_open_service_handle(struct pipes_struct *p,
 
 	/* store the SERVICE_INFO and create an open handle */
 
-	if ( !create_policy_hnd( p, handle, info ) ) {
+	if ( !create_policy_hnd( p, handle, 0, info ) ) {
 		result = WERR_ACCESS_DENIED;
 		goto done;
 	}
diff --git a/source3/rpc_server/winreg/srv_winreg_nt.c b/source3/rpc_server/winreg/srv_winreg_nt.c
index e42f0ba203e..93f7804a9f5 100644
--- a/source3/rpc_server/winreg/srv_winreg_nt.c
+++ b/source3/rpc_server/winreg/srv_winreg_nt.c
@@ -34,6 +34,8 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
 
+enum handle_types { HTYPE_REGVAL, HTYPE_REGKEY };
+
 /******************************************************************
  Find a registry key handle and return a struct registry_key *
  *****************************************************************/
@@ -81,7 +83,7 @@ static WERROR open_registry_key(struct pipes_struct *p,
 		return result;
 	}
 
-	if ( !create_policy_hnd( p, hnd, key ) ) {
+	if ( !create_policy_hnd( p, hnd, HTYPE_REGKEY, key ) ) {
 		return WERR_FILE_NOT_FOUND;
 	}
 
@@ -705,7 +707,7 @@ WERROR _winreg_CreateKey(struct pipes_struct *p,
 		return result;
 	}
 
-	if (!create_policy_hnd(p, r->out.new_handle, new_key)) {
+	if (!create_policy_hnd(p, r->out.new_handle, HTYPE_REGKEY, new_key)) {
 		TALLOC_FREE(new_key);
 		return WERR_FILE_NOT_FOUND;
 	}


-- 
Samba Shared Repository



More information about the samba-cvs mailing list