Hello community,
here is the log from the commit of package openwsman for openSUSE:Factory checked in at 2015-10-26 12:48:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openwsman (Old)
and /work/SRC/openSUSE:Factory/.openwsman.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openwsman"
Changes:
--------
--- /work/SRC/openSUSE:Factory/openwsman/openwsman.changes 2015-08-29 20:05:02.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.openwsman.new/openwsman.changes 2015-10-26 12:48:53.000000000 +0100
@@ -1,0 +2,20 @@
+Wed Oct 7 14:49:51 UTC 2015 - kkaempf@suse.com
+
+- Update to 2.6.2
+ - Features
+ - Install winrs.rb (Windows Remote Shell) to /usr/bin
+ - New package: winrs
+ - Bugfixes
+ - Make iniparser thread-safe (Emil Bartczak)
+ - Fix excessive RPM rebuilds (Olaf Hering)
+ - Fix selector extraction from URI query (Markus Kolb)
+ - Fix RPM building on older distributions
+ - Fix RPM building on Fedora 22
+
+-------------------------------------------------------------------
+Mon Oct 5 14:22:50 UTC 2015 - kkaempf@suse.com
+
+- Fix build for older distributions.
+ Add struct-epr.diff
+
+-------------------------------------------------------------------
Old:
----
openwsman-2.6.1.tar.bz2
New:
----
openwsman-2.6.2.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openwsman.spec ++++++
--- /var/tmp/diff_new_pack.op4QlI/_old 2015-10-26 12:48:54.000000000 +0100
+++ /var/tmp/diff_new_pack.op4QlI/_new 2015-10-26 12:48:54.000000000 +0100
@@ -43,7 +43,7 @@
%if 0%{?fedora} == 16 || (0%{?centos_version}>=500 && 0%{?centos_version}<700) || (0%{?rhel_version}>=500 && 0%{?rhel_version}<700)
BuildRequires: java-1.6.0-openjdk-devel
%else
-%if 0%{?fedora} >= 17 || 0%{?centos_version} >= 700 || 0%{?rhel_version} >= 700
+%if (0%{?fedora} >= 17 && 0%{?fedora} < 22) || 0%{?centos_version} >= 700 || 0%{?rhel_version} >= 700
BuildRequires: java-1.7.0-openjdk-devel
%else
BuildRequires: java-devel
@@ -122,7 +122,7 @@
%endif
Requires(pre): sed coreutils grep /bin/hostname
-Version: 2.6.1
+Version: 2.6.2
Release: 0
# Mandriva:
# Release %%mkrel 1
@@ -309,6 +309,16 @@
%endif
+%package -n winrs
+Summary: Windows Remote Shell
+Group: System/Management
+Requires: openwsman-ruby = %{version}
+
+%description -n winrs
+This is a command line tool for the Windows Remote Shell protocol. You
+can use it to send shell commands to a remote Windows hosts.
+
+
%prep
%setup -q
%if 0%{?fedora_version} || 0%{?centos_version} || 0%{?rhel_version} || 0%{?fedora} || 0%{?rhel}
@@ -330,8 +340,12 @@
%endif
cd build
+# SLE 10 Java doesn't like EXPLICIT_TARGET any more, disable
cmake \
-DCMAKE_INSTALL_PREFIX=/usr \
+%if 0%{?suse_version} == 1010
+ -DBUILD_JAVA=FALSE \
+%endif
-DCMAKE_VERBOSE_MAKEFILE=TRUE \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS_RELEASE:STRING="$RPM_OPT_FLAGS -fno-strict-aliasing" \
@@ -374,6 +388,9 @@
install -D -m 644 %{S:3} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/openwsman
%endif
+# rename winrs.rb -> winrs
+mv $RPM_BUILD_ROOT%{_bindir}/winrs.rb $RPM_BUILD_ROOT%{_bindir}/winrs
+
%post -n libwsman3 -p /sbin/ldconfig
%postun -n libwsman3
@@ -496,6 +513,7 @@
%{_sbindir}/rc%{name}
%else
%attr(0755,root,root) %{_sysconfdir}/init.d/openwsmand
+%{_sbindir}/rc%{name}d
%endif
%dir %{_libdir}/openwsman
%dir %{_libdir}/openwsman/authenticators
@@ -522,4 +540,8 @@
%dir %{_includedir}/openwsman/cpp
%{_includedir}/openwsman/cpp/*.h
+%files -n winrs
+%defattr(-,root,root)
+%{_bindir}/winrs
+
%changelog
++++++ openwsman-2.6.1.tar.bz2 -> openwsman-2.6.2.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/CMakeLists.txt new/openwsman-2.6.2/CMakeLists.txt
--- old/openwsman-2.6.1/CMakeLists.txt 2015-08-26 13:33:11.000000000 +0200
+++ new/openwsman-2.6.2/CMakeLists.txt 2015-10-06 11:06:58.000000000 +0200
@@ -29,10 +29,6 @@
MESSAGE(STATUS "Package Version ${PACKAGE_VERSION}")
SET(OPENWSMAN_PLUGIN_API_VERSION \"${OPENWSMAN_PLUGIN_API_MAJOR}.${OPENWSMAN_PLUGIN_API_MINOR}\")
MESSAGE(STATUS "Plugin API Version ${OPENWSMAN_PLUGIN_API_VERSION}")
-# build timestamp
-EXECUTE_PROCESS(COMMAND "/bin/date" "+%Y%m%d%H%M" OUTPUT_VARIABLE BUILD_DATE)
-STRING(REPLACE "\n" "" PACKAGE_BUILDTS "${BUILD_DATE}")
- MESSAGE(STATUS "Package build timestamp ${PACKAGE_BUILDTS}")
# Package architecture
IF ( NOT DEFINED PACKAGE_ARCHITECTURE )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/ChangeLog new/openwsman-2.6.2/ChangeLog
--- old/openwsman-2.6.1/ChangeLog 2015-08-27 13:16:50.000000000 +0200
+++ new/openwsman-2.6.2/ChangeLog 2015-10-14 14:53:14.000000000 +0200
@@ -1,3 +1,14 @@
+2.6.2
+- Features
+ - Install winrs.rb (Windows Remote Shell) to /usr/bin
+ - New package: winrs
+- Bugfixes
+ - Make iniparser thread-safe (Emil Bartczak)
+ - Fix excessive RPM rebuilds (Olaf Hering)
+ - Fix selector extraction from URI query (Markus Kolb)
+ - Fix RPM building on older distributions
+ - Fix RPM building on Fedora 22
+
2.6.1
- Features
- Add curlopt_nosignal option to openwsman_client.conf to prevent
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/VERSION.cmake new/openwsman-2.6.2/VERSION.cmake
--- old/openwsman-2.6.1/VERSION.cmake 2015-08-27 13:16:50.000000000 +0200
+++ new/openwsman-2.6.2/VERSION.cmake 2015-10-14 14:45:51.000000000 +0200
@@ -44,10 +44,10 @@
# set COMPATMINOR to MINOR. (binary incompatible change)
#
-# Package version 2.6.1
+# Package version 2.6.2
SET(OPENWSMAN_MAJOR "2")
SET(OPENWSMAN_MINOR "6")
-SET(OPENWSMAN_PATCH "1")
+SET(OPENWSMAN_PATCH "2")
# Plugin API 2.2
SET(OPENWSMAN_PLUGIN_API_MAJOR "2")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/bindings/ruby/tests/winrs.rb new/openwsman-2.6.2/bindings/ruby/tests/winrs.rb
--- old/openwsman-2.6.1/bindings/ruby/tests/winrs.rb 2015-08-26 10:12:49.000000000 +0200
+++ new/openwsman-2.6.2/bindings/ruby/tests/winrs.rb 1970-01-01 01:00:00.000000000 +0100
@@ -1,298 +0,0 @@
-# winrs.rb
-#
-# Windows Remote Shell
-#
-# See http://msdn.microsoft.com/en-us/library/cc251731.aspx (Remote Shell Examples)
-# for details on the SOAP protocol
-#
-
-require 'rexml/document'
-require 'openwsman'
-require 'getoptlong'
-
-def usage msg=nil
- if msg
- STDERR.puts "Error: #{msg}"
- STDERR.puts
- end
- STDERR.puts "Usage:"
- STDERR.puts
- STDERR.puts "winrs [-U|--url <host-url>] [<cmd>]"
- STDERR.puts "winrs [-s|--scheme http|https] [-h|--host <host>] [-u|--user <user>] [-p|--password <password>] [-P|--port port] [<cmd>]"
- STDERR.puts
- STDERR.puts "If <cmd> is given as a command line argument, winrs exists after executing <cmd>."
- STDERR.puts "Else winrs runs interactively, accepting and executing command until Ctrl-D is pressed."
- exit 1
-end
-
-def handle_fault client, result
- unless result
- if client.last_error != 0
- STDERR.puts "Client connection to #{client.scheme}://#{client.user}:#{client.password}@#{client.host}:#{client.port}/#{client.path} failed with #{client.last_error}, Fault: #{client.fault_string}"
- exit 1
- end
- if client.response_code != 200
- STDERR.puts "Client requested result #{client.response_code}, Fault: #{client.fault_string}"
- exit 1
- end
- STDERR.puts "Client action failed for unknown reason"
- exit 1
- end
- if result.fault?
- fault = Openwsman::Fault.new result
- STDERR.puts "Fault code #{fault.code}, subcode #{fault.subcode}"
- STDERR.puts "\treason #{fault.reason}"
- STDERR.puts "\tdetail #{fault.detail}"
- exit 1
- end
-end
-
- #
- # Argument parsing
- #
-
- opts = GetoptLong.new(
- [ "-U", "--url", GetoptLong::REQUIRED_ARGUMENT ],
- [ "-h", "--host", GetoptLong::REQUIRED_ARGUMENT ],
- [ "-u", "--user", GetoptLong::REQUIRED_ARGUMENT ],
- [ "-p", "--password", GetoptLong::REQUIRED_ARGUMENT ],
- [ "-P", "--port", GetoptLong::REQUIRED_ARGUMENT ],
- [ "-s", "--scheme", GetoptLong::REQUIRED_ARGUMENT ],
- [ "-?", "--help", GetoptLong::NO_ARGUMENT ]
- )
-
- options = { }
- url = nil
- opts.each do |opt,arg|
- case opt
- when "-?"
- usage
- exit 0
- when "-U"
- usage "-U|--url invalid, --host|--user|--password|--port already given" unless options.empty?
- url = arg
- when "-h"
- usage "-h|--host invalid, --url already given" unless url.nil?
- options[:host] = arg
- when "-u"
- usage "-u|--user invalid, --url already given" unless url.nil?
- options[:user] = arg
- when "-p"
- usage "-p|--password invalid, --url already given" unless url.nil?
- options[:password] = arg
- when "-P"
- usage "-P|--port invalid, --url already given" unless url.nil?
- options[:port] = arg.to_i
- when "-s"
- usage "-s|--scheme invalid, --url already given" unless url.nil?
- options[:scheme] = arg
- end
- end
-
- options = { :port => 5985, :scheme => "http" }.merge(options)
-
- commands = ARGV.empty? ? nil : ARGV
-
-
- client = if url
- Openwsman::Client.new url
- elsif options.empty?
- usage
- else
- Openwsman::Client.new(options[:host], options[:port], "wsman", options[:scheme], options[:user], options[:password])
- end
-
- #
- # Client connection
- #
-
- client.transport.timeout = 120
- client.transport.auth_method = Openwsman::BASIC_AUTH_STR
- # https
- # client.transport.verify_peer = 0
- # client.transport.verify_host = 0
-
- options = Openwsman::ClientOptions.new
-# options.set_dump_request
-# Openwsman::debug = -1
- options.timeout = 60 * 1000 # 60 seconds
- uri = "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/cmd"
-
- #
- # Start shell
- #
-
- service = "Themes"
- options.add_selector( "Name", service )
-
- options.add_option "WINRS_NOPROFILE","FALSE"
- options.add_option "WINRS_CODEPAGE", 437
-
- # instance values
- instance = { "InputStreams" => "stdin", "OutputStreams" => "stdout stderr" }
-
- namespace = "http://schemas.microsoft.com/wbem/wsman/1/windows/shell"
- data = Openwsman::XmlDoc.new("Shell", namespace)
- root = data.root
- instance.each do |key,value|
- root.add namespace, key, value
- end
-
- s = data.to_xml
- result = client.create( options, uri, s, s.size, "utf-8" )
- # returns something like
- #
- #
- # http://10.120.5.37:5985/wsman
- #
- # http://schemas.microsoft.com/wbem/wsman/1/windows/shell/cmd
- #
- # 3D5D8879-98EA-49B7-9A33-6842EC0D35D0
- #
- #
- #
- #
- handle_fault client, result
-
- shell_id = result.find(nil, "Selector")
- raise "No shell id returned" unless shell_id
-# puts "Shell ID: #{shell_id}"
- command_id = nil
-
- #
- # Run command(s)
- #
-
- loop do
- if commands
- break if commands.empty?
- cmd = commands.shift
- else
- print "WinRS> "
- STDOUT.flush
- cmd = gets
- break if cmd.nil?
- cmd.chomp!
- next if cmd.empty?
- end
-
- # issue command
- options.options = { "WINRS_CONSOLEMODE_STDIN" => "TRUE", "WINRS_SKIP_CMD_SHELL" => "FALSE" }
- options.selectors = { "ShellId" => shell_id }
- data = Openwsman::XmlDoc.new("CommandLine", namespace)
- root = data.root
- root.add namespace, "Command", cmd
- result = client.invoke( options, uri, "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/Command", data)
- handle_fault client, result
-
- command_id = result.find(namespace, "CommandId")
- raise "No command id returned" unless command_id
- command_id = command_id.text
-# puts "Command ID: #{command_id}"
-
- #
- # Request stdout/stderr
- #
-
- options.options = { }
- # keep ShellId selector
- data = Openwsman::XmlDoc.new("Receive", namespace)
- root = data.root
- node = root.add namespace, "DesiredStream", "stdout stderr"
- node.attr_add nil, "CommandId", command_id
- result = client.invoke( options, uri, "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/Receive", data)
- handle_fault client, result
-
- #
- # Receive response
- #
-
- response = result.find(namespace, "ReceiveResponse")
- unless response
- STDERR.puts "***Err: No ReceiveResponse in: #{result.to_xml}"
- next
- end
- response.each do |node|
- cmd_id = node.attr "CommandId"
- if cmd_id.nil?
- STDERR.puts "***Err: No CommandId in ReceiveResponse node: #{node.to_xml}"
- next
- end
- if cmd_id.value != command_id
- STDERR.puts "***Err: Wrong CommandId in ReceiveResponse node. Expected #{command_id}, found #{cmd_id.value}"
- next
- end
-# puts "Node: #{node.to_xml}"
- case node.name
- when "Stream"
- stream_name = node.attr "Name"
- unless stream_name
- STDERR.puts "***Err: Stream node has no Name attribute: #{node.to_xml}"
- next
- end
- stream_name = stream_name.value
- str = node.text.unpack('m')[0]
- case stream_name
- when "stdout"
- puts str
- when "stderr"
- STDERR.puts str
- else
- STDERR.puts "***Err: Unknown stream name: #{stream_name}"
- end
- when "CommandState"
- state = node.attr "State"
- unless state
- STDERR.puts "***Err: CommandState node has no State attribute: #{node.to_xml}"
- next
- end
- case state.value
- when "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Done"
- exit_code = node.get "ExitCode"
- if exit_code
- puts "Exit code: #{exit_code.text}"
- else
- STDERR.puts "***Err: No exit code for 'done' command: #{node.to_xml}"
- end
- when "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Running"
- # unclear how to handle this
- when "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Pending"
- # no-op
- # WinRM 1.1 sends this with ExitCode:0
- else
- STDERR.puts "***Err: Unknown command state: #{state.value}"
- end
- else
- STDERR.puts "***Err: Unknown receive response: #{node.to_xml}"
- end
- end # response.each
-
- #
- # terminate shell command
- #
- # not strictly needed for WinRM 2.0, but WinRM 1.1 requires this
- #
- data = Openwsman::XmlDoc.new("Signal", namespace)
- root = data.root
- root.attr_add nil, "CommandId", command_id
- root.add namespace, "Code", "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/signal/terminate"
- result = client.invoke( options, uri, "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/Signal", data)
- handle_fault client, result
-
- response = result.find(namespace, "SignalResponse")
- unless response
- STDERR.puts "***Err: No SignalResponse in: #{result.to_xml}"
- end
- end
-
- #
- # delete shell resource
- #
-
- if shell_id
- options.options = { }
- options.selectors = { "ShellId" => shell_id }
-
- result = client.invoke( options, uri, "http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete", nil)
- handle_fault client, result
- end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/configure.ac new/openwsman-2.6.2/configure.ac
--- old/openwsman-2.6.1/configure.ac 2015-08-27 15:41:42.000000000 +0200
+++ new/openwsman-2.6.2/configure.ac 2015-10-06 11:06:58.000000000 +0200
@@ -476,12 +476,6 @@
["$OPENWSMAN_PLUGIN_API_VERSION"],
[Plugin API version])
-
-PACKAGE_BUILDTS=`"/bin/date" "+%Y%m%d%H%M"`
-
-AC_DEFINE_UNQUOTED(PACKAGE_BUILDTS, ["$PACKAGE_BUILDTS"], [Build timestamp])
-
-
AC_CHECK_LIB([cmpisfcc], [cmciConnect], [have_sfcc="yes"],[have_sfcc="no"])
AM_CONDITIONAL(BUILD_LIBCIM, test "$have_sfcc" = "yes" )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/examples/CMakeLists.txt new/openwsman-2.6.2/examples/CMakeLists.txt
--- old/openwsman-2.6.1/examples/CMakeLists.txt 2014-07-25 17:08:56.000000000 +0200
+++ new/openwsman-2.6.2/examples/CMakeLists.txt 2015-10-14 14:45:51.000000000 +0200
@@ -4,10 +4,18 @@
include_directories(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
+# serialize
+
SET( serialize_SOURCES serialize.c )
ADD_EXECUTABLE( serialize ${serialize_SOURCES} )
SET( TEST_LIBS wsman wsman_client ${LIBXML2_LIBRARIES} ${CURL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
TARGET_LINK_LIBRARIES( serialize ${TEST_LIBS} )
-CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/test.xml ${CMAKE_CURRENT_BINARY_DIR}/test.xml COPYONLY )
\ No newline at end of file
+# test.xml
+
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/test.xml ${CMAKE_CURRENT_BINARY_DIR}/test.xml COPYONLY )
+
+# winrs.rb
+
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/winrs.rb DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/examples/winrs.rb new/openwsman-2.6.2/examples/winrs.rb
--- old/openwsman-2.6.1/examples/winrs.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/openwsman-2.6.2/examples/winrs.rb 2015-10-14 14:45:51.000000000 +0200
@@ -0,0 +1,300 @@
+# winrs.rb
+#
+# Windows Remote Shell
+#
+# See http://msdn.microsoft.com/en-us/library/cc251731.aspx (Remote Shell Examples)
+# for details on the SOAP protocol
+#
+
+require 'rexml/document'
+require 'openwsman'
+require 'getoptlong'
+
+def usage msg=nil
+ if msg
+ STDERR.puts "Error: #{msg}"
+ STDERR.puts
+ end
+ STDERR.puts "Usage:"
+ STDERR.puts
+ STDERR.puts "winrs [-U|--url <host-url>] [<cmd>]"
+ STDERR.puts "winrs [-s|--scheme http|https] [-h|--host <host>] [-u|--user <user>] [-p|--password <password>] [-P|--port port] [<cmd>]"
+ STDERR.puts
+ STDERR.puts "If <cmd> is given as a command line argument, winrs exists after executing <cmd>."
+ STDERR.puts "Else winrs runs interactively, accepting and executing command until Ctrl-D is pressed."
+ exit 1
+end
+
+def handle_fault client, result
+ unless result
+ if client.last_error != 0
+ STDERR.puts "Client connection to #{client.scheme}://#{client.user}:#{client.password}@#{client.host}:#{client.port}/#{client.path} failed with #{client.last_error} HTTP #{client.response_code}, Fault: #{client.fault_string}"
+ exit 1
+ end
+ if client.response_code != 200
+ STDERR.puts "Client requested result #{client.response_code}, Fault: #{client.fault_string}"
+ exit 1
+ end
+ STDERR.puts "Client action failed for unknown reason"
+ exit 1
+ end
+ if result.fault?
+ fault = Openwsman::Fault.new result
+ STDERR.puts "Fault code #{fault.code}, subcode #{fault.subcode}"
+ STDERR.puts "\treason #{fault.reason}"
+ STDERR.puts "\tdetail #{fault.detail}"
+ exit 1
+ end
+end
+
+ #
+ # Argument parsing
+ #
+
+ opts = GetoptLong.new(
+ [ "-U", "--url", GetoptLong::REQUIRED_ARGUMENT ],
+ [ "-h", "--host", GetoptLong::REQUIRED_ARGUMENT ],
+ [ "-u", "--user", GetoptLong::REQUIRED_ARGUMENT ],
+ [ "-p", "--password", GetoptLong::REQUIRED_ARGUMENT ],
+ [ "-P", "--port", GetoptLong::REQUIRED_ARGUMENT ],
+ [ "-s", "--scheme", GetoptLong::REQUIRED_ARGUMENT ],
+ [ "-?", "--help", GetoptLong::NO_ARGUMENT ],
+ [ "-d", "--debug", GetoptLong::NO_ARGUMENT ]
+ )
+
+ options = { }
+ url = nil
+ opts.each do |opt,arg|
+ case opt
+ when "-?"
+ usage
+ exit 0
+ when "-U"
+ usage "-U|--url invalid, --host|--user|--password|--port already given" unless options.empty?
+ url = arg
+ when "-h"
+ usage "-h|--host invalid, --url already given" unless url.nil?
+ options[:host] = arg
+ when "-u"
+ usage "-u|--user invalid, --url already given" unless url.nil?
+ options[:user] = arg
+ when "-p"
+ usage "-p|--password invalid, --url already given" unless url.nil?
+ options[:password] = arg
+ when "-P"
+ usage "-P|--port invalid, --url already given" unless url.nil?
+ options[:port] = arg.to_i
+ when "-s"
+ usage "-s|--scheme invalid, --url already given" unless url.nil?
+ options[:scheme] = arg
+ when "-d"
+ Openwsman::debug = 99
+ end
+ end
+
+ options = { :port => 5985, :scheme => "http" }.merge(options)
+
+ commands = ARGV.empty? ? nil : ARGV
+
+
+ client = if url
+ Openwsman::Client.new url
+ elsif options.empty?
+ usage
+ else
+ Openwsman::Client.new(options[:host], options[:port], "wsman", options[:scheme], options[:user], options[:password])
+ end
+
+ #
+ # Client connection
+ #
+
+ client.transport.timeout = 120
+ client.transport.auth_method = Openwsman::BASIC_AUTH_STR
+ # https
+ # client.transport.verify_peer = 0
+ # client.transport.verify_host = 0
+
+ options = Openwsman::ClientOptions.new
+ options.set_dump_request if Openwsman::debug == 99
+ options.timeout = 60 * 1000 # 60 seconds
+ uri = "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/cmd"
+
+ #
+ # Start shell
+ #
+
+ service = "Themes"
+ options.add_selector( "Name", service )
+
+ options.add_option "WINRS_NOPROFILE","FALSE"
+ options.add_option "WINRS_CODEPAGE", 437
+
+ # instance values
+ instance = { "InputStreams" => "stdin", "OutputStreams" => "stdout stderr" }
+
+ namespace = "http://schemas.microsoft.com/wbem/wsman/1/windows/shell"
+ data = Openwsman::XmlDoc.new("Shell", namespace)
+ root = data.root
+ instance.each do |key,value|
+ root.add namespace, key, value
+ end
+
+ s = data.to_xml
+ result = client.create( options, uri, s, s.size, "utf-8" )
+ # returns something like
+ #
+ #
+ # http://10.120.5.37:5985/wsman
+ #
+ # http://schemas.microsoft.com/wbem/wsman/1/windows/shell/cmd
+ #
+ # 3D5D8879-98EA-49B7-9A33-6842EC0D35D0
+ #
+ #
+ #
+ #
+ handle_fault client, result
+
+ shell_id = result.find(nil, "Selector")
+ raise "No shell id returned" unless shell_id
+# puts "Shell ID: #{shell_id}"
+ command_id = nil
+
+ #
+ # Run command(s)
+ #
+
+ loop do
+ if commands
+ break if commands.empty?
+ cmd = commands.shift
+ else
+ print "WinRS> "
+ STDOUT.flush
+ cmd = gets
+ break if cmd.nil?
+ cmd.chomp!
+ next if cmd.empty?
+ end
+
+ # issue command
+ options.options = { "WINRS_CONSOLEMODE_STDIN" => "TRUE", "WINRS_SKIP_CMD_SHELL" => "FALSE" }
+ options.selectors = { "ShellId" => shell_id }
+ data = Openwsman::XmlDoc.new("CommandLine", namespace)
+ root = data.root
+ root.add namespace, "Command", cmd
+ result = client.invoke( options, uri, "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/Command", data)
+ handle_fault client, result
+
+ command_id = result.find(namespace, "CommandId")
+ raise "No command id returned" unless command_id
+ command_id = command_id.text
+# puts "Command ID: #{command_id}"
+
+ #
+ # Request stdout/stderr
+ #
+
+ options.options = { }
+ # keep ShellId selector
+ data = Openwsman::XmlDoc.new("Receive", namespace)
+ root = data.root
+ node = root.add namespace, "DesiredStream", "stdout stderr"
+ node.attr_add nil, "CommandId", command_id
+ result = client.invoke( options, uri, "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/Receive", data)
+ handle_fault client, result
+
+ #
+ # Receive response
+ #
+
+ response = result.find(namespace, "ReceiveResponse")
+ unless response
+ STDERR.puts "***Err: No ReceiveResponse in: #{result.to_xml}"
+ next
+ end
+ response.each do |node|
+ cmd_id = node.attr "CommandId"
+ if cmd_id.nil?
+ STDERR.puts "***Err: No CommandId in ReceiveResponse node: #{node.to_xml}"
+ next
+ end
+ if cmd_id.value != command_id
+ STDERR.puts "***Err: Wrong CommandId in ReceiveResponse node. Expected #{command_id}, found #{cmd_id.value}"
+ next
+ end
+# puts "Node: #{node.to_xml}"
+ case node.name
+ when "Stream"
+ stream_name = node.attr "Name"
+ unless stream_name
+ STDERR.puts "***Err: Stream node has no Name attribute: #{node.to_xml}"
+ next
+ end
+ stream_name = stream_name.value
+ str = node.text.unpack('m')[0]
+ case stream_name
+ when "stdout"
+ puts str
+ when "stderr"
+ STDERR.puts str
+ else
+ STDERR.puts "***Err: Unknown stream name: #{stream_name}"
+ end
+ when "CommandState"
+ state = node.attr "State"
+ unless state
+ STDERR.puts "***Err: CommandState node has no State attribute: #{node.to_xml}"
+ next
+ end
+ case state.value
+ when "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Done"
+ exit_code = node.get "ExitCode"
+ if exit_code
+ STDERR.puts "Exit code: #{exit_code.text}"
+ else
+ STDERR.puts "***Err: No exit code for 'done' command: #{node.to_xml}"
+ end
+ when "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Running"
+ # unclear how to handle this
+ when "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Pending"
+ # no-op
+ # WinRM 1.1 sends this with ExitCode:0
+ else
+ STDERR.puts "***Err: Unknown command state: #{state.value}"
+ end
+ else
+ STDERR.puts "***Err: Unknown receive response: #{node.to_xml}"
+ end
+ end # response.each
+
+ #
+ # terminate shell command
+ #
+ # not strictly needed for WinRM 2.0, but WinRM 1.1 requires this
+ #
+ data = Openwsman::XmlDoc.new("Signal", namespace)
+ root = data.root
+ root.attr_add nil, "CommandId", command_id
+ root.add namespace, "Code", "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/signal/terminate"
+ result = client.invoke( options, uri, "http://schemas.microsoft.com/wbem/wsman/1/windows/shell/Signal", data)
+ handle_fault client, result
+
+ response = result.find(namespace, "SignalResponse")
+ unless response
+ STDERR.puts "***Err: No SignalResponse in: #{result.to_xml}"
+ end
+ end
+
+ #
+ # delete shell resource
+ #
+
+ if shell_id
+ options.options = { }
+ options.selectors = { "ShellId" => shell_id }
+
+ result = client.invoke( options, uri, "http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete", nil)
+ handle_fault client, result
+ end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/include/wsman-key-value.h new/openwsman-2.6.2/include/wsman-key-value.h
--- old/openwsman-2.6.1/include/wsman-key-value.h 2015-08-26 13:33:11.000000000 +0200
+++ new/openwsman-2.6.2/include/wsman-key-value.h 2015-10-06 11:06:59.000000000 +0200
@@ -41,7 +41,7 @@
extern "C" {
#endif /* __cplusplus */
-typedef struct epr_struct epr_t;
+struct epr_struct;
/* key/value pair
* to represent either a value or an epr_t
@@ -51,12 +51,12 @@
int type; /* 0: char*, else epr_t* */
union {
char *text;
- epr_t *epr;
+ struct epr_struct *epr;
} v;
} key_value_t;
/* if kv is non-NULL, it's pre-allocated (part of array) */
-key_value_t *key_value_create(const char *key, const char *text, const epr_t *epr, key_value_t *prealloc);
+key_value_t *key_value_create(const char *key, const char *text, const struct epr_struct *epr, key_value_t *prealloc);
void key_value_copy(const key_value_t *from, key_value_t *to);
/* if part_of_array is non-zero, only release key/value, not element itself */
void key_value_destroy(key_value_t *, int part_of_array);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/package/openwsman.spec new/openwsman-2.6.2/package/openwsman.spec
--- old/openwsman-2.6.1/package/openwsman.spec 2015-06-05 11:44:53.000000000 +0200
+++ new/openwsman-2.6.2/package/openwsman.spec 2015-10-05 16:33:05.000000000 +0200
@@ -331,6 +331,9 @@
cd build
cmake \
-DCMAKE_INSTALL_PREFIX=/usr \
+%if 0%{?suse_version} == 1010 # SLE 10 Java doesn't like EXPLICIT_TARGET any more, disable
+ -DBUILD_JAVA=FALSE \
+%endif
-DCMAKE_VERBOSE_MAKEFILE=TRUE \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS_RELEASE:STRING="$RPM_OPT_FLAGS -fno-strict-aliasing" \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/package/openwsman.spec.in new/openwsman-2.6.2/package/openwsman.spec.in
--- old/openwsman-2.6.1/package/openwsman.spec.in 2015-08-27 15:44:28.000000000 +0200
+++ new/openwsman-2.6.2/package/openwsman.spec.in 2015-10-14 14:49:41.000000000 +0200
@@ -43,7 +43,7 @@
%if 0%{?fedora} == 16 || (0%{?centos_version}>=500 && 0%{?centos_version}<700) || (0%{?rhel_version}>=500 && 0%{?rhel_version}<700)
BuildRequires: java-1.6.0-openjdk-devel
%else
-%if 0%{?fedora} >= 17 || 0%{?centos_version} >= 700 || 0%{?rhel_version} >= 700
+%if (0%{?fedora} >= 17 && 0%{?fedora} < 22) || 0%{?centos_version} >= 700 || 0%{?rhel_version} >= 700
BuildRequires: java-1.7.0-openjdk-devel
%else
BuildRequires: java-devel
@@ -309,6 +309,16 @@
%endif
+%package -n winrs
+Summary: Windows Remote Shell
+Group: System/Management
+Requires: openwsman-ruby = %{version}
+
+%description -n winrs
+This is a command line tool for the Windows Remote Shell protocol. You
+can use it to send shell commands to a remote Windows hosts.
+
+
%prep
%setup -q
%if 0%{?fedora_version} || 0%{?centos_version} || 0%{?rhel_version} || 0%{?fedora} || 0%{?rhel}
@@ -330,8 +340,12 @@
%endif
cd build
+# SLE 10 Java doesn't like EXPLICIT_TARGET any more, disable
cmake \
-DCMAKE_INSTALL_PREFIX=/usr \
+%if 0%{?suse_version} == 1010
+ -DBUILD_JAVA=FALSE \
+%endif
-DCMAKE_VERBOSE_MAKEFILE=TRUE \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS_RELEASE:STRING="$RPM_OPT_FLAGS -fno-strict-aliasing" \
@@ -374,6 +388,9 @@
install -D -m 644 %{S:3} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/openwsman
%endif
+# rename winrs.rb -> winrs
+mv $RPM_BUILD_ROOT%{_bindir}/winrs.rb $RPM_BUILD_ROOT%{_bindir}/winrs
+
%post -n libwsman3 -p /sbin/ldconfig
%postun -n libwsman3
@@ -496,6 +513,7 @@
%{_sbindir}/rc%{name}
%else
%attr(0755,root,root) %{_sysconfdir}/init.d/openwsmand
+%{_sbindir}/rc%{name}d
%endif
%dir %{_libdir}/openwsman
%dir %{_libdir}/openwsman/authenticators
@@ -522,4 +540,8 @@
%dir %{_includedir}/openwsman/cpp
%{_includedir}/openwsman/cpp/*.h
+%files -n winrs
+%defattr(-,root,root)
+%{_bindir}/winrs
+
%changelog
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/src/lib/u/iniparser.c new/openwsman-2.6.2/src/lib/u/iniparser.c
--- old/openwsman-2.6.1/src/lib/u/iniparser.c 2015-08-27 12:03:58.000000000 +0200
+++ new/openwsman-2.6.2/src/lib/u/iniparser.c 2015-10-14 14:45:16.000000000 +0200
@@ -49,21 +49,19 @@
/**
@brief Convert a string to lowercase.
@param s String to convert.
- @return ptr to statically allocated string.
+ @param l Pointer to destination string.
+ @return ptr to the destination string.
- This function returns a pointer to a statically allocated string
- containing a lowercased version of the input string. Do not free
- or modify the returned string! Since the returned string is statically
- allocated, it will be modified at each function call (not re-entrant).
+ This function returns a pointer to string containing
+ a lowercased version of the input string.
*/
/*--------------------------------------------------------------------------*/
-static char * strlwc(char * s)
+static char * strlwc(char * s, char * l)
{
- static char l[ASCIILINESZ+1];
int i ;
- if (s==NULL) return NULL ;
+ if ((s==NULL) || (l==NULL)) return NULL ;
memset(l, 0, ASCIILINESZ+1);
i=0 ;
while (s[i] && iselectors);
list_destroy(options->selectors);
}
- _wsmc_add_uri_to_list(&(options->selectors), resource_uri);
+ u_uri_t *uri = u_malloc(sizeof(u_uri_t));
+ u_uri_parse(resource_uri, &uri);
+ wsmc_add_selectors_from_str(options, uri->query);
+ u_uri_free(uri);
}
/* Err: should be wsmc_set_selectors_from_uri() */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/src/lib/wsman-curl-client-transport.c new/openwsman-2.6.2/src/lib/wsman-curl-client-transport.c
--- old/openwsman-2.6.1/src/lib/wsman-curl-client-transport.c 2015-08-27 12:03:58.000000000 +0200
+++ new/openwsman-2.6.2/src/lib/wsman-curl-client-transport.c 2015-10-14 14:45:51.000000000 +0200
@@ -626,6 +626,7 @@
*/
r = 67;
#endif
+ cl->fault_string = u_strdup(curl_easy_strerror(r));
curl_err("user/password wrong or empty.");
break;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/src/server/wsmand-daemon.c new/openwsman-2.6.2/src/server/wsmand-daemon.c
--- old/openwsman-2.6.1/src/server/wsmand-daemon.c 2015-08-26 13:33:12.000000000 +0200
+++ new/openwsman-2.6.2/src/server/wsmand-daemon.c 2015-10-06 11:06:58.000000000 +0200
@@ -146,7 +146,7 @@
retval = 0;
}
if (version) {
- fprintf(stdout, PACKAGE_NAME " " PACKAGE_VERSION " (" PACKAGE_BUILDTS ")\n\n");
+ fprintf(stdout, PACKAGE_NAME " " PACKAGE_VERSION "\n\n");
exit(0);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openwsman-2.6.1/wsman_config.h.cmake new/openwsman-2.6.2/wsman_config.h.cmake
--- old/openwsman-2.6.1/wsman_config.h.cmake 2015-08-26 10:12:50.000000000 +0200
+++ new/openwsman-2.6.2/wsman_config.h.cmake 2015-10-06 11:06:58.000000000 +0200
@@ -360,9 +360,6 @@
/* Define to the API version of the server plugin interface. */
#define OPENWSMAN_PLUGIN_API_VERSION @OPENWSMAN_PLUGIN_API_VERSION@
-/* Define to the built timestamp of this package. */
-#define PACKAGE_BUILDTS "@PACKAGE_BUILDTS@"
-
/* The size of `int', as computed by sizeof. */
#define SIZEOF_INT @SIZEOF_INT@