oops!!!! wrong command!!!
authorLuke Leighton <lkcl@samba.org>
Tue, 23 Nov 1999 20:32:52 +0000 (20:32 +0000)
committerLuke Leighton <lkcl@samba.org>
Tue, 23 Nov 1999 20:32:52 +0000 (20:32 +0000)
(This used to be commit cbbfef6d2a5335a6daa4fe09ea2d73197417894f)

source3/include/proto.h
source3/rpc_client/cli_svcctl.c
source3/rpcclient/cmd_svcctl.c
source3/rpcclient/rpcclient.c

index 204d5e0e0c9699285efdc5cf92b59129bb5f1f3c..df06ac2e9df5aed27853d48064aa244e43c85654 100644 (file)
@@ -2136,6 +2136,11 @@ 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);
 
 /*The following definitions come from  rpc_client/cli_wkssvc.c  */
 
@@ -3398,7 +3403,7 @@ BOOL make_svc_q_start_service(SVC_Q_START_SERVICE *q_c, POLICY_HND *hnd,
 BOOL svc_io_q_start_service(char *desc, SVC_Q_START_SERVICE *q_s, prs_struct *ps, int depth);
 BOOL svc_io_r_start_service(char *desc,  SVC_R_START_SERVICE *r_s, prs_struct *ps, int depth);
 BOOL make_svc_query_svc_cfg(QUERY_SERVICE_CONFIG *q_u,
-                               uint32 service_item, uint32 start_item,
+                               uint32 service_type, uint32 start_type,
                                uint32 error_control,
                                char* bin_path_name, char* load_order_grp, 
                                uint32 tag_id,
@@ -3406,7 +3411,7 @@ BOOL make_svc_query_svc_cfg(QUERY_SERVICE_CONFIG *q_u,
                                char* disp_name);
 BOOL svc_io_query_svc_cfg(char *desc, QUERY_SERVICE_CONFIG *q_u, prs_struct *ps, int depth);
 BOOL make_svc_q_enum_svcs_status(SVC_Q_ENUM_SVCS_STATUS *q_c, POLICY_HND *hnd,
-                               uint32 service_item, uint32 service_state,
+                               uint32 service_type, uint32 service_state,
                                uint32 buf_size, uint32 resume_hnd );
 BOOL svc_io_q_enum_svcs_status(char *desc,  SVC_Q_ENUM_SVCS_STATUS *q_u, prs_struct *ps, int depth);
 BOOL make_svc_r_enum_svcs_status(SVC_R_ENUM_SVCS_STATUS *r_c, 
@@ -3676,6 +3681,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[]);
 
 /*The following definitions come from  rpcclient/cmd_wkssvc.c  */
 
index e09cd4ec122b5f3b36a0b81f5c92ec458152b3b8..bba6342db8acf4b286ed86e55b04b4aa388c14c8 100644 (file)
@@ -478,4 +478,62 @@ BOOL svc_close(struct cli_state *cli, uint16 fnum, POLICY_HND *hnd)
        return valid_close;
 }
 
+/****************************************************************************
+do a SVC Query Lookup RIDS
+****************************************************************************/
+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)
+{
+       prs_struct data;
+       prs_struct rdata;
+
+       SVC_Q_UNKNOWN_1B q_o;
+       BOOL valid_query = False;
+
+       if (pol == NULL || num_items == NULL || items == NULL ) return False;
+
+       /* create and send a MSRPC command with api SVC_UNKNOWN_1B */
+
+       prs_init(&data , 1024, 4, SAFETY_MARGIN, False);
+       prs_init(&rdata, 0   , 4, SAFETY_MARGIN, True );
+
+       DEBUG(4,("SVC Query Unknown 1b.\n"));
+
+       /* store the parameters */
+       make_svc_q_unknown_1b(&q_o, pol, switch_value, unknown_1);
+
+       /* turn parameters into data stream */
+       svc_io_q_unknown_1b("", &q_o,  &data, 0);
+
+       /* send the data on \PIPE\ */
+       if (rpc_api_pipe_req(cli, fnum, SVC_UNKNOWN_1B, &data, &rdata))
+       {
+               SVC_R_UNKNOWN_1B r_o;
+               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)
+               {
+                       /* report error code */
+                       DEBUG(4,("SVC_R_UNKNOWN_1B: %s\n", get_nt_error_msg(r_o.status)));
+                       p = False;
+               }
 
+               if (p)
+               {
+                       (*num_items) = r_o.num_items1;
+                       (*items) = r_o.items;
+               }
+       }
+
+       prs_mem_free(&data   );
+       prs_mem_free(&rdata  );
+
+       return valid_query;
+}
index 9e9e3c82bb1229182c546e9afc394cce5393bcd4..6d2311b9624bb6f510924bd6f5fb3e8bde652902 100644 (file)
@@ -341,12 +341,12 @@ void cmd_svc_start(struct client_info *info, int argc, char *argv[])
                return;
        }
 
-       argc++;
+       argv++;
        argc--;
 
        svc_name = argv[0];
 
-       argc++;
+       argv++;
        argc--;
 
        /* open SVCCTL session. */
@@ -382,3 +382,84 @@ void cmd_svc_start(struct client_info *info, int argc, char *argv[])
        }
 }
 
+/****************************************************************************
+nt test service 
+****************************************************************************/
+void cmd_svc_test(struct client_info *info, int argc, char *argv[])
+{
+       uint16 fnum;
+       BOOL res = True;
+       BOOL res1 = True;
+       char *svc_name;
+       BOOL res2 = True;
+       POLICY_HND pol_svc;
+       POLICY_HND pol_scm;
+       uint32 num_items = 0;
+       uint32 **items = NULL;
+       
+       fstring srv_name;
+
+       fstrcpy(srv_name, "\\\\");
+       fstrcat(srv_name, info->myhostname);
+       strupper(srv_name);
+
+       DEBUG(4,("cmd_svc_test: server:%s\n", srv_name));
+
+       if (argc < 2)
+       {
+               report(out_hnd,"svctest <service name>]\n");
+               return;
+       }
+
+       argv++;
+       argc--;
+
+       svc_name = argv[0];
+
+       argv++;
+       argc--;
+
+       /* 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,
+                               &pol_scm) : False;
+
+       res1 = res ? svc_open_service(smb_cli, fnum,
+                                      &pol_scm,
+                                      svc_name, 0x80000010,
+                                      &pol_svc) : False;
+       res2 = res1 ? svc_query_unknown_1b(smb_cli, fnum,
+                                      &pol_svc, 1, 0x227,
+                                      &num_items, &items) : False;
+
+       res1 = res1 ? 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)
+       {
+               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"));
+       }
+       else
+               report(out_hnd,"Failed Test 0x1b (%s)\n", svc_name);
+       {
+               DEBUG(5,("cmd_svc_test: failed\n"));
+       }
+
+       free_uint32_array(num_items, items);
+}
+
index 33890749eaea8a2a0411732cc072813318927a85..de0f72c65d7f3d9dc05f7a382ec848b840712b91 100644 (file)
@@ -157,6 +157,13 @@ commands[] =
                {COMPL_SVCLST, COMPL_NONE}
        },
 
+       {
+               "svctest",
+               cmd_svc_test,
+               "<service> Test Service",
+               {COMPL_SVCLST, COMPL_NONE}
+       },
+
        {
                "svcstop",
                cmd_svc_stop,