r14580: add 'net sam createbuiltingroup' to map BUILTIN local groups to a gid
authorGerald Carter <jerry@samba.org>
Mon, 20 Mar 2006 12:14:07 +0000 (12:14 +0000)
committerGerald Carter <jerry@samba.org>
Mon, 20 Mar 2006 12:14:07 +0000 (12:14 +0000)
source/utils/net_sam.c

index ed7d459cdf5ee964543f78e0d808bcd02d08bfd2..c84fb7d070c3da8a51d09e969fdcc984ee03f18d 100644 (file)
@@ -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 <name>\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
  */
@@ -1141,6 +1198,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,