]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
net: Use NetGroupAdd() for adding domain groups.
authorGünther Deschner <gd@samba.org>
Wed, 28 May 2008 12:57:35 +0000 (14:57 +0200)
committerGünther Deschner <gd@samba.org>
Mon, 2 Jun 2008 23:27:41 +0000 (01:27 +0200)
Guenther
(This used to be commit 3f0ce34c626e7d4199239faee2ea3b4933c9df26)

source3/utils/net_rpc.c

index d6a3e486fb3ec5cf63d2ed509540070809d73392..7cd7f76e10dc2101d9a68c2e739e237b51dcb460 100644 (file)
@@ -1806,75 +1806,37 @@ static int rpc_group_delete(struct net_context *c, int argc, const char **argv)
                                argc,argv);
 }
 
-static NTSTATUS rpc_group_add_internals(struct net_context *c,
-                                       const DOM_SID *domain_sid,
-                                       const char *domain_name,
-                                       struct cli_state *cli,
-                                       struct rpc_pipe_client *pipe_hnd,
-                                       TALLOC_CTX *mem_ctx,
-                                       int argc,
-                                       const char **argv)
+static int rpc_group_add_internals(struct net_context *c, int argc, const char **argv)
 {
-       POLICY_HND connect_pol, domain_pol, group_pol;
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-       union samr_GroupInfo group_info;
-       struct lsa_String grp_name;
-       uint32_t rid = 0;
+       NET_API_STATUS status;
+       struct GROUP_INFO_1 info1;
+       uint32_t parm_error = 0;
 
        if (argc != 1) {
                d_printf("Group name must be specified\n");
                rpc_group_usage(c, argc, argv);
-               return NT_STATUS_OK;
+               return 0;
        }
 
-       init_lsa_String(&grp_name, argv[0]);
-
-       /* Get sam policy handle */
-
-       result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-                                     pipe_hnd->desthost,
-                                     MAXIMUM_ALLOWED_ACCESS,
-                                     &connect_pol);
-       if (!NT_STATUS_IS_OK(result)) goto done;
-
-       /* Get domain policy handle */
-
-       result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-                                       &connect_pol,
-                                       MAXIMUM_ALLOWED_ACCESS,
-                                       CONST_DISCARD(struct dom_sid2 *, domain_sid),
-                                       &domain_pol);
-       if (!NT_STATUS_IS_OK(result)) goto done;
-
-       /* Create the group */
-
-       result = rpccli_samr_CreateDomainGroup(pipe_hnd, mem_ctx,
-                                              &domain_pol,
-                                              &grp_name,
-                                              MAXIMUM_ALLOWED_ACCESS,
-                                              &group_pol,
-                                              &rid);
-       if (!NT_STATUS_IS_OK(result)) goto done;
-
-       if (strlen(c->opt_comment) == 0) goto done;
-
-       /* We've got a comment to set */
+       ZERO_STRUCT(info1);
 
-       init_lsa_String(&group_info.description, c->opt_comment);
+       info1.grpi1_name = argv[0];
+       if (c->opt_comment && strlen(c->opt_comment) > 0) {
+               info1.grpi1_comment = c->opt_comment;
+       }
 
-       result = rpccli_samr_SetGroupInfo(pipe_hnd, mem_ctx,
-                                         &group_pol,
-                                         4,
-                                         &group_info);
-       if (!NT_STATUS_IS_OK(result)) goto done;
+       status = NetGroupAdd(c->opt_host, 1, (uint8_t *)&info1, &parm_error);
 
- done:
-       if (NT_STATUS_IS_OK(result))
-               DEBUG(5, ("add group succeeded\n"));
-       else
-               d_fprintf(stderr, "add group failed: %s\n", nt_errstr(result));
+       if (status != 0) {
+               d_fprintf(stderr, "Failed to add group '%s' with: %s.\n",
+                       argv[0], libnetapi_get_error_string(c->netapi_ctx,
+                                                           status));
+               return -1;
+       } else {
+               d_printf("Added group '%s'.\n", argv[0]);
+       }
 
-       return result;
+       return 0;
 }
 
 static NTSTATUS rpc_alias_add_internals(struct net_context *c,
@@ -1956,9 +1918,7 @@ static int rpc_group_add(struct net_context *c, int argc, const char **argv)
                                       rpc_alias_add_internals,
                                       argc, argv);
 
-       return run_rpc_command(c, NULL, PI_SAMR, 0,
-                              rpc_group_add_internals,
-                              argc, argv);
+       return rpc_group_add_internals(c, argc, argv);
 }
 
 static NTSTATUS get_sid_from_name(struct cli_state *cli,
@@ -3035,6 +2995,8 @@ static int rpc_group_rename(struct net_context *c, int argc, const char **argv)
 
 int net_rpc_group(struct net_context *c, int argc, const char **argv)
 {
+       NET_API_STATUS status;
+
        struct functable func[] = {
                {"add", rpc_group_add},
                {"delete", rpc_group_delete},
@@ -3046,6 +3008,13 @@ int net_rpc_group(struct net_context *c, int argc, const char **argv)
                {NULL, NULL}
        };
 
+       status = libnetapi_init(&c->netapi_ctx);
+       if (status != 0) {
+               return -1;
+       }
+       libnetapi_set_username(c->netapi_ctx, c->opt_user_name);
+       libnetapi_set_password(c->netapi_ctx, c->opt_password);
+
        if (argc == 0) {
                return run_rpc_command(c, NULL, PI_SAMR, 0,
                                       rpc_group_list_internals,