net: use netapi for rpc_user_rename.
authorGünther Deschner <gd@samba.org>
Tue, 26 Aug 2008 19:10:19 +0000 (21:10 +0200)
committerGünther Deschner <gd@samba.org>
Fri, 29 Aug 2008 11:57:53 +0000 (13:57 +0200)
Guenther
(This used to be commit fe28ea1afd4024673f847fc8880910b1f7f0385a)

source3/utils/net_rpc.c

index 347ddd039f101967d978e1cd9ea3fa8a2177cbad..148d243ef8f221fc05838b6f3efd1ed35aa6e214 100644 (file)
@@ -658,135 +658,37 @@ static int rpc_user_add(struct net_context *c, int argc, const char **argv)
 /**
  * Rename a user on a remote RPC server.
  *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passed through.
- *
- * @param domain_sid The domain sid acquired from the remote server.
- * @param cli A cli_state connected to the server.
- * @param mem_ctx Talloc context, destroyed on completion of the function.
  * @param argc  Standard main() style argc.
  * @param argv  Standard main() style argv. Initial components are already
  *              stripped.
  *
- * @return Normal NTSTATUS return.
+ * @return A shell status integer (0 for success).
  **/
 
-static NTSTATUS rpc_user_rename_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_user_rename(struct net_context *c, int argc, const char **argv)
 {
-       POLICY_HND connect_pol, domain_pol, user_pol;
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-       uint32 info_level = 7;
-       const char *old_name, *new_name;
-       struct samr_Ids user_rids, name_types;
-       struct lsa_String lsa_acct_name;
-       union samr_UserInfo *info = NULL;
+       NET_API_STATUS status;
+       struct USER_INFO_0 u0;
+       uint32_t parm_err = 0;
 
        if (argc != 2 || c->display_usage) {
                rpc_user_usage(c, argc, argv);
-               return NT_STATUS_OK;
-       }
-
-       old_name = argv[0];
-       new_name = argv[1];
-
-       /* 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;
-       }
-
-       init_lsa_String(&lsa_acct_name, old_name);
-
-       result = rpccli_samr_LookupNames(pipe_hnd, mem_ctx,
-                                        &domain_pol,
-                                        1,
-                                        &lsa_acct_name,
-                                        &user_rids,
-                                        &name_types);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
-       /* Open domain user */
-       result = rpccli_samr_OpenUser(pipe_hnd, mem_ctx,
-                                     &domain_pol,
-                                     MAXIMUM_ALLOWED_ACCESS,
-                                     user_rids.ids[0],
-                                     &user_pol);
-
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
-       /* Query user info */
-       result = rpccli_samr_QueryUserInfo(pipe_hnd, mem_ctx,
-                                          &user_pol,
-                                          info_level,
-                                          &info);
-
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
+               return 0;
        }
 
-       init_samr_user_info7(&info->info7, new_name);
+       u0.usri0_name = argv[1];
 
-       /* Set new name */
-       result = rpccli_samr_SetUserInfo2(pipe_hnd, mem_ctx,
-                                         &user_pol,
-                                         info_level,
-                                         info);
-
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
- done:
-       if (!NT_STATUS_IS_OK(result)) {
-               d_fprintf(stderr, "Failed to rename user from %s to %s - %s\n", old_name, new_name, 
-                        nt_errstr(result));
+       status = NetUserSetInfo(c->opt_host, argv[0],
+                               0, (uint8_t *)&u0, &parm_err);
+       if (status) {
+               d_fprintf(stderr, "Failed to rename user from %s to %s - %s\n",
+                         argv[0], argv[1],
+                         libnetapi_get_error_string(c->netapi_ctx, status));
        } else {
-               d_printf("Renamed user from %s to %s\n", old_name, new_name);
+               d_printf("Renamed user from %s to %s\n", argv[0], argv[1]);
        }
-       return result;
-}
 
-/**
- * Rename a user on a remote RPC server.
- *
- * @param argc  Standard main() style argc.
- * @param argv  Standard main() style argv. Initial components are already
- *              stripped.
- *
- * @return A shell status integer (0 for success).
- **/
-
-static int rpc_user_rename(struct net_context *c, int argc, const char **argv)
-{
-       return run_rpc_command(c, NULL, &ndr_table_samr.syntax_id, 0,
-                              rpc_user_rename_internals, argc, argv);
+       return status;
 }
 
 /**