From ad1ee0a52d7c6ebab5cb482eb78738c346cec9aa Mon Sep 17 00:00:00 2001 From: Raf <84349012+RafBishopFox@users.noreply.github.com> Date: Mon, 15 Jan 2024 10:48:59 -0500 Subject: [PATCH 1/3] Adding the services command for getting information about and controlling services on Windows --- client/command/processes/commands.go | 62 +- client/command/processes/services.go | 315 +++++ client/constants/constants.go | 12 +- implant/sliver/handlers/handlers_windows.go | 92 +- implant/sliver/service/service_windows.go | 207 ++++ protobuf/rpcpb/services.pb.go | 1153 ++++++++++--------- protobuf/rpcpb/services.proto | 3 + protobuf/rpcpb/services_grpc.pb.go | 108 ++ protobuf/sliverpb/constants.go | 13 + protobuf/sliverpb/sliver.pb.go | 891 +++++++++++--- protobuf/sliverpb/sliver.proto | 41 + server/rpc/rpc-service.go | 28 + 12 files changed, 2154 insertions(+), 771 deletions(-) create mode 100644 client/command/processes/services.go diff --git a/client/command/processes/commands.go b/client/command/processes/commands.go index 5cb4c74060..4a889dc0a4 100644 --- a/client/command/processes/commands.go +++ b/client/command/processes/commands.go @@ -72,5 +72,65 @@ func Commands(con *console.SliverClient) []*cobra.Command { }) carapace.Gen(terminateCmd).PositionalCompletion(carapace.ActionValues().Usage("process ID")) - return []*cobra.Command{psCmd, procdumpCmd, terminateCmd} + servicesCmd := &cobra.Command{ + Use: consts.ServicesStr, + Short: "Service operations", + Long: help.GetHelpFor([]string{consts.ServicesStr}), + Run: func(cmd *cobra.Command, args []string) { + ServicesCmd(cmd, con, args) + }, + GroupID: consts.ProcessHelpGroup, + Annotations: flags.RestrictTargets(consts.WindowsCmdsFilter), + } + flags.Bind("", false, servicesCmd, func(f *pflag.FlagSet) { + f.StringP("host", "H", "localhost", "Hostname to retrieve service information from") + f.Int64P("timeout", "t", flags.DefaultTimeout, "grpc timeout in seconds") + }) + + serviceInfoCmd := &cobra.Command{ + Use: consts.ServicesInfoStr, + Short: "Get detailed information about a single service", + Long: help.GetHelpFor([]string{consts.ServicesStr + "_" + consts.ServicesInfoStr}), + Args: cobra.ExactArgs(1), + Run: func(cmd *cobra.Command, args []string) { + ServiceInfoCmd(cmd, con, args) + }, + } + flags.Bind("", false, serviceInfoCmd, func(f *pflag.FlagSet) { + f.StringP("host", "H", "localhost", "Hostname to retrieve service information from") + f.Int64P("timeout", "t", flags.DefaultTimeout, "grpc timeout in seconds") + }) + servicesCmd.AddCommand(serviceInfoCmd) + + serviceStopCmd := &cobra.Command{ + Use: consts.ServicesStopStr, + Short: "Stop a service on the local machine or a remote machine", + Long: help.GetHelpFor([]string{consts.ServicesStr + "_" + consts.ServicesStopStr}), + Args: cobra.ExactArgs(1), + Run: func(cmd *cobra.Command, args []string) { + ServiceStopCmd(cmd, con, args) + }, + } + flags.Bind("", false, serviceStopCmd, func(f *pflag.FlagSet) { + f.StringP("host", "H", "localhost", "Hostname to stop service on") + f.Int64P("timeout", "t", flags.DefaultTimeout, "grpc timeout in seconds") + }) + servicesCmd.AddCommand(serviceStopCmd) + + serviceStartCmd := &cobra.Command{ + Use: consts.ServicesStartStr, + Short: "Start a service on the local machine or a remote machine", + Long: help.GetHelpFor([]string{consts.ServicesStr + "_" + consts.ServicesStartStr}), + Args: cobra.ExactArgs(1), + Run: func(cmd *cobra.Command, args []string) { + ServiceStartCmd(cmd, con, args) + }, + } + flags.Bind("", false, serviceStartCmd, func(f *pflag.FlagSet) { + f.StringP("host", "H", "localhost", "Hostname to start service on") + f.Int64P("timeout", "t", flags.DefaultTimeout, "grpc timeout in seconds") + }) + servicesCmd.AddCommand(serviceStartCmd) + + return []*cobra.Command{psCmd, procdumpCmd, terminateCmd, servicesCmd} } diff --git a/client/command/processes/services.go b/client/command/processes/services.go new file mode 100644 index 0000000000..db18146306 --- /dev/null +++ b/client/command/processes/services.go @@ -0,0 +1,315 @@ +package processes + +import ( + "context" + "fmt" + "strings" + + "github.com/bishopfox/sliver/client/command/settings" + "github.com/bishopfox/sliver/client/console" + "github.com/bishopfox/sliver/protobuf/clientpb" + "github.com/bishopfox/sliver/protobuf/sliverpb" + "github.com/golang/protobuf/proto" + "github.com/jedib0t/go-pretty/v6/table" + "github.com/spf13/cobra" + "golang.org/x/term" +) + +func ServicesCmd(cmd *cobra.Command, con *console.SliverClient, args []string) { + session, beacon := con.ActiveTarget.GetInteractive() + if session == nil && beacon == nil { + return + } + + // Hopefully this command being Windows only is temporary + activeOS := getOS(session, beacon) + if activeOS != "windows" { + con.PrintErrorf("The services command is currently only available on Windows") + return + } + + hostname, _ := cmd.Flags().GetString("host") + + services, err := con.Rpc.Services(context.Background(), &sliverpb.ServicesReq{ + Hostname: hostname, + Request: con.ActiveTarget.Request(cmd), + }) + + if err != nil { + con.PrintErrorf("%s\n", err) + return + } + if services.Response != nil && services.Response.Async { + con.AddBeaconCallback(services.Response.TaskID, func(task *clientpb.BeaconTask) { + err = proto.Unmarshal(task.Response, services) + if err != nil { + con.PrintErrorf("Failed to decode response: %s\n", err) + return + } + PrintServices(services, con) + }) + con.PrintAsyncResponse(services.Response) + } else { + PrintServices(services, con) + } +} + +func ServiceInfoCmd(cmd *cobra.Command, con *console.SliverClient, args []string) { + session, beacon := con.ActiveTarget.GetInteractive() + if session == nil && beacon == nil { + return + } + + // Hopefully this command being Windows only is temporary + activeOS := getOS(session, beacon) + if activeOS != "windows" { + con.PrintErrorf("The services command is currently only available on Windows") + return + } + + hostname, _ := cmd.Flags().GetString("host") + serviceName := args[0] + if serviceName == "" { + con.PrintErrorf("A service name is required") + return + } + + serviceInfo, err := con.Rpc.ServiceDetail(context.Background(), &sliverpb.ServiceDetailReq{ + ServiceInfo: &sliverpb.ServiceInfoReq{Hostname: hostname, ServiceName: serviceName}, + Request: con.ActiveTarget.Request(cmd), + }) + + if err != nil { + con.PrintErrorf("%s\n", err) + return + } + + if serviceInfo.Response != nil && serviceInfo.Response.Async { + con.AddBeaconCallback(serviceInfo.Response.TaskID, func(task *clientpb.BeaconTask) { + err = proto.Unmarshal(task.Response, serviceInfo) + if err != nil { + con.PrintErrorf("Failed to decode response: %s\n", err) + return + } + PrintServiceDetail(serviceInfo, con) + }) + con.PrintAsyncResponse(serviceInfo.Response) + } else { + PrintServiceDetail(serviceInfo, con) + } +} + +func ServiceStopCmd(cmd *cobra.Command, con *console.SliverClient, args []string) { + session, beacon := con.ActiveTarget.GetInteractive() + if session == nil && beacon == nil { + return + } + + // Hopefully this command being Windows only is temporary + activeOS := getOS(session, beacon) + if activeOS != "windows" { + con.PrintErrorf("The services command is currently only available on Windows") + return + } + + hostname, _ := cmd.Flags().GetString("host") + serviceName := args[0] + if serviceName == "" { + con.PrintErrorf("A service name is required") + return + } + + stopService, err := con.Rpc.StopService(context.Background(), &sliverpb.StopServiceReq{ + ServiceInfo: &sliverpb.ServiceInfoReq{Hostname: hostname, ServiceName: serviceName}, + Request: con.ActiveTarget.Request(cmd), + }) + + if err != nil { + con.PrintErrorf("%s\n", err) + return + } + + if stopService.Response != nil && stopService.Response.Async { + con.AddBeaconCallback(stopService.Response.TaskID, func(task *clientpb.BeaconTask) { + err = proto.Unmarshal(task.Response, stopService) + if err != nil { + con.PrintErrorf("Failed to decode response: %s\n", err) + return + } + // We only get a response with content if there is an error + if stopService.Response != nil { + con.PrintErrorf("Error when stopping %s on %s: %s", serviceName, hostname, stopService.Response.Err) + } else { + displayName := hostname + if hostname == "localhost" { + displayName = beacon.Name + } + con.PrintSuccessf("%s on %s stopped successfully", serviceName, displayName) + } + }) + con.PrintAsyncResponse(stopService.Response) + } else { + if stopService.Response != nil { + con.PrintErrorf("Error when stopping %s on %s: %s", serviceName, hostname, stopService.Response.Err) + } else { + displayName := hostname + if hostname == "localhost" { + displayName = session.Name + } + con.PrintSuccessf("%s on %s stopped successfully", serviceName, displayName) + } + } +} + +func ServiceStartCmd(cmd *cobra.Command, con *console.SliverClient, args []string) { + session, beacon := con.ActiveTarget.GetInteractive() + if session == nil && beacon == nil { + return + } + + // Hopefully this command being Windows only is temporary + activeOS := getOS(session, beacon) + if activeOS != "windows" { + con.PrintErrorf("The services command is currently only available on Windows") + return + } + + hostname, _ := cmd.Flags().GetString("host") + serviceName := args[0] + if serviceName == "" { + con.PrintErrorf("A service name is required") + return + } + + startService, err := con.Rpc.StartExistingService(context.Background(), &sliverpb.StartExistingServiceReq{ + ServiceInfo: &sliverpb.ServiceInfoReq{Hostname: hostname, ServiceName: serviceName}, + Request: con.ActiveTarget.Request(cmd), + }) + + if err != nil { + con.PrintErrorf("%s\n", err) + return + } + + if startService.Response != nil && startService.Response.Async { + con.AddBeaconCallback(startService.Response.TaskID, func(task *clientpb.BeaconTask) { + err = proto.Unmarshal(task.Response, startService) + if err != nil { + con.PrintErrorf("Failed to decode response: %s\n", err) + return + } + // We only get a response with content if there is an error + if startService.Response != nil { + con.PrintErrorf("Error when starting %s on %s: %s", serviceName, hostname, startService.Response.Err) + } else { + displayName := hostname + if hostname == "localhost" { + displayName = beacon.Name + } + con.PrintSuccessf("%s on %s started successfully", serviceName, displayName) + } + }) + con.PrintAsyncResponse(startService.Response) + } else { + if startService.Response != nil { + con.PrintErrorf("Error when starting %s on %s: %s", serviceName, hostname, startService.Response.Err) + } else { + displayName := hostname + if hostname == "localhost" { + displayName = session.Name + } + con.PrintSuccessf("%s on %s started successfully", serviceName, displayName) + } + } +} + +func PrintServices(serviceInfo *sliverpb.Services, con *console.SliverClient) { + // Get terminal width + width, _, err := term.GetSize(0) + if err != nil { + width = 999 + } + + if serviceInfo.Details == nil { + if serviceInfo.Error != "" { + con.PrintErrorf("Encountered the following errors while trying to retrieve service info:\n%s\n", serviceInfo.Error) + } + return + } + + tw := table.NewWriter() + tw.SetStyle(settings.GetTableStyle(con)) + wideTermWidth := con.Settings.SmallTermWidth < width + + if wideTermWidth { + tw.AppendHeader(table.Row{ + "Service Name", + "Display Name", + "Status", + "Startup Type", + "Binary Path", + "Account", + }) + } else { + tw.AppendHeader(table.Row{ + "Service Name", + "Display Name", + "Status", + }) + } + + tw.SortBy([]table.SortBy{ + {Name: "Service Name", Mode: table.Asc}, + }) + + for _, service := range serviceInfo.Details { + var row table.Row + if wideTermWidth { + row = table.Row{ + service.Name, + service.DisplayName, + service.Status, + service.StartupType, + service.BinPath, + service.Account, + } + } else { + row = table.Row{ + service.Name, + service.DisplayName, + service.Status, + } + } + tw.AppendRow(row) + } + + con.Printf("%s\n", tw.Render()) + if serviceInfo.Error != "" { + con.Println() + con.PrintWarnf("Service info may not be complete. Encountered the following errors while trying to retrieve service info:\n%s\n", serviceInfo.Error) + } +} + +func PrintServiceDetail(serviceDetail *sliverpb.ServiceDetail, con *console.SliverClient) { + if serviceDetail.Response != nil && serviceDetail.Response.Err != "" { + con.PrintErrorf("%s\n", serviceDetail.Response.Err) + return + } + + if serviceDetail.Detail == nil { + return + } + + detail := serviceDetail.Detail + + header := fmt.Sprintf("Service information for %s", detail.Name) + + con.Printf("\n%s\n", header) + con.Printf("%s\n\n", strings.Repeat("-", len(header))) + con.Println("Display Name: ", detail.DisplayName) + con.Println("Description: ", detail.Description) + con.Println("Account the service runs under: ", detail.Account) + con.Println("Binary Path: ", detail.BinPath) + con.Println("Startup type: ", detail.StartupType) + con.Println("Status: ", detail.Status) +} diff --git a/client/constants/constants.go b/client/constants/constants.go index eda7341f92..782e142412 100644 --- a/client/constants/constants.go +++ b/client/constants/constants.go @@ -187,10 +187,14 @@ const ( MsfStr = "msf" MsfInjectStr = "msf-inject" - PsStr = "ps" - PingStr = "ping" - KillStr = "kill" - TerminateStr = "terminate" + PsStr = "ps" + PingStr = "ping" + KillStr = "kill" + TerminateStr = "terminate" + ServicesStr = "services" + ServicesInfoStr = "info" + ServicesStopStr = "stop" + ServicesStartStr = "start" GetPIDStr = "getpid" GetUIDStr = "getuid" diff --git a/implant/sliver/handlers/handlers_windows.go b/implant/sliver/handlers/handlers_windows.go index 90da35f0a1..9ce9cf73be 100644 --- a/implant/sliver/handlers/handlers_windows.go +++ b/implant/sliver/handlers/handlers_windows.go @@ -75,19 +75,22 @@ var ( sliverpb.MsgCurrentTokenOwnerReq: currentTokenOwnerHandler, // Platform specific - sliverpb.MsgIfconfigReq: ifconfigHandler, - sliverpb.MsgScreenshotReq: screenshotHandler, - sliverpb.MsgSideloadReq: sideloadHandler, - sliverpb.MsgNetstatReq: netstatHandler, - sliverpb.MsgMakeTokenReq: makeTokenHandler, - sliverpb.MsgPsReq: psHandler, - sliverpb.MsgTerminateReq: terminateHandler, - sliverpb.MsgRegistryReadReq: regReadHandler, - sliverpb.MsgRegistryWriteReq: regWriteHandler, - sliverpb.MsgRegistryCreateKeyReq: regCreateKeyHandler, - sliverpb.MsgRegistryDeleteKeyReq: regDeleteKeyHandler, - sliverpb.MsgRegistrySubKeysListReq: regSubKeysListHandler, - sliverpb.MsgRegistryListValuesReq: regValuesListHandler, + sliverpb.MsgIfconfigReq: ifconfigHandler, + sliverpb.MsgScreenshotReq: screenshotHandler, + sliverpb.MsgSideloadReq: sideloadHandler, + sliverpb.MsgNetstatReq: netstatHandler, + sliverpb.MsgMakeTokenReq: makeTokenHandler, + sliverpb.MsgPsReq: psHandler, + sliverpb.MsgTerminateReq: terminateHandler, + sliverpb.MsgRegistryReadReq: regReadHandler, + sliverpb.MsgRegistryWriteReq: regWriteHandler, + sliverpb.MsgRegistryCreateKeyReq: regCreateKeyHandler, + sliverpb.MsgRegistryDeleteKeyReq: regDeleteKeyHandler, + sliverpb.MsgRegistrySubKeysListReq: regSubKeysListHandler, + sliverpb.MsgRegistryListValuesReq: regValuesListHandler, + sliverpb.MsgServicesReq: servicesListHandler, + sliverpb.MsgServiceDetailReq: serviceDetailHandler, + sliverpb.MsgStartExistingServiceReq: startExistingServiceHandler, // Generic sliverpb.MsgPing: pingHandler, @@ -595,6 +598,25 @@ func stopService(data []byte, resp RPCResponse) { resp(data, err) } +func startExistingServiceHandler(data []byte, resp RPCResponse) { + startServiceReq := &sliverpb.StartExistingServiceReq{} + err := proto.Unmarshal(data, startServiceReq) + if err != nil { + return + } + + err = service.StartExistingService(startServiceReq.ServiceInfo.Hostname, startServiceReq.ServiceInfo.ServiceName) + svcInfo := &sliverpb.ServiceInfo{} + if err != nil { + svcInfo.Response = &commonpb.Response{ + Err: err.Error(), + } + } + + data, err = proto.Marshal(svcInfo) + resp(data, err) +} + func removeService(data []byte, resp RPCResponse) { removeServiceReq := &sliverpb.RemoveServiceReq{} err := proto.Unmarshal(data, removeServiceReq) @@ -778,6 +800,50 @@ func getPrivsHandler(data []byte, resp RPCResponse) { resp(data, err) } +func servicesListHandler(data []byte, resp RPCResponse) { + servicesReq := &sliverpb.ServicesReq{} + err := proto.Unmarshal(data, servicesReq) + if err != nil { + return + } + + serviceInfo, err := service.ListServices(servicesReq.Hostname) + /* + Errors from listing the services are not fatal. The client can + display a message to the user about the issue + We still want other errors like timeouts to be handled in the + normal way. + */ + servicesResp := &sliverpb.Services{ + Details: serviceInfo, + Error: err.Error(), + Response: &commonpb.Response{}, + } + + data, err = proto.Marshal(servicesResp) + resp(data, err) +} + +func serviceDetailHandler(data []byte, resp RPCResponse) { + serviceDetailReq := &sliverpb.ServiceDetailReq{} + err := proto.Unmarshal(data, serviceDetailReq) + if err != nil { + return + } + + serviceDetail, err := service.GetServiceDetail(serviceDetailReq.ServiceInfo.Hostname, serviceDetailReq.ServiceInfo.ServiceName) + serviceDetailResp := &sliverpb.ServiceDetail{ + Detail: serviceDetail, + Response: &commonpb.Response{}, + } + if err != nil { + serviceDetailResp.Response.Err = err.Error() + } + + data, err = proto.Marshal(serviceDetailResp) + resp(data, err) +} + // Extensions func registerExtensionHandler(data []byte, resp RPCResponse) { diff --git a/implant/sliver/service/service_windows.go b/implant/sliver/service/service_windows.go index 38ebfcec62..6015d2ffdf 100644 --- a/implant/sliver/service/service_windows.go +++ b/implant/sliver/service/service_windows.go @@ -20,13 +20,22 @@ package service import ( "fmt" + "strings" "time" + "github.com/bishopfox/sliver/protobuf/sliverpb" "golang.org/x/sys/windows" "golang.org/x/sys/windows/svc" "golang.org/x/sys/windows/svc/mgr" ) +const ( + ReadOnlyServiceManagerPermissions = windows.SC_MANAGER_ENUMERATE_SERVICE + ReadOnlyServicePermissions = windows.SERVICE_QUERY_CONFIG | windows.SERVICE_QUERY_STATUS + ConnectServiceManagerPermissions = windows.SC_MANAGER_CONNECT + StartServiceAndVerifyPermissions = windows.SERVICE_START | windows.SERVICE_QUERY_STATUS +) + func StartService(hostname string, binPath string, arguments string, serviceName string, serviceDesc string) error { manager, err := mgr.ConnectRemote(hostname) if err != nil { @@ -93,3 +102,201 @@ func RemoveService(hostname string, serviceName string) error { err = service.Delete() return err } + +/* + Currently, golang.org/x/sys/windows/svc/mgr attempts to open the service + manager with elevated permissions: https://github.com/golang/go/issues/51465 + https://github.com/golang/sys/blob/master/windows/svc/mgr/mgr.go#L34 + + We should not need elevated privileges to list services, so we will have to + define a custom service manager that asks for lower rights. + + Similarly, we need a custom OpenService function that does not ask for + elevated rights so we can get the status and config of the service. +*/ + +func connectToServiceManager(hostname string, permissions uint32) (*mgr.Mgr, error) { + var connectHost *uint16 + + if hostname == "localhost" { + /* + According to Win32 API docs, if the machine name passed to OpenSCManager + is NULL or empty, a connection will be opened to the local machine + https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-openscmanagera + */ + connectHost = nil + } else { + connectHost = windows.StringToUTF16Ptr(hostname) + } + handle, err := windows.OpenSCManager(connectHost, nil, permissions) + if err != nil { + return nil, err + } + return &mgr.Mgr{Handle: handle}, nil +} + +func openService(svcManager *mgr.Mgr, serviceName string, permissions uint32) (*mgr.Service, error) { + handle, err := windows.OpenService(svcManager.Handle, windows.StringToUTF16Ptr(serviceName), permissions) + if err != nil { + return nil, err + } + return &mgr.Service{Name: serviceName, Handle: handle}, nil +} + +func buildServiceDetail(serviceName string, config mgr.Config) *sliverpb.ServiceDetails { + detail := &sliverpb.ServiceDetails{Name: serviceName} + + detail.DisplayName = config.DisplayName + detail.Description = config.Description + switch config.StartType { + case mgr.StartManual: + detail.StartupType = "Manual" + case mgr.StartAutomatic: + detail.StartupType = "Automatic" + case mgr.StartDisabled: + detail.StartupType = "Disabled" + } + detail.BinPath = config.BinaryPathName + detail.Account = config.ServiceStartName + // Will hopefully be filled in later + detail.Status = "Unknown" + + return detail +} + +func ListServices(hostName string) ([]*sliverpb.ServiceDetails, error) { + var servicesList []*sliverpb.ServiceDetails + var serviceErrors []string + var operationError error + + manager, err := connectToServiceManager(hostName, ReadOnlyServiceManagerPermissions) + if err != nil { + return nil, err + } + defer manager.Disconnect() + services, err := manager.ListServices() + if err != nil { + return nil, err + } + + for _, serviceName := range services { + serviceHandle, err := openService(manager, serviceName, ReadOnlyServicePermissions) + if err != nil { + serviceErrors = append(serviceErrors, fmt.Sprintf("%s: %s", serviceName, err.Error())) + continue + } + serviceConfig, err := serviceHandle.Config() + if err != nil { + serviceErrors = append(serviceErrors, fmt.Sprintf("%s: %s", serviceName, err.Error())) + continue + } + serviceInfo := buildServiceDetail(serviceName, serviceConfig) + serviceStatus, err := serviceHandle.Query() + if err != nil { + serviceErrors = append(serviceErrors, err.Error()) + servicesList = append(servicesList, serviceInfo) + continue + } + switch serviceStatus.State { + case svc.Stopped: + serviceInfo.Status = "Stopped" + case svc.StartPending: + serviceInfo.Status = "Start Pending" + case svc.StopPending: + serviceInfo.Status = "Stop Pending" + case svc.Running: + serviceInfo.Status = "Running" + case svc.ContinuePending: + serviceInfo.Status = "Continue Pending" + case svc.PausePending: + serviceInfo.Status = "Pause Pending" + case svc.Paused: + serviceInfo.Status = "Paused" + } + servicesList = append(servicesList, serviceInfo) + } + + if len(serviceErrors) > 0 { + operationError = fmt.Errorf("%s", strings.Join(serviceErrors, "\n")) + } else { + operationError = nil + } + + return servicesList, operationError +} + +func GetServiceDetail(hostName string, serviceName string) (*sliverpb.ServiceDetails, error) { + manager, err := connectToServiceManager(hostName, ReadOnlyServiceManagerPermissions) + if err != nil { + return nil, err + } + defer manager.Disconnect() + serviceHandle, err := openService(manager, serviceName, ReadOnlyServicePermissions) + if err != nil { + return nil, err + } + serviceConfig, err := serviceHandle.Config() + if err != nil { + return nil, err + } + serviceDetail := buildServiceDetail(serviceName, serviceConfig) + serviceStatus, err := serviceHandle.Query() + if err != nil { + serviceDetail.Status = fmt.Sprintf("Unknown (could not retrieve: %s)", err.Error()) + // Even though we encountered an error, it was not fatal (we still got some information about the service) + return serviceDetail, nil + } + + switch serviceStatus.State { + case svc.Stopped: + serviceDetail.Status = "Stopped" + case svc.StartPending: + serviceDetail.Status = "Start Pending" + case svc.StopPending: + serviceDetail.Status = "Stop Pending" + case svc.Running: + serviceDetail.Status = "Running" + case svc.ContinuePending: + serviceDetail.Status = "Continue Pending" + case svc.PausePending: + serviceDetail.Status = "Pause Pending" + case svc.Paused: + serviceDetail.Status = "Paused" + } + + return serviceDetail, nil +} + +func StartExistingService(hostName string, serviceName string) error { + manager, err := connectToServiceManager(hostName, ConnectServiceManagerPermissions) + if err != nil { + return err + } + + serviceHandle, err := openService(manager, serviceName, StartServiceAndVerifyPermissions) + if err != nil { + return err + } + + err = serviceHandle.Start() + if err != nil { + return err + } + timeout := time.Now().Add(10 * time.Second) + status, err := serviceHandle.Query() + if err != nil { + return fmt.Errorf("could not retrieve service status: %v", err) + } + + for status.State != svc.Running { + if timeout.Before(time.Now()) { + return fmt.Errorf("timeout waiting for service to go to state=%d", svc.Running) + } + time.Sleep(300 * time.Millisecond) + status, err = serviceHandle.Query() + if err != nil { + return fmt.Errorf("could not retrieve service status: %v", err) + } + } + return nil +} diff --git a/protobuf/rpcpb/services.pb.go b/protobuf/rpcpb/services.pb.go index 4fed287432..5275dfe205 100644 --- a/protobuf/rpcpb/services.pb.go +++ b/protobuf/rpcpb/services.pb.go @@ -31,7 +31,7 @@ var file_rpcpb_services_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2f, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x32, 0x96, 0x53, 0x0a, 0x09, 0x53, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x52, 0x50, 0x43, + 0x74, 0x6f, 0x32, 0xe5, 0x54, 0x0a, 0x09, 0x53, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x52, 0x50, 0x43, 0x12, 0x30, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, @@ -499,208 +499,220 @@ var file_rpcpb_services_proto_rawDesc = []byte{ 0x72, 0x70, 0x62, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x4e, 0x0a, 0x12, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x11, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, - 0x6f, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x4c, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4e, 0x0a, 0x15, 0x50, - 0x69, 0x76, 0x6f, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, - 0x50, 0x69, 0x76, 0x6f, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, - 0x6f, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x0a, 0x50, - 0x69, 0x76, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x12, 0x40, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x19, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x3e, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, - 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x42, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x15, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x0a, 0x09, 0x4d, 0x61, 0x6b, 0x65, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4d, - 0x61, 0x6b, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x2d, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x10, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x2f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x13, 0x2e, 0x73, 0x6c, 0x69, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x10, - 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, - 0x12, 0x35, 0x0a, 0x08, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x15, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x45, 0x6e, 0x76, - 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, - 0x6e, 0x73, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x35, 0x0a, 0x08, 0x42, 0x61, 0x63, 0x6b, 0x64, - 0x6f, 0x6f, 0x72, 0x12, 0x15, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x42, - 0x61, 0x63, 0x6b, 0x64, 0x6f, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x64, 0x6f, 0x6f, 0x72, 0x12, 0x41, - 0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x52, 0x65, 0x61, 0x64, 0x12, 0x19, - 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x73, 0x6c, 0x69, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x52, 0x65, 0x61, - 0x64, 0x12, 0x44, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, - 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1e, - 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, - 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x54, 0x0a, 0x13, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x4b, 0x65, - 0x79, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x12, 0x15, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x0d, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x2e, + 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x12, 0x50, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, + 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4e, 0x0a, 0x12, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x4c, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x11, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x6f, + 0x70, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x4c, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4e, 0x0a, 0x15, 0x50, 0x69, + 0x76, 0x6f, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, + 0x69, 0x76, 0x6f, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x0a, 0x50, 0x69, + 0x76, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, + 0x40, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x19, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x3e, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x70, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x42, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x0a, 0x09, 0x4d, 0x61, 0x6b, 0x65, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x16, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4d, 0x61, + 0x6b, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x2d, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x10, 0x2e, 0x73, 0x6c, 0x69, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, + 0x0a, 0x06, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x13, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, + 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, + 0x35, 0x0a, 0x08, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x15, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, + 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x6e, + 0x73, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x35, 0x0a, 0x08, 0x42, 0x61, 0x63, 0x6b, 0x64, 0x6f, + 0x6f, 0x72, 0x12, 0x15, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x42, 0x61, + 0x63, 0x6b, 0x64, 0x6f, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x64, 0x6f, 0x6f, 0x72, 0x12, 0x41, 0x0a, + 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x52, 0x65, 0x61, 0x64, 0x12, 0x19, 0x2e, + 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x52, 0x65, 0x61, 0x64, + 0x12, 0x44, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x12, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, + 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x2e, + 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, + 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x54, 0x0a, 0x13, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x4b, 0x65, 0x79, + 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x53, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x73, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x53, 0x53, 0x48, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x53, 0x53, 0x48, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, - 0x1a, 0x14, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x53, 0x48, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x48, 0x69, 0x6a, 0x61, 0x63, 0x6b, - 0x44, 0x4c, 0x4c, 0x12, 0x16, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x44, - 0x6c, 0x6c, 0x48, 0x69, 0x6a, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x44, 0x6c, 0x6c, 0x48, 0x69, 0x6a, 0x61, 0x63, 0x6b, - 0x12, 0x35, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x73, 0x12, 0x15, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x73, 0x12, 0x57, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, - 0x12, 0x22, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, - 0x74, 0x46, 0x77, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, - 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, - 0x12, 0x53, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x55, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x70, 0x6f, - 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x21, 0x2e, - 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, - 0x64, 0x53, 0x74, 0x6f, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x1a, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, - 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x0b, - 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x1a, 0x15, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, - 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x73, 0x6c, 0x69, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0d, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x1a, 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x6c, - 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x0e, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x57, - 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x1a, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x53, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x12, 0x53, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x53, 0x53, 0x48, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x53, 0x53, 0x48, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, + 0x14, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x53, 0x48, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x48, 0x69, 0x6a, 0x61, 0x63, 0x6b, 0x44, + 0x4c, 0x4c, 0x12, 0x16, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x44, 0x6c, + 0x6c, 0x48, 0x69, 0x6a, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x44, 0x6c, 0x6c, 0x48, 0x69, 0x6a, 0x61, 0x63, 0x6b, 0x12, + 0x35, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x73, 0x12, 0x15, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x69, 0x76, 0x73, 0x12, 0x57, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, + 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, + 0x22, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, + 0x46, 0x77, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, + 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, + 0x53, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x65, 0x72, 0x73, 0x12, 0x55, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x70, 0x6f, 0x72, + 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x21, 0x2e, 0x73, + 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, + 0x53, 0x74, 0x6f, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, + 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, + 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x0b, 0x4f, + 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x1a, 0x15, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x73, + 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x12, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0d, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x1a, 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x6c, 0x6c, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x0e, 0x4c, 0x69, 0x73, + 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x57, 0x61, + 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x57, + 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, + 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x53, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x50, 0x0a, 0x11, 0x45, 0x78, 0x65, 0x63, 0x57, 0x61, - 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x57, 0x61, 0x73, 0x6d, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x57, 0x61, 0x73, 0x6d, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x12, 0x57, 0x47, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1f, - 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, - 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, - 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, - 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x4c, 0x0a, 0x11, 0x57, 0x47, 0x53, 0x74, - 0x6f, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1e, 0x2e, - 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, 0x46, - 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x50, 0x0a, 0x11, 0x45, 0x78, 0x65, 0x63, 0x57, 0x61, 0x73, + 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x12, 0x57, 0x47, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, 0x46, - 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x3c, 0x0a, 0x0c, 0x57, 0x47, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x19, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, - 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x71, 0x1a, 0x11, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, - 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x3a, 0x0a, 0x0b, 0x57, 0x47, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x6f, - 0x63, 0x6b, 0x73, 0x12, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, - 0x47, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, - 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, 0x63, 0x6b, 0x73, - 0x12, 0x4b, 0x0a, 0x10, 0x57, 0x47, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, - 0x64, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, - 0x57, 0x47, 0x54, 0x43, 0x50, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, - 0x54, 0x43, 0x50, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4b, 0x0a, - 0x12, 0x57, 0x47, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, - 0x47, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, - 0x63, 0x6b, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x05, 0x53, 0x68, - 0x65, 0x6c, 0x6c, 0x12, 0x12, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, - 0x68, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x12, 0x32, 0x0a, 0x07, 0x50, 0x6f, 0x72, 0x74, - 0x66, 0x77, 0x64, 0x12, 0x14, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, - 0x6f, 0x72, 0x74, 0x66, 0x77, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, 0x6c, 0x69, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x77, 0x64, 0x12, 0x2f, 0x0a, 0x0b, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x0f, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x1a, 0x0f, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x2e, 0x0a, - 0x0a, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x0f, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x1a, 0x0f, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3a, 0x0a, - 0x0a, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x13, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x44, 0x61, 0x74, 0x61, - 0x1a, 0x13, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, - 0x73, 0x44, 0x61, 0x74, 0x61, 0x28, 0x01, 0x30, 0x01, 0x12, 0x32, 0x0a, 0x0c, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x10, 0x2e, 0x73, 0x6c, 0x69, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x1a, 0x10, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x30, 0x0a, - 0x0b, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x10, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x1a, 0x0f, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x3c, 0x0a, 0x0a, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x2e, - 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x44, - 0x61, 0x74, 0x61, 0x1a, 0x14, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, - 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x28, 0x01, 0x30, 0x01, 0x12, 0x2c, 0x0a, - 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x70, 0x62, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x42, 0x2c, 0x5a, 0x2a, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x69, 0x73, 0x68, 0x6f, 0x70, - 0x66, 0x6f, 0x78, 0x2f, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x72, 0x70, 0x63, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x17, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, + 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x4c, 0x0a, 0x11, 0x57, 0x47, 0x53, 0x74, 0x6f, + 0x70, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1e, 0x2e, 0x73, + 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, + 0x72, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, + 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, + 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x3c, 0x0a, 0x0c, 0x57, 0x47, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x19, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, + 0x2e, 0x57, 0x47, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x11, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, + 0x63, 0x6b, 0x73, 0x12, 0x3a, 0x0a, 0x0b, 0x57, 0x47, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x6f, 0x63, + 0x6b, 0x73, 0x12, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, + 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, + 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, + 0x4b, 0x0a, 0x10, 0x57, 0x47, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, + 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, + 0x47, 0x54, 0x43, 0x50, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x19, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x54, + 0x43, 0x50, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4b, 0x0a, 0x12, + 0x57, 0x47, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, + 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, 0x63, + 0x6b, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x05, 0x53, 0x68, 0x65, + 0x6c, 0x6c, 0x12, 0x12, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x68, + 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x12, 0x32, 0x0a, 0x07, 0x50, 0x6f, 0x72, 0x74, 0x66, + 0x77, 0x64, 0x12, 0x14, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x6f, + 0x72, 0x74, 0x66, 0x77, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x77, 0x64, 0x12, 0x2f, 0x0a, 0x0b, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x0f, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x1a, 0x0f, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x2e, 0x0a, 0x0a, + 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x0f, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x0a, + 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x13, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x44, 0x61, 0x74, 0x61, 0x1a, + 0x13, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, + 0x44, 0x61, 0x74, 0x61, 0x28, 0x01, 0x30, 0x01, 0x12, 0x32, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x10, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x1a, 0x10, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x30, 0x0a, 0x0b, + 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x10, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x1a, 0x0f, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, + 0x0a, 0x0a, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x2e, 0x73, + 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, + 0x74, 0x61, 0x1a, 0x14, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, + 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x28, 0x01, 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x06, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, + 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x70, 0x62, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x69, 0x73, 0x68, 0x6f, 0x70, 0x66, + 0x6f, 0x78, 0x2f, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x72, 0x70, 0x63, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_rpcpb_services_proto_goTypes = []interface{}{ @@ -787,146 +799,151 @@ var file_rpcpb_services_proto_goTypes = []interface{}{ (*sliverpb.InvokeSpawnDllReq)(nil), // 80: sliverpb.InvokeSpawnDllReq (*sliverpb.ScreenshotReq)(nil), // 81: sliverpb.ScreenshotReq (*sliverpb.CurrentTokenOwnerReq)(nil), // 82: sliverpb.CurrentTokenOwnerReq - (*sliverpb.PivotStartListenerReq)(nil), // 83: sliverpb.PivotStartListenerReq - (*sliverpb.PivotStopListenerReq)(nil), // 84: sliverpb.PivotStopListenerReq - (*sliverpb.PivotListenersReq)(nil), // 85: sliverpb.PivotListenersReq - (*sliverpb.StartServiceReq)(nil), // 86: sliverpb.StartServiceReq - (*sliverpb.StopServiceReq)(nil), // 87: sliverpb.StopServiceReq - (*sliverpb.RemoveServiceReq)(nil), // 88: sliverpb.RemoveServiceReq - (*sliverpb.MakeTokenReq)(nil), // 89: sliverpb.MakeTokenReq - (*sliverpb.EnvReq)(nil), // 90: sliverpb.EnvReq - (*sliverpb.SetEnvReq)(nil), // 91: sliverpb.SetEnvReq - (*sliverpb.UnsetEnvReq)(nil), // 92: sliverpb.UnsetEnvReq - (*clientpb.BackdoorReq)(nil), // 93: clientpb.BackdoorReq - (*sliverpb.RegistryReadReq)(nil), // 94: sliverpb.RegistryReadReq - (*sliverpb.RegistryWriteReq)(nil), // 95: sliverpb.RegistryWriteReq - (*sliverpb.RegistryCreateKeyReq)(nil), // 96: sliverpb.RegistryCreateKeyReq - (*sliverpb.RegistryDeleteKeyReq)(nil), // 97: sliverpb.RegistryDeleteKeyReq - (*sliverpb.RegistrySubKeyListReq)(nil), // 98: sliverpb.RegistrySubKeyListReq - (*sliverpb.RegistryListValuesReq)(nil), // 99: sliverpb.RegistryListValuesReq - (*sliverpb.SSHCommandReq)(nil), // 100: sliverpb.SSHCommandReq - (*clientpb.DllHijackReq)(nil), // 101: clientpb.DllHijackReq - (*sliverpb.GetPrivsReq)(nil), // 102: sliverpb.GetPrivsReq - (*sliverpb.RportFwdStartListenerReq)(nil), // 103: sliverpb.RportFwdStartListenerReq - (*sliverpb.RportFwdListenersReq)(nil), // 104: sliverpb.RportFwdListenersReq - (*sliverpb.RportFwdStopListenerReq)(nil), // 105: sliverpb.RportFwdStopListenerReq - (*sliverpb.OpenSession)(nil), // 106: sliverpb.OpenSession - (*sliverpb.CloseSession)(nil), // 107: sliverpb.CloseSession - (*sliverpb.RegisterExtensionReq)(nil), // 108: sliverpb.RegisterExtensionReq - (*sliverpb.CallExtensionReq)(nil), // 109: sliverpb.CallExtensionReq - (*sliverpb.ListExtensionsReq)(nil), // 110: sliverpb.ListExtensionsReq - (*sliverpb.RegisterWasmExtensionReq)(nil), // 111: sliverpb.RegisterWasmExtensionReq - (*sliverpb.ListWasmExtensionsReq)(nil), // 112: sliverpb.ListWasmExtensionsReq - (*sliverpb.ExecWasmExtensionReq)(nil), // 113: sliverpb.ExecWasmExtensionReq - (*sliverpb.WGPortForwardStartReq)(nil), // 114: sliverpb.WGPortForwardStartReq - (*sliverpb.WGPortForwardStopReq)(nil), // 115: sliverpb.WGPortForwardStopReq - (*sliverpb.WGSocksStartReq)(nil), // 116: sliverpb.WGSocksStartReq - (*sliverpb.WGSocksStopReq)(nil), // 117: sliverpb.WGSocksStopReq - (*sliverpb.WGTCPForwardersReq)(nil), // 118: sliverpb.WGTCPForwardersReq - (*sliverpb.WGSocksServersReq)(nil), // 119: sliverpb.WGSocksServersReq - (*sliverpb.ShellReq)(nil), // 120: sliverpb.ShellReq - (*sliverpb.PortfwdReq)(nil), // 121: sliverpb.PortfwdReq - (*sliverpb.Socks)(nil), // 122: sliverpb.Socks - (*sliverpb.SocksData)(nil), // 123: sliverpb.SocksData - (*sliverpb.Tunnel)(nil), // 124: sliverpb.Tunnel - (*sliverpb.TunnelData)(nil), // 125: sliverpb.TunnelData - (*clientpb.Version)(nil), // 126: clientpb.Version - (*clientpb.Operators)(nil), // 127: clientpb.Operators - (*sliverpb.Reconfigure)(nil), // 128: sliverpb.Reconfigure - (*clientpb.Sessions)(nil), // 129: clientpb.Sessions - (*commonpb.Response)(nil), // 130: commonpb.Response - (*clientpb.MonitoringProviders)(nil), // 131: clientpb.MonitoringProviders - (*clientpb.ListenerJob)(nil), // 132: clientpb.ListenerJob - (*clientpb.Beacons)(nil), // 133: clientpb.Beacons - (*clientpb.BeaconTasks)(nil), // 134: clientpb.BeaconTasks - (*clientpb.Jobs)(nil), // 135: clientpb.Jobs - (*clientpb.KillJob)(nil), // 136: clientpb.KillJob - (*clientpb.StagerListener)(nil), // 137: clientpb.StagerListener - (*clientpb.AllLoot)(nil), // 138: clientpb.AllLoot - (*clientpb.AllHosts)(nil), // 139: clientpb.AllHosts - (*clientpb.Generate)(nil), // 140: clientpb.Generate - (*clientpb.ExternalImplantConfig)(nil), // 141: clientpb.ExternalImplantConfig - (*clientpb.HTTPC2Configs)(nil), // 142: clientpb.HTTPC2Configs - (*clientpb.HTTPC2Config)(nil), // 143: clientpb.HTTPC2Config - (*clientpb.Builders)(nil), // 144: clientpb.Builders - (*clientpb.Crackstations)(nil), // 145: clientpb.Crackstations - (*clientpb.CrackFiles)(nil), // 146: clientpb.CrackFiles - (*clientpb.ImplantBuilds)(nil), // 147: clientpb.ImplantBuilds - (*clientpb.Canaries)(nil), // 148: clientpb.Canaries - (*clientpb.WGClientConfig)(nil), // 149: clientpb.WGClientConfig - (*clientpb.UniqueWGIP)(nil), // 150: clientpb.UniqueWGIP - (*clientpb.ImplantProfiles)(nil), // 151: clientpb.ImplantProfiles - (*clientpb.MsfStager)(nil), // 152: clientpb.MsfStager - (*clientpb.ShellcodeRDI)(nil), // 153: clientpb.ShellcodeRDI - (*clientpb.Compiler)(nil), // 154: clientpb.Compiler - (*clientpb.ShellcodeEncode)(nil), // 155: clientpb.ShellcodeEncode - (*clientpb.ShellcodeEncoderMap)(nil), // 156: clientpb.ShellcodeEncoderMap - (*clientpb.TrafficEncoderMap)(nil), // 157: clientpb.TrafficEncoderMap - (*clientpb.TrafficEncoderTests)(nil), // 158: clientpb.TrafficEncoderTests - (*clientpb.Websites)(nil), // 159: clientpb.Websites - (*sliverpb.Ps)(nil), // 160: sliverpb.Ps - (*sliverpb.Terminate)(nil), // 161: sliverpb.Terminate - (*sliverpb.Ifconfig)(nil), // 162: sliverpb.Ifconfig - (*sliverpb.Netstat)(nil), // 163: sliverpb.Netstat - (*sliverpb.Ls)(nil), // 164: sliverpb.Ls - (*sliverpb.Pwd)(nil), // 165: sliverpb.Pwd - (*sliverpb.Mv)(nil), // 166: sliverpb.Mv - (*sliverpb.Cp)(nil), // 167: sliverpb.Cp - (*sliverpb.Rm)(nil), // 168: sliverpb.Rm - (*sliverpb.Mkdir)(nil), // 169: sliverpb.Mkdir - (*sliverpb.Download)(nil), // 170: sliverpb.Download - (*sliverpb.Upload)(nil), // 171: sliverpb.Upload - (*sliverpb.Grep)(nil), // 172: sliverpb.Grep - (*sliverpb.Chmod)(nil), // 173: sliverpb.Chmod - (*sliverpb.Chown)(nil), // 174: sliverpb.Chown - (*sliverpb.Chtimes)(nil), // 175: sliverpb.Chtimes - (*sliverpb.MemfilesAdd)(nil), // 176: sliverpb.MemfilesAdd - (*sliverpb.MemfilesRm)(nil), // 177: sliverpb.MemfilesRm - (*sliverpb.ProcessDump)(nil), // 178: sliverpb.ProcessDump - (*sliverpb.RunAs)(nil), // 179: sliverpb.RunAs - (*sliverpb.Impersonate)(nil), // 180: sliverpb.Impersonate - (*sliverpb.RevToSelf)(nil), // 181: sliverpb.RevToSelf - (*sliverpb.GetSystem)(nil), // 182: sliverpb.GetSystem - (*sliverpb.Task)(nil), // 183: sliverpb.Task - (*sliverpb.ExecuteAssembly)(nil), // 184: sliverpb.ExecuteAssembly - (*sliverpb.Migrate)(nil), // 185: sliverpb.Migrate - (*sliverpb.Execute)(nil), // 186: sliverpb.Execute - (*sliverpb.Sideload)(nil), // 187: sliverpb.Sideload - (*sliverpb.SpawnDll)(nil), // 188: sliverpb.SpawnDll - (*sliverpb.Screenshot)(nil), // 189: sliverpb.Screenshot - (*sliverpb.CurrentTokenOwner)(nil), // 190: sliverpb.CurrentTokenOwner - (*sliverpb.PivotListener)(nil), // 191: sliverpb.PivotListener - (*sliverpb.PivotListeners)(nil), // 192: sliverpb.PivotListeners - (*clientpb.PivotGraph)(nil), // 193: clientpb.PivotGraph - (*sliverpb.ServiceInfo)(nil), // 194: sliverpb.ServiceInfo - (*sliverpb.MakeToken)(nil), // 195: sliverpb.MakeToken - (*sliverpb.EnvInfo)(nil), // 196: sliverpb.EnvInfo - (*sliverpb.SetEnv)(nil), // 197: sliverpb.SetEnv - (*sliverpb.UnsetEnv)(nil), // 198: sliverpb.UnsetEnv - (*clientpb.Backdoor)(nil), // 199: clientpb.Backdoor - (*sliverpb.RegistryRead)(nil), // 200: sliverpb.RegistryRead - (*sliverpb.RegistryWrite)(nil), // 201: sliverpb.RegistryWrite - (*sliverpb.RegistryCreateKey)(nil), // 202: sliverpb.RegistryCreateKey - (*sliverpb.RegistryDeleteKey)(nil), // 203: sliverpb.RegistryDeleteKey - (*sliverpb.RegistrySubKeyList)(nil), // 204: sliverpb.RegistrySubKeyList - (*sliverpb.RegistryValuesList)(nil), // 205: sliverpb.RegistryValuesList - (*sliverpb.SSHCommand)(nil), // 206: sliverpb.SSHCommand - (*clientpb.DllHijack)(nil), // 207: clientpb.DllHijack - (*sliverpb.GetPrivs)(nil), // 208: sliverpb.GetPrivs - (*sliverpb.RportFwdListener)(nil), // 209: sliverpb.RportFwdListener - (*sliverpb.RportFwdListeners)(nil), // 210: sliverpb.RportFwdListeners - (*sliverpb.RegisterExtension)(nil), // 211: sliverpb.RegisterExtension - (*sliverpb.CallExtension)(nil), // 212: sliverpb.CallExtension - (*sliverpb.ListExtensions)(nil), // 213: sliverpb.ListExtensions - (*sliverpb.RegisterWasmExtension)(nil), // 214: sliverpb.RegisterWasmExtension - (*sliverpb.ListWasmExtensions)(nil), // 215: sliverpb.ListWasmExtensions - (*sliverpb.ExecWasmExtension)(nil), // 216: sliverpb.ExecWasmExtension - (*sliverpb.WGPortForward)(nil), // 217: sliverpb.WGPortForward - (*sliverpb.WGSocks)(nil), // 218: sliverpb.WGSocks - (*sliverpb.WGTCPForwarders)(nil), // 219: sliverpb.WGTCPForwarders - (*sliverpb.WGSocksServers)(nil), // 220: sliverpb.WGSocksServers - (*sliverpb.Shell)(nil), // 221: sliverpb.Shell - (*sliverpb.Portfwd)(nil), // 222: sliverpb.Portfwd + (*sliverpb.ServicesReq)(nil), // 83: sliverpb.ServicesReq + (*sliverpb.ServiceDetailReq)(nil), // 84: sliverpb.ServiceDetailReq + (*sliverpb.StartExistingServiceReq)(nil), // 85: sliverpb.StartExistingServiceReq + (*sliverpb.PivotStartListenerReq)(nil), // 86: sliverpb.PivotStartListenerReq + (*sliverpb.PivotStopListenerReq)(nil), // 87: sliverpb.PivotStopListenerReq + (*sliverpb.PivotListenersReq)(nil), // 88: sliverpb.PivotListenersReq + (*sliverpb.StartServiceReq)(nil), // 89: sliverpb.StartServiceReq + (*sliverpb.StopServiceReq)(nil), // 90: sliverpb.StopServiceReq + (*sliverpb.RemoveServiceReq)(nil), // 91: sliverpb.RemoveServiceReq + (*sliverpb.MakeTokenReq)(nil), // 92: sliverpb.MakeTokenReq + (*sliverpb.EnvReq)(nil), // 93: sliverpb.EnvReq + (*sliverpb.SetEnvReq)(nil), // 94: sliverpb.SetEnvReq + (*sliverpb.UnsetEnvReq)(nil), // 95: sliverpb.UnsetEnvReq + (*clientpb.BackdoorReq)(nil), // 96: clientpb.BackdoorReq + (*sliverpb.RegistryReadReq)(nil), // 97: sliverpb.RegistryReadReq + (*sliverpb.RegistryWriteReq)(nil), // 98: sliverpb.RegistryWriteReq + (*sliverpb.RegistryCreateKeyReq)(nil), // 99: sliverpb.RegistryCreateKeyReq + (*sliverpb.RegistryDeleteKeyReq)(nil), // 100: sliverpb.RegistryDeleteKeyReq + (*sliverpb.RegistrySubKeyListReq)(nil), // 101: sliverpb.RegistrySubKeyListReq + (*sliverpb.RegistryListValuesReq)(nil), // 102: sliverpb.RegistryListValuesReq + (*sliverpb.SSHCommandReq)(nil), // 103: sliverpb.SSHCommandReq + (*clientpb.DllHijackReq)(nil), // 104: clientpb.DllHijackReq + (*sliverpb.GetPrivsReq)(nil), // 105: sliverpb.GetPrivsReq + (*sliverpb.RportFwdStartListenerReq)(nil), // 106: sliverpb.RportFwdStartListenerReq + (*sliverpb.RportFwdListenersReq)(nil), // 107: sliverpb.RportFwdListenersReq + (*sliverpb.RportFwdStopListenerReq)(nil), // 108: sliverpb.RportFwdStopListenerReq + (*sliverpb.OpenSession)(nil), // 109: sliverpb.OpenSession + (*sliverpb.CloseSession)(nil), // 110: sliverpb.CloseSession + (*sliverpb.RegisterExtensionReq)(nil), // 111: sliverpb.RegisterExtensionReq + (*sliverpb.CallExtensionReq)(nil), // 112: sliverpb.CallExtensionReq + (*sliverpb.ListExtensionsReq)(nil), // 113: sliverpb.ListExtensionsReq + (*sliverpb.RegisterWasmExtensionReq)(nil), // 114: sliverpb.RegisterWasmExtensionReq + (*sliverpb.ListWasmExtensionsReq)(nil), // 115: sliverpb.ListWasmExtensionsReq + (*sliverpb.ExecWasmExtensionReq)(nil), // 116: sliverpb.ExecWasmExtensionReq + (*sliverpb.WGPortForwardStartReq)(nil), // 117: sliverpb.WGPortForwardStartReq + (*sliverpb.WGPortForwardStopReq)(nil), // 118: sliverpb.WGPortForwardStopReq + (*sliverpb.WGSocksStartReq)(nil), // 119: sliverpb.WGSocksStartReq + (*sliverpb.WGSocksStopReq)(nil), // 120: sliverpb.WGSocksStopReq + (*sliverpb.WGTCPForwardersReq)(nil), // 121: sliverpb.WGTCPForwardersReq + (*sliverpb.WGSocksServersReq)(nil), // 122: sliverpb.WGSocksServersReq + (*sliverpb.ShellReq)(nil), // 123: sliverpb.ShellReq + (*sliverpb.PortfwdReq)(nil), // 124: sliverpb.PortfwdReq + (*sliverpb.Socks)(nil), // 125: sliverpb.Socks + (*sliverpb.SocksData)(nil), // 126: sliverpb.SocksData + (*sliverpb.Tunnel)(nil), // 127: sliverpb.Tunnel + (*sliverpb.TunnelData)(nil), // 128: sliverpb.TunnelData + (*clientpb.Version)(nil), // 129: clientpb.Version + (*clientpb.Operators)(nil), // 130: clientpb.Operators + (*sliverpb.Reconfigure)(nil), // 131: sliverpb.Reconfigure + (*clientpb.Sessions)(nil), // 132: clientpb.Sessions + (*commonpb.Response)(nil), // 133: commonpb.Response + (*clientpb.MonitoringProviders)(nil), // 134: clientpb.MonitoringProviders + (*clientpb.ListenerJob)(nil), // 135: clientpb.ListenerJob + (*clientpb.Beacons)(nil), // 136: clientpb.Beacons + (*clientpb.BeaconTasks)(nil), // 137: clientpb.BeaconTasks + (*clientpb.Jobs)(nil), // 138: clientpb.Jobs + (*clientpb.KillJob)(nil), // 139: clientpb.KillJob + (*clientpb.StagerListener)(nil), // 140: clientpb.StagerListener + (*clientpb.AllLoot)(nil), // 141: clientpb.AllLoot + (*clientpb.AllHosts)(nil), // 142: clientpb.AllHosts + (*clientpb.Generate)(nil), // 143: clientpb.Generate + (*clientpb.ExternalImplantConfig)(nil), // 144: clientpb.ExternalImplantConfig + (*clientpb.HTTPC2Configs)(nil), // 145: clientpb.HTTPC2Configs + (*clientpb.HTTPC2Config)(nil), // 146: clientpb.HTTPC2Config + (*clientpb.Builders)(nil), // 147: clientpb.Builders + (*clientpb.Crackstations)(nil), // 148: clientpb.Crackstations + (*clientpb.CrackFiles)(nil), // 149: clientpb.CrackFiles + (*clientpb.ImplantBuilds)(nil), // 150: clientpb.ImplantBuilds + (*clientpb.Canaries)(nil), // 151: clientpb.Canaries + (*clientpb.WGClientConfig)(nil), // 152: clientpb.WGClientConfig + (*clientpb.UniqueWGIP)(nil), // 153: clientpb.UniqueWGIP + (*clientpb.ImplantProfiles)(nil), // 154: clientpb.ImplantProfiles + (*clientpb.MsfStager)(nil), // 155: clientpb.MsfStager + (*clientpb.ShellcodeRDI)(nil), // 156: clientpb.ShellcodeRDI + (*clientpb.Compiler)(nil), // 157: clientpb.Compiler + (*clientpb.ShellcodeEncode)(nil), // 158: clientpb.ShellcodeEncode + (*clientpb.ShellcodeEncoderMap)(nil), // 159: clientpb.ShellcodeEncoderMap + (*clientpb.TrafficEncoderMap)(nil), // 160: clientpb.TrafficEncoderMap + (*clientpb.TrafficEncoderTests)(nil), // 161: clientpb.TrafficEncoderTests + (*clientpb.Websites)(nil), // 162: clientpb.Websites + (*sliverpb.Ps)(nil), // 163: sliverpb.Ps + (*sliverpb.Terminate)(nil), // 164: sliverpb.Terminate + (*sliverpb.Ifconfig)(nil), // 165: sliverpb.Ifconfig + (*sliverpb.Netstat)(nil), // 166: sliverpb.Netstat + (*sliverpb.Ls)(nil), // 167: sliverpb.Ls + (*sliverpb.Pwd)(nil), // 168: sliverpb.Pwd + (*sliverpb.Mv)(nil), // 169: sliverpb.Mv + (*sliverpb.Cp)(nil), // 170: sliverpb.Cp + (*sliverpb.Rm)(nil), // 171: sliverpb.Rm + (*sliverpb.Mkdir)(nil), // 172: sliverpb.Mkdir + (*sliverpb.Download)(nil), // 173: sliverpb.Download + (*sliverpb.Upload)(nil), // 174: sliverpb.Upload + (*sliverpb.Grep)(nil), // 175: sliverpb.Grep + (*sliverpb.Chmod)(nil), // 176: sliverpb.Chmod + (*sliverpb.Chown)(nil), // 177: sliverpb.Chown + (*sliverpb.Chtimes)(nil), // 178: sliverpb.Chtimes + (*sliverpb.MemfilesAdd)(nil), // 179: sliverpb.MemfilesAdd + (*sliverpb.MemfilesRm)(nil), // 180: sliverpb.MemfilesRm + (*sliverpb.ProcessDump)(nil), // 181: sliverpb.ProcessDump + (*sliverpb.RunAs)(nil), // 182: sliverpb.RunAs + (*sliverpb.Impersonate)(nil), // 183: sliverpb.Impersonate + (*sliverpb.RevToSelf)(nil), // 184: sliverpb.RevToSelf + (*sliverpb.GetSystem)(nil), // 185: sliverpb.GetSystem + (*sliverpb.Task)(nil), // 186: sliverpb.Task + (*sliverpb.ExecuteAssembly)(nil), // 187: sliverpb.ExecuteAssembly + (*sliverpb.Migrate)(nil), // 188: sliverpb.Migrate + (*sliverpb.Execute)(nil), // 189: sliverpb.Execute + (*sliverpb.Sideload)(nil), // 190: sliverpb.Sideload + (*sliverpb.SpawnDll)(nil), // 191: sliverpb.SpawnDll + (*sliverpb.Screenshot)(nil), // 192: sliverpb.Screenshot + (*sliverpb.CurrentTokenOwner)(nil), // 193: sliverpb.CurrentTokenOwner + (*sliverpb.Services)(nil), // 194: sliverpb.Services + (*sliverpb.ServiceDetail)(nil), // 195: sliverpb.ServiceDetail + (*sliverpb.ServiceInfo)(nil), // 196: sliverpb.ServiceInfo + (*sliverpb.PivotListener)(nil), // 197: sliverpb.PivotListener + (*sliverpb.PivotListeners)(nil), // 198: sliverpb.PivotListeners + (*clientpb.PivotGraph)(nil), // 199: clientpb.PivotGraph + (*sliverpb.MakeToken)(nil), // 200: sliverpb.MakeToken + (*sliverpb.EnvInfo)(nil), // 201: sliverpb.EnvInfo + (*sliverpb.SetEnv)(nil), // 202: sliverpb.SetEnv + (*sliverpb.UnsetEnv)(nil), // 203: sliverpb.UnsetEnv + (*clientpb.Backdoor)(nil), // 204: clientpb.Backdoor + (*sliverpb.RegistryRead)(nil), // 205: sliverpb.RegistryRead + (*sliverpb.RegistryWrite)(nil), // 206: sliverpb.RegistryWrite + (*sliverpb.RegistryCreateKey)(nil), // 207: sliverpb.RegistryCreateKey + (*sliverpb.RegistryDeleteKey)(nil), // 208: sliverpb.RegistryDeleteKey + (*sliverpb.RegistrySubKeyList)(nil), // 209: sliverpb.RegistrySubKeyList + (*sliverpb.RegistryValuesList)(nil), // 210: sliverpb.RegistryValuesList + (*sliverpb.SSHCommand)(nil), // 211: sliverpb.SSHCommand + (*clientpb.DllHijack)(nil), // 212: clientpb.DllHijack + (*sliverpb.GetPrivs)(nil), // 213: sliverpb.GetPrivs + (*sliverpb.RportFwdListener)(nil), // 214: sliverpb.RportFwdListener + (*sliverpb.RportFwdListeners)(nil), // 215: sliverpb.RportFwdListeners + (*sliverpb.RegisterExtension)(nil), // 216: sliverpb.RegisterExtension + (*sliverpb.CallExtension)(nil), // 217: sliverpb.CallExtension + (*sliverpb.ListExtensions)(nil), // 218: sliverpb.ListExtensions + (*sliverpb.RegisterWasmExtension)(nil), // 219: sliverpb.RegisterWasmExtension + (*sliverpb.ListWasmExtensions)(nil), // 220: sliverpb.ListWasmExtensions + (*sliverpb.ExecWasmExtension)(nil), // 221: sliverpb.ExecWasmExtension + (*sliverpb.WGPortForward)(nil), // 222: sliverpb.WGPortForward + (*sliverpb.WGSocks)(nil), // 223: sliverpb.WGSocks + (*sliverpb.WGTCPForwarders)(nil), // 224: sliverpb.WGTCPForwarders + (*sliverpb.WGSocksServers)(nil), // 225: sliverpb.WGSocksServers + (*sliverpb.Shell)(nil), // 226: sliverpb.Shell + (*sliverpb.Portfwd)(nil), // 227: sliverpb.Portfwd } var file_rpcpb_services_proto_depIdxs = []int32{ 0, // 0: rpcpb.SliverRPC.GetVersion:input_type -> commonpb.Empty @@ -1058,231 +1075,237 @@ var file_rpcpb_services_proto_depIdxs = []int32{ 80, // 126: rpcpb.SliverRPC.SpawnDll:input_type -> sliverpb.InvokeSpawnDllReq 81, // 127: rpcpb.SliverRPC.Screenshot:input_type -> sliverpb.ScreenshotReq 82, // 128: rpcpb.SliverRPC.CurrentTokenOwner:input_type -> sliverpb.CurrentTokenOwnerReq - 83, // 129: rpcpb.SliverRPC.PivotStartListener:input_type -> sliverpb.PivotStartListenerReq - 84, // 130: rpcpb.SliverRPC.PivotStopListener:input_type -> sliverpb.PivotStopListenerReq - 85, // 131: rpcpb.SliverRPC.PivotSessionListeners:input_type -> sliverpb.PivotListenersReq - 0, // 132: rpcpb.SliverRPC.PivotGraph:input_type -> commonpb.Empty - 86, // 133: rpcpb.SliverRPC.StartService:input_type -> sliverpb.StartServiceReq - 87, // 134: rpcpb.SliverRPC.StopService:input_type -> sliverpb.StopServiceReq - 88, // 135: rpcpb.SliverRPC.RemoveService:input_type -> sliverpb.RemoveServiceReq - 89, // 136: rpcpb.SliverRPC.MakeToken:input_type -> sliverpb.MakeTokenReq - 90, // 137: rpcpb.SliverRPC.GetEnv:input_type -> sliverpb.EnvReq - 91, // 138: rpcpb.SliverRPC.SetEnv:input_type -> sliverpb.SetEnvReq - 92, // 139: rpcpb.SliverRPC.UnsetEnv:input_type -> sliverpb.UnsetEnvReq - 93, // 140: rpcpb.SliverRPC.Backdoor:input_type -> clientpb.BackdoorReq - 94, // 141: rpcpb.SliverRPC.RegistryRead:input_type -> sliverpb.RegistryReadReq - 95, // 142: rpcpb.SliverRPC.RegistryWrite:input_type -> sliverpb.RegistryWriteReq - 96, // 143: rpcpb.SliverRPC.RegistryCreateKey:input_type -> sliverpb.RegistryCreateKeyReq - 97, // 144: rpcpb.SliverRPC.RegistryDeleteKey:input_type -> sliverpb.RegistryDeleteKeyReq - 98, // 145: rpcpb.SliverRPC.RegistryListSubKeys:input_type -> sliverpb.RegistrySubKeyListReq - 99, // 146: rpcpb.SliverRPC.RegistryListValues:input_type -> sliverpb.RegistryListValuesReq - 100, // 147: rpcpb.SliverRPC.RunSSHCommand:input_type -> sliverpb.SSHCommandReq - 101, // 148: rpcpb.SliverRPC.HijackDLL:input_type -> clientpb.DllHijackReq - 102, // 149: rpcpb.SliverRPC.GetPrivs:input_type -> sliverpb.GetPrivsReq - 103, // 150: rpcpb.SliverRPC.StartRportFwdListener:input_type -> sliverpb.RportFwdStartListenerReq - 104, // 151: rpcpb.SliverRPC.GetRportFwdListeners:input_type -> sliverpb.RportFwdListenersReq - 105, // 152: rpcpb.SliverRPC.StopRportFwdListener:input_type -> sliverpb.RportFwdStopListenerReq - 106, // 153: rpcpb.SliverRPC.OpenSession:input_type -> sliverpb.OpenSession - 107, // 154: rpcpb.SliverRPC.CloseSession:input_type -> sliverpb.CloseSession - 108, // 155: rpcpb.SliverRPC.RegisterExtension:input_type -> sliverpb.RegisterExtensionReq - 109, // 156: rpcpb.SliverRPC.CallExtension:input_type -> sliverpb.CallExtensionReq - 110, // 157: rpcpb.SliverRPC.ListExtensions:input_type -> sliverpb.ListExtensionsReq - 111, // 158: rpcpb.SliverRPC.RegisterWasmExtension:input_type -> sliverpb.RegisterWasmExtensionReq - 112, // 159: rpcpb.SliverRPC.ListWasmExtensions:input_type -> sliverpb.ListWasmExtensionsReq - 113, // 160: rpcpb.SliverRPC.ExecWasmExtension:input_type -> sliverpb.ExecWasmExtensionReq - 114, // 161: rpcpb.SliverRPC.WGStartPortForward:input_type -> sliverpb.WGPortForwardStartReq - 115, // 162: rpcpb.SliverRPC.WGStopPortForward:input_type -> sliverpb.WGPortForwardStopReq - 116, // 163: rpcpb.SliverRPC.WGStartSocks:input_type -> sliverpb.WGSocksStartReq - 117, // 164: rpcpb.SliverRPC.WGStopSocks:input_type -> sliverpb.WGSocksStopReq - 118, // 165: rpcpb.SliverRPC.WGListForwarders:input_type -> sliverpb.WGTCPForwardersReq - 119, // 166: rpcpb.SliverRPC.WGListSocksServers:input_type -> sliverpb.WGSocksServersReq - 120, // 167: rpcpb.SliverRPC.Shell:input_type -> sliverpb.ShellReq - 121, // 168: rpcpb.SliverRPC.Portfwd:input_type -> sliverpb.PortfwdReq - 122, // 169: rpcpb.SliverRPC.CreateSocks:input_type -> sliverpb.Socks - 122, // 170: rpcpb.SliverRPC.CloseSocks:input_type -> sliverpb.Socks - 123, // 171: rpcpb.SliverRPC.SocksProxy:input_type -> sliverpb.SocksData - 124, // 172: rpcpb.SliverRPC.CreateTunnel:input_type -> sliverpb.Tunnel - 124, // 173: rpcpb.SliverRPC.CloseTunnel:input_type -> sliverpb.Tunnel - 125, // 174: rpcpb.SliverRPC.TunnelData:input_type -> sliverpb.TunnelData - 0, // 175: rpcpb.SliverRPC.Events:input_type -> commonpb.Empty - 126, // 176: rpcpb.SliverRPC.GetVersion:output_type -> clientpb.Version - 0, // 177: rpcpb.SliverRPC.ClientLog:output_type -> commonpb.Empty - 127, // 178: rpcpb.SliverRPC.GetOperators:output_type -> clientpb.Operators - 0, // 179: rpcpb.SliverRPC.Kill:output_type -> commonpb.Empty - 128, // 180: rpcpb.SliverRPC.Reconfigure:output_type -> sliverpb.Reconfigure - 0, // 181: rpcpb.SliverRPC.Rename:output_type -> commonpb.Empty - 129, // 182: rpcpb.SliverRPC.GetSessions:output_type -> clientpb.Sessions - 130, // 183: rpcpb.SliverRPC.MonitorStart:output_type -> commonpb.Response - 0, // 184: rpcpb.SliverRPC.MonitorStop:output_type -> commonpb.Empty - 131, // 185: rpcpb.SliverRPC.MonitorListConfig:output_type -> clientpb.MonitoringProviders - 130, // 186: rpcpb.SliverRPC.MonitorAddConfig:output_type -> commonpb.Response - 130, // 187: rpcpb.SliverRPC.MonitorDelConfig:output_type -> commonpb.Response - 132, // 188: rpcpb.SliverRPC.StartMTLSListener:output_type -> clientpb.ListenerJob - 132, // 189: rpcpb.SliverRPC.StartWGListener:output_type -> clientpb.ListenerJob - 132, // 190: rpcpb.SliverRPC.StartDNSListener:output_type -> clientpb.ListenerJob - 132, // 191: rpcpb.SliverRPC.StartHTTPSListener:output_type -> clientpb.ListenerJob - 132, // 192: rpcpb.SliverRPC.StartHTTPListener:output_type -> clientpb.ListenerJob - 133, // 193: rpcpb.SliverRPC.GetBeacons:output_type -> clientpb.Beacons - 10, // 194: rpcpb.SliverRPC.GetBeacon:output_type -> clientpb.Beacon - 0, // 195: rpcpb.SliverRPC.RmBeacon:output_type -> commonpb.Empty - 134, // 196: rpcpb.SliverRPC.GetBeaconTasks:output_type -> clientpb.BeaconTasks - 11, // 197: rpcpb.SliverRPC.GetBeaconTaskContent:output_type -> clientpb.BeaconTask - 11, // 198: rpcpb.SliverRPC.CancelBeaconTask:output_type -> clientpb.BeaconTask - 0, // 199: rpcpb.SliverRPC.UpdateBeaconIntegrityInformation:output_type -> commonpb.Empty - 135, // 200: rpcpb.SliverRPC.GetJobs:output_type -> clientpb.Jobs - 136, // 201: rpcpb.SliverRPC.KillJob:output_type -> clientpb.KillJob - 0, // 202: rpcpb.SliverRPC.RestartJobs:output_type -> commonpb.Empty - 137, // 203: rpcpb.SliverRPC.StartTCPStagerListener:output_type -> clientpb.StagerListener - 16, // 204: rpcpb.SliverRPC.LootAdd:output_type -> clientpb.Loot - 0, // 205: rpcpb.SliverRPC.LootRm:output_type -> commonpb.Empty - 16, // 206: rpcpb.SliverRPC.LootUpdate:output_type -> clientpb.Loot - 16, // 207: rpcpb.SliverRPC.LootContent:output_type -> clientpb.Loot - 138, // 208: rpcpb.SliverRPC.LootAll:output_type -> clientpb.AllLoot - 17, // 209: rpcpb.SliverRPC.Creds:output_type -> clientpb.Credentials - 0, // 210: rpcpb.SliverRPC.CredsAdd:output_type -> commonpb.Empty - 0, // 211: rpcpb.SliverRPC.CredsRm:output_type -> commonpb.Empty - 0, // 212: rpcpb.SliverRPC.CredsUpdate:output_type -> commonpb.Empty - 18, // 213: rpcpb.SliverRPC.GetCredByID:output_type -> clientpb.Credential - 17, // 214: rpcpb.SliverRPC.GetCredsByHashType:output_type -> clientpb.Credentials - 17, // 215: rpcpb.SliverRPC.GetPlaintextCredsByHashType:output_type -> clientpb.Credentials - 18, // 216: rpcpb.SliverRPC.CredsSniffHashType:output_type -> clientpb.Credential - 139, // 217: rpcpb.SliverRPC.Hosts:output_type -> clientpb.AllHosts - 19, // 218: rpcpb.SliverRPC.Host:output_type -> clientpb.Host - 0, // 219: rpcpb.SliverRPC.HostRm:output_type -> commonpb.Empty - 0, // 220: rpcpb.SliverRPC.HostIOCRm:output_type -> commonpb.Empty - 140, // 221: rpcpb.SliverRPC.Generate:output_type -> clientpb.Generate - 141, // 222: rpcpb.SliverRPC.GenerateExternal:output_type -> clientpb.ExternalImplantConfig - 0, // 223: rpcpb.SliverRPC.GenerateExternalSaveBuild:output_type -> commonpb.Empty - 141, // 224: rpcpb.SliverRPC.GenerateExternalGetBuildConfig:output_type -> clientpb.ExternalImplantConfig - 140, // 225: rpcpb.SliverRPC.GenerateStage:output_type -> clientpb.Generate - 0, // 226: rpcpb.SliverRPC.StageImplantBuild:output_type -> commonpb.Empty - 142, // 227: rpcpb.SliverRPC.GetHTTPC2Profiles:output_type -> clientpb.HTTPC2Configs - 143, // 228: rpcpb.SliverRPC.GetHTTPC2ProfileByName:output_type -> clientpb.HTTPC2Config - 0, // 229: rpcpb.SliverRPC.SaveHTTPC2Profile:output_type -> commonpb.Empty - 30, // 230: rpcpb.SliverRPC.BuilderRegister:output_type -> clientpb.Event - 0, // 231: rpcpb.SliverRPC.BuilderTrigger:output_type -> commonpb.Empty - 144, // 232: rpcpb.SliverRPC.Builders:output_type -> clientpb.Builders - 30, // 233: rpcpb.SliverRPC.CrackstationRegister:output_type -> clientpb.Event - 0, // 234: rpcpb.SliverRPC.CrackstationTrigger:output_type -> commonpb.Empty - 0, // 235: rpcpb.SliverRPC.CrackstationBenchmark:output_type -> commonpb.Empty - 145, // 236: rpcpb.SliverRPC.Crackstations:output_type -> clientpb.Crackstations - 33, // 237: rpcpb.SliverRPC.CrackTaskByID:output_type -> clientpb.CrackTask - 0, // 238: rpcpb.SliverRPC.CrackTaskUpdate:output_type -> commonpb.Empty - 146, // 239: rpcpb.SliverRPC.CrackFilesList:output_type -> clientpb.CrackFiles - 34, // 240: rpcpb.SliverRPC.CrackFileCreate:output_type -> clientpb.CrackFile - 0, // 241: rpcpb.SliverRPC.CrackFileChunkUpload:output_type -> commonpb.Empty - 35, // 242: rpcpb.SliverRPC.CrackFileChunkDownload:output_type -> clientpb.CrackFileChunk - 0, // 243: rpcpb.SliverRPC.CrackFileComplete:output_type -> commonpb.Empty - 0, // 244: rpcpb.SliverRPC.CrackFileDelete:output_type -> commonpb.Empty - 140, // 245: rpcpb.SliverRPC.Regenerate:output_type -> clientpb.Generate - 147, // 246: rpcpb.SliverRPC.ImplantBuilds:output_type -> clientpb.ImplantBuilds - 0, // 247: rpcpb.SliverRPC.DeleteImplantBuild:output_type -> commonpb.Empty - 148, // 248: rpcpb.SliverRPC.Canaries:output_type -> clientpb.Canaries - 149, // 249: rpcpb.SliverRPC.GenerateWGClientConfig:output_type -> clientpb.WGClientConfig - 150, // 250: rpcpb.SliverRPC.GenerateUniqueIP:output_type -> clientpb.UniqueWGIP - 151, // 251: rpcpb.SliverRPC.ImplantProfiles:output_type -> clientpb.ImplantProfiles - 0, // 252: rpcpb.SliverRPC.DeleteImplantProfile:output_type -> commonpb.Empty - 38, // 253: rpcpb.SliverRPC.SaveImplantProfile:output_type -> clientpb.ImplantProfile - 152, // 254: rpcpb.SliverRPC.MsfStage:output_type -> clientpb.MsfStager - 153, // 255: rpcpb.SliverRPC.ShellcodeRDI:output_type -> clientpb.ShellcodeRDI - 154, // 256: rpcpb.SliverRPC.GetCompiler:output_type -> clientpb.Compiler - 155, // 257: rpcpb.SliverRPC.ShellcodeEncoder:output_type -> clientpb.ShellcodeEncode - 156, // 258: rpcpb.SliverRPC.ShellcodeEncoderMap:output_type -> clientpb.ShellcodeEncoderMap - 157, // 259: rpcpb.SliverRPC.TrafficEncoderMap:output_type -> clientpb.TrafficEncoderMap - 158, // 260: rpcpb.SliverRPC.TrafficEncoderAdd:output_type -> clientpb.TrafficEncoderTests - 0, // 261: rpcpb.SliverRPC.TrafficEncoderRm:output_type -> commonpb.Empty - 159, // 262: rpcpb.SliverRPC.Websites:output_type -> clientpb.Websites - 43, // 263: rpcpb.SliverRPC.Website:output_type -> clientpb.Website - 0, // 264: rpcpb.SliverRPC.WebsiteRemove:output_type -> commonpb.Empty - 43, // 265: rpcpb.SliverRPC.WebsiteAddContent:output_type -> clientpb.Website - 43, // 266: rpcpb.SliverRPC.WebsiteUpdateContent:output_type -> clientpb.Website - 43, // 267: rpcpb.SliverRPC.WebsiteRemoveContent:output_type -> clientpb.Website - 46, // 268: rpcpb.SliverRPC.Ping:output_type -> sliverpb.Ping - 160, // 269: rpcpb.SliverRPC.Ps:output_type -> sliverpb.Ps - 161, // 270: rpcpb.SliverRPC.Terminate:output_type -> sliverpb.Terminate - 162, // 271: rpcpb.SliverRPC.Ifconfig:output_type -> sliverpb.Ifconfig - 163, // 272: rpcpb.SliverRPC.Netstat:output_type -> sliverpb.Netstat - 164, // 273: rpcpb.SliverRPC.Ls:output_type -> sliverpb.Ls - 165, // 274: rpcpb.SliverRPC.Cd:output_type -> sliverpb.Pwd - 165, // 275: rpcpb.SliverRPC.Pwd:output_type -> sliverpb.Pwd - 166, // 276: rpcpb.SliverRPC.Mv:output_type -> sliverpb.Mv - 167, // 277: rpcpb.SliverRPC.Cp:output_type -> sliverpb.Cp - 168, // 278: rpcpb.SliverRPC.Rm:output_type -> sliverpb.Rm - 169, // 279: rpcpb.SliverRPC.Mkdir:output_type -> sliverpb.Mkdir - 170, // 280: rpcpb.SliverRPC.Download:output_type -> sliverpb.Download - 171, // 281: rpcpb.SliverRPC.Upload:output_type -> sliverpb.Upload - 172, // 282: rpcpb.SliverRPC.Grep:output_type -> sliverpb.Grep - 173, // 283: rpcpb.SliverRPC.Chmod:output_type -> sliverpb.Chmod - 174, // 284: rpcpb.SliverRPC.Chown:output_type -> sliverpb.Chown - 175, // 285: rpcpb.SliverRPC.Chtimes:output_type -> sliverpb.Chtimes - 164, // 286: rpcpb.SliverRPC.MemfilesList:output_type -> sliverpb.Ls - 176, // 287: rpcpb.SliverRPC.MemfilesAdd:output_type -> sliverpb.MemfilesAdd - 177, // 288: rpcpb.SliverRPC.MemfilesRm:output_type -> sliverpb.MemfilesRm - 178, // 289: rpcpb.SliverRPC.ProcessDump:output_type -> sliverpb.ProcessDump - 179, // 290: rpcpb.SliverRPC.RunAs:output_type -> sliverpb.RunAs - 180, // 291: rpcpb.SliverRPC.Impersonate:output_type -> sliverpb.Impersonate - 181, // 292: rpcpb.SliverRPC.RevToSelf:output_type -> sliverpb.RevToSelf - 182, // 293: rpcpb.SliverRPC.GetSystem:output_type -> sliverpb.GetSystem - 183, // 294: rpcpb.SliverRPC.Task:output_type -> sliverpb.Task - 183, // 295: rpcpb.SliverRPC.Msf:output_type -> sliverpb.Task - 183, // 296: rpcpb.SliverRPC.MsfRemote:output_type -> sliverpb.Task - 184, // 297: rpcpb.SliverRPC.ExecuteAssembly:output_type -> sliverpb.ExecuteAssembly - 185, // 298: rpcpb.SliverRPC.Migrate:output_type -> sliverpb.Migrate - 186, // 299: rpcpb.SliverRPC.Execute:output_type -> sliverpb.Execute - 186, // 300: rpcpb.SliverRPC.ExecuteWindows:output_type -> sliverpb.Execute - 187, // 301: rpcpb.SliverRPC.Sideload:output_type -> sliverpb.Sideload - 188, // 302: rpcpb.SliverRPC.SpawnDll:output_type -> sliverpb.SpawnDll - 189, // 303: rpcpb.SliverRPC.Screenshot:output_type -> sliverpb.Screenshot - 190, // 304: rpcpb.SliverRPC.CurrentTokenOwner:output_type -> sliverpb.CurrentTokenOwner - 191, // 305: rpcpb.SliverRPC.PivotStartListener:output_type -> sliverpb.PivotListener - 0, // 306: rpcpb.SliverRPC.PivotStopListener:output_type -> commonpb.Empty - 192, // 307: rpcpb.SliverRPC.PivotSessionListeners:output_type -> sliverpb.PivotListeners - 193, // 308: rpcpb.SliverRPC.PivotGraph:output_type -> clientpb.PivotGraph - 194, // 309: rpcpb.SliverRPC.StartService:output_type -> sliverpb.ServiceInfo - 194, // 310: rpcpb.SliverRPC.StopService:output_type -> sliverpb.ServiceInfo - 194, // 311: rpcpb.SliverRPC.RemoveService:output_type -> sliverpb.ServiceInfo - 195, // 312: rpcpb.SliverRPC.MakeToken:output_type -> sliverpb.MakeToken - 196, // 313: rpcpb.SliverRPC.GetEnv:output_type -> sliverpb.EnvInfo - 197, // 314: rpcpb.SliverRPC.SetEnv:output_type -> sliverpb.SetEnv - 198, // 315: rpcpb.SliverRPC.UnsetEnv:output_type -> sliverpb.UnsetEnv - 199, // 316: rpcpb.SliverRPC.Backdoor:output_type -> clientpb.Backdoor - 200, // 317: rpcpb.SliverRPC.RegistryRead:output_type -> sliverpb.RegistryRead - 201, // 318: rpcpb.SliverRPC.RegistryWrite:output_type -> sliverpb.RegistryWrite - 202, // 319: rpcpb.SliverRPC.RegistryCreateKey:output_type -> sliverpb.RegistryCreateKey - 203, // 320: rpcpb.SliverRPC.RegistryDeleteKey:output_type -> sliverpb.RegistryDeleteKey - 204, // 321: rpcpb.SliverRPC.RegistryListSubKeys:output_type -> sliverpb.RegistrySubKeyList - 205, // 322: rpcpb.SliverRPC.RegistryListValues:output_type -> sliverpb.RegistryValuesList - 206, // 323: rpcpb.SliverRPC.RunSSHCommand:output_type -> sliverpb.SSHCommand - 207, // 324: rpcpb.SliverRPC.HijackDLL:output_type -> clientpb.DllHijack - 208, // 325: rpcpb.SliverRPC.GetPrivs:output_type -> sliverpb.GetPrivs - 209, // 326: rpcpb.SliverRPC.StartRportFwdListener:output_type -> sliverpb.RportFwdListener - 210, // 327: rpcpb.SliverRPC.GetRportFwdListeners:output_type -> sliverpb.RportFwdListeners - 209, // 328: rpcpb.SliverRPC.StopRportFwdListener:output_type -> sliverpb.RportFwdListener - 106, // 329: rpcpb.SliverRPC.OpenSession:output_type -> sliverpb.OpenSession - 0, // 330: rpcpb.SliverRPC.CloseSession:output_type -> commonpb.Empty - 211, // 331: rpcpb.SliverRPC.RegisterExtension:output_type -> sliverpb.RegisterExtension - 212, // 332: rpcpb.SliverRPC.CallExtension:output_type -> sliverpb.CallExtension - 213, // 333: rpcpb.SliverRPC.ListExtensions:output_type -> sliverpb.ListExtensions - 214, // 334: rpcpb.SliverRPC.RegisterWasmExtension:output_type -> sliverpb.RegisterWasmExtension - 215, // 335: rpcpb.SliverRPC.ListWasmExtensions:output_type -> sliverpb.ListWasmExtensions - 216, // 336: rpcpb.SliverRPC.ExecWasmExtension:output_type -> sliverpb.ExecWasmExtension - 217, // 337: rpcpb.SliverRPC.WGStartPortForward:output_type -> sliverpb.WGPortForward - 217, // 338: rpcpb.SliverRPC.WGStopPortForward:output_type -> sliverpb.WGPortForward - 218, // 339: rpcpb.SliverRPC.WGStartSocks:output_type -> sliverpb.WGSocks - 218, // 340: rpcpb.SliverRPC.WGStopSocks:output_type -> sliverpb.WGSocks - 219, // 341: rpcpb.SliverRPC.WGListForwarders:output_type -> sliverpb.WGTCPForwarders - 220, // 342: rpcpb.SliverRPC.WGListSocksServers:output_type -> sliverpb.WGSocksServers - 221, // 343: rpcpb.SliverRPC.Shell:output_type -> sliverpb.Shell - 222, // 344: rpcpb.SliverRPC.Portfwd:output_type -> sliverpb.Portfwd - 122, // 345: rpcpb.SliverRPC.CreateSocks:output_type -> sliverpb.Socks - 0, // 346: rpcpb.SliverRPC.CloseSocks:output_type -> commonpb.Empty - 123, // 347: rpcpb.SliverRPC.SocksProxy:output_type -> sliverpb.SocksData - 124, // 348: rpcpb.SliverRPC.CreateTunnel:output_type -> sliverpb.Tunnel - 0, // 349: rpcpb.SliverRPC.CloseTunnel:output_type -> commonpb.Empty - 125, // 350: rpcpb.SliverRPC.TunnelData:output_type -> sliverpb.TunnelData - 30, // 351: rpcpb.SliverRPC.Events:output_type -> clientpb.Event - 176, // [176:352] is the sub-list for method output_type - 0, // [0:176] is the sub-list for method input_type + 83, // 129: rpcpb.SliverRPC.Services:input_type -> sliverpb.ServicesReq + 84, // 130: rpcpb.SliverRPC.ServiceDetail:input_type -> sliverpb.ServiceDetailReq + 85, // 131: rpcpb.SliverRPC.StartExistingService:input_type -> sliverpb.StartExistingServiceReq + 86, // 132: rpcpb.SliverRPC.PivotStartListener:input_type -> sliverpb.PivotStartListenerReq + 87, // 133: rpcpb.SliverRPC.PivotStopListener:input_type -> sliverpb.PivotStopListenerReq + 88, // 134: rpcpb.SliverRPC.PivotSessionListeners:input_type -> sliverpb.PivotListenersReq + 0, // 135: rpcpb.SliverRPC.PivotGraph:input_type -> commonpb.Empty + 89, // 136: rpcpb.SliverRPC.StartService:input_type -> sliverpb.StartServiceReq + 90, // 137: rpcpb.SliverRPC.StopService:input_type -> sliverpb.StopServiceReq + 91, // 138: rpcpb.SliverRPC.RemoveService:input_type -> sliverpb.RemoveServiceReq + 92, // 139: rpcpb.SliverRPC.MakeToken:input_type -> sliverpb.MakeTokenReq + 93, // 140: rpcpb.SliverRPC.GetEnv:input_type -> sliverpb.EnvReq + 94, // 141: rpcpb.SliverRPC.SetEnv:input_type -> sliverpb.SetEnvReq + 95, // 142: rpcpb.SliverRPC.UnsetEnv:input_type -> sliverpb.UnsetEnvReq + 96, // 143: rpcpb.SliverRPC.Backdoor:input_type -> clientpb.BackdoorReq + 97, // 144: rpcpb.SliverRPC.RegistryRead:input_type -> sliverpb.RegistryReadReq + 98, // 145: rpcpb.SliverRPC.RegistryWrite:input_type -> sliverpb.RegistryWriteReq + 99, // 146: rpcpb.SliverRPC.RegistryCreateKey:input_type -> sliverpb.RegistryCreateKeyReq + 100, // 147: rpcpb.SliverRPC.RegistryDeleteKey:input_type -> sliverpb.RegistryDeleteKeyReq + 101, // 148: rpcpb.SliverRPC.RegistryListSubKeys:input_type -> sliverpb.RegistrySubKeyListReq + 102, // 149: rpcpb.SliverRPC.RegistryListValues:input_type -> sliverpb.RegistryListValuesReq + 103, // 150: rpcpb.SliverRPC.RunSSHCommand:input_type -> sliverpb.SSHCommandReq + 104, // 151: rpcpb.SliverRPC.HijackDLL:input_type -> clientpb.DllHijackReq + 105, // 152: rpcpb.SliverRPC.GetPrivs:input_type -> sliverpb.GetPrivsReq + 106, // 153: rpcpb.SliverRPC.StartRportFwdListener:input_type -> sliverpb.RportFwdStartListenerReq + 107, // 154: rpcpb.SliverRPC.GetRportFwdListeners:input_type -> sliverpb.RportFwdListenersReq + 108, // 155: rpcpb.SliverRPC.StopRportFwdListener:input_type -> sliverpb.RportFwdStopListenerReq + 109, // 156: rpcpb.SliverRPC.OpenSession:input_type -> sliverpb.OpenSession + 110, // 157: rpcpb.SliverRPC.CloseSession:input_type -> sliverpb.CloseSession + 111, // 158: rpcpb.SliverRPC.RegisterExtension:input_type -> sliverpb.RegisterExtensionReq + 112, // 159: rpcpb.SliverRPC.CallExtension:input_type -> sliverpb.CallExtensionReq + 113, // 160: rpcpb.SliverRPC.ListExtensions:input_type -> sliverpb.ListExtensionsReq + 114, // 161: rpcpb.SliverRPC.RegisterWasmExtension:input_type -> sliverpb.RegisterWasmExtensionReq + 115, // 162: rpcpb.SliverRPC.ListWasmExtensions:input_type -> sliverpb.ListWasmExtensionsReq + 116, // 163: rpcpb.SliverRPC.ExecWasmExtension:input_type -> sliverpb.ExecWasmExtensionReq + 117, // 164: rpcpb.SliverRPC.WGStartPortForward:input_type -> sliverpb.WGPortForwardStartReq + 118, // 165: rpcpb.SliverRPC.WGStopPortForward:input_type -> sliverpb.WGPortForwardStopReq + 119, // 166: rpcpb.SliverRPC.WGStartSocks:input_type -> sliverpb.WGSocksStartReq + 120, // 167: rpcpb.SliverRPC.WGStopSocks:input_type -> sliverpb.WGSocksStopReq + 121, // 168: rpcpb.SliverRPC.WGListForwarders:input_type -> sliverpb.WGTCPForwardersReq + 122, // 169: rpcpb.SliverRPC.WGListSocksServers:input_type -> sliverpb.WGSocksServersReq + 123, // 170: rpcpb.SliverRPC.Shell:input_type -> sliverpb.ShellReq + 124, // 171: rpcpb.SliverRPC.Portfwd:input_type -> sliverpb.PortfwdReq + 125, // 172: rpcpb.SliverRPC.CreateSocks:input_type -> sliverpb.Socks + 125, // 173: rpcpb.SliverRPC.CloseSocks:input_type -> sliverpb.Socks + 126, // 174: rpcpb.SliverRPC.SocksProxy:input_type -> sliverpb.SocksData + 127, // 175: rpcpb.SliverRPC.CreateTunnel:input_type -> sliverpb.Tunnel + 127, // 176: rpcpb.SliverRPC.CloseTunnel:input_type -> sliverpb.Tunnel + 128, // 177: rpcpb.SliverRPC.TunnelData:input_type -> sliverpb.TunnelData + 0, // 178: rpcpb.SliverRPC.Events:input_type -> commonpb.Empty + 129, // 179: rpcpb.SliverRPC.GetVersion:output_type -> clientpb.Version + 0, // 180: rpcpb.SliverRPC.ClientLog:output_type -> commonpb.Empty + 130, // 181: rpcpb.SliverRPC.GetOperators:output_type -> clientpb.Operators + 0, // 182: rpcpb.SliverRPC.Kill:output_type -> commonpb.Empty + 131, // 183: rpcpb.SliverRPC.Reconfigure:output_type -> sliverpb.Reconfigure + 0, // 184: rpcpb.SliverRPC.Rename:output_type -> commonpb.Empty + 132, // 185: rpcpb.SliverRPC.GetSessions:output_type -> clientpb.Sessions + 133, // 186: rpcpb.SliverRPC.MonitorStart:output_type -> commonpb.Response + 0, // 187: rpcpb.SliverRPC.MonitorStop:output_type -> commonpb.Empty + 134, // 188: rpcpb.SliverRPC.MonitorListConfig:output_type -> clientpb.MonitoringProviders + 133, // 189: rpcpb.SliverRPC.MonitorAddConfig:output_type -> commonpb.Response + 133, // 190: rpcpb.SliverRPC.MonitorDelConfig:output_type -> commonpb.Response + 135, // 191: rpcpb.SliverRPC.StartMTLSListener:output_type -> clientpb.ListenerJob + 135, // 192: rpcpb.SliverRPC.StartWGListener:output_type -> clientpb.ListenerJob + 135, // 193: rpcpb.SliverRPC.StartDNSListener:output_type -> clientpb.ListenerJob + 135, // 194: rpcpb.SliverRPC.StartHTTPSListener:output_type -> clientpb.ListenerJob + 135, // 195: rpcpb.SliverRPC.StartHTTPListener:output_type -> clientpb.ListenerJob + 136, // 196: rpcpb.SliverRPC.GetBeacons:output_type -> clientpb.Beacons + 10, // 197: rpcpb.SliverRPC.GetBeacon:output_type -> clientpb.Beacon + 0, // 198: rpcpb.SliverRPC.RmBeacon:output_type -> commonpb.Empty + 137, // 199: rpcpb.SliverRPC.GetBeaconTasks:output_type -> clientpb.BeaconTasks + 11, // 200: rpcpb.SliverRPC.GetBeaconTaskContent:output_type -> clientpb.BeaconTask + 11, // 201: rpcpb.SliverRPC.CancelBeaconTask:output_type -> clientpb.BeaconTask + 0, // 202: rpcpb.SliverRPC.UpdateBeaconIntegrityInformation:output_type -> commonpb.Empty + 138, // 203: rpcpb.SliverRPC.GetJobs:output_type -> clientpb.Jobs + 139, // 204: rpcpb.SliverRPC.KillJob:output_type -> clientpb.KillJob + 0, // 205: rpcpb.SliverRPC.RestartJobs:output_type -> commonpb.Empty + 140, // 206: rpcpb.SliverRPC.StartTCPStagerListener:output_type -> clientpb.StagerListener + 16, // 207: rpcpb.SliverRPC.LootAdd:output_type -> clientpb.Loot + 0, // 208: rpcpb.SliverRPC.LootRm:output_type -> commonpb.Empty + 16, // 209: rpcpb.SliverRPC.LootUpdate:output_type -> clientpb.Loot + 16, // 210: rpcpb.SliverRPC.LootContent:output_type -> clientpb.Loot + 141, // 211: rpcpb.SliverRPC.LootAll:output_type -> clientpb.AllLoot + 17, // 212: rpcpb.SliverRPC.Creds:output_type -> clientpb.Credentials + 0, // 213: rpcpb.SliverRPC.CredsAdd:output_type -> commonpb.Empty + 0, // 214: rpcpb.SliverRPC.CredsRm:output_type -> commonpb.Empty + 0, // 215: rpcpb.SliverRPC.CredsUpdate:output_type -> commonpb.Empty + 18, // 216: rpcpb.SliverRPC.GetCredByID:output_type -> clientpb.Credential + 17, // 217: rpcpb.SliverRPC.GetCredsByHashType:output_type -> clientpb.Credentials + 17, // 218: rpcpb.SliverRPC.GetPlaintextCredsByHashType:output_type -> clientpb.Credentials + 18, // 219: rpcpb.SliverRPC.CredsSniffHashType:output_type -> clientpb.Credential + 142, // 220: rpcpb.SliverRPC.Hosts:output_type -> clientpb.AllHosts + 19, // 221: rpcpb.SliverRPC.Host:output_type -> clientpb.Host + 0, // 222: rpcpb.SliverRPC.HostRm:output_type -> commonpb.Empty + 0, // 223: rpcpb.SliverRPC.HostIOCRm:output_type -> commonpb.Empty + 143, // 224: rpcpb.SliverRPC.Generate:output_type -> clientpb.Generate + 144, // 225: rpcpb.SliverRPC.GenerateExternal:output_type -> clientpb.ExternalImplantConfig + 0, // 226: rpcpb.SliverRPC.GenerateExternalSaveBuild:output_type -> commonpb.Empty + 144, // 227: rpcpb.SliverRPC.GenerateExternalGetBuildConfig:output_type -> clientpb.ExternalImplantConfig + 143, // 228: rpcpb.SliverRPC.GenerateStage:output_type -> clientpb.Generate + 0, // 229: rpcpb.SliverRPC.StageImplantBuild:output_type -> commonpb.Empty + 145, // 230: rpcpb.SliverRPC.GetHTTPC2Profiles:output_type -> clientpb.HTTPC2Configs + 146, // 231: rpcpb.SliverRPC.GetHTTPC2ProfileByName:output_type -> clientpb.HTTPC2Config + 0, // 232: rpcpb.SliverRPC.SaveHTTPC2Profile:output_type -> commonpb.Empty + 30, // 233: rpcpb.SliverRPC.BuilderRegister:output_type -> clientpb.Event + 0, // 234: rpcpb.SliverRPC.BuilderTrigger:output_type -> commonpb.Empty + 147, // 235: rpcpb.SliverRPC.Builders:output_type -> clientpb.Builders + 30, // 236: rpcpb.SliverRPC.CrackstationRegister:output_type -> clientpb.Event + 0, // 237: rpcpb.SliverRPC.CrackstationTrigger:output_type -> commonpb.Empty + 0, // 238: rpcpb.SliverRPC.CrackstationBenchmark:output_type -> commonpb.Empty + 148, // 239: rpcpb.SliverRPC.Crackstations:output_type -> clientpb.Crackstations + 33, // 240: rpcpb.SliverRPC.CrackTaskByID:output_type -> clientpb.CrackTask + 0, // 241: rpcpb.SliverRPC.CrackTaskUpdate:output_type -> commonpb.Empty + 149, // 242: rpcpb.SliverRPC.CrackFilesList:output_type -> clientpb.CrackFiles + 34, // 243: rpcpb.SliverRPC.CrackFileCreate:output_type -> clientpb.CrackFile + 0, // 244: rpcpb.SliverRPC.CrackFileChunkUpload:output_type -> commonpb.Empty + 35, // 245: rpcpb.SliverRPC.CrackFileChunkDownload:output_type -> clientpb.CrackFileChunk + 0, // 246: rpcpb.SliverRPC.CrackFileComplete:output_type -> commonpb.Empty + 0, // 247: rpcpb.SliverRPC.CrackFileDelete:output_type -> commonpb.Empty + 143, // 248: rpcpb.SliverRPC.Regenerate:output_type -> clientpb.Generate + 150, // 249: rpcpb.SliverRPC.ImplantBuilds:output_type -> clientpb.ImplantBuilds + 0, // 250: rpcpb.SliverRPC.DeleteImplantBuild:output_type -> commonpb.Empty + 151, // 251: rpcpb.SliverRPC.Canaries:output_type -> clientpb.Canaries + 152, // 252: rpcpb.SliverRPC.GenerateWGClientConfig:output_type -> clientpb.WGClientConfig + 153, // 253: rpcpb.SliverRPC.GenerateUniqueIP:output_type -> clientpb.UniqueWGIP + 154, // 254: rpcpb.SliverRPC.ImplantProfiles:output_type -> clientpb.ImplantProfiles + 0, // 255: rpcpb.SliverRPC.DeleteImplantProfile:output_type -> commonpb.Empty + 38, // 256: rpcpb.SliverRPC.SaveImplantProfile:output_type -> clientpb.ImplantProfile + 155, // 257: rpcpb.SliverRPC.MsfStage:output_type -> clientpb.MsfStager + 156, // 258: rpcpb.SliverRPC.ShellcodeRDI:output_type -> clientpb.ShellcodeRDI + 157, // 259: rpcpb.SliverRPC.GetCompiler:output_type -> clientpb.Compiler + 158, // 260: rpcpb.SliverRPC.ShellcodeEncoder:output_type -> clientpb.ShellcodeEncode + 159, // 261: rpcpb.SliverRPC.ShellcodeEncoderMap:output_type -> clientpb.ShellcodeEncoderMap + 160, // 262: rpcpb.SliverRPC.TrafficEncoderMap:output_type -> clientpb.TrafficEncoderMap + 161, // 263: rpcpb.SliverRPC.TrafficEncoderAdd:output_type -> clientpb.TrafficEncoderTests + 0, // 264: rpcpb.SliverRPC.TrafficEncoderRm:output_type -> commonpb.Empty + 162, // 265: rpcpb.SliverRPC.Websites:output_type -> clientpb.Websites + 43, // 266: rpcpb.SliverRPC.Website:output_type -> clientpb.Website + 0, // 267: rpcpb.SliverRPC.WebsiteRemove:output_type -> commonpb.Empty + 43, // 268: rpcpb.SliverRPC.WebsiteAddContent:output_type -> clientpb.Website + 43, // 269: rpcpb.SliverRPC.WebsiteUpdateContent:output_type -> clientpb.Website + 43, // 270: rpcpb.SliverRPC.WebsiteRemoveContent:output_type -> clientpb.Website + 46, // 271: rpcpb.SliverRPC.Ping:output_type -> sliverpb.Ping + 163, // 272: rpcpb.SliverRPC.Ps:output_type -> sliverpb.Ps + 164, // 273: rpcpb.SliverRPC.Terminate:output_type -> sliverpb.Terminate + 165, // 274: rpcpb.SliverRPC.Ifconfig:output_type -> sliverpb.Ifconfig + 166, // 275: rpcpb.SliverRPC.Netstat:output_type -> sliverpb.Netstat + 167, // 276: rpcpb.SliverRPC.Ls:output_type -> sliverpb.Ls + 168, // 277: rpcpb.SliverRPC.Cd:output_type -> sliverpb.Pwd + 168, // 278: rpcpb.SliverRPC.Pwd:output_type -> sliverpb.Pwd + 169, // 279: rpcpb.SliverRPC.Mv:output_type -> sliverpb.Mv + 170, // 280: rpcpb.SliverRPC.Cp:output_type -> sliverpb.Cp + 171, // 281: rpcpb.SliverRPC.Rm:output_type -> sliverpb.Rm + 172, // 282: rpcpb.SliverRPC.Mkdir:output_type -> sliverpb.Mkdir + 173, // 283: rpcpb.SliverRPC.Download:output_type -> sliverpb.Download + 174, // 284: rpcpb.SliverRPC.Upload:output_type -> sliverpb.Upload + 175, // 285: rpcpb.SliverRPC.Grep:output_type -> sliverpb.Grep + 176, // 286: rpcpb.SliverRPC.Chmod:output_type -> sliverpb.Chmod + 177, // 287: rpcpb.SliverRPC.Chown:output_type -> sliverpb.Chown + 178, // 288: rpcpb.SliverRPC.Chtimes:output_type -> sliverpb.Chtimes + 167, // 289: rpcpb.SliverRPC.MemfilesList:output_type -> sliverpb.Ls + 179, // 290: rpcpb.SliverRPC.MemfilesAdd:output_type -> sliverpb.MemfilesAdd + 180, // 291: rpcpb.SliverRPC.MemfilesRm:output_type -> sliverpb.MemfilesRm + 181, // 292: rpcpb.SliverRPC.ProcessDump:output_type -> sliverpb.ProcessDump + 182, // 293: rpcpb.SliverRPC.RunAs:output_type -> sliverpb.RunAs + 183, // 294: rpcpb.SliverRPC.Impersonate:output_type -> sliverpb.Impersonate + 184, // 295: rpcpb.SliverRPC.RevToSelf:output_type -> sliverpb.RevToSelf + 185, // 296: rpcpb.SliverRPC.GetSystem:output_type -> sliverpb.GetSystem + 186, // 297: rpcpb.SliverRPC.Task:output_type -> sliverpb.Task + 186, // 298: rpcpb.SliverRPC.Msf:output_type -> sliverpb.Task + 186, // 299: rpcpb.SliverRPC.MsfRemote:output_type -> sliverpb.Task + 187, // 300: rpcpb.SliverRPC.ExecuteAssembly:output_type -> sliverpb.ExecuteAssembly + 188, // 301: rpcpb.SliverRPC.Migrate:output_type -> sliverpb.Migrate + 189, // 302: rpcpb.SliverRPC.Execute:output_type -> sliverpb.Execute + 189, // 303: rpcpb.SliverRPC.ExecuteWindows:output_type -> sliverpb.Execute + 190, // 304: rpcpb.SliverRPC.Sideload:output_type -> sliverpb.Sideload + 191, // 305: rpcpb.SliverRPC.SpawnDll:output_type -> sliverpb.SpawnDll + 192, // 306: rpcpb.SliverRPC.Screenshot:output_type -> sliverpb.Screenshot + 193, // 307: rpcpb.SliverRPC.CurrentTokenOwner:output_type -> sliverpb.CurrentTokenOwner + 194, // 308: rpcpb.SliverRPC.Services:output_type -> sliverpb.Services + 195, // 309: rpcpb.SliverRPC.ServiceDetail:output_type -> sliverpb.ServiceDetail + 196, // 310: rpcpb.SliverRPC.StartExistingService:output_type -> sliverpb.ServiceInfo + 197, // 311: rpcpb.SliverRPC.PivotStartListener:output_type -> sliverpb.PivotListener + 0, // 312: rpcpb.SliverRPC.PivotStopListener:output_type -> commonpb.Empty + 198, // 313: rpcpb.SliverRPC.PivotSessionListeners:output_type -> sliverpb.PivotListeners + 199, // 314: rpcpb.SliverRPC.PivotGraph:output_type -> clientpb.PivotGraph + 196, // 315: rpcpb.SliverRPC.StartService:output_type -> sliverpb.ServiceInfo + 196, // 316: rpcpb.SliverRPC.StopService:output_type -> sliverpb.ServiceInfo + 196, // 317: rpcpb.SliverRPC.RemoveService:output_type -> sliverpb.ServiceInfo + 200, // 318: rpcpb.SliverRPC.MakeToken:output_type -> sliverpb.MakeToken + 201, // 319: rpcpb.SliverRPC.GetEnv:output_type -> sliverpb.EnvInfo + 202, // 320: rpcpb.SliverRPC.SetEnv:output_type -> sliverpb.SetEnv + 203, // 321: rpcpb.SliverRPC.UnsetEnv:output_type -> sliverpb.UnsetEnv + 204, // 322: rpcpb.SliverRPC.Backdoor:output_type -> clientpb.Backdoor + 205, // 323: rpcpb.SliverRPC.RegistryRead:output_type -> sliverpb.RegistryRead + 206, // 324: rpcpb.SliverRPC.RegistryWrite:output_type -> sliverpb.RegistryWrite + 207, // 325: rpcpb.SliverRPC.RegistryCreateKey:output_type -> sliverpb.RegistryCreateKey + 208, // 326: rpcpb.SliverRPC.RegistryDeleteKey:output_type -> sliverpb.RegistryDeleteKey + 209, // 327: rpcpb.SliverRPC.RegistryListSubKeys:output_type -> sliverpb.RegistrySubKeyList + 210, // 328: rpcpb.SliverRPC.RegistryListValues:output_type -> sliverpb.RegistryValuesList + 211, // 329: rpcpb.SliverRPC.RunSSHCommand:output_type -> sliverpb.SSHCommand + 212, // 330: rpcpb.SliverRPC.HijackDLL:output_type -> clientpb.DllHijack + 213, // 331: rpcpb.SliverRPC.GetPrivs:output_type -> sliverpb.GetPrivs + 214, // 332: rpcpb.SliverRPC.StartRportFwdListener:output_type -> sliverpb.RportFwdListener + 215, // 333: rpcpb.SliverRPC.GetRportFwdListeners:output_type -> sliverpb.RportFwdListeners + 214, // 334: rpcpb.SliverRPC.StopRportFwdListener:output_type -> sliverpb.RportFwdListener + 109, // 335: rpcpb.SliverRPC.OpenSession:output_type -> sliverpb.OpenSession + 0, // 336: rpcpb.SliverRPC.CloseSession:output_type -> commonpb.Empty + 216, // 337: rpcpb.SliverRPC.RegisterExtension:output_type -> sliverpb.RegisterExtension + 217, // 338: rpcpb.SliverRPC.CallExtension:output_type -> sliverpb.CallExtension + 218, // 339: rpcpb.SliverRPC.ListExtensions:output_type -> sliverpb.ListExtensions + 219, // 340: rpcpb.SliverRPC.RegisterWasmExtension:output_type -> sliverpb.RegisterWasmExtension + 220, // 341: rpcpb.SliverRPC.ListWasmExtensions:output_type -> sliverpb.ListWasmExtensions + 221, // 342: rpcpb.SliverRPC.ExecWasmExtension:output_type -> sliverpb.ExecWasmExtension + 222, // 343: rpcpb.SliverRPC.WGStartPortForward:output_type -> sliverpb.WGPortForward + 222, // 344: rpcpb.SliverRPC.WGStopPortForward:output_type -> sliverpb.WGPortForward + 223, // 345: rpcpb.SliverRPC.WGStartSocks:output_type -> sliverpb.WGSocks + 223, // 346: rpcpb.SliverRPC.WGStopSocks:output_type -> sliverpb.WGSocks + 224, // 347: rpcpb.SliverRPC.WGListForwarders:output_type -> sliverpb.WGTCPForwarders + 225, // 348: rpcpb.SliverRPC.WGListSocksServers:output_type -> sliverpb.WGSocksServers + 226, // 349: rpcpb.SliverRPC.Shell:output_type -> sliverpb.Shell + 227, // 350: rpcpb.SliverRPC.Portfwd:output_type -> sliverpb.Portfwd + 125, // 351: rpcpb.SliverRPC.CreateSocks:output_type -> sliverpb.Socks + 0, // 352: rpcpb.SliverRPC.CloseSocks:output_type -> commonpb.Empty + 126, // 353: rpcpb.SliverRPC.SocksProxy:output_type -> sliverpb.SocksData + 127, // 354: rpcpb.SliverRPC.CreateTunnel:output_type -> sliverpb.Tunnel + 0, // 355: rpcpb.SliverRPC.CloseTunnel:output_type -> commonpb.Empty + 128, // 356: rpcpb.SliverRPC.TunnelData:output_type -> sliverpb.TunnelData + 30, // 357: rpcpb.SliverRPC.Events:output_type -> clientpb.Event + 179, // [179:358] is the sub-list for method output_type + 0, // [0:179] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name diff --git a/protobuf/rpcpb/services.proto b/protobuf/rpcpb/services.proto index 61ce4454e2..ef588d6ff6 100644 --- a/protobuf/rpcpb/services.proto +++ b/protobuf/rpcpb/services.proto @@ -195,6 +195,9 @@ service SliverRPC { rpc Screenshot(sliverpb.ScreenshotReq) returns (sliverpb.Screenshot); rpc CurrentTokenOwner(sliverpb.CurrentTokenOwnerReq) returns (sliverpb.CurrentTokenOwner); + rpc Services(sliverpb.ServicesReq) returns (sliverpb.Services); + rpc ServiceDetail(sliverpb.ServiceDetailReq) returns (sliverpb.ServiceDetail); + rpc StartExistingService(sliverpb.StartExistingServiceReq) returns (sliverpb.ServiceInfo); // *** Pivots *** rpc PivotStartListener(sliverpb.PivotStartListenerReq) diff --git a/protobuf/rpcpb/services_grpc.pb.go b/protobuf/rpcpb/services_grpc.pb.go index d41d643073..39198e127e 100644 --- a/protobuf/rpcpb/services_grpc.pb.go +++ b/protobuf/rpcpb/services_grpc.pb.go @@ -174,6 +174,9 @@ type SliverRPCClient interface { SpawnDll(ctx context.Context, in *sliverpb.InvokeSpawnDllReq, opts ...grpc.CallOption) (*sliverpb.SpawnDll, error) Screenshot(ctx context.Context, in *sliverpb.ScreenshotReq, opts ...grpc.CallOption) (*sliverpb.Screenshot, error) CurrentTokenOwner(ctx context.Context, in *sliverpb.CurrentTokenOwnerReq, opts ...grpc.CallOption) (*sliverpb.CurrentTokenOwner, error) + Services(ctx context.Context, in *sliverpb.ServicesReq, opts ...grpc.CallOption) (*sliverpb.Services, error) + ServiceDetail(ctx context.Context, in *sliverpb.ServiceDetailReq, opts ...grpc.CallOption) (*sliverpb.ServiceDetail, error) + StartExistingService(ctx context.Context, in *sliverpb.StartExistingServiceReq, opts ...grpc.CallOption) (*sliverpb.ServiceInfo, error) // *** Pivots *** PivotStartListener(ctx context.Context, in *sliverpb.PivotStartListenerReq, opts ...grpc.CallOption) (*sliverpb.PivotListener, error) PivotStopListener(ctx context.Context, in *sliverpb.PivotStopListenerReq, opts ...grpc.CallOption) (*commonpb.Empty, error) @@ -1472,6 +1475,33 @@ func (c *sliverRPCClient) CurrentTokenOwner(ctx context.Context, in *sliverpb.Cu return out, nil } +func (c *sliverRPCClient) Services(ctx context.Context, in *sliverpb.ServicesReq, opts ...grpc.CallOption) (*sliverpb.Services, error) { + out := new(sliverpb.Services) + err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/Services", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sliverRPCClient) ServiceDetail(ctx context.Context, in *sliverpb.ServiceDetailReq, opts ...grpc.CallOption) (*sliverpb.ServiceDetail, error) { + out := new(sliverpb.ServiceDetail) + err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/ServiceDetail", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sliverRPCClient) StartExistingService(ctx context.Context, in *sliverpb.StartExistingServiceReq, opts ...grpc.CallOption) (*sliverpb.ServiceInfo, error) { + out := new(sliverpb.ServiceInfo) + err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/StartExistingService", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *sliverRPCClient) PivotStartListener(ctx context.Context, in *sliverpb.PivotStartListenerReq, opts ...grpc.CallOption) (*sliverpb.PivotListener, error) { out := new(sliverpb.PivotListener) err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/PivotStartListener", in, out, opts...) @@ -2115,6 +2145,9 @@ type SliverRPCServer interface { SpawnDll(context.Context, *sliverpb.InvokeSpawnDllReq) (*sliverpb.SpawnDll, error) Screenshot(context.Context, *sliverpb.ScreenshotReq) (*sliverpb.Screenshot, error) CurrentTokenOwner(context.Context, *sliverpb.CurrentTokenOwnerReq) (*sliverpb.CurrentTokenOwner, error) + Services(context.Context, *sliverpb.ServicesReq) (*sliverpb.Services, error) + ServiceDetail(context.Context, *sliverpb.ServiceDetailReq) (*sliverpb.ServiceDetail, error) + StartExistingService(context.Context, *sliverpb.StartExistingServiceReq) (*sliverpb.ServiceInfo, error) // *** Pivots *** PivotStartListener(context.Context, *sliverpb.PivotStartListenerReq) (*sliverpb.PivotListener, error) PivotStopListener(context.Context, *sliverpb.PivotStopListenerReq) (*commonpb.Empty, error) @@ -2565,6 +2598,15 @@ func (UnimplementedSliverRPCServer) Screenshot(context.Context, *sliverpb.Screen func (UnimplementedSliverRPCServer) CurrentTokenOwner(context.Context, *sliverpb.CurrentTokenOwnerReq) (*sliverpb.CurrentTokenOwner, error) { return nil, status.Errorf(codes.Unimplemented, "method CurrentTokenOwner not implemented") } +func (UnimplementedSliverRPCServer) Services(context.Context, *sliverpb.ServicesReq) (*sliverpb.Services, error) { + return nil, status.Errorf(codes.Unimplemented, "method Services not implemented") +} +func (UnimplementedSliverRPCServer) ServiceDetail(context.Context, *sliverpb.ServiceDetailReq) (*sliverpb.ServiceDetail, error) { + return nil, status.Errorf(codes.Unimplemented, "method ServiceDetail not implemented") +} +func (UnimplementedSliverRPCServer) StartExistingService(context.Context, *sliverpb.StartExistingServiceReq) (*sliverpb.ServiceInfo, error) { + return nil, status.Errorf(codes.Unimplemented, "method StartExistingService not implemented") +} func (UnimplementedSliverRPCServer) PivotStartListener(context.Context, *sliverpb.PivotStartListenerReq) (*sliverpb.PivotListener, error) { return nil, status.Errorf(codes.Unimplemented, "method PivotStartListener not implemented") } @@ -5055,6 +5097,60 @@ func _SliverRPC_CurrentTokenOwner_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _SliverRPC_Services_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(sliverpb.ServicesReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SliverRPCServer).Services(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/rpcpb.SliverRPC/Services", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SliverRPCServer).Services(ctx, req.(*sliverpb.ServicesReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _SliverRPC_ServiceDetail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(sliverpb.ServiceDetailReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SliverRPCServer).ServiceDetail(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/rpcpb.SliverRPC/ServiceDetail", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SliverRPCServer).ServiceDetail(ctx, req.(*sliverpb.ServiceDetailReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _SliverRPC_StartExistingService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(sliverpb.StartExistingServiceReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SliverRPCServer).StartExistingService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/rpcpb.SliverRPC/StartExistingService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SliverRPCServer).StartExistingService(ctx, req.(*sliverpb.StartExistingServiceReq)) + } + return interceptor(ctx, in, info, handler) +} + func _SliverRPC_PivotStartListener_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(sliverpb.PivotStartListenerReq) if err := dec(in); err != nil { @@ -6431,6 +6527,18 @@ var SliverRPC_ServiceDesc = grpc.ServiceDesc{ MethodName: "CurrentTokenOwner", Handler: _SliverRPC_CurrentTokenOwner_Handler, }, + { + MethodName: "Services", + Handler: _SliverRPC_Services_Handler, + }, + { + MethodName: "ServiceDetail", + Handler: _SliverRPC_ServiceDetail_Handler, + }, + { + MethodName: "StartExistingService", + Handler: _SliverRPC_StartExistingService_Handler, + }, { MethodName: "PivotStartListener", Handler: _SliverRPC_PivotStartListener_Handler, diff --git a/protobuf/sliverpb/constants.go b/protobuf/sliverpb/constants.go index 6dae807166..d2740e23f7 100644 --- a/protobuf/sliverpb/constants.go +++ b/protobuf/sliverpb/constants.go @@ -342,6 +342,11 @@ const ( // MsgGrepReq - Request to grep for data MsgGrepReq + + // Services messages + MsgServicesReq + MsgServiceDetailReq + MsgStartExistingServiceReq ) // Constants to replace enums @@ -608,6 +613,14 @@ func MsgNumber(request proto.Message) uint32 { case *ExecWasmExtensionReq: return MsgExecWasmExtensionReq + case *ServicesReq: + return MsgServicesReq + + case *ServiceDetailReq: + return MsgServiceDetailReq + + case *StartExistingServiceReq: + return MsgStartExistingServiceReq } return uint32(0) } diff --git a/protobuf/sliverpb/sliver.pb.go b/protobuf/sliverpb/sliver.pb.go index b5e481587c..aa4433cea0 100644 --- a/protobuf/sliverpb/sliver.pb.go +++ b/protobuf/sliverpb/sliver.pb.go @@ -11576,6 +11576,384 @@ func (x *ExecWasmExtension) GetResponse() *commonpb.Response { return nil } +type ServicesReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Hostname string `protobuf:"bytes,1,opt,name=Hostname,proto3" json:"Hostname,omitempty"` + Request *commonpb.Request `protobuf:"bytes,9,opt,name=Request,proto3" json:"Request,omitempty"` +} + +func (x *ServicesReq) Reset() { + *x = ServicesReq{} + if protoimpl.UnsafeEnabled { + mi := &file_sliverpb_sliver_proto_msgTypes[173] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServicesReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServicesReq) ProtoMessage() {} + +func (x *ServicesReq) ProtoReflect() protoreflect.Message { + mi := &file_sliverpb_sliver_proto_msgTypes[173] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServicesReq.ProtoReflect.Descriptor instead. +func (*ServicesReq) Descriptor() ([]byte, []int) { + return file_sliverpb_sliver_proto_rawDescGZIP(), []int{173} +} + +func (x *ServicesReq) GetHostname() string { + if x != nil { + return x.Hostname + } + return "" +} + +func (x *ServicesReq) GetRequest() *commonpb.Request { + if x != nil { + return x.Request + } + return nil +} + +type ServiceDetailReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ServiceInfo *ServiceInfoReq `protobuf:"bytes,1,opt,name=ServiceInfo,proto3" json:"ServiceInfo,omitempty"` + Request *commonpb.Request `protobuf:"bytes,9,opt,name=Request,proto3" json:"Request,omitempty"` +} + +func (x *ServiceDetailReq) Reset() { + *x = ServiceDetailReq{} + if protoimpl.UnsafeEnabled { + mi := &file_sliverpb_sliver_proto_msgTypes[174] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServiceDetailReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceDetailReq) ProtoMessage() {} + +func (x *ServiceDetailReq) ProtoReflect() protoreflect.Message { + mi := &file_sliverpb_sliver_proto_msgTypes[174] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceDetailReq.ProtoReflect.Descriptor instead. +func (*ServiceDetailReq) Descriptor() ([]byte, []int) { + return file_sliverpb_sliver_proto_rawDescGZIP(), []int{174} +} + +func (x *ServiceDetailReq) GetServiceInfo() *ServiceInfoReq { + if x != nil { + return x.ServiceInfo + } + return nil +} + +func (x *ServiceDetailReq) GetRequest() *commonpb.Request { + if x != nil { + return x.Request + } + return nil +} + +type ServiceDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` + DisplayName string `protobuf:"bytes,2,opt,name=DisplayName,proto3" json:"DisplayName,omitempty"` + Description string `protobuf:"bytes,3,opt,name=Description,proto3" json:"Description,omitempty"` + Status string `protobuf:"bytes,4,opt,name=Status,proto3" json:"Status,omitempty"` + StartupType string `protobuf:"bytes,5,opt,name=StartupType,proto3" json:"StartupType,omitempty"` + BinPath string `protobuf:"bytes,6,opt,name=BinPath,proto3" json:"BinPath,omitempty"` + Account string `protobuf:"bytes,7,opt,name=Account,proto3" json:"Account,omitempty"` +} + +func (x *ServiceDetails) Reset() { + *x = ServiceDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_sliverpb_sliver_proto_msgTypes[175] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServiceDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceDetails) ProtoMessage() {} + +func (x *ServiceDetails) ProtoReflect() protoreflect.Message { + mi := &file_sliverpb_sliver_proto_msgTypes[175] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceDetails.ProtoReflect.Descriptor instead. +func (*ServiceDetails) Descriptor() ([]byte, []int) { + return file_sliverpb_sliver_proto_rawDescGZIP(), []int{175} +} + +func (x *ServiceDetails) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ServiceDetails) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *ServiceDetails) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *ServiceDetails) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ServiceDetails) GetStartupType() string { + if x != nil { + return x.StartupType + } + return "" +} + +func (x *ServiceDetails) GetBinPath() string { + if x != nil { + return x.BinPath + } + return "" +} + +func (x *ServiceDetails) GetAccount() string { + if x != nil { + return x.Account + } + return "" +} + +type Services struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Details []*ServiceDetails `protobuf:"bytes,1,rep,name=Details,proto3" json:"Details,omitempty"` + Error string `protobuf:"bytes,2,opt,name=Error,proto3" json:"Error,omitempty"` + Response *commonpb.Response `protobuf:"bytes,9,opt,name=Response,proto3" json:"Response,omitempty"` +} + +func (x *Services) Reset() { + *x = Services{} + if protoimpl.UnsafeEnabled { + mi := &file_sliverpb_sliver_proto_msgTypes[176] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Services) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Services) ProtoMessage() {} + +func (x *Services) ProtoReflect() protoreflect.Message { + mi := &file_sliverpb_sliver_proto_msgTypes[176] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Services.ProtoReflect.Descriptor instead. +func (*Services) Descriptor() ([]byte, []int) { + return file_sliverpb_sliver_proto_rawDescGZIP(), []int{176} +} + +func (x *Services) GetDetails() []*ServiceDetails { + if x != nil { + return x.Details + } + return nil +} + +func (x *Services) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +func (x *Services) GetResponse() *commonpb.Response { + if x != nil { + return x.Response + } + return nil +} + +type ServiceDetail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Detail *ServiceDetails `protobuf:"bytes,1,opt,name=Detail,proto3" json:"Detail,omitempty"` + Response *commonpb.Response `protobuf:"bytes,9,opt,name=Response,proto3" json:"Response,omitempty"` +} + +func (x *ServiceDetail) Reset() { + *x = ServiceDetail{} + if protoimpl.UnsafeEnabled { + mi := &file_sliverpb_sliver_proto_msgTypes[177] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServiceDetail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceDetail) ProtoMessage() {} + +func (x *ServiceDetail) ProtoReflect() protoreflect.Message { + mi := &file_sliverpb_sliver_proto_msgTypes[177] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceDetail.ProtoReflect.Descriptor instead. +func (*ServiceDetail) Descriptor() ([]byte, []int) { + return file_sliverpb_sliver_proto_rawDescGZIP(), []int{177} +} + +func (x *ServiceDetail) GetDetail() *ServiceDetails { + if x != nil { + return x.Detail + } + return nil +} + +func (x *ServiceDetail) GetResponse() *commonpb.Response { + if x != nil { + return x.Response + } + return nil +} + +type StartExistingServiceReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ServiceInfo *ServiceInfoReq `protobuf:"bytes,1,opt,name=ServiceInfo,proto3" json:"ServiceInfo,omitempty"` + Request *commonpb.Request `protobuf:"bytes,9,opt,name=Request,proto3" json:"Request,omitempty"` +} + +func (x *StartExistingServiceReq) Reset() { + *x = StartExistingServiceReq{} + if protoimpl.UnsafeEnabled { + mi := &file_sliverpb_sliver_proto_msgTypes[178] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartExistingServiceReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartExistingServiceReq) ProtoMessage() {} + +func (x *StartExistingServiceReq) ProtoReflect() protoreflect.Message { + mi := &file_sliverpb_sliver_proto_msgTypes[178] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartExistingServiceReq.ProtoReflect.Descriptor instead. +func (*StartExistingServiceReq) Descriptor() ([]byte, []int) { + return file_sliverpb_sliver_proto_rawDescGZIP(), []int{178} +} + +func (x *StartExistingServiceReq) GetServiceInfo() *ServiceInfoReq { + if x != nil { + return x.ServiceInfo + } + return nil +} + +func (x *StartExistingServiceReq) GetRequest() *commonpb.Request { + if x != nil { + return x.Request + } + return nil +} + type SockTabEntry_SockAddr struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -11588,7 +11966,7 @@ type SockTabEntry_SockAddr struct { func (x *SockTabEntry_SockAddr) Reset() { *x = SockTabEntry_SockAddr{} if protoimpl.UnsafeEnabled { - mi := &file_sliverpb_sliver_proto_msgTypes[174] + mi := &file_sliverpb_sliver_proto_msgTypes[180] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11601,7 +11979,7 @@ func (x *SockTabEntry_SockAddr) String() string { func (*SockTabEntry_SockAddr) ProtoMessage() {} func (x *SockTabEntry_SockAddr) ProtoReflect() protoreflect.Message { - mi := &file_sliverpb_sliver_proto_msgTypes[174] + mi := &file_sliverpb_sliver_proto_msgTypes[180] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12991,22 +13369,72 @@ var file_sliverpb_sliver_proto_rawDesc = []byte{ 0x28, 0x0d, 0x52, 0x08, 0x45, 0x78, 0x69, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x49, 0x0a, 0x0c, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, - 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x10, - 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, - 0x51, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x09, 0x50, 0x69, 0x76, 0x6f, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x00, 0x12, 0x07, 0x0a, - 0x03, 0x55, 0x44, 0x50, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, - 0x69, 0x70, 0x65, 0x10, 0x02, 0x2a, 0x33, 0x0a, 0x0f, 0x50, 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45, 0x4e, 0x44, - 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x49, - 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0x01, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x69, 0x73, 0x68, 0x6f, 0x70, 0x66, - 0x6f, 0x78, 0x2f, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x73, 0x65, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, 0x0b, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x48, + 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x48, + 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x7b, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x52, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0xd6, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x44, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x50, 0x61, 0x74, + 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x42, 0x69, 0x6e, 0x50, 0x61, 0x74, 0x68, + 0x12, 0x18, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x08, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x07, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x52, 0x07, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x12, 0x2e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x71, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x12, 0x30, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x06, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, + 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, + 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x12, 0x3a, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, + 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x52, + 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x07, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2a, 0x49, 0x0a, 0x0c, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, + 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, + 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x09, + 0x0a, 0x05, 0x44, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x51, 0x57, 0x4f, + 0x52, 0x44, 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x09, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x44, + 0x50, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x69, 0x70, 0x65, + 0x10, 0x02, 0x2a, 0x33, 0x0a, 0x0f, 0x50, 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x46, 0x41, + 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0x01, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x69, 0x73, 0x68, 0x6f, 0x70, 0x66, 0x6f, 0x78, 0x2f, + 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -13022,7 +13450,7 @@ func file_sliverpb_sliver_proto_rawDescGZIP() []byte { } var file_sliverpb_sliver_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_sliverpb_sliver_proto_msgTypes = make([]protoimpl.MessageInfo, 176) +var file_sliverpb_sliver_proto_msgTypes = make([]protoimpl.MessageInfo, 182) var file_sliverpb_sliver_proto_goTypes = []interface{}{ (RegistryType)(0), // 0: sliverpb.RegistryType (PivotType)(0), // 1: sliverpb.PivotType @@ -13200,200 +13628,215 @@ var file_sliverpb_sliver_proto_goTypes = []interface{}{ (*ListWasmExtensions)(nil), // 173: sliverpb.ListWasmExtensions (*ExecWasmExtensionReq)(nil), // 174: sliverpb.ExecWasmExtensionReq (*ExecWasmExtension)(nil), // 175: sliverpb.ExecWasmExtension - nil, // 176: sliverpb.Grep.ResultsEntry - (*SockTabEntry_SockAddr)(nil), // 177: sliverpb.SockTabEntry.SockAddr - nil, // 178: sliverpb.ExecWasmExtensionReq.MemFSEntry - (*commonpb.Response)(nil), // 179: commonpb.Response - (*commonpb.Request)(nil), // 180: commonpb.Request - (*commonpb.Process)(nil), // 181: commonpb.Process - (*commonpb.EnvVar)(nil), // 182: commonpb.EnvVar + (*ServicesReq)(nil), // 176: sliverpb.ServicesReq + (*ServiceDetailReq)(nil), // 177: sliverpb.ServiceDetailReq + (*ServiceDetails)(nil), // 178: sliverpb.ServiceDetails + (*Services)(nil), // 179: sliverpb.Services + (*ServiceDetail)(nil), // 180: sliverpb.ServiceDetail + (*StartExistingServiceReq)(nil), // 181: sliverpb.StartExistingServiceReq + nil, // 182: sliverpb.Grep.ResultsEntry + (*SockTabEntry_SockAddr)(nil), // 183: sliverpb.SockTabEntry.SockAddr + nil, // 184: sliverpb.ExecWasmExtensionReq.MemFSEntry + (*commonpb.Response)(nil), // 185: commonpb.Response + (*commonpb.Request)(nil), // 186: commonpb.Request + (*commonpb.Process)(nil), // 187: commonpb.Process + (*commonpb.EnvVar)(nil), // 188: commonpb.EnvVar } var file_sliverpb_sliver_proto_depIdxs = []int32{ 3, // 0: sliverpb.BeaconTasks.Tasks:type_name -> sliverpb.Envelope 5, // 1: sliverpb.BeaconRegister.Register:type_name -> sliverpb.Register 5, // 2: sliverpb.SessionRegister.Register:type_name -> sliverpb.Register - 179, // 3: sliverpb.OpenSession.Response:type_name -> commonpb.Response - 180, // 4: sliverpb.OpenSession.Request:type_name -> commonpb.Request - 179, // 5: sliverpb.CloseSession.Response:type_name -> commonpb.Response - 180, // 6: sliverpb.CloseSession.Request:type_name -> commonpb.Request - 179, // 7: sliverpb.Ping.Response:type_name -> commonpb.Response - 180, // 8: sliverpb.Ping.Request:type_name -> commonpb.Request - 180, // 9: sliverpb.KillReq.Request:type_name -> commonpb.Request - 180, // 10: sliverpb.PsReq.Request:type_name -> commonpb.Request - 181, // 11: sliverpb.Ps.Processes:type_name -> commonpb.Process - 179, // 12: sliverpb.Ps.Response:type_name -> commonpb.Response - 180, // 13: sliverpb.TerminateReq.Request:type_name -> commonpb.Request - 179, // 14: sliverpb.Terminate.Response:type_name -> commonpb.Response - 180, // 15: sliverpb.IfconfigReq.Request:type_name -> commonpb.Request + 185, // 3: sliverpb.OpenSession.Response:type_name -> commonpb.Response + 186, // 4: sliverpb.OpenSession.Request:type_name -> commonpb.Request + 185, // 5: sliverpb.CloseSession.Response:type_name -> commonpb.Response + 186, // 6: sliverpb.CloseSession.Request:type_name -> commonpb.Request + 185, // 7: sliverpb.Ping.Response:type_name -> commonpb.Response + 186, // 8: sliverpb.Ping.Request:type_name -> commonpb.Request + 186, // 9: sliverpb.KillReq.Request:type_name -> commonpb.Request + 186, // 10: sliverpb.PsReq.Request:type_name -> commonpb.Request + 187, // 11: sliverpb.Ps.Processes:type_name -> commonpb.Process + 185, // 12: sliverpb.Ps.Response:type_name -> commonpb.Response + 186, // 13: sliverpb.TerminateReq.Request:type_name -> commonpb.Request + 185, // 14: sliverpb.Terminate.Response:type_name -> commonpb.Response + 186, // 15: sliverpb.IfconfigReq.Request:type_name -> commonpb.Request 18, // 16: sliverpb.Ifconfig.NetInterfaces:type_name -> sliverpb.NetInterface - 179, // 17: sliverpb.Ifconfig.Response:type_name -> commonpb.Response - 180, // 18: sliverpb.LsReq.Request:type_name -> commonpb.Request + 185, // 17: sliverpb.Ifconfig.Response:type_name -> commonpb.Response + 186, // 18: sliverpb.LsReq.Request:type_name -> commonpb.Request 21, // 19: sliverpb.Ls.Files:type_name -> sliverpb.FileInfo - 179, // 20: sliverpb.Ls.Response:type_name -> commonpb.Response - 180, // 21: sliverpb.CdReq.Request:type_name -> commonpb.Request - 180, // 22: sliverpb.PwdReq.Request:type_name -> commonpb.Request - 179, // 23: sliverpb.Pwd.Response:type_name -> commonpb.Response - 180, // 24: sliverpb.RmReq.Request:type_name -> commonpb.Request - 179, // 25: sliverpb.Rm.Response:type_name -> commonpb.Response - 180, // 26: sliverpb.MvReq.Request:type_name -> commonpb.Request - 179, // 27: sliverpb.Mv.Response:type_name -> commonpb.Response - 180, // 28: sliverpb.CpReq.Request:type_name -> commonpb.Request - 179, // 29: sliverpb.Cp.Response:type_name -> commonpb.Response - 180, // 30: sliverpb.MkdirReq.Request:type_name -> commonpb.Request - 179, // 31: sliverpb.Mkdir.Response:type_name -> commonpb.Response - 180, // 32: sliverpb.DownloadReq.Request:type_name -> commonpb.Request - 179, // 33: sliverpb.Download.Response:type_name -> commonpb.Response - 180, // 34: sliverpb.UploadReq.Request:type_name -> commonpb.Request - 179, // 35: sliverpb.Upload.Response:type_name -> commonpb.Response - 180, // 36: sliverpb.GrepReq.Request:type_name -> commonpb.Request + 185, // 20: sliverpb.Ls.Response:type_name -> commonpb.Response + 186, // 21: sliverpb.CdReq.Request:type_name -> commonpb.Request + 186, // 22: sliverpb.PwdReq.Request:type_name -> commonpb.Request + 185, // 23: sliverpb.Pwd.Response:type_name -> commonpb.Response + 186, // 24: sliverpb.RmReq.Request:type_name -> commonpb.Request + 185, // 25: sliverpb.Rm.Response:type_name -> commonpb.Response + 186, // 26: sliverpb.MvReq.Request:type_name -> commonpb.Request + 185, // 27: sliverpb.Mv.Response:type_name -> commonpb.Response + 186, // 28: sliverpb.CpReq.Request:type_name -> commonpb.Request + 185, // 29: sliverpb.Cp.Response:type_name -> commonpb.Response + 186, // 30: sliverpb.MkdirReq.Request:type_name -> commonpb.Request + 185, // 31: sliverpb.Mkdir.Response:type_name -> commonpb.Response + 186, // 32: sliverpb.DownloadReq.Request:type_name -> commonpb.Request + 185, // 33: sliverpb.Download.Response:type_name -> commonpb.Response + 186, // 34: sliverpb.UploadReq.Request:type_name -> commonpb.Request + 185, // 35: sliverpb.Upload.Response:type_name -> commonpb.Response + 186, // 36: sliverpb.GrepReq.Request:type_name -> commonpb.Request 38, // 37: sliverpb.GrepResult.Positions:type_name -> sliverpb.GrepLinePosition 39, // 38: sliverpb.GrepResultsForFile.FileResults:type_name -> sliverpb.GrepResult - 176, // 39: sliverpb.Grep.Results:type_name -> sliverpb.Grep.ResultsEntry - 179, // 40: sliverpb.Grep.Response:type_name -> commonpb.Response - 180, // 41: sliverpb.ProcessDumpReq.Request:type_name -> commonpb.Request - 179, // 42: sliverpb.ProcessDump.Response:type_name -> commonpb.Response - 180, // 43: sliverpb.RunAsReq.Request:type_name -> commonpb.Request - 179, // 44: sliverpb.RunAs.Response:type_name -> commonpb.Response - 180, // 45: sliverpb.ImpersonateReq.Request:type_name -> commonpb.Request - 179, // 46: sliverpb.Impersonate.Response:type_name -> commonpb.Response - 180, // 47: sliverpb.RevToSelfReq.Request:type_name -> commonpb.Request - 179, // 48: sliverpb.RevToSelf.Response:type_name -> commonpb.Response - 180, // 49: sliverpb.CurrentTokenOwnerReq.Request:type_name -> commonpb.Request - 179, // 50: sliverpb.CurrentTokenOwner.Response:type_name -> commonpb.Response - 180, // 51: sliverpb.InvokeGetSystemReq.Request:type_name -> commonpb.Request - 179, // 52: sliverpb.GetSystem.Response:type_name -> commonpb.Response - 180, // 53: sliverpb.MakeTokenReq.Request:type_name -> commonpb.Request - 179, // 54: sliverpb.MakeToken.Response:type_name -> commonpb.Response - 180, // 55: sliverpb.TaskReq.Request:type_name -> commonpb.Request - 179, // 56: sliverpb.Task.Response:type_name -> commonpb.Response - 180, // 57: sliverpb.ExecuteAssemblyReq.Request:type_name -> commonpb.Request - 180, // 58: sliverpb.InvokeExecuteAssemblyReq.Request:type_name -> commonpb.Request - 180, // 59: sliverpb.InvokeInProcExecuteAssemblyReq.Request:type_name -> commonpb.Request - 179, // 60: sliverpb.ExecuteAssembly.Response:type_name -> commonpb.Response - 180, // 61: sliverpb.InvokeMigrateReq.Request:type_name -> commonpb.Request - 179, // 62: sliverpb.Migrate.Response:type_name -> commonpb.Response - 180, // 63: sliverpb.ExecuteReq.Request:type_name -> commonpb.Request - 180, // 64: sliverpb.ExecuteWindowsReq.Request:type_name -> commonpb.Request - 179, // 65: sliverpb.Execute.Response:type_name -> commonpb.Response - 180, // 66: sliverpb.SideloadReq.Request:type_name -> commonpb.Request - 179, // 67: sliverpb.Sideload.Response:type_name -> commonpb.Response - 180, // 68: sliverpb.InvokeSpawnDllReq.Request:type_name -> commonpb.Request - 180, // 69: sliverpb.SpawnDllReq.Request:type_name -> commonpb.Request - 179, // 70: sliverpb.SpawnDll.Response:type_name -> commonpb.Response - 180, // 71: sliverpb.NetstatReq.Request:type_name -> commonpb.Request - 177, // 72: sliverpb.SockTabEntry.LocalAddr:type_name -> sliverpb.SockTabEntry.SockAddr - 177, // 73: sliverpb.SockTabEntry.RemoteAddr:type_name -> sliverpb.SockTabEntry.SockAddr - 181, // 74: sliverpb.SockTabEntry.Process:type_name -> commonpb.Process + 182, // 39: sliverpb.Grep.Results:type_name -> sliverpb.Grep.ResultsEntry + 185, // 40: sliverpb.Grep.Response:type_name -> commonpb.Response + 186, // 41: sliverpb.ProcessDumpReq.Request:type_name -> commonpb.Request + 185, // 42: sliverpb.ProcessDump.Response:type_name -> commonpb.Response + 186, // 43: sliverpb.RunAsReq.Request:type_name -> commonpb.Request + 185, // 44: sliverpb.RunAs.Response:type_name -> commonpb.Response + 186, // 45: sliverpb.ImpersonateReq.Request:type_name -> commonpb.Request + 185, // 46: sliverpb.Impersonate.Response:type_name -> commonpb.Response + 186, // 47: sliverpb.RevToSelfReq.Request:type_name -> commonpb.Request + 185, // 48: sliverpb.RevToSelf.Response:type_name -> commonpb.Response + 186, // 49: sliverpb.CurrentTokenOwnerReq.Request:type_name -> commonpb.Request + 185, // 50: sliverpb.CurrentTokenOwner.Response:type_name -> commonpb.Response + 186, // 51: sliverpb.InvokeGetSystemReq.Request:type_name -> commonpb.Request + 185, // 52: sliverpb.GetSystem.Response:type_name -> commonpb.Response + 186, // 53: sliverpb.MakeTokenReq.Request:type_name -> commonpb.Request + 185, // 54: sliverpb.MakeToken.Response:type_name -> commonpb.Response + 186, // 55: sliverpb.TaskReq.Request:type_name -> commonpb.Request + 185, // 56: sliverpb.Task.Response:type_name -> commonpb.Response + 186, // 57: sliverpb.ExecuteAssemblyReq.Request:type_name -> commonpb.Request + 186, // 58: sliverpb.InvokeExecuteAssemblyReq.Request:type_name -> commonpb.Request + 186, // 59: sliverpb.InvokeInProcExecuteAssemblyReq.Request:type_name -> commonpb.Request + 185, // 60: sliverpb.ExecuteAssembly.Response:type_name -> commonpb.Response + 186, // 61: sliverpb.InvokeMigrateReq.Request:type_name -> commonpb.Request + 185, // 62: sliverpb.Migrate.Response:type_name -> commonpb.Response + 186, // 63: sliverpb.ExecuteReq.Request:type_name -> commonpb.Request + 186, // 64: sliverpb.ExecuteWindowsReq.Request:type_name -> commonpb.Request + 185, // 65: sliverpb.Execute.Response:type_name -> commonpb.Response + 186, // 66: sliverpb.SideloadReq.Request:type_name -> commonpb.Request + 185, // 67: sliverpb.Sideload.Response:type_name -> commonpb.Response + 186, // 68: sliverpb.InvokeSpawnDllReq.Request:type_name -> commonpb.Request + 186, // 69: sliverpb.SpawnDllReq.Request:type_name -> commonpb.Request + 185, // 70: sliverpb.SpawnDll.Response:type_name -> commonpb.Response + 186, // 71: sliverpb.NetstatReq.Request:type_name -> commonpb.Request + 183, // 72: sliverpb.SockTabEntry.LocalAddr:type_name -> sliverpb.SockTabEntry.SockAddr + 183, // 73: sliverpb.SockTabEntry.RemoteAddr:type_name -> sliverpb.SockTabEntry.SockAddr + 187, // 74: sliverpb.SockTabEntry.Process:type_name -> commonpb.Process 73, // 75: sliverpb.Netstat.Entries:type_name -> sliverpb.SockTabEntry - 179, // 76: sliverpb.Netstat.Response:type_name -> commonpb.Response - 180, // 77: sliverpb.EnvReq.Request:type_name -> commonpb.Request - 182, // 78: sliverpb.EnvInfo.Variables:type_name -> commonpb.EnvVar - 179, // 79: sliverpb.EnvInfo.Response:type_name -> commonpb.Response - 182, // 80: sliverpb.SetEnvReq.Variable:type_name -> commonpb.EnvVar - 180, // 81: sliverpb.SetEnvReq.Request:type_name -> commonpb.Request - 179, // 82: sliverpb.SetEnv.Response:type_name -> commonpb.Response - 180, // 83: sliverpb.UnsetEnvReq.Request:type_name -> commonpb.Request - 179, // 84: sliverpb.UnsetEnv.Response:type_name -> commonpb.Response + 185, // 76: sliverpb.Netstat.Response:type_name -> commonpb.Response + 186, // 77: sliverpb.EnvReq.Request:type_name -> commonpb.Request + 188, // 78: sliverpb.EnvInfo.Variables:type_name -> commonpb.EnvVar + 185, // 79: sliverpb.EnvInfo.Response:type_name -> commonpb.Response + 188, // 80: sliverpb.SetEnvReq.Variable:type_name -> commonpb.EnvVar + 186, // 81: sliverpb.SetEnvReq.Request:type_name -> commonpb.Request + 185, // 82: sliverpb.SetEnv.Response:type_name -> commonpb.Response + 186, // 83: sliverpb.UnsetEnvReq.Request:type_name -> commonpb.Request + 185, // 84: sliverpb.UnsetEnv.Response:type_name -> commonpb.Response 83, // 85: sliverpb.DNSPoll.blocks:type_name -> sliverpb.DNSBlockHeader - 180, // 86: sliverpb.ScreenshotReq.Request:type_name -> commonpb.Request - 179, // 87: sliverpb.Screenshot.Response:type_name -> commonpb.Response - 180, // 88: sliverpb.StartServiceReq.Request:type_name -> commonpb.Request - 179, // 89: sliverpb.ServiceInfo.Response:type_name -> commonpb.Response + 186, // 86: sliverpb.ScreenshotReq.Request:type_name -> commonpb.Request + 185, // 87: sliverpb.Screenshot.Response:type_name -> commonpb.Response + 186, // 88: sliverpb.StartServiceReq.Request:type_name -> commonpb.Request + 185, // 89: sliverpb.ServiceInfo.Response:type_name -> commonpb.Response 89, // 90: sliverpb.StopServiceReq.ServiceInfo:type_name -> sliverpb.ServiceInfoReq - 180, // 91: sliverpb.StopServiceReq.Request:type_name -> commonpb.Request + 186, // 91: sliverpb.StopServiceReq.Request:type_name -> commonpb.Request 89, // 92: sliverpb.RemoveServiceReq.ServiceInfo:type_name -> sliverpb.ServiceInfoReq - 180, // 93: sliverpb.RemoveServiceReq.Request:type_name -> commonpb.Request - 180, // 94: sliverpb.RegistryReadReq.Request:type_name -> commonpb.Request - 179, // 95: sliverpb.RegistryRead.Response:type_name -> commonpb.Response - 180, // 96: sliverpb.RegistryWriteReq.Request:type_name -> commonpb.Request - 179, // 97: sliverpb.RegistryWrite.Response:type_name -> commonpb.Response - 180, // 98: sliverpb.RegistryCreateKeyReq.Request:type_name -> commonpb.Request - 179, // 99: sliverpb.RegistryCreateKey.Response:type_name -> commonpb.Response - 180, // 100: sliverpb.RegistryDeleteKeyReq.Request:type_name -> commonpb.Request - 179, // 101: sliverpb.RegistryDeleteKey.Response:type_name -> commonpb.Response - 180, // 102: sliverpb.RegistrySubKeyListReq.Request:type_name -> commonpb.Request - 179, // 103: sliverpb.RegistrySubKeyList.Response:type_name -> commonpb.Response - 180, // 104: sliverpb.RegistryListValuesReq.Request:type_name -> commonpb.Request - 179, // 105: sliverpb.RegistryValuesList.Response:type_name -> commonpb.Response + 186, // 93: sliverpb.RemoveServiceReq.Request:type_name -> commonpb.Request + 186, // 94: sliverpb.RegistryReadReq.Request:type_name -> commonpb.Request + 185, // 95: sliverpb.RegistryRead.Response:type_name -> commonpb.Response + 186, // 96: sliverpb.RegistryWriteReq.Request:type_name -> commonpb.Request + 185, // 97: sliverpb.RegistryWrite.Response:type_name -> commonpb.Response + 186, // 98: sliverpb.RegistryCreateKeyReq.Request:type_name -> commonpb.Request + 185, // 99: sliverpb.RegistryCreateKey.Response:type_name -> commonpb.Response + 186, // 100: sliverpb.RegistryDeleteKeyReq.Request:type_name -> commonpb.Request + 185, // 101: sliverpb.RegistryDeleteKey.Response:type_name -> commonpb.Response + 186, // 102: sliverpb.RegistrySubKeyListReq.Request:type_name -> commonpb.Request + 185, // 103: sliverpb.RegistrySubKeyList.Response:type_name -> commonpb.Response + 186, // 104: sliverpb.RegistryListValuesReq.Request:type_name -> commonpb.Request + 185, // 105: sliverpb.RegistryValuesList.Response:type_name -> commonpb.Response 156, // 106: sliverpb.TunnelData.rportfwd:type_name -> sliverpb.RPortfwd - 180, // 107: sliverpb.ShellReq.Request:type_name -> commonpb.Request - 179, // 108: sliverpb.Shell.Response:type_name -> commonpb.Response - 180, // 109: sliverpb.PortfwdReq.Request:type_name -> commonpb.Request - 179, // 110: sliverpb.Portfwd.Response:type_name -> commonpb.Response - 180, // 111: sliverpb.SocksData.Request:type_name -> commonpb.Request + 186, // 107: sliverpb.ShellReq.Request:type_name -> commonpb.Request + 185, // 108: sliverpb.Shell.Response:type_name -> commonpb.Response + 186, // 109: sliverpb.PortfwdReq.Request:type_name -> commonpb.Request + 185, // 110: sliverpb.Portfwd.Response:type_name -> commonpb.Response + 186, // 111: sliverpb.SocksData.Request:type_name -> commonpb.Request 1, // 112: sliverpb.PivotStartListenerReq.Type:type_name -> sliverpb.PivotType - 180, // 113: sliverpb.PivotStartListenerReq.Request:type_name -> commonpb.Request - 180, // 114: sliverpb.PivotStopListenerReq.Request:type_name -> commonpb.Request + 186, // 113: sliverpb.PivotStartListenerReq.Request:type_name -> commonpb.Request + 186, // 114: sliverpb.PivotStopListenerReq.Request:type_name -> commonpb.Request 1, // 115: sliverpb.PivotListener.Type:type_name -> sliverpb.PivotType 120, // 116: sliverpb.PivotListener.Pivots:type_name -> sliverpb.NetConnPivot - 179, // 117: sliverpb.PivotListener.Response:type_name -> commonpb.Response + 185, // 117: sliverpb.PivotListener.Response:type_name -> commonpb.Response 117, // 118: sliverpb.PivotPeerEnvelope.Peers:type_name -> sliverpb.PivotPeer 2, // 119: sliverpb.PivotPeerFailure.Type:type_name -> sliverpb.PeerFailureType - 180, // 120: sliverpb.PivotListenersReq.Request:type_name -> commonpb.Request + 186, // 120: sliverpb.PivotListenersReq.Request:type_name -> commonpb.Request 114, // 121: sliverpb.PivotListeners.Listeners:type_name -> sliverpb.PivotListener - 179, // 122: sliverpb.PivotListeners.Response:type_name -> commonpb.Response - 180, // 123: sliverpb.WGPortForwardStartReq.Request:type_name -> commonpb.Request + 185, // 122: sliverpb.PivotListeners.Response:type_name -> commonpb.Response + 186, // 123: sliverpb.WGPortForwardStartReq.Request:type_name -> commonpb.Request 132, // 124: sliverpb.WGPortForward.Forwarder:type_name -> sliverpb.WGTCPForwarder - 179, // 125: sliverpb.WGPortForward.Response:type_name -> commonpb.Response - 180, // 126: sliverpb.WGPortForwardStopReq.Request:type_name -> commonpb.Request - 180, // 127: sliverpb.WGSocksStartReq.Request:type_name -> commonpb.Request + 185, // 125: sliverpb.WGPortForward.Response:type_name -> commonpb.Response + 186, // 126: sliverpb.WGPortForwardStopReq.Request:type_name -> commonpb.Request + 186, // 127: sliverpb.WGSocksStartReq.Request:type_name -> commonpb.Request 133, // 128: sliverpb.WGSocks.Server:type_name -> sliverpb.WGSocksServer - 179, // 129: sliverpb.WGSocks.Response:type_name -> commonpb.Response - 180, // 130: sliverpb.WGSocksStopReq.Request:type_name -> commonpb.Request - 180, // 131: sliverpb.WGTCPForwardersReq.Request:type_name -> commonpb.Request - 180, // 132: sliverpb.WGSocksServersReq.Request:type_name -> commonpb.Request + 185, // 129: sliverpb.WGSocks.Response:type_name -> commonpb.Response + 186, // 130: sliverpb.WGSocksStopReq.Request:type_name -> commonpb.Request + 186, // 131: sliverpb.WGTCPForwardersReq.Request:type_name -> commonpb.Request + 186, // 132: sliverpb.WGSocksServersReq.Request:type_name -> commonpb.Request 133, // 133: sliverpb.WGSocksServers.Servers:type_name -> sliverpb.WGSocksServer - 179, // 134: sliverpb.WGSocksServers.Response:type_name -> commonpb.Response + 185, // 134: sliverpb.WGSocksServers.Response:type_name -> commonpb.Response 132, // 135: sliverpb.WGTCPForwarders.Forwarders:type_name -> sliverpb.WGTCPForwarder - 179, // 136: sliverpb.WGTCPForwarders.Response:type_name -> commonpb.Response - 180, // 137: sliverpb.ReconfigureReq.Request:type_name -> commonpb.Request - 179, // 138: sliverpb.Reconfigure.Response:type_name -> commonpb.Response - 180, // 139: sliverpb.PollIntervalReq.Request:type_name -> commonpb.Request - 179, // 140: sliverpb.PollInterval.Response:type_name -> commonpb.Response - 180, // 141: sliverpb.SSHCommandReq.Request:type_name -> commonpb.Request - 179, // 142: sliverpb.SSHCommand.Response:type_name -> commonpb.Response - 180, // 143: sliverpb.GetPrivsReq.Request:type_name -> commonpb.Request + 185, // 136: sliverpb.WGTCPForwarders.Response:type_name -> commonpb.Response + 186, // 137: sliverpb.ReconfigureReq.Request:type_name -> commonpb.Request + 185, // 138: sliverpb.Reconfigure.Response:type_name -> commonpb.Response + 186, // 139: sliverpb.PollIntervalReq.Request:type_name -> commonpb.Request + 185, // 140: sliverpb.PollInterval.Response:type_name -> commonpb.Response + 186, // 141: sliverpb.SSHCommandReq.Request:type_name -> commonpb.Request + 185, // 142: sliverpb.SSHCommand.Response:type_name -> commonpb.Response + 186, // 143: sliverpb.GetPrivsReq.Request:type_name -> commonpb.Request 143, // 144: sliverpb.GetPrivs.PrivInfo:type_name -> sliverpb.WindowsPrivilegeEntry - 179, // 145: sliverpb.GetPrivs.Response:type_name -> commonpb.Response - 180, // 146: sliverpb.RegisterExtensionReq.Request:type_name -> commonpb.Request - 179, // 147: sliverpb.RegisterExtension.Response:type_name -> commonpb.Response - 180, // 148: sliverpb.CallExtensionReq.Request:type_name -> commonpb.Request - 179, // 149: sliverpb.CallExtension.Response:type_name -> commonpb.Response - 180, // 150: sliverpb.ListExtensionsReq.Request:type_name -> commonpb.Request - 179, // 151: sliverpb.ListExtensions.Response:type_name -> commonpb.Response - 180, // 152: sliverpb.RportFwdStopListenerReq.Request:type_name -> commonpb.Request - 180, // 153: sliverpb.RportFwdStartListenerReq.Request:type_name -> commonpb.Request - 179, // 154: sliverpb.RportFwdListener.Response:type_name -> commonpb.Response + 185, // 145: sliverpb.GetPrivs.Response:type_name -> commonpb.Response + 186, // 146: sliverpb.RegisterExtensionReq.Request:type_name -> commonpb.Request + 185, // 147: sliverpb.RegisterExtension.Response:type_name -> commonpb.Response + 186, // 148: sliverpb.CallExtensionReq.Request:type_name -> commonpb.Request + 185, // 149: sliverpb.CallExtension.Response:type_name -> commonpb.Response + 186, // 150: sliverpb.ListExtensionsReq.Request:type_name -> commonpb.Request + 185, // 151: sliverpb.ListExtensions.Response:type_name -> commonpb.Response + 186, // 152: sliverpb.RportFwdStopListenerReq.Request:type_name -> commonpb.Request + 186, // 153: sliverpb.RportFwdStartListenerReq.Request:type_name -> commonpb.Request + 185, // 154: sliverpb.RportFwdListener.Response:type_name -> commonpb.Response 153, // 155: sliverpb.RportFwdListeners.Listeners:type_name -> sliverpb.RportFwdListener - 179, // 156: sliverpb.RportFwdListeners.Response:type_name -> commonpb.Response - 180, // 157: sliverpb.RportFwdListenersReq.Request:type_name -> commonpb.Request - 179, // 158: sliverpb.RPortfwd.Response:type_name -> commonpb.Response - 180, // 159: sliverpb.RPortfwdReq.Request:type_name -> commonpb.Request - 180, // 160: sliverpb.ChmodReq.Request:type_name -> commonpb.Request - 179, // 161: sliverpb.Chmod.Response:type_name -> commonpb.Response - 180, // 162: sliverpb.ChownReq.Request:type_name -> commonpb.Request - 179, // 163: sliverpb.Chown.Response:type_name -> commonpb.Response - 180, // 164: sliverpb.ChtimesReq.Request:type_name -> commonpb.Request - 179, // 165: sliverpb.Chtimes.Response:type_name -> commonpb.Response - 180, // 166: sliverpb.MemfilesListReq.Request:type_name -> commonpb.Request - 180, // 167: sliverpb.MemfilesAddReq.Request:type_name -> commonpb.Request - 179, // 168: sliverpb.MemfilesAdd.Response:type_name -> commonpb.Response - 180, // 169: sliverpb.MemfilesRmReq.Request:type_name -> commonpb.Request - 179, // 170: sliverpb.MemfilesRm.Response:type_name -> commonpb.Response - 180, // 171: sliverpb.RegisterWasmExtensionReq.Request:type_name -> commonpb.Request - 179, // 172: sliverpb.RegisterWasmExtension.Response:type_name -> commonpb.Response - 180, // 173: sliverpb.DeregisterWasmExtensionReq.Request:type_name -> commonpb.Request - 180, // 174: sliverpb.ListWasmExtensionsReq.Request:type_name -> commonpb.Request - 179, // 175: sliverpb.ListWasmExtensions.Response:type_name -> commonpb.Response - 178, // 176: sliverpb.ExecWasmExtensionReq.MemFS:type_name -> sliverpb.ExecWasmExtensionReq.MemFSEntry - 180, // 177: sliverpb.ExecWasmExtensionReq.Request:type_name -> commonpb.Request - 179, // 178: sliverpb.ExecWasmExtension.Response:type_name -> commonpb.Response - 40, // 179: sliverpb.Grep.ResultsEntry.value:type_name -> sliverpb.GrepResultsForFile - 180, // [180:180] is the sub-list for method output_type - 180, // [180:180] is the sub-list for method input_type - 180, // [180:180] is the sub-list for extension type_name - 180, // [180:180] is the sub-list for extension extendee - 0, // [0:180] is the sub-list for field type_name + 185, // 156: sliverpb.RportFwdListeners.Response:type_name -> commonpb.Response + 186, // 157: sliverpb.RportFwdListenersReq.Request:type_name -> commonpb.Request + 185, // 158: sliverpb.RPortfwd.Response:type_name -> commonpb.Response + 186, // 159: sliverpb.RPortfwdReq.Request:type_name -> commonpb.Request + 186, // 160: sliverpb.ChmodReq.Request:type_name -> commonpb.Request + 185, // 161: sliverpb.Chmod.Response:type_name -> commonpb.Response + 186, // 162: sliverpb.ChownReq.Request:type_name -> commonpb.Request + 185, // 163: sliverpb.Chown.Response:type_name -> commonpb.Response + 186, // 164: sliverpb.ChtimesReq.Request:type_name -> commonpb.Request + 185, // 165: sliverpb.Chtimes.Response:type_name -> commonpb.Response + 186, // 166: sliverpb.MemfilesListReq.Request:type_name -> commonpb.Request + 186, // 167: sliverpb.MemfilesAddReq.Request:type_name -> commonpb.Request + 185, // 168: sliverpb.MemfilesAdd.Response:type_name -> commonpb.Response + 186, // 169: sliverpb.MemfilesRmReq.Request:type_name -> commonpb.Request + 185, // 170: sliverpb.MemfilesRm.Response:type_name -> commonpb.Response + 186, // 171: sliverpb.RegisterWasmExtensionReq.Request:type_name -> commonpb.Request + 185, // 172: sliverpb.RegisterWasmExtension.Response:type_name -> commonpb.Response + 186, // 173: sliverpb.DeregisterWasmExtensionReq.Request:type_name -> commonpb.Request + 186, // 174: sliverpb.ListWasmExtensionsReq.Request:type_name -> commonpb.Request + 185, // 175: sliverpb.ListWasmExtensions.Response:type_name -> commonpb.Response + 184, // 176: sliverpb.ExecWasmExtensionReq.MemFS:type_name -> sliverpb.ExecWasmExtensionReq.MemFSEntry + 186, // 177: sliverpb.ExecWasmExtensionReq.Request:type_name -> commonpb.Request + 185, // 178: sliverpb.ExecWasmExtension.Response:type_name -> commonpb.Response + 186, // 179: sliverpb.ServicesReq.Request:type_name -> commonpb.Request + 89, // 180: sliverpb.ServiceDetailReq.ServiceInfo:type_name -> sliverpb.ServiceInfoReq + 186, // 181: sliverpb.ServiceDetailReq.Request:type_name -> commonpb.Request + 178, // 182: sliverpb.Services.Details:type_name -> sliverpb.ServiceDetails + 185, // 183: sliverpb.Services.Response:type_name -> commonpb.Response + 178, // 184: sliverpb.ServiceDetail.Detail:type_name -> sliverpb.ServiceDetails + 185, // 185: sliverpb.ServiceDetail.Response:type_name -> commonpb.Response + 89, // 186: sliverpb.StartExistingServiceReq.ServiceInfo:type_name -> sliverpb.ServiceInfoReq + 186, // 187: sliverpb.StartExistingServiceReq.Request:type_name -> commonpb.Request + 40, // 188: sliverpb.Grep.ResultsEntry.value:type_name -> sliverpb.GrepResultsForFile + 189, // [189:189] is the sub-list for method output_type + 189, // [189:189] is the sub-list for method input_type + 189, // [189:189] is the sub-list for extension type_name + 189, // [189:189] is the sub-list for extension extendee + 0, // [0:189] is the sub-list for field type_name } func init() { file_sliverpb_sliver_proto_init() } @@ -15478,7 +15921,79 @@ func file_sliverpb_sliver_proto_init() { return nil } } + file_sliverpb_sliver_proto_msgTypes[173].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServicesReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } file_sliverpb_sliver_proto_msgTypes[174].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServiceDetailReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sliverpb_sliver_proto_msgTypes[175].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServiceDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sliverpb_sliver_proto_msgTypes[176].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Services); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sliverpb_sliver_proto_msgTypes[177].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServiceDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sliverpb_sliver_proto_msgTypes[178].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartExistingServiceReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sliverpb_sliver_proto_msgTypes[180].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SockTabEntry_SockAddr); i { case 0: return &v.state @@ -15497,7 +16012,7 @@ func file_sliverpb_sliver_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_sliverpb_sliver_proto_rawDesc, NumEnums: 3, - NumMessages: 176, + NumMessages: 182, NumExtensions: 0, NumServices: 0, }, diff --git a/protobuf/sliverpb/sliver.proto b/protobuf/sliverpb/sliver.proto index f862a4e711..bfb8160e1f 100644 --- a/protobuf/sliverpb/sliver.proto +++ b/protobuf/sliverpb/sliver.proto @@ -1288,3 +1288,44 @@ message ExecWasmExtension { commonpb.Response Response = 9; } + +message ServicesReq { + string Hostname = 1; + + commonpb.Request Request = 9; +} + +message ServiceDetailReq { + ServiceInfoReq ServiceInfo = 1; + + commonpb.Request Request = 9; +} + +message ServiceDetails { + string Name = 1; + string DisplayName = 2; + string Description = 3; + string Status = 4; + string StartupType = 5; + string BinPath = 6; + string Account = 7; +} + +message Services { + repeated ServiceDetails Details = 1; + string Error = 2; + + commonpb.Response Response = 9; +} + +message ServiceDetail { + ServiceDetails Detail = 1; + + commonpb.Response Response = 9; +} + +message StartExistingServiceReq { + ServiceInfoReq ServiceInfo = 1; + + commonpb.Request Request = 9; +} \ No newline at end of file diff --git a/server/rpc/rpc-service.go b/server/rpc/rpc-service.go index d4bd0b9a36..a47fb5c9e3 100644 --- a/server/rpc/rpc-service.go +++ b/server/rpc/rpc-service.go @@ -7,6 +7,25 @@ import ( "github.com/bishopfox/sliver/protobuf/sliverpb" ) +// Services - List and control services +func (rpc *Server) Services(ctx context.Context, req *sliverpb.ServicesReq) (*sliverpb.Services, error) { + resp := &sliverpb.Services{Response: &commonpb.Response{}} + err := rpc.GenericHandler(req, resp) + if err != nil { + return nil, err + } + return resp, nil +} + +func (rpc *Server) ServiceDetail(ctx context.Context, req *sliverpb.ServiceDetailReq) (*sliverpb.ServiceDetail, error) { + resp := &sliverpb.ServiceDetail{Response: &commonpb.Response{}} + err := rpc.GenericHandler(req, resp) + if err != nil { + return nil, err + } + return resp, nil +} + // StartService creates and starts a Windows service on a remote host func (rpc *Server) StartService(ctx context.Context, req *sliverpb.StartServiceReq) (*sliverpb.ServiceInfo, error) { resp := &sliverpb.ServiceInfo{Response: &commonpb.Response{}} @@ -17,6 +36,15 @@ func (rpc *Server) StartService(ctx context.Context, req *sliverpb.StartServiceR return resp, nil } +func (rpc *Server) StartExistingService(ctx context.Context, req *sliverpb.StartExistingServiceReq) (*sliverpb.ServiceInfo, error) { + resp := &sliverpb.ServiceInfo{Response: &commonpb.Response{}} + err := rpc.GenericHandler(req, resp) + if err != nil { + return nil, err + } + return resp, nil +} + // StopService stops a remote service func (rpc *Server) StopService(ctx context.Context, req *sliverpb.StopServiceReq) (*sliverpb.ServiceInfo, error) { resp := &sliverpb.ServiceInfo{Response: &commonpb.Response{}} From 0bfa34357e7e2c02f70f3f4c8ea2f3436ce5fa33 Mon Sep 17 00:00:00 2001 From: Raf <84349012+RafBishopFox@users.noreply.github.com> Date: Mon, 15 Jan 2024 11:08:46 -0500 Subject: [PATCH 2/3] Adding help for services command --- client/command/help/long-help.go | 6 ++++++ client/command/processes/commands.go | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/client/command/help/long-help.go b/client/command/help/long-help.go index b59468d0c2..a3bdb104d7 100644 --- a/client/command/help/long-help.go +++ b/client/command/help/long-help.go @@ -94,6 +94,7 @@ var ( consts.SSHStr: sshHelp, consts.DLLHijackStr: dllHijackHelp, consts.GetPrivsStr: getPrivsHelp, + consts.ServicesStr: servicesHelp, // Loot consts.LootStr: lootHelp, @@ -1293,6 +1294,11 @@ Searches can be filtered using the following patterns: If you need to match a special character (*, ?, '-', '[', ']', '\\'), place '\\' in front of it (example: \\?). On Windows, escaping is disabled. Instead, '\\' is treated as path separator.` + + servicesHelp = `[[.Bold]]Command:[[.Normal]] services [-H ] +[[.Bold]]About:[[.Normal]] Get information about services and control them (start, stop). + +To get information about services, you need to be an authenticated user on the system or domain. To control services, you need administrator or higher privileges.` ) const ( diff --git a/client/command/processes/commands.go b/client/command/processes/commands.go index 4a889dc0a4..97d2a95b64 100644 --- a/client/command/processes/commands.go +++ b/client/command/processes/commands.go @@ -90,7 +90,7 @@ func Commands(con *console.SliverClient) []*cobra.Command { serviceInfoCmd := &cobra.Command{ Use: consts.ServicesInfoStr, Short: "Get detailed information about a single service", - Long: help.GetHelpFor([]string{consts.ServicesStr + "_" + consts.ServicesInfoStr}), + Long: help.GetHelpFor([]string{consts.ServicesStr}), Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { ServiceInfoCmd(cmd, con, args) @@ -105,7 +105,7 @@ func Commands(con *console.SliverClient) []*cobra.Command { serviceStopCmd := &cobra.Command{ Use: consts.ServicesStopStr, Short: "Stop a service on the local machine or a remote machine", - Long: help.GetHelpFor([]string{consts.ServicesStr + "_" + consts.ServicesStopStr}), + Long: help.GetHelpFor([]string{consts.ServicesStr}), Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { ServiceStopCmd(cmd, con, args) @@ -120,7 +120,7 @@ func Commands(con *console.SliverClient) []*cobra.Command { serviceStartCmd := &cobra.Command{ Use: consts.ServicesStartStr, Short: "Start a service on the local machine or a remote machine", - Long: help.GetHelpFor([]string{consts.ServicesStr + "_" + consts.ServicesStartStr}), + Long: help.GetHelpFor([]string{consts.ServicesStr}), Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { ServiceStartCmd(cmd, con, args) From f50a1ed243d01f012b52ee98480e2939952840a1 Mon Sep 17 00:00:00 2001 From: Raf <84349012+RafBishopFox@users.noreply.github.com> Date: Mon, 15 Jan 2024 13:30:57 -0500 Subject: [PATCH 3/3] services: Moving strings from implant to client, renaming StartExistingService to StartServiceByName, removing unnecessary test --- client/command/processes/services.go | 71 +++- implant/sliver/handlers/handlers_windows.go | 45 ++- implant/sliver/service/service_windows.go | 71 +--- protobuf/rpcpb/services.pb.go | 404 ++++++++++---------- protobuf/rpcpb/services.proto | 2 +- protobuf/rpcpb/services_grpc.pb.go | 26 +- protobuf/sliverpb/constants.go | 6 +- protobuf/sliverpb/sliver.pb.go | 114 +++--- protobuf/sliverpb/sliver.proto | 7 +- server/rpc/rpc-service.go | 2 +- 10 files changed, 389 insertions(+), 359 deletions(-) diff --git a/client/command/processes/services.go b/client/command/processes/services.go index db18146306..9493c1074e 100644 --- a/client/command/processes/services.go +++ b/client/command/processes/services.go @@ -15,6 +15,21 @@ import ( "golang.org/x/term" ) +const ( + serviceStopped = 1 + serviceStartPending = 2 + serviceStopPending = 3 + serviceRunning = 4 + serviceContinuePending = 5 + servicePausePending = 6 + servicePaused = 7 + serviceBootStart = 0 + serviceSystemStart = 1 + serviceAutoStart = 2 + serviceDemandStart = 3 + serviceDisabled = 4 +) + func ServicesCmd(cmd *cobra.Command, con *console.SliverClient, args []string) { session, beacon := con.ActiveTarget.GetInteractive() if session == nil && beacon == nil { @@ -181,7 +196,7 @@ func ServiceStartCmd(cmd *cobra.Command, con *console.SliverClient, args []strin return } - startService, err := con.Rpc.StartExistingService(context.Background(), &sliverpb.StartExistingServiceReq{ + startService, err := con.Rpc.StartServiceByName(context.Background(), &sliverpb.StartServiceByNameReq{ ServiceInfo: &sliverpb.ServiceInfoReq{Hostname: hostname, ServiceName: serviceName}, Request: con.ActiveTarget.Request(cmd), }) @@ -223,6 +238,44 @@ func ServiceStartCmd(cmd *cobra.Command, con *console.SliverClient, args []strin } } +func translateServiceStatus(status uint32) string { + switch status { + case serviceStopped: + return "Stopped" + case serviceStartPending: + return "Start Pending" + case serviceStopPending: + return "Stop Pending" + case serviceRunning: + return "Running" + case serviceContinuePending: + return "Continue Pending" + case servicePausePending: + return "Pause Pending" + case servicePaused: + return "Paused" + default: + return fmt.Sprintf("Unknown (status type: %d)", status) + } +} + +func translateServiceStartup(startup uint32) string { + switch startup { + case serviceBootStart: + return "Device (System Loader; Boot)" + case serviceSystemStart: + return "Device (IOInitSystem; System)" + case serviceAutoStart: + return "Automatic" + case serviceDemandStart: + return "Manual" + case serviceDisabled: + return "Disabled" + default: + return fmt.Sprintf("Unknown (Type %d)", startup) + } +} + func PrintServices(serviceInfo *sliverpb.Services, con *console.SliverClient) { // Get terminal width width, _, err := term.GetSize(0) @@ -263,13 +316,15 @@ func PrintServices(serviceInfo *sliverpb.Services, con *console.SliverClient) { }) for _, service := range serviceInfo.Details { + status := translateServiceStatus(service.Status) var row table.Row if wideTermWidth { + startupType := translateServiceStartup(service.StartupType) row = table.Row{ service.Name, service.DisplayName, - service.Status, - service.StartupType, + status, + startupType, service.BinPath, service.Account, } @@ -277,7 +332,7 @@ func PrintServices(serviceInfo *sliverpb.Services, con *console.SliverClient) { row = table.Row{ service.Name, service.DisplayName, - service.Status, + status, } } tw.AppendRow(row) @@ -310,6 +365,10 @@ func PrintServiceDetail(serviceDetail *sliverpb.ServiceDetail, con *console.Sliv con.Println("Description: ", detail.Description) con.Println("Account the service runs under: ", detail.Account) con.Println("Binary Path: ", detail.BinPath) - con.Println("Startup type: ", detail.StartupType) - con.Println("Status: ", detail.Status) + con.Println("Startup type: ", translateServiceStartup(detail.StartupType)) + if serviceDetail.Message != "" { + con.Println("Status: ", serviceDetail.Message) + } else { + con.Println("Status: ", translateServiceStatus(detail.Status)) + } } diff --git a/implant/sliver/handlers/handlers_windows.go b/implant/sliver/handlers/handlers_windows.go index 9ce9cf73be..61f88347a0 100644 --- a/implant/sliver/handlers/handlers_windows.go +++ b/implant/sliver/handlers/handlers_windows.go @@ -75,22 +75,22 @@ var ( sliverpb.MsgCurrentTokenOwnerReq: currentTokenOwnerHandler, // Platform specific - sliverpb.MsgIfconfigReq: ifconfigHandler, - sliverpb.MsgScreenshotReq: screenshotHandler, - sliverpb.MsgSideloadReq: sideloadHandler, - sliverpb.MsgNetstatReq: netstatHandler, - sliverpb.MsgMakeTokenReq: makeTokenHandler, - sliverpb.MsgPsReq: psHandler, - sliverpb.MsgTerminateReq: terminateHandler, - sliverpb.MsgRegistryReadReq: regReadHandler, - sliverpb.MsgRegistryWriteReq: regWriteHandler, - sliverpb.MsgRegistryCreateKeyReq: regCreateKeyHandler, - sliverpb.MsgRegistryDeleteKeyReq: regDeleteKeyHandler, - sliverpb.MsgRegistrySubKeysListReq: regSubKeysListHandler, - sliverpb.MsgRegistryListValuesReq: regValuesListHandler, - sliverpb.MsgServicesReq: servicesListHandler, - sliverpb.MsgServiceDetailReq: serviceDetailHandler, - sliverpb.MsgStartExistingServiceReq: startExistingServiceHandler, + sliverpb.MsgIfconfigReq: ifconfigHandler, + sliverpb.MsgScreenshotReq: screenshotHandler, + sliverpb.MsgSideloadReq: sideloadHandler, + sliverpb.MsgNetstatReq: netstatHandler, + sliverpb.MsgMakeTokenReq: makeTokenHandler, + sliverpb.MsgPsReq: psHandler, + sliverpb.MsgTerminateReq: terminateHandler, + sliverpb.MsgRegistryReadReq: regReadHandler, + sliverpb.MsgRegistryWriteReq: regWriteHandler, + sliverpb.MsgRegistryCreateKeyReq: regCreateKeyHandler, + sliverpb.MsgRegistryDeleteKeyReq: regDeleteKeyHandler, + sliverpb.MsgRegistrySubKeysListReq: regSubKeysListHandler, + sliverpb.MsgRegistryListValuesReq: regValuesListHandler, + sliverpb.MsgServicesReq: servicesListHandler, + sliverpb.MsgServiceDetailReq: serviceDetailHandler, + sliverpb.MsgStartServiceByNameReq: startServiceByNameHandler, // Generic sliverpb.MsgPing: pingHandler, @@ -598,14 +598,14 @@ func stopService(data []byte, resp RPCResponse) { resp(data, err) } -func startExistingServiceHandler(data []byte, resp RPCResponse) { - startServiceReq := &sliverpb.StartExistingServiceReq{} +func startServiceByNameHandler(data []byte, resp RPCResponse) { + startServiceReq := &sliverpb.StartServiceByNameReq{} err := proto.Unmarshal(data, startServiceReq) if err != nil { return } - err = service.StartExistingService(startServiceReq.ServiceInfo.Hostname, startServiceReq.ServiceInfo.ServiceName) + err = service.StartServiceByName(startServiceReq.ServiceInfo.Hostname, startServiceReq.ServiceInfo.ServiceName) svcInfo := &sliverpb.ServiceInfo{} if err != nil { svcInfo.Response = &commonpb.Response{ @@ -837,7 +837,12 @@ func serviceDetailHandler(data []byte, resp RPCResponse) { Response: &commonpb.Response{}, } if err != nil { - serviceDetailResp.Response.Err = err.Error() + if serviceDetail != nil { + // Then we had a non-fatal error + serviceDetailResp.Message = err.Error() + } else { + serviceDetailResp.Response.Err = err.Error() + } } data, err = proto.Marshal(serviceDetailResp) diff --git a/implant/sliver/service/service_windows.go b/implant/sliver/service/service_windows.go index 6015d2ffdf..021c13f5b3 100644 --- a/implant/sliver/service/service_windows.go +++ b/implant/sliver/service/service_windows.go @@ -116,18 +116,12 @@ func RemoveService(hostname string, serviceName string) error { */ func connectToServiceManager(hostname string, permissions uint32) (*mgr.Mgr, error) { - var connectHost *uint16 - - if hostname == "localhost" { - /* - According to Win32 API docs, if the machine name passed to OpenSCManager - is NULL or empty, a connection will be opened to the local machine - https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-openscmanagera - */ - connectHost = nil - } else { - connectHost = windows.StringToUTF16Ptr(hostname) - } + /* + According to Win32 API docs, if the machine name passed to OpenSCManager + is NULL or empty, a connection will be opened to the local machine + https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-openscmanagera + */ + connectHost := windows.StringToUTF16Ptr(hostname) handle, err := windows.OpenSCManager(connectHost, nil, permissions) if err != nil { return nil, err @@ -148,18 +142,11 @@ func buildServiceDetail(serviceName string, config mgr.Config) *sliverpb.Service detail.DisplayName = config.DisplayName detail.Description = config.Description - switch config.StartType { - case mgr.StartManual: - detail.StartupType = "Manual" - case mgr.StartAutomatic: - detail.StartupType = "Automatic" - case mgr.StartDisabled: - detail.StartupType = "Disabled" - } + detail.StartupType = config.StartType detail.BinPath = config.BinaryPathName detail.Account = config.ServiceStartName // Will hopefully be filled in later - detail.Status = "Unknown" + detail.Status = 0 return detail } @@ -197,22 +184,7 @@ func ListServices(hostName string) ([]*sliverpb.ServiceDetails, error) { servicesList = append(servicesList, serviceInfo) continue } - switch serviceStatus.State { - case svc.Stopped: - serviceInfo.Status = "Stopped" - case svc.StartPending: - serviceInfo.Status = "Start Pending" - case svc.StopPending: - serviceInfo.Status = "Stop Pending" - case svc.Running: - serviceInfo.Status = "Running" - case svc.ContinuePending: - serviceInfo.Status = "Continue Pending" - case svc.PausePending: - serviceInfo.Status = "Pause Pending" - case svc.Paused: - serviceInfo.Status = "Paused" - } + serviceInfo.Status = uint32(serviceStatus.State) servicesList = append(servicesList, serviceInfo) } @@ -242,32 +214,15 @@ func GetServiceDetail(hostName string, serviceName string) (*sliverpb.ServiceDet serviceDetail := buildServiceDetail(serviceName, serviceConfig) serviceStatus, err := serviceHandle.Query() if err != nil { - serviceDetail.Status = fmt.Sprintf("Unknown (could not retrieve: %s)", err.Error()) + serviceDetail.Status = 0 // Even though we encountered an error, it was not fatal (we still got some information about the service) - return serviceDetail, nil + return serviceDetail, fmt.Errorf("Unknown (could not retrieve: %s)", err.Error()) } - - switch serviceStatus.State { - case svc.Stopped: - serviceDetail.Status = "Stopped" - case svc.StartPending: - serviceDetail.Status = "Start Pending" - case svc.StopPending: - serviceDetail.Status = "Stop Pending" - case svc.Running: - serviceDetail.Status = "Running" - case svc.ContinuePending: - serviceDetail.Status = "Continue Pending" - case svc.PausePending: - serviceDetail.Status = "Pause Pending" - case svc.Paused: - serviceDetail.Status = "Paused" - } - + serviceDetail.Status = uint32(serviceStatus.State) return serviceDetail, nil } -func StartExistingService(hostName string, serviceName string) error { +func StartServiceByName(hostName string, serviceName string) error { manager, err := connectToServiceManager(hostName, ConnectServiceManagerPermissions) if err != nil { return err diff --git a/protobuf/rpcpb/services.pb.go b/protobuf/rpcpb/services.pb.go index 5275dfe205..3514b9dd29 100644 --- a/protobuf/rpcpb/services.pb.go +++ b/protobuf/rpcpb/services.pb.go @@ -31,7 +31,7 @@ var file_rpcpb_services_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2f, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x32, 0xe5, 0x54, 0x0a, 0x09, 0x53, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x52, 0x50, 0x43, + 0x74, 0x6f, 0x32, 0xe1, 0x54, 0x0a, 0x09, 0x53, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x52, 0x50, 0x43, 0x12, 0x30, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, @@ -507,212 +507,212 @@ var file_rpcpb_services_proto_rawDesc = []byte{ 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x12, 0x50, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, - 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4e, 0x0a, 0x12, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x4c, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x11, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x6f, - 0x70, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x4c, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4e, 0x0a, 0x15, 0x50, 0x69, - 0x76, 0x6f, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, - 0x69, 0x76, 0x6f, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, - 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x0a, 0x50, 0x69, - 0x76, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, - 0x40, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x19, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x3e, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x70, + 0x69, 0x6c, 0x12, 0x4c, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x73, 0x6c, 0x69, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x4e, 0x0a, 0x12, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, + 0x12, 0x44, 0x0a, 0x11, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x4c, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, + 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4e, 0x0a, 0x15, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, + 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x73, + 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x0a, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x47, + 0x72, 0x61, 0x70, 0x68, 0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, + 0x2e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x40, 0x0a, 0x0c, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3e, 0x0a, + 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x2e, 0x73, + 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x42, 0x0a, + 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1a, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x42, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, - 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x0a, 0x09, 0x4d, 0x61, 0x6b, 0x65, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x16, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4d, 0x61, - 0x6b, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, - 0x2d, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x10, 0x2e, 0x73, 0x6c, 0x69, 0x76, - 0x65, 0x72, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, - 0x0a, 0x06, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x13, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, - 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, - 0x35, 0x0a, 0x08, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x15, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, - 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x6e, - 0x73, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x35, 0x0a, 0x08, 0x42, 0x61, 0x63, 0x6b, 0x64, 0x6f, - 0x6f, 0x72, 0x12, 0x15, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x42, 0x61, - 0x63, 0x6b, 0x64, 0x6f, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x64, 0x6f, 0x6f, 0x72, 0x12, 0x41, 0x0a, - 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x52, 0x65, 0x61, 0x64, 0x12, 0x19, 0x2e, - 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x52, 0x65, 0x61, 0x64, - 0x12, 0x44, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, + 0x6f, 0x12, 0x38, 0x0a, 0x09, 0x4d, 0x61, 0x6b, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x06, 0x47, + 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x10, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, + 0x2e, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, 0x0a, 0x06, 0x53, 0x65, + 0x74, 0x45, 0x6e, 0x76, 0x12, 0x13, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x73, 0x6c, 0x69, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x35, 0x0a, 0x08, 0x55, + 0x6e, 0x73, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x15, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x12, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x45, + 0x6e, 0x76, 0x12, 0x35, 0x0a, 0x08, 0x42, 0x61, 0x63, 0x6b, 0x64, 0x6f, 0x6f, 0x72, 0x12, 0x15, + 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x64, 0x6f, + 0x6f, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, + 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x64, 0x6f, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x0c, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x52, 0x65, 0x61, 0x64, 0x12, 0x19, 0x2e, 0x73, 0x6c, 0x69, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x52, 0x65, 0x61, + 0x64, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x52, 0x65, 0x61, 0x64, 0x12, 0x44, 0x0a, 0x0d, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x2e, + 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x12, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4b, 0x65, 0x79, 0x12, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x54, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, - 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x54, 0x0a, 0x13, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x4b, 0x65, 0x79, - 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x53, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, - 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x53, 0x53, 0x48, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, - 0x62, 0x2e, 0x53, 0x53, 0x48, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, - 0x14, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x53, 0x48, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x48, 0x69, 0x6a, 0x61, 0x63, 0x6b, 0x44, - 0x4c, 0x4c, 0x12, 0x16, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x44, 0x6c, - 0x6c, 0x48, 0x69, 0x6a, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x44, 0x6c, 0x6c, 0x48, 0x69, 0x6a, 0x61, 0x63, 0x6b, 0x12, - 0x35, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x73, 0x12, 0x15, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x69, 0x76, 0x73, 0x12, 0x57, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, - 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, - 0x22, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, - 0x46, 0x77, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, - 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, - 0x53, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x65, 0x72, 0x73, 0x12, 0x55, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x70, 0x6f, 0x72, - 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x21, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, - 0x53, 0x74, 0x6f, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, + 0x79, 0x53, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x53, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x12, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x53, 0x53, 0x48, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x12, 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x53, + 0x48, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x53, 0x48, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x12, 0x38, 0x0a, 0x09, 0x48, 0x69, 0x6a, 0x61, 0x63, 0x6b, 0x44, 0x4c, 0x4c, 0x12, 0x16, + 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x44, 0x6c, 0x6c, 0x48, 0x69, 0x6a, + 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, + 0x62, 0x2e, 0x44, 0x6c, 0x6c, 0x48, 0x69, 0x6a, 0x61, 0x63, 0x6b, 0x12, 0x35, 0x0a, 0x08, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x73, 0x12, 0x15, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x12, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, + 0x76, 0x73, 0x12, 0x57, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x70, 0x6f, 0x72, 0x74, + 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x22, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, - 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x0b, 0x4f, - 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x1a, 0x15, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x73, - 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x12, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, + 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x14, 0x47, + 0x65, 0x74, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x73, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, + 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, + 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, + 0x12, 0x55, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, + 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x21, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x53, 0x74, 0x6f, 0x70, + 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x77, 0x64, 0x4c, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x6e, 0x53, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x15, 0x2e, + 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x0f, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x50, 0x0a, + 0x11, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x44, 0x0a, 0x0d, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x6c, 0x6c, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, + 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5c, + 0x0a, 0x15, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x57, 0x61, 0x73, 0x6d, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x57, + 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x12, + 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x50, 0x0a, 0x11, 0x45, 0x78, 0x65, 0x63, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, - 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x62, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, - 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0d, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, - 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x1a, 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x6c, 0x6c, - 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x0e, 0x4c, 0x69, 0x73, - 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x57, 0x61, - 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x57, - 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, - 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x53, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, - 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, - 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x50, 0x0a, 0x11, 0x45, 0x78, 0x65, 0x63, 0x57, 0x61, 0x73, - 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x12, 0x57, 0x47, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1f, 0x2e, - 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, 0x46, - 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x17, - 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, - 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x4c, 0x0a, 0x11, 0x57, 0x47, 0x53, 0x74, 0x6f, - 0x70, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1e, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, - 0x72, 0x77, 0x61, 0x72, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, - 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x3c, 0x0a, 0x0c, 0x57, 0x47, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x19, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x57, 0x47, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, - 0x1a, 0x11, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, - 0x63, 0x6b, 0x73, 0x12, 0x3a, 0x0a, 0x0b, 0x57, 0x47, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x6f, 0x63, - 0x6b, 0x73, 0x12, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, - 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, + 0x62, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x57, 0x61, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x12, 0x57, 0x47, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, + 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1f, 0x2e, 0x73, 0x6c, 0x69, 0x76, + 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, + 0x72, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, + 0x61, 0x72, 0x64, 0x12, 0x4c, 0x0a, 0x11, 0x57, 0x47, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x72, + 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1e, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, + 0x64, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x50, 0x6f, 0x72, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, + 0x64, 0x12, 0x3c, 0x0a, 0x0c, 0x57, 0x47, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x6f, 0x63, 0x6b, + 0x73, 0x12, 0x19, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, + 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, - 0x4b, 0x0a, 0x10, 0x57, 0x47, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, - 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, - 0x47, 0x54, 0x43, 0x50, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x19, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x54, - 0x43, 0x50, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4b, 0x0a, 0x12, - 0x57, 0x47, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, - 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, 0x63, - 0x6b, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x05, 0x53, 0x68, 0x65, - 0x6c, 0x6c, 0x12, 0x12, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x68, - 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, - 0x62, 0x2e, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x12, 0x32, 0x0a, 0x07, 0x50, 0x6f, 0x72, 0x74, 0x66, - 0x77, 0x64, 0x12, 0x14, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x6f, - 0x72, 0x74, 0x66, 0x77, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x77, 0x64, 0x12, 0x2f, 0x0a, 0x0b, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x0f, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x1a, 0x0f, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x2e, 0x0a, 0x0a, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x0f, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x0a, - 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x13, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x44, 0x61, 0x74, 0x61, 0x1a, - 0x13, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, - 0x44, 0x61, 0x74, 0x61, 0x28, 0x01, 0x30, 0x01, 0x12, 0x32, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x10, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x1a, 0x10, 0x2e, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x30, 0x0a, 0x0b, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x10, 0x2e, 0x73, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x1a, 0x0f, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, - 0x0a, 0x0a, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x2e, 0x73, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, - 0x74, 0x61, 0x1a, 0x14, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, - 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x28, 0x01, 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x06, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, - 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x70, 0x62, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x69, 0x73, 0x68, 0x6f, 0x70, 0x66, - 0x6f, 0x78, 0x2f, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x72, 0x70, 0x63, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x3a, 0x0a, 0x0b, 0x57, 0x47, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x18, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, 0x63, 0x6b, + 0x73, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x4b, 0x0a, 0x10, 0x57, + 0x47, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, + 0x1c, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x54, 0x43, 0x50, + 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, + 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x54, 0x43, 0x50, 0x46, 0x6f, + 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4b, 0x0a, 0x12, 0x57, 0x47, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x1b, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, 0x63, 0x6b, + 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x57, 0x47, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x05, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x12, 0x12, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x52, + 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x68, + 0x65, 0x6c, 0x6c, 0x12, 0x32, 0x0a, 0x07, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x77, 0x64, 0x12, 0x14, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x77, + 0x64, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x50, 0x6f, 0x72, 0x74, 0x66, 0x77, 0x64, 0x12, 0x2f, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x0f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x1a, 0x0f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x2e, 0x0a, 0x0a, 0x43, 0x6c, 0x6f, 0x73, + 0x65, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x0f, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x0a, 0x53, 0x6f, 0x63, 0x6b, + 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x13, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x13, 0x2e, 0x73, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x73, 0x44, 0x61, 0x74, 0x61, + 0x28, 0x01, 0x30, 0x01, 0x12, 0x32, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x75, + 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x10, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, + 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x1a, 0x10, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x30, 0x0a, 0x0b, 0x43, 0x6c, 0x6f, 0x73, + 0x65, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x10, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x54, 0x75, + 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x14, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, + 0x44, 0x61, 0x74, 0x61, 0x28, 0x01, 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x69, 0x73, 0x68, 0x6f, 0x70, 0x66, 0x6f, 0x78, 0x2f, 0x73, + 0x6c, 0x69, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x72, + 0x70, 0x63, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_rpcpb_services_proto_goTypes = []interface{}{ @@ -801,7 +801,7 @@ var file_rpcpb_services_proto_goTypes = []interface{}{ (*sliverpb.CurrentTokenOwnerReq)(nil), // 82: sliverpb.CurrentTokenOwnerReq (*sliverpb.ServicesReq)(nil), // 83: sliverpb.ServicesReq (*sliverpb.ServiceDetailReq)(nil), // 84: sliverpb.ServiceDetailReq - (*sliverpb.StartExistingServiceReq)(nil), // 85: sliverpb.StartExistingServiceReq + (*sliverpb.StartServiceByNameReq)(nil), // 85: sliverpb.StartServiceByNameReq (*sliverpb.PivotStartListenerReq)(nil), // 86: sliverpb.PivotStartListenerReq (*sliverpb.PivotStopListenerReq)(nil), // 87: sliverpb.PivotStopListenerReq (*sliverpb.PivotListenersReq)(nil), // 88: sliverpb.PivotListenersReq @@ -1077,7 +1077,7 @@ var file_rpcpb_services_proto_depIdxs = []int32{ 82, // 128: rpcpb.SliverRPC.CurrentTokenOwner:input_type -> sliverpb.CurrentTokenOwnerReq 83, // 129: rpcpb.SliverRPC.Services:input_type -> sliverpb.ServicesReq 84, // 130: rpcpb.SliverRPC.ServiceDetail:input_type -> sliverpb.ServiceDetailReq - 85, // 131: rpcpb.SliverRPC.StartExistingService:input_type -> sliverpb.StartExistingServiceReq + 85, // 131: rpcpb.SliverRPC.StartServiceByName:input_type -> sliverpb.StartServiceByNameReq 86, // 132: rpcpb.SliverRPC.PivotStartListener:input_type -> sliverpb.PivotStartListenerReq 87, // 133: rpcpb.SliverRPC.PivotStopListener:input_type -> sliverpb.PivotStopListenerReq 88, // 134: rpcpb.SliverRPC.PivotSessionListeners:input_type -> sliverpb.PivotListenersReq @@ -1256,7 +1256,7 @@ var file_rpcpb_services_proto_depIdxs = []int32{ 193, // 307: rpcpb.SliverRPC.CurrentTokenOwner:output_type -> sliverpb.CurrentTokenOwner 194, // 308: rpcpb.SliverRPC.Services:output_type -> sliverpb.Services 195, // 309: rpcpb.SliverRPC.ServiceDetail:output_type -> sliverpb.ServiceDetail - 196, // 310: rpcpb.SliverRPC.StartExistingService:output_type -> sliverpb.ServiceInfo + 196, // 310: rpcpb.SliverRPC.StartServiceByName:output_type -> sliverpb.ServiceInfo 197, // 311: rpcpb.SliverRPC.PivotStartListener:output_type -> sliverpb.PivotListener 0, // 312: rpcpb.SliverRPC.PivotStopListener:output_type -> commonpb.Empty 198, // 313: rpcpb.SliverRPC.PivotSessionListeners:output_type -> sliverpb.PivotListeners diff --git a/protobuf/rpcpb/services.proto b/protobuf/rpcpb/services.proto index ef588d6ff6..0b7837215f 100644 --- a/protobuf/rpcpb/services.proto +++ b/protobuf/rpcpb/services.proto @@ -197,7 +197,7 @@ service SliverRPC { returns (sliverpb.CurrentTokenOwner); rpc Services(sliverpb.ServicesReq) returns (sliverpb.Services); rpc ServiceDetail(sliverpb.ServiceDetailReq) returns (sliverpb.ServiceDetail); - rpc StartExistingService(sliverpb.StartExistingServiceReq) returns (sliverpb.ServiceInfo); + rpc StartServiceByName(sliverpb.StartServiceByNameReq) returns (sliverpb.ServiceInfo); // *** Pivots *** rpc PivotStartListener(sliverpb.PivotStartListenerReq) diff --git a/protobuf/rpcpb/services_grpc.pb.go b/protobuf/rpcpb/services_grpc.pb.go index 39198e127e..08cf7bb178 100644 --- a/protobuf/rpcpb/services_grpc.pb.go +++ b/protobuf/rpcpb/services_grpc.pb.go @@ -176,7 +176,7 @@ type SliverRPCClient interface { CurrentTokenOwner(ctx context.Context, in *sliverpb.CurrentTokenOwnerReq, opts ...grpc.CallOption) (*sliverpb.CurrentTokenOwner, error) Services(ctx context.Context, in *sliverpb.ServicesReq, opts ...grpc.CallOption) (*sliverpb.Services, error) ServiceDetail(ctx context.Context, in *sliverpb.ServiceDetailReq, opts ...grpc.CallOption) (*sliverpb.ServiceDetail, error) - StartExistingService(ctx context.Context, in *sliverpb.StartExistingServiceReq, opts ...grpc.CallOption) (*sliverpb.ServiceInfo, error) + StartServiceByName(ctx context.Context, in *sliverpb.StartServiceByNameReq, opts ...grpc.CallOption) (*sliverpb.ServiceInfo, error) // *** Pivots *** PivotStartListener(ctx context.Context, in *sliverpb.PivotStartListenerReq, opts ...grpc.CallOption) (*sliverpb.PivotListener, error) PivotStopListener(ctx context.Context, in *sliverpb.PivotStopListenerReq, opts ...grpc.CallOption) (*commonpb.Empty, error) @@ -1493,9 +1493,9 @@ func (c *sliverRPCClient) ServiceDetail(ctx context.Context, in *sliverpb.Servic return out, nil } -func (c *sliverRPCClient) StartExistingService(ctx context.Context, in *sliverpb.StartExistingServiceReq, opts ...grpc.CallOption) (*sliverpb.ServiceInfo, error) { +func (c *sliverRPCClient) StartServiceByName(ctx context.Context, in *sliverpb.StartServiceByNameReq, opts ...grpc.CallOption) (*sliverpb.ServiceInfo, error) { out := new(sliverpb.ServiceInfo) - err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/StartExistingService", in, out, opts...) + err := c.cc.Invoke(ctx, "/rpcpb.SliverRPC/StartServiceByName", in, out, opts...) if err != nil { return nil, err } @@ -2147,7 +2147,7 @@ type SliverRPCServer interface { CurrentTokenOwner(context.Context, *sliverpb.CurrentTokenOwnerReq) (*sliverpb.CurrentTokenOwner, error) Services(context.Context, *sliverpb.ServicesReq) (*sliverpb.Services, error) ServiceDetail(context.Context, *sliverpb.ServiceDetailReq) (*sliverpb.ServiceDetail, error) - StartExistingService(context.Context, *sliverpb.StartExistingServiceReq) (*sliverpb.ServiceInfo, error) + StartServiceByName(context.Context, *sliverpb.StartServiceByNameReq) (*sliverpb.ServiceInfo, error) // *** Pivots *** PivotStartListener(context.Context, *sliverpb.PivotStartListenerReq) (*sliverpb.PivotListener, error) PivotStopListener(context.Context, *sliverpb.PivotStopListenerReq) (*commonpb.Empty, error) @@ -2604,8 +2604,8 @@ func (UnimplementedSliverRPCServer) Services(context.Context, *sliverpb.Services func (UnimplementedSliverRPCServer) ServiceDetail(context.Context, *sliverpb.ServiceDetailReq) (*sliverpb.ServiceDetail, error) { return nil, status.Errorf(codes.Unimplemented, "method ServiceDetail not implemented") } -func (UnimplementedSliverRPCServer) StartExistingService(context.Context, *sliverpb.StartExistingServiceReq) (*sliverpb.ServiceInfo, error) { - return nil, status.Errorf(codes.Unimplemented, "method StartExistingService not implemented") +func (UnimplementedSliverRPCServer) StartServiceByName(context.Context, *sliverpb.StartServiceByNameReq) (*sliverpb.ServiceInfo, error) { + return nil, status.Errorf(codes.Unimplemented, "method StartServiceByName not implemented") } func (UnimplementedSliverRPCServer) PivotStartListener(context.Context, *sliverpb.PivotStartListenerReq) (*sliverpb.PivotListener, error) { return nil, status.Errorf(codes.Unimplemented, "method PivotStartListener not implemented") @@ -5133,20 +5133,20 @@ func _SliverRPC_ServiceDetail_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } -func _SliverRPC_StartExistingService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(sliverpb.StartExistingServiceReq) +func _SliverRPC_StartServiceByName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(sliverpb.StartServiceByNameReq) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(SliverRPCServer).StartExistingService(ctx, in) + return srv.(SliverRPCServer).StartServiceByName(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/rpcpb.SliverRPC/StartExistingService", + FullMethod: "/rpcpb.SliverRPC/StartServiceByName", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SliverRPCServer).StartExistingService(ctx, req.(*sliverpb.StartExistingServiceReq)) + return srv.(SliverRPCServer).StartServiceByName(ctx, req.(*sliverpb.StartServiceByNameReq)) } return interceptor(ctx, in, info, handler) } @@ -6536,8 +6536,8 @@ var SliverRPC_ServiceDesc = grpc.ServiceDesc{ Handler: _SliverRPC_ServiceDetail_Handler, }, { - MethodName: "StartExistingService", - Handler: _SliverRPC_StartExistingService_Handler, + MethodName: "StartServiceByName", + Handler: _SliverRPC_StartServiceByName_Handler, }, { MethodName: "PivotStartListener", diff --git a/protobuf/sliverpb/constants.go b/protobuf/sliverpb/constants.go index d2740e23f7..9372e7d513 100644 --- a/protobuf/sliverpb/constants.go +++ b/protobuf/sliverpb/constants.go @@ -346,7 +346,7 @@ const ( // Services messages MsgServicesReq MsgServiceDetailReq - MsgStartExistingServiceReq + MsgStartServiceByNameReq ) // Constants to replace enums @@ -619,8 +619,8 @@ func MsgNumber(request proto.Message) uint32 { case *ServiceDetailReq: return MsgServiceDetailReq - case *StartExistingServiceReq: - return MsgStartExistingServiceReq + case *StartServiceByNameReq: + return MsgStartServiceByNameReq } return uint32(0) } diff --git a/protobuf/sliverpb/sliver.pb.go b/protobuf/sliverpb/sliver.pb.go index aa4433cea0..46037fb77b 100644 --- a/protobuf/sliverpb/sliver.pb.go +++ b/protobuf/sliverpb/sliver.pb.go @@ -11694,8 +11694,8 @@ type ServiceDetails struct { Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` DisplayName string `protobuf:"bytes,2,opt,name=DisplayName,proto3" json:"DisplayName,omitempty"` Description string `protobuf:"bytes,3,opt,name=Description,proto3" json:"Description,omitempty"` - Status string `protobuf:"bytes,4,opt,name=Status,proto3" json:"Status,omitempty"` - StartupType string `protobuf:"bytes,5,opt,name=StartupType,proto3" json:"StartupType,omitempty"` + Status uint32 `protobuf:"varint,4,opt,name=Status,proto3" json:"Status,omitempty"` + StartupType uint32 `protobuf:"varint,5,opt,name=StartupType,proto3" json:"StartupType,omitempty"` BinPath string `protobuf:"bytes,6,opt,name=BinPath,proto3" json:"BinPath,omitempty"` Account string `protobuf:"bytes,7,opt,name=Account,proto3" json:"Account,omitempty"` } @@ -11753,18 +11753,18 @@ func (x *ServiceDetails) GetDescription() string { return "" } -func (x *ServiceDetails) GetStatus() string { +func (x *ServiceDetails) GetStatus() uint32 { if x != nil { return x.Status } - return "" + return 0 } -func (x *ServiceDetails) GetStartupType() string { +func (x *ServiceDetails) GetStartupType() uint32 { if x != nil { return x.StartupType } - return "" + return 0 } func (x *ServiceDetails) GetBinPath() string { @@ -11850,6 +11850,7 @@ type ServiceDetail struct { unknownFields protoimpl.UnknownFields Detail *ServiceDetails `protobuf:"bytes,1,opt,name=Detail,proto3" json:"Detail,omitempty"` + Message string `protobuf:"bytes,2,opt,name=Message,proto3" json:"Message,omitempty"` Response *commonpb.Response `protobuf:"bytes,9,opt,name=Response,proto3" json:"Response,omitempty"` } @@ -11892,6 +11893,13 @@ func (x *ServiceDetail) GetDetail() *ServiceDetails { return nil } +func (x *ServiceDetail) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + func (x *ServiceDetail) GetResponse() *commonpb.Response { if x != nil { return x.Response @@ -11899,7 +11907,7 @@ func (x *ServiceDetail) GetResponse() *commonpb.Response { return nil } -type StartExistingServiceReq struct { +type StartServiceByNameReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -11908,8 +11916,8 @@ type StartExistingServiceReq struct { Request *commonpb.Request `protobuf:"bytes,9,opt,name=Request,proto3" json:"Request,omitempty"` } -func (x *StartExistingServiceReq) Reset() { - *x = StartExistingServiceReq{} +func (x *StartServiceByNameReq) Reset() { + *x = StartServiceByNameReq{} if protoimpl.UnsafeEnabled { mi := &file_sliverpb_sliver_proto_msgTypes[178] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -11917,13 +11925,13 @@ func (x *StartExistingServiceReq) Reset() { } } -func (x *StartExistingServiceReq) String() string { +func (x *StartServiceByNameReq) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StartExistingServiceReq) ProtoMessage() {} +func (*StartServiceByNameReq) ProtoMessage() {} -func (x *StartExistingServiceReq) ProtoReflect() protoreflect.Message { +func (x *StartServiceByNameReq) ProtoReflect() protoreflect.Message { mi := &file_sliverpb_sliver_proto_msgTypes[178] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -11935,19 +11943,19 @@ func (x *StartExistingServiceReq) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StartExistingServiceReq.ProtoReflect.Descriptor instead. -func (*StartExistingServiceReq) Descriptor() ([]byte, []int) { +// Deprecated: Use StartServiceByNameReq.ProtoReflect.Descriptor instead. +func (*StartServiceByNameReq) Descriptor() ([]byte, []int) { return file_sliverpb_sliver_proto_rawDescGZIP(), []int{178} } -func (x *StartExistingServiceReq) GetServiceInfo() *ServiceInfoReq { +func (x *StartServiceByNameReq) GetServiceInfo() *ServiceInfoReq { if x != nil { return x.ServiceInfo } return nil } -func (x *StartExistingServiceReq) GetRequest() *commonpb.Request { +func (x *StartServiceByNameReq) GetRequest() *commonpb.Request { if x != nil { return x.Request } @@ -13390,9 +13398,9 @@ var file_sliverpb_sliver_proto_rawDesc = []byte{ 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x42, 0x69, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, @@ -13405,36 +13413,38 @@ var file_sliverpb_sliver_proto_rawDesc = []byte{ 0x72, 0x12, 0x2e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x71, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x12, 0x30, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x06, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, - 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, - 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x12, 0x3a, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x52, - 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x07, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2a, 0x49, 0x0a, 0x0c, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, - 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, - 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x09, - 0x0a, 0x05, 0x44, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x51, 0x57, 0x4f, - 0x52, 0x44, 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x09, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x44, - 0x50, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x69, 0x70, 0x65, - 0x10, 0x02, 0x2a, 0x33, 0x0a, 0x0f, 0x50, 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x46, 0x41, - 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0x01, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x69, 0x73, 0x68, 0x6f, 0x70, 0x66, 0x6f, 0x78, 0x2f, - 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x12, 0x30, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x06, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x2e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x80, 0x01, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0b, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x52, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, + 0x62, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2a, 0x49, 0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, + 0x0a, 0x0a, 0x06, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x57, 0x4f, 0x52, 0x44, + 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x51, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x04, 0x2a, 0x2c, 0x0a, + 0x09, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, + 0x50, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x44, 0x50, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, + 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x69, 0x70, 0x65, 0x10, 0x02, 0x2a, 0x33, 0x0a, 0x0f, 0x50, + 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, + 0x0a, 0x0c, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x00, + 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0x01, + 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, + 0x69, 0x73, 0x68, 0x6f, 0x70, 0x66, 0x6f, 0x78, 0x2f, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x70, + 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -13633,7 +13643,7 @@ var file_sliverpb_sliver_proto_goTypes = []interface{}{ (*ServiceDetails)(nil), // 178: sliverpb.ServiceDetails (*Services)(nil), // 179: sliverpb.Services (*ServiceDetail)(nil), // 180: sliverpb.ServiceDetail - (*StartExistingServiceReq)(nil), // 181: sliverpb.StartExistingServiceReq + (*StartServiceByNameReq)(nil), // 181: sliverpb.StartServiceByNameReq nil, // 182: sliverpb.Grep.ResultsEntry (*SockTabEntry_SockAddr)(nil), // 183: sliverpb.SockTabEntry.SockAddr nil, // 184: sliverpb.ExecWasmExtensionReq.MemFSEntry @@ -13829,8 +13839,8 @@ var file_sliverpb_sliver_proto_depIdxs = []int32{ 185, // 183: sliverpb.Services.Response:type_name -> commonpb.Response 178, // 184: sliverpb.ServiceDetail.Detail:type_name -> sliverpb.ServiceDetails 185, // 185: sliverpb.ServiceDetail.Response:type_name -> commonpb.Response - 89, // 186: sliverpb.StartExistingServiceReq.ServiceInfo:type_name -> sliverpb.ServiceInfoReq - 186, // 187: sliverpb.StartExistingServiceReq.Request:type_name -> commonpb.Request + 89, // 186: sliverpb.StartServiceByNameReq.ServiceInfo:type_name -> sliverpb.ServiceInfoReq + 186, // 187: sliverpb.StartServiceByNameReq.Request:type_name -> commonpb.Request 40, // 188: sliverpb.Grep.ResultsEntry.value:type_name -> sliverpb.GrepResultsForFile 189, // [189:189] is the sub-list for method output_type 189, // [189:189] is the sub-list for method input_type @@ -15982,7 +15992,7 @@ func file_sliverpb_sliver_proto_init() { } } file_sliverpb_sliver_proto_msgTypes[178].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartExistingServiceReq); i { + switch v := v.(*StartServiceByNameReq); i { case 0: return &v.state case 1: diff --git a/protobuf/sliverpb/sliver.proto b/protobuf/sliverpb/sliver.proto index bfb8160e1f..6e35ac4fe4 100644 --- a/protobuf/sliverpb/sliver.proto +++ b/protobuf/sliverpb/sliver.proto @@ -1305,8 +1305,8 @@ message ServiceDetails { string Name = 1; string DisplayName = 2; string Description = 3; - string Status = 4; - string StartupType = 5; + uint32 Status = 4; + uint32 StartupType = 5; string BinPath = 6; string Account = 7; } @@ -1320,11 +1320,12 @@ message Services { message ServiceDetail { ServiceDetails Detail = 1; + string Message = 2; commonpb.Response Response = 9; } -message StartExistingServiceReq { +message StartServiceByNameReq { ServiceInfoReq ServiceInfo = 1; commonpb.Request Request = 9; diff --git a/server/rpc/rpc-service.go b/server/rpc/rpc-service.go index a47fb5c9e3..0322d9ba21 100644 --- a/server/rpc/rpc-service.go +++ b/server/rpc/rpc-service.go @@ -36,7 +36,7 @@ func (rpc *Server) StartService(ctx context.Context, req *sliverpb.StartServiceR return resp, nil } -func (rpc *Server) StartExistingService(ctx context.Context, req *sliverpb.StartExistingServiceReq) (*sliverpb.ServiceInfo, error) { +func (rpc *Server) StartServiceByName(ctx context.Context, req *sliverpb.StartServiceByNameReq) (*sliverpb.ServiceInfo, error) { resp := &sliverpb.ServiceInfo{Response: &commonpb.Response{}} err := rpc.GenericHandler(req, resp) if err != nil {