The branch, v3-2-test has been updated
       via  bbbeeba163f173d774937103a36560a4a4f49d4b (commit)
      from  28c0a77ec1eb4bc69679c00dcdacaa6ee4d8e3f5 (commit)

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


- Log -----------------------------------------------------------------
commit bbbeeba163f173d774937103a36560a4a4f49d4b
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Mon Dec 3 11:07:27 2007 +0100

    Actually implement reboot feature for net dom join/unjoin.
    
    Guenther

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

Summary of changes:
 source/utils/net_dom.c |   81 ++++++++++++++++++++++++++++++++++++++++++++---
 source/utils/net_rpc.c |    4 +-
 2 files changed, 77 insertions(+), 8 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/utils/net_dom.c b/source/utils/net_dom.c
index 79130a8..dc6bfb0 100644
--- a/source/utils/net_dom.c
+++ b/source/utils/net_dom.c
@@ -48,8 +48,11 @@ static int net_dom_unjoin(int argc, const char **argv)
        const char *password = NULL;
        uint32_t unjoin_flags = WKSSVC_JOIN_FLAGS_ACCOUNT_DELETE |
                                WKSSVC_JOIN_FLAGS_JOIN_TYPE;
+       struct cli_state *cli = NULL;
        bool reboot = false;
+       NTSTATUS status;
        WERROR werr;
+       int ret = -1;
        int i;
 
        if (argc < 1) {
@@ -76,16 +79,47 @@ static int net_dom_unjoin(int argc, const char **argv)
                }
        }
 
+       if (reboot) {
+               status = net_make_ipc_connection_ex(opt_workgroup, server_name,
+                                                   NULL, 0, &cli);
+               if (!NT_STATUS_IS_OK(status)) {
+                       return -1;
+               }
+       }
+
        werr = NetUnjoinDomain(server_name, account, password, unjoin_flags);
        if (!W_ERROR_IS_OK(werr)) {
                printf("Failed to unjoin domain: %s\n",
                        get_friendly_nt_error_msg(werror_to_ntstatus(werr)));
-                       return -1;
+               goto done;
+       }
+
+       if (reboot) {
+               opt_comment = "Shutting down due to a domain membership change";
+               opt_reboot = true;
+               opt_timeout = 30;
+
+               ret = run_rpc_command(cli, PI_INITSHUTDOWN, 0,
+                                     rpc_init_shutdown_internals,
+                                     argc, argv);
+               if (ret == 0) {
+                       goto done;
+               }
+
+               ret = run_rpc_command(cli, PI_WINREG, 0,
+                                     rpc_reg_shutdown_internals,
+                                     argc, argv);
+               goto done;
        }
 
-       /* reboot then */
+       ret = 0;
+
+ done:
+       if (cli) {
+               cli_shutdown(cli);
+       }
 
-       return 0;
+       return ret;
 }
 
 static int net_dom_join(int argc, const char **argv)
@@ -97,8 +131,11 @@ static int net_dom_join(int argc, const char **argv)
        const char *password = NULL;
        uint32_t join_flags = WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE |
                              WKSSVC_JOIN_FLAGS_JOIN_TYPE;
+       struct cli_state *cli = NULL;
        bool reboot = false;
+       NTSTATUS status;
        WERROR werr;
+       int ret = -1;
        int i;
 
        if (argc < 1) {
@@ -141,6 +178,14 @@ static int net_dom_join(int argc, const char **argv)
                }
        }
 
+       if (reboot) {
+               status = net_make_ipc_connection_ex(opt_workgroup, server_name,
+                                                   NULL, 0, &cli);
+               if (!NT_STATUS_IS_OK(status)) {
+                       return -1;
+               }
+       }
+
        /* check if domain is a domain or a workgroup */
 
        werr = NetJoinDomain(server_name, domain_name, account_ou,
@@ -148,12 +193,35 @@ static int net_dom_join(int argc, const char **argv)
        if (!W_ERROR_IS_OK(werr)) {
                printf("Failed to join domain: %s\n",
                        get_friendly_nt_error_msg(werror_to_ntstatus(werr)));
-                       return -1;
+               goto done;
+       }
+
+       if (reboot) {
+               opt_comment = "Shutting down due to a domain membership change";
+               opt_reboot = true;
+               opt_timeout = 30;
+
+               ret = run_rpc_command(cli, PI_INITSHUTDOWN, 0,
+                                     rpc_init_shutdown_internals,
+                                     argc, argv);
+               if (ret == 0) {
+                       goto done;
+               }
+
+               ret = run_rpc_command(cli, PI_WINREG, 0,
+                                     rpc_reg_shutdown_internals,
+                                     argc, argv);
+               goto done;
        }
 
-       /* reboot then */
+       ret = 0;
+
+ done:
+       if (cli) {
+               cli_shutdown(cli);
+       }
 
-       return 0;
+       return ret;
 }
 
 int net_dom(int argc, const char **argv)
@@ -161,6 +229,7 @@ int net_dom(int argc, const char **argv)
        struct functable func[] = {
                {"JOIN", net_dom_join},
                {"UNJOIN", net_dom_unjoin},
+               {"HELP", net_help_dom},
                {NULL, NULL}
        };
 
diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c
index e6a7e95..9c8eb32 100644
--- a/source/utils/net_rpc.c
+++ b/source/utils/net_rpc.c
@@ -5181,7 +5181,7 @@ static int rpc_shutdown_abort(int argc, const char **argv)
  * @return Normal NTSTATUS return.
  **/
 
-static NTSTATUS rpc_init_shutdown_internals(const DOM_SID *domain_sid, 
+NTSTATUS rpc_init_shutdown_internals(const DOM_SID *domain_sid,
                                                const char *domain_name, 
                                                struct cli_state *cli, 
                                                struct rpc_pipe_client 
*pipe_hnd,
@@ -5234,7 +5234,7 @@ static NTSTATUS rpc_init_shutdown_internals(const DOM_SID 
*domain_sid,
  * @return Normal NTSTATUS return.
  **/
 
-static NTSTATUS rpc_reg_shutdown_internals(const DOM_SID *domain_sid, 
+NTSTATUS rpc_reg_shutdown_internals(const DOM_SID *domain_sid,
                                                const char *domain_name, 
                                                struct cli_state *cli, 
                                                struct rpc_pipe_client 
*pipe_hnd,


-- 
Samba Shared Repository

Reply via email to