[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-2173-g63e6bb9

Volker Lendecke vlendec at samba.org
Tue Jun 9 12:52:02 GMT 2009


The branch, master has been updated
       via  63e6bb947ab471d408339d8592b751b0ffbca17f (commit)
       via  7e1470001613795a7699d5b11ac14e66c6ce76ce (commit)
      from  b5ca5412d86bd054b0865a3644c71624f3a8d017 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 63e6bb947ab471d408339d8592b751b0ffbca17f
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 9 14:46:55 2009 +0200

    Implement pdb_ads_delete_dom_group

commit 7e1470001613795a7699d5b11ac14e66c6ce76ce
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 9 14:46:43 2009 +0200

    Implement "net sam deletedomaingroup"

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

Summary of changes:
 source3/passdb/pdb_ads.c |   48 ++++++++++++++++++++++++++++++++++++++++-
 source3/utils/net_sam.c  |   53 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 100 insertions(+), 1 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/passdb/pdb_ads.c b/source3/passdb/pdb_ads.c
index b87d432..45aab1c 100644
--- a/source3/passdb/pdb_ads.c
+++ b/source3/passdb/pdb_ads.c
@@ -681,7 +681,53 @@ static NTSTATUS pdb_ads_create_dom_group(struct pdb_methods *m,
 static NTSTATUS pdb_ads_delete_dom_group(struct pdb_methods *m,
 					 TALLOC_CTX *mem_ctx, uint32 rid)
 {
-	return NT_STATUS_NOT_IMPLEMENTED;
+	struct pdb_ads_state *state = talloc_get_type_abort(
+		m->private_data, struct pdb_ads_state);
+	struct dom_sid sid;
+	char *sidstr;
+	struct tldap_message **msg;
+	char *dn;
+	int rc;
+
+	sid_compose(&sid, &state->domainsid, rid);
+
+	sidstr = sid_binstring(talloc_tos(), &sid);
+	NT_STATUS_HAVE_NO_MEMORY(sidstr);
+
+	rc = tldap_search_fmt(state->ld, state->domaindn, TLDAP_SCOPE_SUB,
+			      NULL, 0, 0, talloc_tos(), &msg,
+			      ("(&(objectSid=%s)(objectClass=group))"),
+			      sidstr);
+	TALLOC_FREE(sidstr);
+	if (rc != TLDAP_SUCCESS) {
+		DEBUG(10, ("ldap_search failed %s\n",
+			   tldap_errstr(debug_ctx(), state->ld, rc)));
+		return NT_STATUS_LDAP(rc);
+	}
+
+	switch talloc_array_length(msg) {
+	case 0:
+		return NT_STATUS_NO_SUCH_GROUP;
+	case 1:
+		break;
+	default:
+		return NT_STATUS_INTERNAL_DB_CORRUPTION;
+	}
+
+	if (!tldap_entry_dn(msg[0], &dn)) {
+		return NT_STATUS_INTERNAL_DB_CORRUPTION;
+	}
+
+	rc = tldap_delete(state->ld, dn, NULL, NULL);
+	if (rc != TLDAP_SUCCESS) {
+		DEBUG(10, ("ldap_delete failed: %s\n",
+			   tldap_errstr(debug_ctx(), state->ld, rc)));
+		TALLOC_FREE(dn);
+		return NT_STATUS_LDAP(rc);
+	}
+
+	TALLOC_FREE(msg);
+	return NT_STATUS_OK;
 }
 
 static NTSTATUS pdb_ads_add_group_mapping_entry(struct pdb_methods *m,
diff --git a/source3/utils/net_sam.c b/source3/utils/net_sam.c
index ddf4d4e..1919b40 100644
--- a/source3/utils/net_sam.c
+++ b/source3/utils/net_sam.c
@@ -950,6 +950,51 @@ static int net_sam_createdomaingroup(struct net_context *c, int argc,
 }
 
 /*
+ * Delete a domain group
+ */
+
+static int net_sam_deletedomaingroup(struct net_context *c, int argc,
+				     const char **argv)
+{
+	DOM_SID sid;
+	uint32_t rid;
+        enum lsa_SidType type;
+        const char *dom, *name;
+	NTSTATUS status;
+
+	if (argc != 1 || c->display_usage) {
+		d_fprintf(stderr, "usage: net sam deletelocalgroup <name>\n");
+		return -1;
+	}
+
+	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_LOCAL,
+			 &dom, &name, &sid, &type)) {
+		d_fprintf(stderr, "Could not find %s.\n", argv[0]);
+		return -1;
+	}
+
+	if (type != SID_NAME_DOM_GRP) {
+		d_fprintf(stderr, "%s is a %s, not a domain group.\n", argv[0],
+			  sid_type_lookup(type));
+		return -1;
+	}
+
+	sid_peek_rid(&sid, &rid);
+
+	status = pdb_delete_dom_group(talloc_tos(), rid);
+
+	if (!NT_STATUS_IS_OK(status)) {
+                d_fprintf(stderr, "Deleting domain group %s failed with %s\n",
+                          argv[0], nt_errstr(status));
+                return -1;
+        }
+
+	d_printf("Deleted domain group %s.\n", argv[0]);
+
+	return 0;
+}
+
+/*
  * Create a local group
  */
 
@@ -1895,6 +1940,14 @@ int net_sam(struct net_context *c, int argc, const char **argv)
 			"    Delete an existing local group"
 		},
 		{
+			"deletedomaingroup",
+			net_sam_deletedomaingroup,
+			NET_TRANSPORT_LOCAL,
+			"Delete a domain group",
+			"net sam deletedomaingroup\n"
+			"    Delete a group"
+		},
+		{
 			"mapunixgroup",
 			net_sam_mapunixgroup,
 			NET_TRANSPORT_LOCAL,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list