attempted a svcset command. password is encrypted / messed up, therefore
authorLuke Leighton <lkcl@samba.org>
Tue, 23 Nov 1999 23:05:47 +0000 (23:05 +0000)
committerLuke Leighton <lkcl@samba.org>
Tue, 23 Nov 1999 23:05:47 +0000 (23:05 +0000)
command fails.
(This used to be commit 9193f0eff56399e9bc09787dbe785b603886eaa3)

source3/include/proto.h
source3/include/rpc_svcctl.h
source3/rpc_client/cli_svcctl.c
source3/rpc_parse/parse_misc.c
source3/rpc_parse/parse_svc.c
source3/rpcclient/cmd_svcctl.c
source3/rpcclient/rpcclient.c

index df06ac2e9df5aed27853d48064aa244e43c85654..d99ba9e27cd543709b40227be68126c63a47c3ac 100644 (file)
@@ -2136,11 +2136,16 @@ BOOL svc_query_svc_cfg(struct cli_state *cli, uint16 fnum,
                                QUERY_SERVICE_CONFIG *cfg,
                                uint32 *buf_size);
 BOOL svc_close(struct cli_state *cli, uint16 fnum, POLICY_HND *hnd);
-BOOL svc_query_unknown_1b(struct cli_state *cli, uint16 fnum, 
-                               const POLICY_HND *pol, uint32 switch_value,
-                               uint32 unknown_1,
-                               uint32 *num_items,
-                               uint32 ***items);
+BOOL svc_change_svc_cfg(struct cli_state *cli, uint16 fnum,
+                               POLICY_HND *hnd,
+                               uint32 service_type, uint32 start_type,
+                               uint32 unknown_0,
+                               uint32 error_control,
+                               char* bin_path_name, char* load_order_grp, 
+                               uint32 tag_id,
+                               char* dependencies, char* service_start_name,
+                               char* password,
+                               char* disp_name);
 
 /*The following definitions come from  rpc_client/cli_wkssvc.c  */
 
@@ -2445,7 +2450,8 @@ BOOL make_buffer2_multi(BUFFER2 *str, char *const* const buf, uint32 num);
 BOOL make_buffer2(BUFFER2 *str, const char *buf, int len);
 BOOL smb_io_buffer2(char *desc,  BUFFER2 *buf2, uint32 buffer, prs_struct *ps, int depth);
 BOOL make_buf_unistr2(UNISTR2 *str, uint32 *ptr, const char *buf);
-BOOL make_string2(STRING2 *str, char *buf, int len);
+BOOL make_string2(STRING2 *str, const char *buf, int len);
+BOOL make_buf_string2(STRING2 *str, uint32 *ptr, const char *buf);
 BOOL smb_io_string2(char *desc,  STRING2 *str2, uint32 buffer, prs_struct *ps, int depth);
 BOOL make_unistr2(UNISTR2 *str, const char *buf, int len);
 BOOL smb_io_unistr2(char *desc,  UNISTR2 *uni2, uint32 buffer, prs_struct *ps, int depth);
@@ -3434,16 +3440,19 @@ BOOL svc_io_r_query_disp_name(char *desc, SVC_R_QUERY_DISP_NAME *r_u, prs_struct
 BOOL make_svc_q_close(SVC_Q_CLOSE *q_c, POLICY_HND *hnd);
 BOOL svc_io_q_close(char *desc,  SVC_Q_CLOSE *q_u, prs_struct *ps, int depth);
 BOOL svc_io_r_close(char *desc,  SVC_R_CLOSE *r_u, prs_struct *ps, int depth);
-BOOL make_svc_q_unknown_1b(SVC_Q_UNKNOWN_1B *q_u,
-               const POLICY_HND *pol, uint32 switch_value,
-               uint32 unknown_1);
-BOOL svc_io_q_unknown_1b(char *desc,  SVC_Q_UNKNOWN_1B *q_u, prs_struct *ps, int depth);
-BOOL make_svc_r_unknown_1b(SVC_R_UNKNOWN_1B *r_u,
-               uint32 switch_value, uint32 unknown_1,
-               uint32 num_items, uint32 **item,
-               uint32 status);
-BOOL svc_io_r_unknown_1b(char *desc, SVC_R_UNKNOWN_1B *r_u, prs_struct *ps, int depth);
-void svc_free_r_unknown_1b(SVC_R_UNKNOWN_1B *r_u);
+BOOL make_svc_q_change_svc_config(SVC_Q_CHANGE_SVC_CONFIG *q_u, POLICY_HND *hnd,
+                               uint32 service_type, uint32 start_type,
+                               uint32 unknown_0,
+                               uint32 error_control,
+                               char* bin_path_name, char* load_order_grp, 
+                               uint32 tag_id,
+                               char* dependencies, char* service_start_name,
+                               char* password,
+                               char* disp_name);
+BOOL svc_io_q_change_svc_config(char *desc,  SVC_Q_CHANGE_SVC_CONFIG *q_u, prs_struct *ps, int depth);
+BOOL make_svc_r_change_svc_config(SVC_R_CHANGE_SVC_CONFIG *r_c, 
+                               uint32 unknown_0, uint32 status);
+BOOL svc_io_r_change_svc_config(char *desc,  SVC_R_CHANGE_SVC_CONFIG *r_u, prs_struct *ps, int depth);
 
 /*The following definitions come from  rpc_parse/parse_wks.c  */
 
@@ -3681,7 +3690,7 @@ BOOL msrpc_svc_enum(struct client_info *info,
 void cmd_svc_enum(struct client_info *info, int argc, char *argv[]);
 void cmd_svc_stop(struct client_info *info, int argc, char *argv[]);
 void cmd_svc_start(struct client_info *info, int argc, char *argv[]);
-void cmd_svc_test(struct client_info *info, int argc, char *argv[]);
+void cmd_svc_set(struct client_info *info, int argc, char *argv[]);
 
 /*The following definitions come from  rpcclient/cmd_wkssvc.c  */
 
index 1815de8532c54d2e8ff42ff80b2474460837a498..ecd1188fe82b713525ff102ba91f5ef4dfc4712e 100644 (file)
 
 
 /* svcctl pipe */
-#define SVC_OPEN_SC_MAN      0x0f
-#define SVC_ENUM_SVCS_STATUS 0x0e
-#define SVC_QUERY_SVC_CONFIG 0x11
-#define SVC_QUERY_DISP_NAME  0x14
-#define SVC_OPEN_SERVICE     0x10
-#define SVC_START_SERVICE    0x13
-#define SVC_STOP_SERVICE     0x01
-#define SVC_UNKNOWN_1B       0x1b
-#define SVC_CLOSE            0x00
+#define SVC_OPEN_SC_MAN       0x0f
+#define SVC_ENUM_SVCS_STATUS  0x0e
+#define SVC_QUERY_SVC_CONFIG  0x11
+#define SVC_QUERY_DISP_NAME   0x14
+#define SVC_CHANGE_SVC_CONFIG 0x0b
+#define SVC_OPEN_SERVICE      0x10
+#define SVC_START_SERVICE     0x13
+#define SVC_STOP_SERVICE      0x01
+#define SVC_CLOSE             0x00
 
 
 /* SVC_Q_OPEN_SC_MAN */
@@ -244,30 +244,45 @@ typedef struct r_svc_close_info
 
 } SVC_R_CLOSE;
 
-/* SVC_Q_UNKNOWN_1B */
-typedef struct q_svc_unk_1b_info
+/* SVC_Q_CHANGE_SVC_CONFIG */
+typedef struct q_svc_change_svc_cfg_info
 {
-       POLICY_HND pol; /* service policy handle */
-       uint32 switch_value;    /* 0x01 */
-       uint32 unknown_1;       /* 0x0000 0228 */
+       POLICY_HND pol;
+       uint32 service_type;
+       uint32 start_type;
+       uint32 unknown_0;
+       uint32 error_control;
+
+       uint32 ptr_bin_path_name; 
+       UNISTR2 uni_bin_path_name;
+
+       uint32 ptr_load_order_grp; 
+       UNISTR2 uni_load_order_grp;
+
+       uint32 tag_id;
 
-} SVC_Q_UNKNOWN_1B;
+       uint32 ptr_dependencies;
+       UNISTR2 uni_dependencies;
+
+       uint32 ptr_service_start_name;
+       UNISTR2 uni_service_start_name;
+
+       uint32 ptr_password;
+       STRING2 str_password;
 
-/* SVC_R_UNKNOWN_1B */
-typedef struct r_svc_unk_1b_info
+       uint32 ptr_display_name;
+       UNISTR2 uni_display_name;
+
+} SVC_Q_CHANGE_SVC_CONFIG;
+
+/* SVC_R_CHANGE_SVC_CONFIG */
+typedef struct r_svc_change_svc_cfg_info
 {
-       uint32 switch_value1;   /* 0x01 */
-       uint32 ptr;
-       uint32 switch_value2;   /* 0x01 */
-       uint32 unknown_1;       /* 0x0000 0228 */
-       uint32 num_items1;
-       uint32 *ptr_items;
-       uint32 num_items2;
-       uint32 **items;
+       uint32 unknown_0;             /* */
+       uint32 status;             /* return status */
 
-       uint32 status;
+} SVC_R_CHANGE_SVC_CONFIG;
 
-} SVC_R_UNKNOWN_1B;
 
 #endif /* _RPC_SVCCTL_H */
 
index bba6342db8acf4b286ed86e55b04b4aa388c14c8..f85e37dcb5c5d3a89a1df0bb3320f48a686200b7 100644 (file)
@@ -479,61 +479,73 @@ BOOL svc_close(struct cli_state *cli, uint16 fnum, POLICY_HND *hnd)
 }
 
 /****************************************************************************
-do a SVC Query Lookup RIDS
+do a SVC Change Service Config
 ****************************************************************************/
-BOOL svc_query_unknown_1b(struct cli_state *cli, uint16 fnum, 
-                               const POLICY_HND *pol, uint32 switch_value,
-                               uint32 unknown_1,
-                               uint32 *num_items,
-                               uint32 ***items)
+BOOL svc_change_svc_cfg(struct cli_state *cli, uint16 fnum,
+                               POLICY_HND *hnd,
+                               uint32 service_type, uint32 start_type,
+                               uint32 unknown_0,
+                               uint32 error_control,
+                               char* bin_path_name, char* load_order_grp, 
+                               uint32 tag_id,
+                               char* dependencies, char* service_start_name,
+                               char* password,
+                               char* disp_name)
 {
-       prs_struct data;
-       prs_struct rdata;
-
-       SVC_Q_UNKNOWN_1B q_o;
-       BOOL valid_query = False;
+       prs_struct rbuf;
+       prs_struct buf; 
+       SVC_Q_CHANGE_SVC_CONFIG q_c;
+       BOOL valid_cfg = False;
 
-       if (pol == NULL || num_items == NULL || items == NULL ) return False;
+       if (hnd == NULL) return False;
 
-       /* create and send a MSRPC command with api SVC_UNKNOWN_1B */
+       /* create and send a MSRPC command with api SVC_CHANGE_SVC_CONFIG */
 
-       prs_init(&data , 1024, 4, SAFETY_MARGIN, False);
-       prs_init(&rdata, 0   , 4, SAFETY_MARGIN, True );
+       prs_init(&buf , 1024, 4, SAFETY_MARGIN, False);
+       prs_init(&rbuf, 0   , 4, SAFETY_MARGIN, True );
 
-       DEBUG(4,("SVC Query Unknown 1b.\n"));
+       DEBUG(4,("SVC Change Service Config\n"));
 
        /* store the parameters */
-       make_svc_q_unknown_1b(&q_o, pol, switch_value, unknown_1);
+       make_svc_q_change_svc_config(&q_c, hnd, 
+                               service_type, start_type,
+                               unknown_0, error_control,
+                               bin_path_name, load_order_grp, 
+                               tag_id,
+                               dependencies, service_start_name,
+                               password, disp_name);
 
        /* turn parameters into data stream */
-       svc_io_q_unknown_1b("", &q_o,  &data, 0);
+       svc_io_q_change_svc_config("", &q_c, &buf, 0);
 
        /* send the data on \PIPE\ */
-       if (rpc_api_pipe_req(cli, fnum, SVC_UNKNOWN_1B, &data, &rdata))
+       if (rpc_api_pipe_req(cli, fnum, SVC_CHANGE_SVC_CONFIG, &buf, &rbuf))
        {
-               SVC_R_UNKNOWN_1B r_o;
+               SVC_R_CHANGE_SVC_CONFIG r_c;
                BOOL p;
-               ZERO_STRUCT(r_o);
 
-               svc_io_r_unknown_1b("", &r_o, &rdata, 0);
-               p = rdata.offset != 0;
-               
-               if (p && r_o.status != 0)
+               ZERO_STRUCT (r_c);
+
+               svc_io_r_change_svc_config("", &r_c, &rbuf, 0);
+               p = rbuf.offset != 0;
+
+               if (p && r_c.status != 0)
                {
                        /* report error code */
-                       DEBUG(4,("SVC_R_UNKNOWN_1B: %s\n", get_nt_error_msg(r_o.status)));
+                       DEBUG(1,("SVC_CHANGE_SVC_CONFIG: %s\n", get_nt_error_msg(r_c.status)));
                        p = False;
                }
 
                if (p)
                {
-                       (*num_items) = r_o.num_items1;
-                       (*items) = r_o.items;
+                       valid_cfg = True;
                }
        }
 
-       prs_mem_free(&data   );
-       prs_mem_free(&rdata  );
+       prs_mem_free(&rbuf);
+       prs_mem_free(&buf );
 
-       return valid_query;
+       return valid_cfg;
 }
+
+
index 2f2c68648ab5871f605bfec0e4c97682e3a2c613..fe65aaf4d4e51cbea2163e77011c8239ed88dcf1 100644 (file)
@@ -777,16 +777,37 @@ BOOL make_buf_unistr2(UNISTR2 *str, uint32 *ptr, const char *buf)
 /*******************************************************************
 creates a STRING2 structure.
 ********************************************************************/
-BOOL make_string2(STRING2 *str, char *buf, int len)
+BOOL make_string2(STRING2 *str, const char *buf, int len)
 {
-  /* set up string lengths. */
-  str->str_max_len = len;
-  str->undoc       = 0;
-  str->str_str_len = len;
+       /* set up string lengths. */
+       str->str_max_len = len;
+       str->undoc       = 0;
+       str->str_str_len = len;
+
+       /* store the string */
+       if(len != 0)
+       {
+               memcpy(str->buffer, buf, len);
+       }
 
-  /* store the string */
-  if(len != 0)
-    memcpy(str->buffer, buf, len);
+       return True;
+}
+
+/*******************************************************************
+creates a STRING2 structure: sets up the buffer, too
+********************************************************************/
+BOOL make_buf_string2(STRING2 *str, uint32 *ptr, const char *buf)
+{
+       if (buf != NULL)
+       {
+               *ptr = 1;
+               make_string2(str, buf, strlen(buf)+1);
+       }
+       else
+       {
+               *ptr = 0;
+               make_string2(str, "", 0);
+       }
 
        return True;
 }
index b35b98a3540c70f51b10ba21a32298f604e683c4..93ad0dcced259afb03f97643fa231dd1e132d0ff 100644 (file)
@@ -822,20 +822,35 @@ BOOL svc_io_r_close(char *desc,  SVC_R_CLOSE *r_u, prs_struct *ps, int depth)
 }
 
 /*******************************************************************
-makes a SVC_Q_UNKNOWN_1B structure.
+makes an SVC_Q_CHANGE_SVC_CONFIG structure.
 ********************************************************************/
-BOOL make_svc_q_unknown_1b(SVC_Q_UNKNOWN_1B *q_u,
-               const POLICY_HND *pol, uint32 switch_value,
-               uint32 unknown_1)
+BOOL make_svc_q_change_svc_config(SVC_Q_CHANGE_SVC_CONFIG *q_u, POLICY_HND *hnd,
+                               uint32 service_type, uint32 start_type,
+                               uint32 unknown_0,
+                               uint32 error_control,
+                               char* bin_path_name, char* load_order_grp, 
+                               uint32 tag_id,
+                               char* dependencies, char* service_start_name,
+                               char* password,
+                               char* disp_name)
 {
-       if (q_u == NULL) return False;
+       if (q_u == NULL || hnd == NULL) return False;
 
-       DEBUG(5,("make_svc_r_unknwon_12\n"));
+       DEBUG(5,("make_svc_q_change_svc_config\n"));
 
-       memcpy(&(q_u->pol), pol, sizeof(*pol));
+       memcpy(&(q_u->pol), hnd, sizeof(q_u->pol));
 
-       q_u->switch_value = switch_value;
-       q_u->unknown_1    = unknown_1;
+       q_u->service_type = service_type;
+       q_u->start_type = start_type;
+       q_u->unknown_0 = unknown_0;
+       q_u->error_control = error_control;
+       make_buf_unistr2(&(q_u->uni_bin_path_name     ), &(q_u->ptr_bin_path_name     ), bin_path_name     );
+       make_buf_unistr2(&(q_u->uni_load_order_grp    ), &(q_u->ptr_load_order_grp    ), load_order_grp    );
+       q_u->tag_id = tag_id;
+       make_buf_unistr2(&(q_u->uni_dependencies      ), &(q_u->ptr_dependencies      ), dependencies      );
+       make_buf_unistr2(&(q_u->uni_service_start_name), &(q_u->ptr_service_start_name), service_start_name);
+       make_buf_string2(&(q_u->str_password          ), &(q_u->ptr_password          ), password          );
+       make_buf_unistr2(&(q_u->uni_display_name      ), &(q_u->ptr_display_name      ), disp_name         );
 
        return True;
 }
@@ -843,67 +858,60 @@ BOOL make_svc_q_unknown_1b(SVC_Q_UNKNOWN_1B *q_u,
 /*******************************************************************
 reads or writes a structure.
 ********************************************************************/
-BOOL svc_io_q_unknown_1b(char *desc,  SVC_Q_UNKNOWN_1B *q_u, prs_struct *ps, int depth)
+BOOL svc_io_q_change_svc_config(char *desc,  SVC_Q_CHANGE_SVC_CONFIG *q_u, prs_struct *ps, int depth)
 {
        if (q_u == NULL) return False;
 
-       prs_debug(ps, depth, desc, "svc_io_q_unknown_1b");
+       prs_debug(ps, depth, desc, "svc_io_q_change_svc_config");
        depth++;
 
        prs_align(ps);
 
-       smb_io_pol_hnd("pol", &(q_u->pol), ps, depth); 
+       smb_io_pol_hnd("", &(q_u->pol), ps, depth); 
+       prs_align(ps);
+
+       prs_uint32("service_type          ", ps, depth, &(q_u->service_type          ));
+       prs_uint32("start_type            ", ps, depth, &(q_u->start_type            ));
+       prs_uint32("unknown_0             ", ps, depth, &(q_u->unknown_0             ));
+       prs_uint32("error_control         ", ps, depth, &(q_u->error_control         ));
+       prs_uint32("ptr_bin_path_name     ", ps, depth, &(q_u->ptr_bin_path_name     ));
+       smb_io_unistr2("uni_bin_path_name     ", &(q_u->uni_bin_path_name     ), q_u->ptr_bin_path_name     , ps, depth); 
+       prs_align(ps);
+
+       prs_uint32("ptr_load_order_grp    ", ps, depth, &(q_u->ptr_load_order_grp    ));
+       smb_io_unistr2("uni_load_order_grp    ", &(q_u->uni_load_order_grp    ), q_u->ptr_load_order_grp    , ps, depth); 
+       prs_align(ps);
+       prs_uint32("tag_id                ", ps, depth, &(q_u->tag_id                ));
+       prs_uint32("ptr_dependencies      ", ps, depth, &(q_u->ptr_dependencies      ));
+       smb_io_unistr2("uni_dependencies      ", &(q_u->uni_dependencies      ), q_u->ptr_dependencies      , ps, depth); 
+       prs_align(ps);
+       prs_uint32("ptr_service_start_name", ps, depth, &(q_u->ptr_service_start_name));
+       smb_io_unistr2("uni_service_start_name", &(q_u->uni_service_start_name), q_u->ptr_service_start_name, ps, depth); 
+       prs_align(ps);
+       prs_uint32("ptr_password          ", ps, depth, &(q_u->ptr_password          ));
+
+       smb_io_string2("str_password          ", &(q_u->str_password          ), q_u->ptr_display_name      , ps, depth); 
        prs_align(ps);
 
-       prs_uint32("switch_value", ps, depth, &(q_u->switch_value));
-       prs_uint32("unknown_1   ", ps, depth, &(q_u->unknown_1   ));
+       prs_uint32("ptr_display_name      ", ps, depth, &(q_u->ptr_display_name      ));
+       smb_io_unistr2("uni_display_name      ", &(q_u->uni_display_name      ), q_u->ptr_display_name      , ps, depth); 
+       prs_align(ps);
 
        return True;
 }
 
 /*******************************************************************
-makes a SVC_R_UNKNOWN_1B structure.
+makes an SVC_R_CHANGE_SVC_CONFIG structure.
 ********************************************************************/
-BOOL make_svc_r_unknown_1b(SVC_R_UNKNOWN_1B *r_u,
-               uint32 switch_value, uint32 unknown_1,
-               uint32 num_items, uint32 **item,
-               uint32 status)
+BOOL make_svc_r_change_svc_config(SVC_R_CHANGE_SVC_CONFIG *r_c, 
+                               uint32 unknown_0, uint32 status)
 {
-       uint32 i;
-       if (r_u == NULL) return False;
-
-       DEBUG(5,("make_svc_r_unknown_1b\n"));
-
-       if (status == 0x0)
-       {
-               r_u->num_items1 = num_items;
-               r_u->ptr        = 1;
-               r_u->num_items2 = num_items;
-
-               r_u->items = item;
-               if (num_items != 0)
-               {
-                       r_u->ptr_items = (uint32*)malloc(num_items * sizeof(r_u->ptr_items[0]));
-                       if (r_u->ptr_items == NULL)
-                       {
-                               svc_free_r_unknown_1b(r_u);
-                               return False;
-                       }
-                       for (i = 0; i < num_items; i++)
-                       {
-                               r_u->ptr_items[i] = item[i] != NULL ? 1 : 0;
-                       }
-               }
+       if (r_c == NULL) return False;
 
-       }
-       else
-       {
-               r_u->num_items1 = num_items;
-               r_u->ptr_items  = 0;
-               r_u->num_items2 = num_items;
-       }
+       DEBUG(5,("make_svc_r_change_svc_config\n"));
 
-       r_u->status = status;
+       r_c->unknown_0 = unknown_0;
+       r_c->status = status;
 
        return True;
 }
@@ -911,92 +919,18 @@ BOOL make_svc_r_unknown_1b(SVC_R_UNKNOWN_1B *r_u,
 /*******************************************************************
 reads or writes a structure.
 ********************************************************************/
-BOOL svc_io_r_unknown_1b(char *desc, SVC_R_UNKNOWN_1B *r_u, prs_struct *ps, int depth)
+BOOL svc_io_r_change_svc_config(char *desc,  SVC_R_CHANGE_SVC_CONFIG *r_u, prs_struct *ps, int depth)
 {
-       uint32 i;
-       uint32 count = 0;
-       fstring tmp;
        if (r_u == NULL) return False;
 
-       prs_debug(ps, depth, desc, "svc_io_r_unknown_1b");
+       prs_debug(ps, depth, desc, "svc_io_r_change_svc_config");
        depth++;
 
        prs_align(ps);
 
-       prs_uint32("num_items1", ps, depth, &(r_u->num_items1));
-       prs_uint32("ptr       ", ps, depth, &(r_u->ptr       ));
-       prs_uint32("num_items2", ps, depth, &(r_u->num_items2));
-
-       if (r_u->ptr_items != 0 && r_u->num_items1 != 0)
-       {
-               r_u->ptr_items = (uint32*)Realloc(r_u->ptr_items,
-                                  r_u->num_items2 * sizeof(r_u->ptr_items[0]));
-               if (r_u->ptr_items == NULL)
-               {
-                       return False;
-               }
-
-               for (i = 0; i < r_u->num_items2; i++)
-               {
-                       prs_grow(ps);
-                       slprintf(tmp, sizeof(tmp) - 1, "ptr_item[%02d]", i);
-                       prs_uint32(tmp, ps, depth, &(r_u->ptr_items[i]));
-               }
-
-               for (i = 0; i < r_u->num_items2; i++)
-               {
-                       slprintf(tmp, sizeof(tmp) - 1, "item[%02d]", i);
-
-                       if (ps->io)
-                       {
-                               /* reading */
-                               if (r_u->ptr_items[i] != 0)
-                               {
-                                       uint32 item;
-                                       prs_uint32(tmp, ps, depth, &item);
-                                       add_uint32s_to_array(&count, &r_u->items, &item);
-                               }
-                               else
-                               {
-                                       add_uint32s_to_array(&count, &r_u->items, NULL);
-                               }
-                       }
-                       else
-                       {
-                               /* writing */
-                               if (r_u->ptr_items[i] != 0)
-                               {
-                                       prs_uint32(tmp, ps, depth, r_u->items[i]);
-                               }
-                       }
-               }
-       }
-
-       prs_uint32("status", ps, depth, &(r_u->status));
-
-       if (!ps->io)
-       {
-               /* storing.  don't need memory any more */
-               svc_free_r_unknown_1b(r_u);
-       }
+       prs_uint32("unknown_0", ps, depth, &(r_u->unknown_0));
+       prs_uint32("status   ", ps, depth, &(r_u->status   ));
 
        return True;
 }
 
-/*******************************************************************
-frees a structure.
-********************************************************************/
-void svc_free_r_unknown_1b(SVC_R_UNKNOWN_1B *r_u)
-{
-       if (r_u->ptr_items != NULL)
-       {
-               free(r_u->ptr_items);
-               r_u->ptr_items = NULL;
-       }
-       if (r_u->items != NULL)
-       {
-               free_uint32_array(r_u->num_items1, r_u->items);
-               r_u->items = NULL;
-               r_u->num_items1 = 0;
-       }
-}
index 6d2311b9624bb6f510924bd6f5fb3e8bde652902..708dd49de1437df896ea6ba78c7ff7159fd9cf7d 100644 (file)
@@ -383,19 +383,21 @@ void cmd_svc_start(struct client_info *info, int argc, char *argv[])
 }
 
 /****************************************************************************
-nt test service 
+nt service set
 ****************************************************************************/
-void cmd_svc_test(struct client_info *info, int argc, char *argv[])
+void cmd_svc_set(struct client_info *info, int argc, char *argv[])
 {
        uint16 fnum;
        BOOL res = True;
-       BOOL res1 = True;
-       char *svc_name;
        BOOL res2 = True;
+       BOOL res3;
        POLICY_HND pol_svc;
+       QUERY_SERVICE_CONFIG cfg;
+       uint32 svc_buf_size = 0x8000;
+
+       char *svc_name;
+
        POLICY_HND pol_scm;
-       uint32 num_items = 0;
-       uint32 **items = NULL;
        
        fstring srv_name;
 
@@ -403,63 +405,59 @@ void cmd_svc_test(struct client_info *info, int argc, char *argv[])
        fstrcat(srv_name, info->myhostname);
        strupper(srv_name);
 
-       DEBUG(4,("cmd_svc_test: server:%s\n", srv_name));
+       DEBUG(4,("cmd_svc_set: server:%s\n", srv_name));
 
        if (argc < 2)
        {
-               report(out_hnd,"svctest <service name>]\n");
+               report(out_hnd,"svcset <service name>\n");
                return;
        }
 
-       argv++;
-       argc--;
-
-       svc_name = argv[0];
-
-       argv++;
-       argc--;
+       svc_name = argv[1];
 
        /* open SVCCTL session. */
        res = res ? cli_nt_session_open(smb_cli, PIPE_SVCCTL, &fnum) : False;
 
        /* open service control manager receive a policy handle */
        res = res ? svc_open_sc_man(smb_cli, fnum,
-                               srv_name, NULL, 0x80000000,
+                               srv_name, NULL, 0x80000004,
                                &pol_scm) : False;
 
-       res1 = res ? svc_open_service(smb_cli, fnum,
+       res2 = res ? svc_open_service(smb_cli, fnum,
                                       &pol_scm,
-                                      svc_name, 0x80000010,
+                                      svc_name, 0x80000001,
                                       &pol_svc) : False;
-       res2 = res1 ? svc_query_unknown_1b(smb_cli, fnum,
-                                      &pol_svc, 1, 0x227,
-                                      &num_items, &items) : False;
+       res3 = res2 ? svc_query_svc_cfg(smb_cli, fnum,
+                                      &pol_svc, &cfg,
+                                      &svc_buf_size) : False;
 
-       res1 = res1 ? svc_close(smb_cli, fnum, &pol_svc) : False;
-       res  = res  ? svc_close(smb_cli, fnum, &pol_scm) : False;
+       if (res3)
+       {
+               res3 = svc_change_svc_cfg(smb_cli, fnum, &pol_svc,
+                                  cfg.service_type,
+                                  cfg.start_type,
+                                  0xffffffff,
+                                  0,
+                                  NULL, NULL,
+                                  cfg.tag_id,
+                                  NULL, "administrator", NULL, NULL);
+                       
+       }
+
+       res2 = res2 ? svc_close(smb_cli, fnum, &pol_svc) : False;
+
+       res = res ? svc_close(smb_cli, fnum, &pol_scm) : False;
 
        /* close the session */
        cli_nt_session_close(smb_cli, fnum);
 
-       if (res2)
+       if (res3)
        {
-               uint32 i;
-               report(out_hnd,"Test 0x1b Service %s\n", svc_name);
-               for (i = 0; i < num_items; i++)
-               {
-                       if (items[i] != NULL)
-                       {
-                               report(out_hnd, "%x\n", *items[i]);
-                       }
-               }
-               DEBUG(5,("cmd_svc_test: succeeded\n"));
+               DEBUG(5,("cmd_svc_set: change succeeded\n"));
        }
        else
-               report(out_hnd,"Failed Test 0x1b (%s)\n", svc_name);
        {
-               DEBUG(5,("cmd_svc_test: failed\n"));
+               DEBUG(5,("cmd_svc_set: change failed\n"));
        }
-
-       free_uint32_array(num_items, items);
 }
 
index de0f72c65d7f3d9dc05f7a382ec848b840712b91..f242f9c4ea3be7e6ba4ec62113672cd5c534850a 100644 (file)
@@ -158,9 +158,9 @@ commands[] =
        },
 
        {
-               "svctest",
-               cmd_svc_test,
-               "<service> Test Service",
+               "svcset",
+               cmd_svc_set,
+               "<service> Test Set Service",
                {COMPL_SVCLST, COMPL_NONE}
        },