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

tridge at samba.org tridge at samba.org
Tue Dec 14 06:17:34 GMT 2004


Author: tridge
Date: 2004-12-14 06:17:33 +0000 (Tue, 14 Dec 2004)
New Revision: 4199

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

Log:
- added server side code for lsa_RemoveAccountRights (sharing code
  with lsa_AddAccountRights)


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	2004-12-14 06:10:45 UTC (rev 4198)
+++ branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c	2004-12-14 06:17:33 UTC (rev 4199)
@@ -1029,25 +1029,22 @@
 
 
 /* 
-  lsa_AddAccountRights
+  helper for lsa_AddAccountRights and lsa_RemoveAccountRights
 */
-static NTSTATUS lsa_AddAccountRights(struct dcesrv_call_state *dce_call, 
-				     TALLOC_CTX *mem_ctx,
-				     struct lsa_AddAccountRights *r)
+static NTSTATUS lsa_AddRemoveAccountRights(struct dcesrv_call_state *dce_call, 
+					   TALLOC_CTX *mem_ctx,
+					   struct lsa_policy_state *state,
+					   int ldb_flag,
+					   const struct dom_sid *sid,
+					   const struct lsa_RightSet *rights)
 {
-	struct dcesrv_handle *h;
-	struct lsa_policy_state *state;
 	const char *sidstr;
 	struct ldb_message msg;
 	struct ldb_message_element el;
 	int i, ret;
 	const char *dn;
 
-	DCESRV_PULL_HANDLE(h, r->in.handle, LSA_HANDLE_POLICY);
-
-	state = h->data;
-
-	sidstr = dom_sid_string(mem_ctx, r->in.sid);
+	sidstr = dom_sid_string(mem_ctx, sid);
 	if (sidstr == NULL) {
 		return NT_STATUS_NO_MEMORY;
 	}
@@ -1064,23 +1061,22 @@
 	}
 	msg.num_elements = 1;
 	msg.elements = ⪙
-	el.flags = LDB_FLAG_MOD_ADD;
+	el.flags = ldb_flag;
 	el.name = talloc_strdup(mem_ctx, "privilege");
 	if (el.name == NULL) {
 		return NT_STATUS_NO_MEMORY;
 	}
-	el.num_values = r->in.rights->count;
+	el.num_values = rights->count;
 	el.values = talloc_array_p(mem_ctx, struct ldb_val, el.num_values);
 	if (el.values == NULL) {
 		return NT_STATUS_NO_MEMORY;
 	}
 	for (i=0;i<el.num_values;i++) {
-		if (sec_privilege_id(r->in.rights->names[i].string) == -1) {
+		if (sec_privilege_id(rights->names[i].string) == -1) {
 			return NT_STATUS_NO_SUCH_PRIVILEGE;
 		}
-		el.values[i].length = strlen(r->in.rights->names[i].string);
-		el.values[i].data = talloc_strdup(mem_ctx, 
-						  r->in.rights->names[i].string);
+		el.values[i].length = strlen(rights->names[i].string);
+		el.values[i].data = talloc_strdup(mem_ctx, rights->names[i].string);
 		if (el.values[i].data == NULL) {
 			return NT_STATUS_NO_MEMORY;
 		}
@@ -1094,7 +1090,26 @@
 	return NT_STATUS_OK;
 }
 
+/* 
+  lsa_AddAccountRights
+*/
+static NTSTATUS lsa_AddAccountRights(struct dcesrv_call_state *dce_call, 
+				     TALLOC_CTX *mem_ctx,
+				     struct lsa_AddAccountRights *r)
+{
+	struct dcesrv_handle *h;
+	struct lsa_policy_state *state;
 
+	DCESRV_PULL_HANDLE(h, r->in.handle, LSA_HANDLE_POLICY);
+
+	state = h->data;
+
+	return lsa_AddRemoveAccountRights(dce_call, mem_ctx, state, 
+					  LDB_FLAG_MOD_ADD,
+					  r->in.sid, r->in.rights);
+}
+
+
 /* 
   lsa_RemoveAccountRights
 */
@@ -1102,7 +1117,16 @@
 					TALLOC_CTX *mem_ctx,
 					struct lsa_RemoveAccountRights *r)
 {
-	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+	struct dcesrv_handle *h;
+	struct lsa_policy_state *state;
+
+	DCESRV_PULL_HANDLE(h, r->in.handle, LSA_HANDLE_POLICY);
+
+	state = h->data;
+
+	return lsa_AddRemoveAccountRights(dce_call, mem_ctx, state, 
+					  LDB_FLAG_MOD_DELETE,
+					  r->in.sid, r->in.rights);
 }
 
 



More information about the samba-cvs mailing list