[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-1534-gfe47486

Günther Deschner gd at samba.org
Mon May 11 08:57:09 GMT 2009


The branch, master has been updated
       via  fe474861f87dc02081acf34d756329c66cc5c805 (commit)
       via  b1a4649438e5f27722c8dae629037df2543871c7 (commit)
      from  915518c0db30689f3508736238a9e8bb8ab03088 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit fe474861f87dc02081acf34d756329c66cc5c805
Author: Günther Deschner <gd at samba.org>
Date:   Mon May 11 10:30:05 2009 +0200

    s3-docs: document "net dom renamecomputer".
    
    Guenther

commit b1a4649438e5f27722c8dae629037df2543871c7
Author: Günther Deschner <gd at 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

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

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 debcea6..68e4edb 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 8d2e73b..b06818e 100644
--- a/source3/rpc_server/srv_wkssvc_nt.c
+++ b/source3/rpc_server/srv_wkssvc_nt.c
@@ -428,8 +428,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


More information about the samba-cvs mailing list