the shutdown call does not have a 16 bit flags, but 2 byte representing booleans
authorSimo Sorce <idra@samba.org>
Mon, 30 Dec 2002 04:41:27 +0000 (04:41 +0000)
committerSimo Sorce <idra@samba.org>
Mon, 30 Dec 2002 04:41:27 +0000 (04:41 +0000)
this commit change the structure and code to reflect this

some test revelead I'm right.

some other revelead currently the abort shutdown does not work against my test machine even if it returns successfully ... need investigation
(This used to be commit c5892b656dedd0367adc33d9606311d1dde99a58)

source3/include/rpc_reg.h
source3/rpc_client/cli_reg.c
source3/rpc_parse/parse_reg.c
source3/rpc_server/srv_reg_nt.c
source3/rpcclient/cmd_reg.c

index 92175cf287bd3983ba9e89f4d45da02ef6247d51..33134e8834d7d8b2e6215b97dbd214b48a7031c3 100644 (file)
 #define REG_FULL_RESOURCE_DESCRIPTOR   9
 #define REG_RESOURCE_REQUIREMENTS_LIST 10
 
-/* Shutdown options */
-#define REG_FORCE_SHUTDOWN 0x001
-#define REG_REBOOT_ON_SHUTDOWN 0x100
-
 /* structure to contain registry values */
 
 typedef struct {
@@ -616,7 +612,8 @@ typedef struct q_reg_shutdown_info
        UNIHDR hdr_msg;         /* shutdown message */
        UNISTR2 uni_msg;        /* seconds */
        uint32 timeout;         /* seconds */
-       uint16 flags;
+       uint8 force;            /* boolean: force shutdown */
+       uint8 reboot;           /* boolean: reboot on shutdown */
                
 } REG_Q_SHUTDOWN;
 
index aaf18882f7622d62c8455830f98e8c6df0137c3c..1e83295414541869441f8144410bef3f7ee026fa 100644 (file)
@@ -28,7 +28,8 @@
 /* Shutdown a server */
 
 NTSTATUS cli_reg_shutdown(struct cli_state * cli, TALLOC_CTX *mem_ctx,
-                          const char *msg, uint32 timeout, uint16 flags)
+                          const char *msg, uint32 timeout, BOOL reboot,
+                         BOOL force)
 {
        prs_struct qbuf;
        prs_struct rbuf; 
@@ -46,7 +47,7 @@ NTSTATUS cli_reg_shutdown(struct cli_state * cli, TALLOC_CTX *mem_ctx,
 
        /* Marshall data and send request */
 
-       init_reg_q_shutdown(&q_s, msg, timeout, flags);
+       init_reg_q_shutdown(&q_s, msg, timeout, reboot, force);
 
        if (!reg_io_q_shutdown("", &q_s, &qbuf, 0) ||
            !rpc_api_pipe_req(cli, REG_SHUTDOWN, &qbuf, &rbuf))
index 2698e8244076a50ebf748293f4ea269ec2af39c2..7bb8a6e2b46431a32d95c329f48e78b0c10792c0 100644 (file)
@@ -1736,8 +1736,8 @@ BOOL reg_io_r_open_entry(char *desc,  REG_R_OPEN_ENTRY *r_r, prs_struct *ps, int
 /*******************************************************************
 Inits a structure.
 ********************************************************************/
-void init_reg_q_shutdown(REG_Q_SHUTDOWN * q_s,
-                        const char *msg, uint32 timeout, uint16 flags)
+void init_reg_q_shutdown(REG_Q_SHUTDOWN * q_s, const char *msg,
+                       uint32 timeout, BOOL reboot, BOOL force)
 {
        int msg_len;
        msg_len = strlen(msg);
@@ -1750,7 +1750,9 @@ void init_reg_q_shutdown(REG_Q_SHUTDOWN * q_s,
        init_unistr2(&(q_s->uni_msg), msg, msg_len);
 
        q_s->timeout = timeout;
-       q_s->flags = flags;
+
+       q_s->reboot = reboot ? 1 : 0;
+       q_s->force = force ? 1 : 0;
 
 }
 
@@ -1785,7 +1787,9 @@ BOOL reg_io_q_shutdown(char *desc, REG_Q_SHUTDOWN * q_s, prs_struct *ps,
 
        if (!prs_uint32("timeout", ps, depth, &(q_s->timeout)))
                return False;
-       if (!prs_uint16("flags  ", ps, depth, &(q_s->flags)))
+       if (!prs_uint8("force  ", ps, depth, &(q_s->force)))
+               return False;
+       if (!prs_uint8("reboot ", ps, depth, &(q_s->reboot)))
                return False;
 
        return True;
index 7435bdb6f798f53d23d2bee3605b7042aa444c2f..215d4684044c1b7d27d46838713fb78a39c85c87 100644 (file)
@@ -590,9 +590,9 @@ NTSTATUS _reg_shutdown(pipes_struct *p, REG_Q_SHUTDOWN *q_u, REG_R_SHUTDOWN *r_u
        /* timeout */
        snprintf(timeout, sizeof(timeout), "%d", q_u->timeout);
        /* reboot */
-       snprintf(r, sizeof(r), (q_u->flags & REG_REBOOT_ON_SHUTDOWN)?SHUTDOWN_R_STRING:"");
+       snprintf(r, sizeof(r), (q_u->reboot) ? SHUTDOWN_R_STRING : "");
        /* force */
-       snprintf(f, sizeof(f), (q_u->flags & REG_FORCE_SHUTDOWN)?SHUTDOWN_F_STRING:"");
+       snprintf(f, sizeof(f), (q_u->force) ? SHUTDOWN_F_STRING : "");
 
        pstrcpy(shutdown_script, lp_shutdown_script());
 
index e0a3201aa903e556d8177418cff54da93533d9f0..5d29b4c51ab1a720bbc492dfdf042528cb22fe8d 100644 (file)
@@ -900,7 +900,8 @@ static NTSTATUS cmd_reg_shutdown(struct cli_state *cli, TALLOC_CTX *mem_ctx,
        NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
        fstring msg;
        uint32 timeout = 20;
-       uint16 flgs = 0;
+       BOOL force = False;
+       BOOL reboot = False;
        int opt;
 
        *msg = 0;
@@ -908,37 +909,33 @@ static NTSTATUS cmd_reg_shutdown(struct cli_state *cli, TALLOC_CTX *mem_ctx,
 
        while ((opt = getopt(argc, argv, "m:t:rf")) != EOF)
        {
-               fprintf (stderr, "[%s]\n", argv[argc-1]);
+               /*fprintf (stderr, "[%s]\n", argv[argc-1]);*/
        
                switch (opt)
                {
                        case 'm':
-                       {
                                safe_strcpy(msg, optarg, sizeof(msg)-1);
-                               fprintf (stderr, "[%s|%s]\n", optarg, msg);
+                               /*fprintf (stderr, "[%s|%s]\n", optarg, msg);*/
                                break;
-                       }
+
                        case 't':
-                       {
                                timeout = atoi(optarg);
-                               fprintf (stderr, "[%s|%d]\n", optarg, timeout);
-                       break;
-                       }
+                               /*fprintf (stderr, "[%s|%d]\n", optarg, timeout);*/
+                               break;
+
                        case 'r':
-                       {
-                               flgs |= 0x100;
-                       break;
-                       }
+                               reboot = True;
+                               break;
+
                        case 'f':
-                       {
-                               flgs |= 0x001;
+                               force = True;
                                break;
-                       }
+
                }
        }
 
        /* create an entry */
-       result = cli_reg_shutdown(cli, mem_ctx, msg, timeout, flgs);
+       result = cli_reg_shutdown(cli, mem_ctx, msg, timeout, reboot, force);
 
        if (NT_STATUS_IS_OK(result))
                DEBUG(5,("cmd_reg_shutdown: query succeeded\n"));
@@ -974,10 +971,10 @@ struct cmd_set reg_commands[] = {
        { "REG"  },
 
        { "shutdown",           cmd_reg_shutdown,               PI_WINREG, "Remote Shutdown",
-                               "[-m message] [-t timeout] [-r] [-f] (-r == reboot, -f == force)" },
+                               "syntax: shutdown [-m message] [-t timeout] [-r] [-h] [-f] (-r == reboot, -h == halt, -f == force)" },
                                
        { "abortshutdown",      cmd_reg_abort_shutdown,         PI_WINREG, "Abort Shutdown",
-                               "" },                           
+                               "syntax: abortshutdown" },
 /*
        { "regenum",            cmd_reg_enum,                   "Registry Enumeration",
                                "<keyname>" },