summaryrefslogtreecommitdiff
path: root/source3/utils
diff options
context:
space:
mode:
Diffstat (limited to 'source3/utils')
-rw-r--r--source3/utils/net_sam.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/source3/utils/net_sam.c b/source3/utils/net_sam.c
index ddf4d4e162..1919b40605 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,