svn commit: samba r4695 - in branches/SAMBA_4_0/source/rpc_server/lsa: .

abartlet at samba.org abartlet at samba.org
Wed Jan 12 00:37:13 GMT 2005


Author: abartlet
Date: 2005-01-12 00:37:13 +0000 (Wed, 12 Jan 2005)
New Revision: 4695

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=4695

Log:
Leave less memory handing around on long-term TALLOC_CTX.

Add lsa_Delete() support for secrets.

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c


Changeset:
Modified: branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c	2005-01-11 22:16:14 UTC (rev 4694)
+++ branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c	2005-01-12 00:37:13 UTC (rev 4695)
@@ -105,7 +105,22 @@
 static NTSTATUS lsa_Delete(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
 			   struct lsa_Delete *r)
 {
-	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+	struct dcesrv_handle *h;
+	int ret;
+
+	DCESRV_PULL_HANDLE(h, r->in.handle, DCESRV_HANDLE_ANY);
+	if (h->wire_handle.handle_type == LSA_HANDLE_SECRET) {
+		struct lsa_secret_state *secret_state = h->data;
+		ret = samdb_delete(secret_state->sam_ctx, mem_ctx, secret_state->secret_dn);
+		talloc_free(h);
+		if (ret != 0) {
+			return NT_STATUS_INVALID_HANDLE;
+		}
+
+		return NT_STATUS_OK;
+	} 
+	
+	return NT_STATUS_INVALID_HANDLE;
 }
 
 
@@ -195,66 +210,61 @@
 	/* make sure the sam database is accessible */
 	state->sam_ctx = samdb_connect(state);
 	if (state->sam_ctx == NULL) {
-		talloc_free(state);
 		return NT_STATUS_INVALID_SYSTEM_SERVICE;
 	}
 
 	state->sidmap = sidmap_open(state);
 	if (state->sidmap == NULL) {
-		talloc_free(state);
 		return NT_STATUS_INVALID_SYSTEM_SERVICE;
 	}
 
 	/* work out the domain_dn - useful for so many calls its worth
 	   fetching here */
-	state->domain_dn = samdb_search_string(state->sam_ctx, state, NULL,
-					       "dn", "(&(objectClass=domain)(!(objectclass=builtinDomain)))");
+	state->domain_dn = talloc_reference(state, 
+					    samdb_search_string(state->sam_ctx, mem_ctx, NULL,
+								"dn", "(&(objectClass=domain)(!(objectclass=builtinDomain)))"));
 	if (!state->domain_dn) {
-		talloc_free(state);
 		return NT_STATUS_NO_SUCH_DOMAIN;		
 	}
 
 	/* work out the builtin_dn - useful for so many calls its worth
 	   fetching here */
-	state->builtin_dn = samdb_search_string(state->sam_ctx, state, NULL,
-						"dn", "objectClass=builtinDomain");
+	state->builtin_dn = talloc_reference(state, 
+					     samdb_search_string(state->sam_ctx, mem_ctx, NULL,
+						"dn", "objectClass=builtinDomain"));
 	if (!state->builtin_dn) {
-		talloc_free(state);
 		return NT_STATUS_NO_SUCH_DOMAIN;		
 	}
 
 	/* work out the system_dn - useful for so many calls its worth
 	   fetching here */
-	state->system_dn = samdb_search_string(state->sam_ctx, state, state->domain_dn,
-					       "dn", "(&(objectClass=container)(cn=System))");
+	state->system_dn = talloc_reference(state, 
+					     samdb_search_string(state->sam_ctx, mem_ctx, state->domain_dn,
+					       "dn", "(&(objectClass=container)(cn=System))"));
 	if (!state->system_dn) {
-		talloc_free(state);
 		return NT_STATUS_NO_SUCH_DOMAIN;		
 	}
 
-	sid_str = samdb_search_string(state->sam_ctx, state, NULL,
+	sid_str = samdb_search_string(state->sam_ctx, mem_ctx, NULL,
 				      "objectSid", "dn=%s", state->domain_dn);
 	if (!sid_str) {
-		talloc_free(state);
 		return NT_STATUS_NO_SUCH_DOMAIN;		
 	}
 
 	state->domain_sid = dom_sid_parse_talloc(state, sid_str);
 	if (!state->domain_sid) {
-		talloc_free(state);
 		return NT_STATUS_NO_SUCH_DOMAIN;		
 	}
 
 	state->builtin_sid = dom_sid_parse_talloc(state, SID_BUILTIN);
 	if (!state->builtin_sid) {
-		talloc_free(state);
 		return NT_STATUS_NO_SUCH_DOMAIN;		
 	}
 
-	state->domain_name = samdb_search_string(state->sam_ctx, state, NULL,
-						 "name", "dn=%s", state->domain_dn);
+	state->domain_name = talloc_reference(state, 
+					      samdb_search_string(state->sam_ctx, mem_ctx, NULL,
+								  "name", "dn=%s", state->domain_dn));
 	if (!state->domain_name) {
-		talloc_free(state);
 		return NT_STATUS_NO_SUCH_DOMAIN;		
 	}
 



More information about the samba-cvs mailing list