From b36e2921ee01887793eef55cb5f663042ffa9b72 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 20 Mar 2006 12:14:07 +0000 Subject: r14580: add 'net sam createbuiltingroup' to map BUILTIN local groups to a gid (This used to be commit 3137fe5068e4b0c1724b92f49ca8e1d254324801) --- source3/utils/net_sam.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'source3/utils') diff --git a/source3/utils/net_sam.c b/source3/utils/net_sam.c index 78c31bb1d4..6321fab54f 100644 --- a/source3/utils/net_sam.c +++ b/source3/utils/net_sam.c @@ -454,6 +454,63 @@ static int net_sam_createlocalgroup(int argc, const char **argv) return 0; } +/* + * Create a local group + */ + +static int net_sam_createbuiltingroup(int argc, const char **argv) +{ + NTSTATUS status; + uint32 rid; + TALLOC_CTX *ctx; + enum SID_NAME_USE type; + fstring groupname; + DOM_SID sid; + + if (argc != 1) { + d_fprintf(stderr, "usage: net sam createbuiltingroup \n"); + return -1; + } + + if (!winbind_ping()) { + d_fprintf(stderr, "winbind seems not to run. createlocalgroup " + "only works when winbind runs.\n"); + return -1; + } + + if ( (ctx = talloc_init("net_sam_createbuiltingroup")) == NULL ) { + d_fprintf( stderr, "Memory allocation error\n"); + return -1; + } + + /* validate the name and get the group */ + + fstrcpy( groupname, "BUILTIN\\" ); + fstrcat( groupname, argv[0] ); + + if ( !lookup_name(ctx, groupname, LOOKUP_NAME_ALL, NULL, NULL, &sid, &type)) { + d_fprintf(stderr, "%s is not a BUILTIN group\n", argv[0]); + return -1; + } + + if ( !sid_peek_rid( &sid, &rid ) ) { + d_fprintf(stderr, "Failed to get RID for %s\n", argv[0]); + return -1; + } + + status = pdb_create_builtin_alias( rid ); + + if (!NT_STATUS_IS_OK(status)) { + d_fprintf(stderr, "Creating %s failed with %s\n", + argv[0], nt_errstr(status)); + return -1; + } + + d_printf("Created BUILTIN group %s with RID %d\n", argv[0], rid); + + return 0; +} + /* * Add a group member */ @@ -1140,6 +1197,8 @@ failed: int net_sam(int argc, const char **argv) { struct functable2 func[] = { + { "createbuiltingroup", net_sam_createbuiltingroup, + "Create a new BUILTIN group" }, { "createlocalgroup", net_sam_createlocalgroup, "Create a new local group" }, { "mapunixgroup", net_sam_mapunixgroup, -- cgit