Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
devel:languages:ruby:extensions
rubygem-winrm-2_1
0001-Fix-line-endings-of-lib-winrm-psrp-powersh...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-Fix-line-endings-of-lib-winrm-psrp-powershell_output.patch of Package rubygem-winrm-2_1
From 20ac3dd80edf69f3c2dcbb53c2b8f6fbff7fd087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20=C4=8Cerm=C3=A1k?= <dan.cermak@cgc-instruments.com> Date: Tue, 16 Apr 2019 01:05:03 +0200 Subject: [PATCH] Fix line endings of lib/winrm/psrp/powershell_output_decoder.rb This fixes #299 --- lib/winrm/psrp/powershell_output_decoder.rb | 284 ++++++++++---------- 1 file changed, 142 insertions(+), 142 deletions(-) diff --git a/lib/winrm/psrp/powershell_output_decoder.rb b/lib/winrm/psrp/powershell_output_decoder.rb index c02b7f8..35f540a 100644 --- a/lib/winrm/psrp/powershell_output_decoder.rb +++ b/lib/winrm/psrp/powershell_output_decoder.rb @@ -1,142 +1,142 @@ -# Copyright 2016 Matt Wrock <matt@mattwrock.com> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -require 'base64' -require_relative 'message' -require_relative 'message_data/pipeline_state' - -module WinRM - module PSRP - # Handles decoding a raw powershell output response - class PowershellOutputDecoder - # rubocop:disable Metrics/CyclomaticComplexity - # Decode the raw SOAP output into decoded PSRP message, - # Removes BOM and replaces encoded line endings - # @param raw_output [String] The raw encoded output - # @return [String] The decoded output - def decode(message) - case message.type - when WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_output] - decode_pipeline_output(message) - when WinRM::PSRP::Message::MESSAGE_TYPES[:runspacepool_host_call] - decode_host_call(message) - when WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_host_call] - decode_host_call(message) - when WinRM::PSRP::Message::MESSAGE_TYPES[:error_record] - decode_error_record(message) - when WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_state] - if message.parsed_data.pipeline_state == WinRM::PSRP::MessageData::PipelineState::FAILED - decode_error_record(message) - end - end - end - # rubocop:enable Metrics/CyclomaticComplexity - - protected - - def decode_pipeline_output(message) - message.parsed_data.output - end - - def decode_host_call(message) - text = begin - case message.parsed_data.method_identifier - when /WriteLine/, 'WriteErrorLine' - "#{message.parsed_data.method_parameters[:s]}\r\n" - when 'WriteDebugLine' - "Debug: #{message.parsed_data.method_parameters[:s]}\r\n" - when 'WriteWarningLine' - "Warning: #{message.parsed_data.method_parameters[:s]}\r\n" - when 'WriteVerboseLine' - "Verbose: #{message.parsed_data.method_parameters[:s]}\r\n" - when /Write[1-2]/ - message.parsed_data.method_parameters[:s] - end - end - - hex_decode(text) - end - - def decode_error_record(message) - parsed = message.parsed_data - text = begin - if message.type == WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_state] - render_exception_as_error_record(parsed.exception_as_error_record) - else - case parsed.fully_qualified_error_id - when 'Microsoft.PowerShell.Commands.WriteErrorException' - render_write_error_exception(parsed) - when 'NativeCommandError' - render_native_command_error(parsed) - when 'NativeCommandErrorMessage' - parsed.exception[:message] - else - render_exception(parsed) - end - end - end - - hex_decode(text) - end - - def render_write_error_exception(parsed) - <<EOH -#{parsed.invocation_info[:line]} : #{parsed.exception[:message]} - + CategoryInfo : #{parsed.error_category_message} - + FullyQualifiedErrorId : #{parsed.fully_qualified_error_id} -EOH - end - - def render_exception(parsed) - <<EOH -#{parsed.exception[:message]} -#{parsed.invocation_info[:position_message]} - + CategoryInfo : #{parsed.error_category_message} - + FullyQualifiedErrorId : #{parsed.fully_qualified_error_id} -EOH - end - - def render_native_command_error(parsed) - <<EOH -#{parsed.invocation_info[:my_command]} : #{parsed.exception[:message]} - + CategoryInfo : #{parsed.error_category_message} - + FullyQualifiedErrorId : #{parsed.fully_qualified_error_id} -EOH - end - - def render_exception_as_error_record(parsed) - <<EOH -#{parsed.exception[:message]} - + CategoryInfo : #{parsed.error_category_message} - + FullyQualifiedErrorId : #{parsed.fully_qualified_error_id} -EOH - end - - private - - def hex_decode(text) - return unless text - - text.gsub(/_x(\h\h\h\h)_/) do - decoded_text = Regexp.last_match[1].hex.chr.force_encoding('utf-8') - if decoded_text.respond_to?(:scrub) - decoded_text.scrub - else - decoded_text.encode('utf-16', invalid: :replace, undef: :replace).encode('utf-8') - end - end - end - end - end -end +# Copyright 2016 Matt Wrock <matt@mattwrock.com> +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +require 'base64' +require_relative 'message' +require_relative 'message_data/pipeline_state' + +module WinRM + module PSRP + # Handles decoding a raw powershell output response + class PowershellOutputDecoder + # rubocop:disable Metrics/CyclomaticComplexity + # Decode the raw SOAP output into decoded PSRP message, + # Removes BOM and replaces encoded line endings + # @param raw_output [String] The raw encoded output + # @return [String] The decoded output + def decode(message) + case message.type + when WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_output] + decode_pipeline_output(message) + when WinRM::PSRP::Message::MESSAGE_TYPES[:runspacepool_host_call] + decode_host_call(message) + when WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_host_call] + decode_host_call(message) + when WinRM::PSRP::Message::MESSAGE_TYPES[:error_record] + decode_error_record(message) + when WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_state] + if message.parsed_data.pipeline_state == WinRM::PSRP::MessageData::PipelineState::FAILED + decode_error_record(message) + end + end + end + # rubocop:enable Metrics/CyclomaticComplexity + + protected + + def decode_pipeline_output(message) + message.parsed_data.output + end + + def decode_host_call(message) + text = begin + case message.parsed_data.method_identifier + when /WriteLine/, 'WriteErrorLine' + "#{message.parsed_data.method_parameters[:s]}\r\n" + when 'WriteDebugLine' + "Debug: #{message.parsed_data.method_parameters[:s]}\r\n" + when 'WriteWarningLine' + "Warning: #{message.parsed_data.method_parameters[:s]}\r\n" + when 'WriteVerboseLine' + "Verbose: #{message.parsed_data.method_parameters[:s]}\r\n" + when /Write[1-2]/ + message.parsed_data.method_parameters[:s] + end + end + + hex_decode(text) + end + + def decode_error_record(message) + parsed = message.parsed_data + text = begin + if message.type == WinRM::PSRP::Message::MESSAGE_TYPES[:pipeline_state] + render_exception_as_error_record(parsed.exception_as_error_record) + else + case parsed.fully_qualified_error_id + when 'Microsoft.PowerShell.Commands.WriteErrorException' + render_write_error_exception(parsed) + when 'NativeCommandError' + render_native_command_error(parsed) + when 'NativeCommandErrorMessage' + parsed.exception[:message] + else + render_exception(parsed) + end + end + end + + hex_decode(text) + end + + def render_write_error_exception(parsed) + <<EOH +#{parsed.invocation_info[:line]} : #{parsed.exception[:message]} + + CategoryInfo : #{parsed.error_category_message} + + FullyQualifiedErrorId : #{parsed.fully_qualified_error_id} +EOH + end + + def render_exception(parsed) + <<EOH +#{parsed.exception[:message]} +#{parsed.invocation_info[:position_message]} + + CategoryInfo : #{parsed.error_category_message} + + FullyQualifiedErrorId : #{parsed.fully_qualified_error_id} +EOH + end + + def render_native_command_error(parsed) + <<EOH +#{parsed.invocation_info[:my_command]} : #{parsed.exception[:message]} + + CategoryInfo : #{parsed.error_category_message} + + FullyQualifiedErrorId : #{parsed.fully_qualified_error_id} +EOH + end + + def render_exception_as_error_record(parsed) + <<EOH +#{parsed.exception[:message]} + + CategoryInfo : #{parsed.error_category_message} + + FullyQualifiedErrorId : #{parsed.fully_qualified_error_id} +EOH + end + + private + + def hex_decode(text) + return unless text + + text.gsub(/_x(\h\h\h\h)_/) do + decoded_text = Regexp.last_match[1].hex.chr.force_encoding('utf-8') + if decoded_text.respond_to?(:scrub) + decoded_text.scrub + else + decoded_text.encode('utf-16', invalid: :replace, undef: :replace).encode('utf-8') + end + end + end + end + end +end -- 2.21.0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor