The branch, v3-4-test has been updated
       via  92117cd56692303b2018299cd43f229b0db59066 (commit)
       via  0f3c2e2e0c47d1f774f4265fb60498483c27840d (commit)
      from  97c668276d24743065f16dccaf29704b6f3857f4 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-test


- Log -----------------------------------------------------------------
commit 92117cd56692303b2018299cd43f229b0db59066
Author: Günther Deschner <g...@samba.org>
Date:   Mon May 11 10:30:05 2009 +0200

    s3-docs: document "net dom renamecomputer".
    
    Guenther
    (cherry picked from commit fe474861f87dc02081acf34d756329c66cc5c805)

commit 0f3c2e2e0c47d1f774f4265fb60498483c27840d
Author: Günther Deschner <g...@samba.org>
Date:   Fri May 8 21:56:17 2009 +0200

    s3-net: add "net dom renamecomputer" to rename machines in a domain.
    
    dmarkey, please test :)
    
    Guenther
    (cherry picked from commit b1a4649438e5f27722c8dae629037df2543871c7)

-----------------------------------------------------------------------

Summary of changes:
 docs-xml/manpages-3/net.8.xml      |   33 ++++++++++
 source3/rpc_server/srv_wkssvc_nt.c |    3 +-
 source3/utils/net_dom.c            |  114 +++++++++++++++++++++++++++++++++++-
 3 files changed, 147 insertions(+), 3 deletions(-)


Changeset truncated at 500 lines:

diff --git a/docs-xml/manpages-3/net.8.xml b/docs-xml/manpages-3/net.8.xml
index 2504727..b6e7042 100644
--- a/docs-xml/manpages-3/net.8.xml
+++ b/docs-xml/manpages-3/net.8.xml
@@ -1652,6 +1652,7 @@ See the 
<citerefentry><refentrytitle>smb.conf</refentrytitle> <manvolnum>5</manv
 <simplelist>
 <member>net dom join - Join a remote computer into a domain.</member>
 <member>net dom unjoin - Unjoin a remote computer from a domain.</member>
+<member>net dom renamecomputer - Renames a remote computer joined to a 
domain.</member>
 </simplelist>
 </para>
 
@@ -1719,6 +1720,38 @@ This example would connect to a computer named XP as the 
local administrator usi
 
 </refsect3>
 
+<refsect3>
+<title>DOM RENAMECOMPUTER <replaceable>newname=NEWNAME</replaceable> 
<replaceable>account=ACCOUNT</replaceable> 
<replaceable>password=PASSWORD</replaceable> 
<replaceable>reboot</replaceable></title>
+
+<para>
+Renames a computer that is joined to a domain. This command supports the 
following additional parameters:
+</para>
+
+<itemizedlist>
+
+<listitem><para><replaceable>NEWNAME</replaceable> defines the new name of the 
machine in the domain.</para></listitem>
+
+<listitem><para><replaceable>ACCOUNT</replaceable> defines a domain account 
that will be used to rename the machine in the domain. This domain account 
needs to have sufficient privileges to rename machines.</para></listitem>
+
+<listitem><para><replaceable>PASSWORD</replaceable> defines the password for 
the domain account defined with 
<replaceable>ACCOUNT</replaceable>.</para></listitem>
+
+<listitem><para><replaceable>REBOOT</replaceable> is an optional parameter 
that can be set to reboot the remote machine after successful rename in the 
domain.</para></listitem>
+
+</itemizedlist>
+
+<para>
+Note that you also need to use standard net paramters to connect and 
authenticate to the remote machine that you want to rename in the domain. These 
additional parameters include: -S computer and -U user.
+</para>
+<para>
+       Example:
+       net dom renamecomputer -S xp -U XP\\administrator%secret newname=XPNEW 
account=MYDOM\\administrator password=topsecret reboot.
+</para>
+<para>
+This example would connect to a computer named XP as the local administrator 
using password secret, and rename the joined computer to XPNEW using the MYDOM 
domain administrator account and password topsecret. After successful rename, 
the computer would reboot.
+</para>
+
+</refsect3>
+
 </refsect2>
 
 <refsect2>
diff --git a/source3/rpc_server/srv_wkssvc_nt.c 
b/source3/rpc_server/srv_wkssvc_nt.c
index 7071b55..dc14847 100644
--- a/source3/rpc_server/srv_wkssvc_nt.c
+++ b/source3/rpc_server/srv_wkssvc_nt.c
@@ -427,8 +427,7 @@ WERROR _wkssvc_NetrUnjoinDomain2(pipes_struct *p,
 
 WERROR _wkssvc_NetrRenameMachineInDomain2(pipes_struct *p, struct 
wkssvc_NetrRenameMachineInDomain2 *r)
 {
-       /* FIXME: Add implementation code here */
-       p->rng_fault_state = True;
+       /* for now just return not supported */
        return WERR_NOT_SUPPORTED;
 }
 
diff --git a/source3/utils/net_dom.c b/source3/utils/net_dom.c
index 3bf6a27..4010797 100644
--- a/source3/utils/net_dom.c
+++ b/source3/utils/net_dom.c
@@ -1,7 +1,7 @@
 /*
    Samba Unix/Linux SMB client library
    net dom commands for remote join/unjoin
-   Copyright (C) 2007 Günther Deschner
+   Copyright (C) 2007,2009 Günther Deschner
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -28,6 +28,10 @@ int net_dom_usage(struct net_context *c, int argc, const 
char **argv)
        d_printf("usage: net dom unjoin "
                 "<account=ACCOUNT> <password=PASSWORD> <reboot>\n"
                 "  Unjoin a remote machine\n");
+       d_printf("usage: net dom renamecomputer "
+                "<newname=NEWNAME> "
+                "<account=ACCOUNT> <password=PASSWORD> <reboot>\n"
+                "  Rename joined computer\n");
 
        return -1;
 }
@@ -225,6 +229,103 @@ static int net_dom_join(struct net_context *c, int argc, 
const char **argv)
        return ret;
 }
 
+static int net_dom_renamecomputer(struct net_context *c, int argc, const char 
**argv)
+{
+       const char *server_name = NULL;
+       const char *account = NULL;
+       const char *password = NULL;
+       const char *newname = NULL;
+       uint32_t rename_options = NETSETUP_ACCT_CREATE;
+       struct cli_state *cli = NULL;
+       bool do_reboot = false;
+       NTSTATUS ntstatus;
+       NET_API_STATUS status;
+       int ret = -1;
+       int i;
+
+       if (argc < 1 || c->display_usage) {
+               return net_dom_usage(c, argc, argv);
+       }
+
+       if (c->opt_host) {
+               server_name = c->opt_host;
+       }
+
+       for (i=0; i<argc; i++) {
+               if (strnequal(argv[i], "account", strlen("account"))) {
+                       account = get_string_param(argv[i]);
+                       if (!account) {
+                               return -1;
+                       }
+               }
+               if (strnequal(argv[i], "password", strlen("password"))) {
+                       password = get_string_param(argv[i]);
+                       if (!password) {
+                               return -1;
+                       }
+               }
+               if (strnequal(argv[i], "newname", strlen("newname"))) {
+                       newname = get_string_param(argv[i]);
+                       if (!newname) {
+                               return -1;
+                       }
+               }
+               if (strequal(argv[i], "reboot")) {
+                       do_reboot = true;
+               }
+       }
+
+       if (do_reboot) {
+               ntstatus = net_make_ipc_connection_ex(c, c->opt_workgroup,
+                                                     server_name, NULL, 0,
+                                                     &cli);
+               if (!NT_STATUS_IS_OK(ntstatus)) {
+                       return -1;
+               }
+       }
+
+       status = NetRenameMachineInDomain(server_name, newname,
+                                         account, password, rename_options);
+       if (status != 0) {
+               printf("Failed to rename machine: ");
+               if (status == W_ERROR_V(WERR_SETUP_NOT_JOINED)) {
+                       printf("Computer is not joined to a Domain\n");
+                       goto done;
+               }
+               printf("%s\n",
+                       libnetapi_get_error_string(c->netapi_ctx, status));
+               goto done;
+       }
+
+       if (do_reboot) {
+               c->opt_comment = "Shutting down due to a computer rename";
+               c->opt_reboot = true;
+               c->opt_timeout = 30;
+
+               ret = run_rpc_command(c, cli,
+                                     &ndr_table_initshutdown.syntax_id,
+                                     0, rpc_init_shutdown_internals,
+                                     argc, argv);
+               if (ret == 0) {
+                       goto done;
+               }
+
+               ret = run_rpc_command(c, cli, &ndr_table_winreg.syntax_id, 0,
+                                     rpc_reg_shutdown_internals,
+                                     argc, argv);
+               goto done;
+       }
+
+       ret = 0;
+
+ done:
+       if (cli) {
+               cli_shutdown(cli);
+       }
+
+       return ret;
+}
+
 int net_dom(struct net_context *c, int argc, const char **argv)
 {
        NET_API_STATUS status;
@@ -248,6 +349,17 @@ int net_dom(struct net_context *c, int argc, const char 
**argv)
                        "<reboot>\n"
                        "  Unjoin a remote machine"
                },
+               {
+                       "renamecomputer",
+                       net_dom_renamecomputer,
+                       NET_TRANSPORT_LOCAL,
+                       "Rename a computer that is joined to a domain",
+                       "net dom renamecomputer <newname=NEWNAME> "
+                       "<account=ACCOUNT> <password=PASSWORD> "
+                       "<reboot>\n"
+                       "  Rename joined computer"
+               },
+
                {NULL, NULL, 0, NULL, NULL}
        };
 


-- 
Samba Shared Repository

Reply via email to