Hello community,

here is the log from the commit of package yast2-network for openSUSE:Factory 
checked in at 2018-04-26 13:31:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-network (Old)
 and      /work/SRC/openSUSE:Factory/.yast2-network.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "yast2-network"

Thu Apr 26 13:31:52 2018 rev:384 rq:601002 version:4.0.30

Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-network/yast2-network.changes      
2018-04-07 20:52:35.724079666 +0200
+++ /work/SRC/openSUSE:Factory/.yast2-network.new/yast2-network.changes 
2018-04-26 13:31:54.965525189 +0200
@@ -1,0 +2,40 @@
+Wed Apr 25 08:31:35 UTC 2018 - knut.anders...@suse.com
+
+- Y2remote: When vnc is disabled disable also all the services that
+  are still enabled (bsc#1088646)
+- 4.0.30
+
+-------------------------------------------------------------------
+Wed Apr 25 07:01:58 UTC 2018 - mfi...@suse.com
+
+- bnc#1077435
+  - do not crash with internal error when /etc/hosts is corrupted
+- 4.0.29
+
+-------------------------------------------------------------------
+Mon Apr 23 18:10:29 UTC 2018 - mfi...@suse.com
+
+- bnc#1089471 
+  - previous fix contains wrong check of ifcfg options and proposes
+    wpa_supplicant incorrectly. The check was fixed and
+    wpa_supplicant is proposed when needed only.
+- 4.0.28
+
+-------------------------------------------------------------------
+Sat Apr 21 18:15:56 UTC 2018 - mfi...@suse.com
+
+- bnc#1089471
+  - do not propose vlan, iw and tunctl packages for installation as
+    its functionality is implemented by wicked.
+- 4.0.27
+
+-------------------------------------------------------------------
+Thu Apr 19 00:31:15 UTC 2018 - knut.anders...@suse.com
+
+- Y2Remote:
+  - Fixed the start of services when writing (bsc#1088646)
+  - Fixed the modification of vnc services configuration according
+    to the selection of allowed interfaces (bsc#1088647)
+- 4.0.26
+
+-------------------------------------------------------------------

Old:
----
  yast2-network-4.0.25.tar.bz2

New:
----
  yast2-network-4.0.30.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ yast2-network.spec ++++++
--- /var/tmp/diff_new_pack.RnXZBE/_old  2018-04-26 13:31:55.461507020 +0200
+++ /var/tmp/diff_new_pack.RnXZBE/_new  2018-04-26 13:31:55.461507020 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-network
-Version:        4.0.25
+Version:        4.0.30
 Release:        0
 BuildArch:      noarch
 
@@ -45,9 +45,9 @@
 # Packages::vnc_packages
 Requires:       yast2-packager >= 4.0.18
 BuildRequires:  yast2-packager >= 4.0.18
-# cfa for parsing hosts, AugeasTree#unique_id
-BuildRequires:  rubygem(%rb_default_ruby_abi:cfa) >= 0.6.0
-Requires:       rubygem(%rb_default_ruby_abi:cfa) >= 0.6.0
+# cfa for parsing hosts
+BuildRequires:  rubygem(%rb_default_ruby_abi:cfa) >= 0.6.4
+Requires:       rubygem(%rb_default_ruby_abi:cfa) >= 0.6.4
 # lenses are needed to use cfa
 BuildRequires:  augeas-lenses
 Requires:       augeas-lenses

++++++ yast2-network-4.0.25.tar.bz2 -> yast2-network-4.0.30.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/package/yast2-network.changes 
new/yast2-network-4.0.30/package/yast2-network.changes
--- old/yast2-network-4.0.25/package/yast2-network.changes      2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/package/yast2-network.changes      2018-04-25 
14:52:17.000000000 +0200
@@ -1,4 +1,44 @@
 -------------------------------------------------------------------
+Wed Apr 25 08:31:35 UTC 2018 - knut.anders...@suse.com
+
+- Y2remote: When vnc is disabled disable also all the services that
+  are still enabled (bsc#1088646)
+- 4.0.30
+
+-------------------------------------------------------------------
+Wed Apr 25 07:01:58 UTC 2018 - mfi...@suse.com
+
+- bnc#1077435
+  - do not crash with internal error when /etc/hosts is corrupted
+- 4.0.29
+
+-------------------------------------------------------------------
+Mon Apr 23 18:10:29 UTC 2018 - mfi...@suse.com
+
+- bnc#1089471 
+  - previous fix contains wrong check of ifcfg options and proposes
+    wpa_supplicant incorrectly. The check was fixed and
+    wpa_supplicant is proposed when needed only.
+- 4.0.28
+
+-------------------------------------------------------------------
+Sat Apr 21 18:15:56 UTC 2018 - mfi...@suse.com
+
+- bnc#1089471
+  - do not propose vlan, iw and tunctl packages for installation as
+    its functionality is implemented by wicked.
+- 4.0.27
+
+-------------------------------------------------------------------
+Thu Apr 19 00:31:15 UTC 2018 - knut.anders...@suse.com
+
+- Y2Remote:
+  - Fixed the start of services when writing (bsc#1088646)
+  - Fixed the modification of vnc services configuration according
+    to the selection of allowed interfaces (bsc#1088647)
+- 4.0.26
+
+-------------------------------------------------------------------
 Fri Apr  6 16:17:45 UTC 2018 - knut.anders...@suse.com
 
 - Fixed preformatted proposal for network module (bsc#1088488)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/package/yast2-network.spec 
new/yast2-network-4.0.30/package/yast2-network.spec
--- old/yast2-network-4.0.25/package/yast2-network.spec 2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/package/yast2-network.spec 2018-04-25 
14:52:17.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-network
-Version:        4.0.25
+Version:        4.0.30
 Release:        0
 BuildArch:      noarch
 
@@ -45,9 +45,9 @@
 # Packages::vnc_packages
 Requires:       yast2-packager >= 4.0.18
 BuildRequires:  yast2-packager >= 4.0.18
-# cfa for parsing hosts, AugeasTree#unique_id
-BuildRequires:  rubygem(%rb_default_ruby_abi:cfa) >= 0.6.0
-Requires:       rubygem(%rb_default_ruby_abi:cfa) >= 0.6.0
+# cfa for parsing hosts
+BuildRequires:  rubygem(%rb_default_ruby_abi:cfa) >= 0.6.4
+Requires:       rubygem(%rb_default_ruby_abi:cfa) >= 0.6.4
 # lenses are needed to use cfa
 BuildRequires:  augeas-lenses
 Requires:       augeas-lenses
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/clients/dns.rb 
new/yast2-network-4.0.30/src/clients/dns.rb
--- old/yast2-network-4.0.25/src/clients/dns.rb 2018-04-06 19:43:36.000000000 
+0200
+++ new/yast2-network-4.0.30/src/clients/dns.rb 2018-04-25 14:52:17.000000000 
+0200
@@ -153,7 +153,7 @@
     end
 
     # Handler for action "list"
-    # @param [Hash{String => String}] options action options
+    # @param _options [Hash{String => String}] action options
     def ListHandler(_options)
       # Command line output Headline
       summary = Ops.add(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/clients/host.rb 
new/yast2-network-4.0.30/src/clients/host.rb
--- old/yast2-network-4.0.25/src/clients/host.rb        2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/clients/host.rb        2018-04-25 
14:52:17.000000000 +0200
@@ -105,7 +105,7 @@
     end
 
     # Handler for action "list"
-    # @param [Hash{String => String}] options action options
+    # @param _options [Hash{String => String}] action options
     def ListHandler(_options)
       # Command line output Headline
       # configuration of hosts
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/clients/inst_do_net_test.rb 
new/yast2-network-4.0.30/src/clients/inst_do_net_test.rb
--- old/yast2-network-4.0.25/src/clients/inst_do_net_test.rb    2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/clients/inst_do_net_test.rb    2018-04-25 
14:52:17.000000000 +0200
@@ -597,8 +597,8 @@
     # Function checks two versions of installed rpm and decides whether the 
second one is
     # newer than the first one. This function ignores non-numerical values in 
versions
     #
-    # @param string first version
-    # @param string second version
+    # @param installed_rpm_version [String] first version
+    # @param downloaded_rpm_version [String] second version
     # @return [Boolean] true if the second one is newer than the first one
     def IsDownloadedVersionNewer(installed_rpm_version, downloaded_rpm_version)
       installed_rpm_version_l = Builtins.filter(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/clients/remote.rb 
new/yast2-network-4.0.30/src/clients/remote.rb
--- old/yast2-network-4.0.25/src/clients/remote.rb      2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/clients/remote.rb      2018-04-25 
14:52:17.000000000 +0200
@@ -130,7 +130,7 @@
     end
 
     # Handler for action "list"
-    # @param [Hash{String => String}] options action options
+    # @param _options [Hash{String => String}] action options
     def ListHandler(_options)
       # Command line output Headline
       summary = Ops.add(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/clients/routing.rb 
new/yast2-network-4.0.30/src/clients/routing.rb
--- old/yast2-network-4.0.25/src/clients/routing.rb     2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/clients/routing.rb     2018-04-25 
14:52:17.000000000 +0200
@@ -217,7 +217,7 @@
     end
 
     # Handler for action "list"
-    # @param [Hash{String => String}] options action options
+    # @param _options [Hash{String => String}] action options
     def ListHandler(_options)
       CommandLine.Print(PrintableRoutingTable(Routing.Routes))
       CommandLine.Print("")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.0.25/src/include/network/lan/address.rb 
new/yast2-network-4.0.30/src/include/network/lan/address.rb
--- old/yast2-network-4.0.25/src/include/network/lan/address.rb 2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/include/network/lan/address.rb 2018-04-25 
14:52:17.000000000 +0200
@@ -397,12 +397,6 @@
       )
     end
 
-    # obsoleted by GetDefaultsForHW
-    # @return `next
-    def ChangeDefaults
-      :next
-    end
-
     # `RadioButtonGroup uses CurrentButton instead of Value, grrr
     # @param [String] key widget id
     # @return what property to ask for to get the widget value
@@ -414,8 +408,8 @@
     end
 
     # Debug messages configurable at runtime
-    # @param [String] class debug class
-    # @param [String] msg message to log
+    # @param class_ [String] debug class
+    # @param msg [String] message to log
     def my2debug(class_, msg)
       if SCR.Read(path(".target.size"), Ops.add("/tmp/my2debug/", class_)) != 
-1
         Builtins.y2internal(Ops.add(Ops.add(class_, ": "), msg))
@@ -472,8 +466,7 @@
     end
 
     # Default function to store the value of devices attached to bridge 
(BRIDGE_PORTS).
-    # @param [String] key      id of the widget
-    # @param [String] key id of the widget
+    # @param key [String] id of the widget
     def StoreBridge(key, _event)
       selected_bridge_ports = UI.QueryWidget(Id("BRIDGE_PORTS"), 
:SelectedItems) || []
 
@@ -487,7 +480,7 @@
     end
 
     # Default function to init the value of slave ETHERDEVICE box.
-    # @param [String] key      id of the widget
+    # @param _key [String] id of the widget
     def InitVLANSlave(_key)
       items = []
       # unconfigured devices
@@ -558,8 +551,7 @@
     end
 
     # Default function to store the value of ETHERDEVICE devices box.
-    # @param [String] key      id of the widget
-    # @param [String] key id of the widget
+    # @param _key [String] id of the widget
     def StoreVLANSlave(_key, _event)
       Ops.set(
         @settings,
@@ -600,7 +592,7 @@
     end
 
     # Default function to init the value of slave devices box for bonding.
-    # @param [String] key      id of the widget
+    # @param _key [String] id of the widget
     def InitSlave(_key)
       @settings["SLAVES"] = LanItems.bond_slaves || []
 
@@ -677,8 +669,7 @@
     end
 
     # Default function to store the value of slave devices box.
-    # @param [String] key      id of the widget
-    # @param [String] key id of the widget
+    # @param _key [String] id of the widget
     def StoreSlave(_key, _event)
       configured_slaves = @settings["SLAVES"] || []
 
@@ -704,8 +695,8 @@
     # Validates created bonding. Currently just prevent the user to create a
     # bond with more than one interface sharing the same physical port id
     #
-    # @param [String] key the widget being validated
-    # @param [Hash] event the event being handled
+    # @param _key [String] the widget being validated
+    # @param _event [Hash] the event being handled
     # @return true if valid or user decision if not
     def validate_bond(_key, _event)
       selected_slaves = UI.QueryWidget(:msbox_items, :SelectedItems) || []
@@ -759,10 +750,8 @@
 
     # Initialize a RadioButtonGroup
     # Group called FOO has buttons FOO_bar FOO_qux and values bar qux
-    # @param [String] key id of the widget
+    # @param _key [String] id of the widget
     def initBootProto(_key)
-      #  if (LanItems::type=="br") UI::ReplaceWidget(`rp, `Empty());
-      #        else
       if LanItems.type != "eth"
         UI.ReplaceWidget(
           :rp,
@@ -862,8 +851,8 @@
 
     # Store a RadioButtonGroup
     # Group called FOO has buttons FOO_bar FOO_qux and values bar qux
-    # @param [String] key      id of the widget
-    # @param [Hash] event      the event being handled
+    # @param _key [String] id of the widget
+    # @param _event [Hash] the event being handled
     def storeBootProto(_key, _event)
       case Convert.to_symbol(UI.QueryWidget(Id(:bootproto), :CurrentButton))
       when :none
@@ -938,8 +927,8 @@
     end
 
     # Remap the buttons to their Wizard Sequencer values
-    # @param [String] key      the widget receiving the event
-    # @param [Hash] event      the event being handled
+    # @param _key [String] the widget receiving the event
+    # @param event [Hash] the event being handled
     # @return nil so that the dialog loops on
     def HandleButton(_key, event)
       event = deep_copy(event)
@@ -962,8 +951,8 @@
     end
 
     # Validator for network masks adresses
-    # @param [String] key      the widget being validated
-    # @param [Hash] event      the event being handled
+    # @param key [String] the widget being validated
+    # @param _event [Hash] the event being handled
     # @return whether valid
     def ValidateNetmask(key, _event)
       # TODO: general CWM improvement idea: validate and save only nondisabled
@@ -976,8 +965,8 @@
     end
 
     # Validator for ifcfg names
-    # @param [String] key      the widget being validated
-    # @param [Hash] event      the event being handled
+    # @param key [String] the widget being validated
+    # @param _event [Hash] the event being handled
     # @return whether valid
     def ValidateIfcfgType(key, _event)
       if LanItems.operation == :add
@@ -1016,8 +1005,8 @@
     end
 
     # Validator for network masks adresses
-    # @param [String] key      the widget being validated
-    # @param [Hash] event      the event being handled
+    # @param _key [String] the widget being validated
+    # @param _event [Hash] the event being handled
     # @return whether valid
     def ValidateBootproto(_key, _event)
       if UI.QueryWidget(:bootproto, :CurrentButton) == :static
@@ -1075,7 +1064,7 @@
 
     # Initialize value of firewall zone widget
     # (disables it when SuSEFirewall is not installed)
-    # @param [String] key id of the widget
+    # @param _key [String] id of the widget
     def InitFwZone(_key)
       if SuSEFirewall4Network.IsInstalled
         UI.ChangeWidget(
@@ -1494,7 +1483,7 @@
     # Given a map of duplicated port ids with device names, aks the user if he
     # would like to continue or not.
     #
-    # @param [Hash{String => Array<String>}] hash of duplicated physical port 
ids
+    # @param physical_ports [Hash{String => Array<String>}] hash of duplicated 
physical port ids
     # mapping to an array of device names
     # @return [Boolean] true if continue with duplicates, otherwise false
     def continue_with_duplicates?(physical_ports)
@@ -1515,7 +1504,7 @@
     # Given a list of device names returns a hash of physical port ids mapping
     # device names if at least two devices shared the same physical port id
     #
-    # @param [Array<String] bonding slaves
+    # @param slaves [Array<String>] bonding slaves
     # @return [Hash{String => Array<String>}] of duplicated physical port ids
     def repeated_physical_port_ids(slaves)
       physical_port_ids = {}
@@ -1543,8 +1532,8 @@
     # Otherwise the canonical name and all aliases in the record
     # are replaced by new ones.
     #
-    # @param [String] ip address
-    # @param [String] new hostname
+    # @param ipaddr [String] ip address
+    # @param hostname [String] new hostname
     def update_hostname(ipaddr, hostname)
       ip_changed = LanItems.ipaddr != ipaddr
       initial_hostname = initial_hostname(LanItems.ipaddr)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.0.25/src/include/network/lan/complex.rb 
new/yast2-network-4.0.30/src/include/network/lan/complex.rb
--- old/yast2-network-4.0.25/src/include/network/lan/complex.rb 2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/include/network/lan/complex.rb 2018-04-25 
14:52:17.000000000 +0200
@@ -408,7 +408,6 @@
                 return nil # means cancel
               end
 
-              # TODO: move the defaults to GetDefaultsForHW
               LanItems.startmode = "ifplugd"
             end
           else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.0.25/src/include/network/lan/virtual.rb 
new/yast2-network-4.0.30/src/include/network/lan/virtual.rb
--- old/yast2-network-4.0.25/src/include/network/lan/virtual.rb 2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/include/network/lan/virtual.rb 2018-04-25 
14:52:17.000000000 +0200
@@ -81,7 +81,6 @@
     end
 
     # Main aliases dialog
-    # @param standalone true if not run from another ycp client
     # @return dialog result
     def handleAdditional(_key, event)
       event = deep_copy(event)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.0.25/src/include/network/lan/wireless.rb 
new/yast2-network-4.0.30/src/include/network/lan/wireless.rb
--- old/yast2-network-4.0.25/src/include/network/lan/wireless.rb        
2018-04-06 19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/include/network/lan/wireless.rb        
2018-04-25 14:52:17.000000000 +0200
@@ -1144,8 +1144,8 @@
 
     # Event handler for EAP mode:
     # enable or disable appropriate widgets
-    # @param [String] key      the widget receiving the event
-    # @param [Hash] event      the event being handled
+    # @param key [String] the widget receiving the event
+    # @param _event [Hash] the event being handled
     # @return nil so that the dialog loops on
     def HandleEapMode(key, _event)
       tls = UI.QueryWidget(Id(key), :Value) == "TLS"
@@ -1221,8 +1221,8 @@
     end
 
     # Remap the buttons to their Wizard Sequencer values
-    # @param [String] key      the widget receiving the event
-    # @param [Hash] event      the event being handled
+    # @param _key [String] the widget receiving the event
+    # @param event [Hash] the event being handled
     # @return nil so that the dialog loops on
     def HandleDetails(_key, event)
       event = deep_copy(event)
@@ -1231,8 +1231,8 @@
     end
 
     # Called to validate that the file entered exists
-    # @param [String] key widget id
-    # @param [Hash] event ?
+    # @param key [String] widget id
+    # @param _event [Hash] the event being handled
     # @return ok?
     def ValidateFileExists(key, _event)
       file = Convert.to_string(UI.QueryWidget(Id(key), :Value))
@@ -1265,8 +1265,8 @@
     end
 
     # Called to validate that the whole dialog makes sense together
-    # @param [String] key widget id
-    # @param [Hash] event ?
+    # @param _key [String] widget id
+    # @param _event [Hash] the event being handled
     # @return ok?
     def ValidateWpaEap(_key, _event)
       tmp = Builtins.listmap(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/include/network/routines.rb 
new/yast2-network-4.0.30/src/include/network/routines.rb
--- old/yast2-network-4.0.25/src/include/network/routines.rb    2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/include/network/routines.rb    2018-04-25 
14:52:17.000000000 +0200
@@ -183,8 +183,8 @@
     end
 
     # Create a list of items for UI from the given list
-    # @param [Array] l given list for conversion
-    # @param [Fixnum] selected selected item (0 for the first)
+    # @param descriptions [Array] given list for conversion
+    # @param selected_index [Fixnum] selected item (0 for the first)
     # @return a list of items
     # @example [ "x", "y" ] -&gt; [ `item(`id(0), "x"), `item(`id(1), "y") ]
     def list2items(descriptions, selected_index)
@@ -199,8 +199,8 @@
     # <li> undetected cards manually. there is no link status there
     # and it won't be displayed. all is ok. </li>
     # </ol>
-    # @param [Array<Hash>] l given list for conversion
-    # @param [Fixnum] selected selected item (0 for the first)
+    # @param descriptions [Array<Hash>] given list for conversion
+    # @param selected_index [Fixnum] selected item (0 for the first)
     # @return a list of items
     def hwlist2items(descriptions, selected_index)
       descriptions.map.with_index do |d, i|
@@ -675,7 +675,7 @@
     # TODO: begin:
     # Following functions should be generalized and ported into yast-yast2
 
-    # @param Shell command to run
+    # @param command [String] Shell command to run
     # @return Hash in form $[ "exit": <command-exit-status>, "output": [ <1st 
line>, <2nd line>, ... ] ]
     def RunAndRead(command)
       ret = { "exit" => false, "output" => [] }
@@ -705,7 +705,7 @@
       deep_copy(ret)
     end
 
-    # @param Shell command to run
+    # @param command [String] Shell command to run
     # @return whether command execution succeeds
     def Run(command)
       ret = SCR.Execute(path(".target.bash"), command).zero?
@@ -735,7 +735,7 @@
 
     # Wrapper to call 'ip link set up' with the given interface
     #
-    # @param [String] name of interface to 'set link up'
+    # @param dev_name [String] name of interface to 'set link up'
     def SetLinkUp(dev_name)
       log.info("Setting link up for interface #{dev_name}")
       Run("ip link set #{dev_name} up")
@@ -743,7 +743,7 @@
 
     # Wrapper to call 'ip link set down' with the given interface
     #
-    # @param [String] name of interface to 'set link down'
+    # @param dev_name [String] name of interface to 'set link down'
     def SetLinkDown(dev_name)
       log.info("Setting link down for interface #{dev_name}")
       Run("ip link set #{dev_name} down")
@@ -751,7 +751,7 @@
 
     # Calls wicked ifup with the given interface
     #
-    # @param [String] name of interface to put down
+    # @param dev_name [String] name of interface to put down
     def SetIfaceUp(dev_name)
       log.info("Setting interface #{dev_name} up")
       Run("ifup #{dev_name}")
@@ -759,7 +759,7 @@
 
     # Calls wicked ifdown with the given interface
     #
-    # @param [String] name of interface to put down
+    # @param dev_name [String] name of interface to put down
     def SetIfaceDown(dev_name)
       log.info("Setting interface #{dev_name} down")
       Run("ifdown #{dev_name}")
@@ -784,7 +784,7 @@
     # port in various. If the driver module support it, we can check the phys
     # port id via sysfs reading the /sys/class/net/$dev_name/phys_port_id
     #
-    # @param [String] device name to check
+    # @param dev_name [String] device name to check
     # @return [String] physical port id if supported or a empty string if not
     def physical_port_id(dev_name)
       SCR.Read(
@@ -801,7 +801,7 @@
 
     # Dev port of the given interface from /sys/class/net/$dev_name/dev_port
     #
-    # @param [String] device name to check
+    # @param dev_name [String] device name to check
     # @return [String] dev port or an empty string if not
     def dev_port(dev_name)
       SCR.Read(
@@ -960,7 +960,7 @@
     # Returns a generic message informing user that incorrect 
DHCLIENT_SET_HOSTNAME
     # setup was detected.
     #
-    # @param [Array<String>] list of incorrectly configured devices
+    # @param cfgs [Array<String>] list of incorrectly configured devices
     # @return [String] a message stating that incorrect DHCLIENT_SET_HOSTNAME 
setup was detected
     def fix_dhclient_msg(cfgs)
       format(
@@ -976,7 +976,7 @@
 
     # A popup informing user that incorrent DHCLIENT_SET_HOSTNAME was detected
     #
-    # @param [Array<String>] list of incorrectly configured devices
+    # @param devs [Array<String>] list of incorrectly configured devices
     # @return [void]
     def fix_dhclient_warning(devs)
       Report.Warning(fix_dhclient_msg(devs))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.0.25/src/include/network/services/dns.rb 
new/yast2-network-4.0.30/src/include/network/services/dns.rb
--- old/yast2-network-4.0.25/src/include/network/services/dns.rb        
2018-04-06 19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/include/network/services/dns.rb        
2018-04-25 14:52:17.000000000 +0200
@@ -397,8 +397,8 @@
     end
 
     # Default function to store the value of a widget.
-    # @param [String] key      id of the widget
-    # @param [Hash] event      the event being handled
+    # @param key [String] id of the widget
+    # @param _event [Hash] the event being handled
     def StoreHnWidget(key, _event)
       value = UI.QueryWidget(Id(key), :Value)
       SetHnItem(key, value)
@@ -486,8 +486,8 @@
 
     # Event handler for resolver data (nameservers, searchlist)
     # enable or disable: is DHCP available?
-    # @param [String] key      the widget receiving the event
-    # @param [Hash] event      the event being handled
+    # @param key [String] the widget receiving the event
+    # @param _event [Hash] the event being handled
     # @return nil so that the dialog loops on
     def HandleResolverData(key, _event)
       # if this one is disabled, it means NM is in charge (see also 
initModifyResolvPolicy())
@@ -499,8 +499,8 @@
     end
 
     # Validator for hostname, no_popup
-    # @param [String] key      the widget being validated
-    # @param [Hash] event      the event being handled
+    # @param key [String] the widget being validated
+    # @param _event [Hash] the event being handled
     # @return whether valid
     def ValidateHostname(key, _event)
       dhn = has_dhcp? && use_dhcp_hostname?
@@ -514,8 +514,8 @@
     end
 
     # Validator for domain name, no_popup
-    # @param [String] key      the widget being validated
-    # @param [Hash] event      the event being handled
+    # @param key [String] the widget being validated
+    # @param _event [Hash] the event being handled
     # @return whether valid
     def ValidateDomain(key, _event)
       dhn = has_dhcp? && use_dhcp_hostname?
@@ -531,8 +531,8 @@
     end
 
     # Validator for the search list
-    # @param [String] key      the widget being validated
-    # @param [Hash] event      the event being handled
+    # @param key [String] the widget being validated
+    # @param _event [Hash] the event being handled
     # @return whether valid
     def ValidateSearchList(key, _event)
       value = Convert.to_string(UI.QueryWidget(Id(key), :Value))
@@ -651,7 +651,7 @@
     end
 
     # Used in GUI mode - initializes widgets according hn_settings
-    # @param [String] key ignored
+    # @param _key [String] ignored
     def initHostnameGlobal(_key)
       InitHnSettings()
 
@@ -673,8 +673,8 @@
 
     # Used in GUI mode - updates and stores actuall hostname settings 
according dialog widgets content.
     # It calls store handler for every widget from hn_settings with event as 
an option.
-    # @param [String] key ignored
-    # @param [Hash] event user generated event
+    # @param _key [String] ignored
+    # @param event [Hash] user generated event
     def storeHostnameGlobal(_key, event)
       @hn_settings.keys.each do |key2|
         StoreHnWidget(key2, event) if UI.QueryWidget(Id(key2), :Enabled)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/include/network/widgets.rb 
new/yast2-network-4.0.30/src/include/network/widgets.rb
--- old/yast2-network-4.0.25/src/include/network/widgets.rb     2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/include/network/widgets.rb     2018-04-25 
14:52:17.000000000 +0200
@@ -158,8 +158,8 @@
     end
 
     # Validator for IP adresses, no_popup
-    # @param [String] key      the widget being validated
-    # @param [Hash] event      the event being handled
+    # @param key [String] the widget being validated
+    # @param _event [Hash] the event being handled
     # @return whether valid
     def ValidateIP(key, _event)
       value = Convert.to_string(UI.QueryWidget(Id(key), :Value))
@@ -276,7 +276,7 @@
     end
 
     # Initialize the NetworkManager widget
-    # @param [String] key id of the widget
+    # @param _key [String] id of the widget
     def ManagedInit(_key)
       items = []
 
@@ -318,8 +318,8 @@
     end
 
     # Store the NetworkManager widget
-    # @param [String] key      id of the widget
-    # @param [Hash] event      the event being handled
+    # @param _key [String] id of the widget
+    # @param _event [Hash] the event being handled
     def ManagedStore(_key, _event)
       new_backend = UI.QueryWidget(Id(:managed), :Value)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.0.25/src/lib/network/network_autoconfiguration.rb 
new/yast2-network-4.0.30/src/lib/network/network_autoconfiguration.rb
--- old/yast2-network-4.0.25/src/lib/network/network_autoconfiguration.rb       
2018-04-06 19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/lib/network/network_autoconfiguration.rb       
2018-04-25 14:52:17.000000000 +0200
@@ -153,7 +153,7 @@
 
     # Writes and activates changes in devices configurations
     #
-    # @devnames [Array] list of device names
+    # @param devnames [Array] list of device names
     # @return true when changes were successfully applied
     def activate_changes(devnames)
       return false if !write_configuration
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.0.25/src/lib/network/network_autoyast.rb 
new/yast2-network-4.0.30/src/lib/network/network_autoyast.rb
--- old/yast2-network-4.0.25/src/lib/network/network_autoyast.rb        
2018-04-06 19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/lib/network/network_autoyast.rb        
2018-04-25 14:52:17.000000000 +0200
@@ -26,7 +26,7 @@
 
     # Merges existing config from system into given configuration map
     #
-    # @param [Hash, nil] configuration map
+    # @param conf [Hash, nil] configuration map
     #
     # @return updated configuration map
     def merge_configs(conf)
@@ -281,11 +281,11 @@
 
     # Renames a network device represented by given item.
     #
-    # @param [Integer] item is an item id. See LanItems for detail
-    # @param [String] name_to new device name
-    # @param [String] attr an udev attribute usable in NIC's rule. Currently 
just
+    # @param item [Integer] is an item id. See LanItems for detail
+    # @param name_to [String] new device name
+    # @param attr [String] an udev attribute usable in NIC's rule. Currently 
just
     #  "KERNELS" or "ATTR{address}" makes sense. This parameter is optional
-    # @param [String] value for the given udev attribute. Optional parameter.
+    # @param key [String] for the given udev attribute. Optional parameter.
     def rename_lan_item(item, name_to, attr = nil, key = nil)
       return if item.nil? || item < 0 || item >= LanItems.Items.size
       return if name_to.nil? || name_to.empty?
@@ -375,7 +375,7 @@
 
     # Finds a LanItem which name is in collision to the provided name
     #
-    # @param [String] a device name (eth0, ...)
+    # @param name [String] a device name (eth0, ...)
     # @return [Integer] item id (see LanItems::Items)
     def colliding_item(name)
       colliding_item, _item_map = LanItems.Items.find do |i, _|
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/lib/network/wicked.rb 
new/yast2-network-4.0.30/src/lib/network/wicked.rb
--- old/yast2-network-4.0.25/src/lib/network/wicked.rb  2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/lib/network/wicked.rb  2018-04-25 
14:52:17.000000000 +0200
@@ -8,7 +8,7 @@
 
     # Reloads configuration for each device named in devs
     #
-    # @param [Array] list of device names
+    # @param devs [Array] list of device names
     # @return [Boolean] true if configuration was reloaded; false otherwise
     def reload_config(devs)
       raise ArgumentError if devs.nil?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/lib/y2remote/modes.rb 
new/yast2-network-4.0.30/src/lib/y2remote/modes.rb
--- old/yast2-network-4.0.25/src/lib/y2remote/modes.rb  2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/lib/y2remote/modes.rb  2018-04-25 
14:52:17.000000000 +0200
@@ -45,18 +45,20 @@
     # Restart all the given list of Y2Remote::Modes::Base instances and stop
     # the rest.
     #
-    # @param [Array<Y2Remote::Modes::Base>] list of modes to be restarted, the
+    # @param enable_modes [Array<Y2Remote::Modes::Base>] list of modes to be 
restarted, the
     # rest will be stopped
     def self.restart_modes(enable_modes = [])
-      all.each do |mode|
-        enable_modes.include?(mode.instance) ? mode.instance.restart! : 
mode.instance.stop!
-      end
+      # There are conflicts between modes. Therefore we have to stop first the
+      # disabled ones.
+      all.each { |mc| mc.instance.stop! unless 
enable_modes.include?(mc.instance) }
+
+      enable_modes.each(&:restart!)
     end
 
     # Enable all the given list of Y2Remote::Modes::Base instances and
     # disable the rest.
     #
-    # @param [Array<Y2Remote::Modes::Base>] list of modes to be enabled; the
+    # @param enable_modes [Array<Y2Remote::Modes::Base>] list of modes to be 
enabled; the
     # rest will be disable
     def self.update_status(enable_modes = [])
       all.each do |mode|
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/lib/y2remote/remote.rb 
new/yast2-network-4.0.30/src/lib/y2remote/remote.rb
--- old/yast2-network-4.0.25/src/lib/y2remote/remote.rb 2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/lib/y2remote/remote.rb 2018-04-25 
14:52:17.000000000 +0200
@@ -30,8 +30,7 @@
     include Yast::I18n
 
     GRAPHICAL_TARGET = "graphical".freeze
-
-    FIREWALL_SERVICES_PACKAGE = "xorg-x11-Xvnc".freeze
+    FIREWALL_SERVICES = ["tigervnc", "tigervnc-https"].freeze
 
     # List of Y2Remote::Modes::Base subclasses that are the enabled VNC running
     # modes
@@ -158,23 +157,18 @@
     #
     # @return [Boolean] true if success, false otherwise
     def configure_display_manager
-      if enabled?
-        # Install required packages
-        if !Yast::Package.InstallAll(required_packages)
-          log.error "Installing of required packages failed"
-          return false
-        end
-
-        Y2Remote::Modes.update_status(modes)
+      if enabled? && !Yast::Package.InstallAll(required_packages)
+        log.error "Installing of required packages failed"
+        return false
       end
-
+      Y2Remote::Modes.update_status(modes)
       display_manager.write_remote_access(enabled?)
     end
 
     # Restarts services, reporting errors to the user
     def restart_services
       Yast::SystemdTarget.set_default(GRAPHICAL_TARGET) if enabled?
-      Y2Remote::Modes.restart_modes
+      Y2Remote::Modes.restart_modes(modes)
 
       display_manager.restart if enabled?
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.0.25/src/lib/y2remote/widgets/remote.rb 
new/yast2-network-4.0.30/src/lib/y2remote/widgets/remote.rb
--- old/yast2-network-4.0.25/src/lib/y2remote/widgets/remote.rb 2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/lib/y2remote/widgets/remote.rb 2018-04-25 
14:52:17.000000000 +0200
@@ -177,28 +177,47 @@
     # Widget for opening VNC services in the firewall
     class RemoteFirewall < CWM::CustomWidget
       attr_accessor :cwm_interfaces
+
+      # Constructor
       def initialize
+        textdomain "network"
         @cwm_interfaces = Yast::CWMFirewallInterfaces.CreateOpenFirewallWidget(
-          "services"        => ["tigervnc", "tigervnc-https"],
+          "services"        => services,
           "display_details" => true
         )
-        textdomain "network"
+      end
+
+      def opt
+        [:notify]
       end
 
       def init
-        Yast::CWMFirewallInterfaces.OpenFirewallInit(@cwm_interfaces, "")
+        Yast::CWMFirewallInterfaces.OpenFirewallInit(cwm_interfaces, "")
       end
 
       def contents
-        @cwm_interfaces["custom_widget"]
+        cwm_interfaces["custom_widget"]
       end
 
       def help
-        @cwm_interfaces["help"] || ""
+        cwm_interfaces["help"] || ""
       end
 
       def handle(event)
-        Yast::CWMFirewallInterfaces.OpenFirewallHandle(@cwm_interfaces, "", 
event)
+        Yast::CWMFirewallInterfaces.OpenFirewallHandle(cwm_interfaces, "", 
event)
+      end
+
+      # Applies the configuration of the vnc services according to the allowed
+      # interfaces.
+      def store
+        Yast::CWMFirewallInterfaces.StoreAllowedInterfaces(services)
+      end
+
+    private
+
+      # Convenience method to obtain the vnc firewalld services
+      def services
+        Y2Remote::Remote::FIREWALL_SERVICES
       end
     end
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/modules/Host.rb 
new/yast2-network-4.0.30/src/modules/Host.rb
--- old/yast2-network-4.0.25/src/modules/Host.rb        2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/modules/Host.rb        2018-04-25 
14:52:17.000000000 +0200
@@ -114,7 +114,7 @@
     # @return true if success, raises an exception in case of malformed file
     def Read
       return true if @initialized
-      return true if !load_hosts
+      return false if !load_hosts
 
       Builtins.y2debug("hosts=#{@hosts.inspect}")
 
@@ -218,10 +218,10 @@
 
     # Update hosts according to the current hostname
     # (only one hostname, assigned to all IP)
-    # @param hostname current hostname
-    # @param domain current domain name
-    # @param String ip to assign
-    # @return true if success
+    # @param oldhn [String] current hostname
+    # @param newhn [String] current domain name
+    # @param ip [String] to assign
+    # @return [Boolean] true if success
     def Update(oldhn, newhn, ip)
       raise ArgumentError, "IP cannot be nil" if ip.nil?
       raise ArgumentError, "Nonempty IP expected" if ip.empty?
@@ -366,6 +366,18 @@
     @hosts_init.load
 
     true
+
+  # rescuing only those exceptions which are related to /etc/hosts access
+  # (e.g. corrupted file, file access error, ...)
+  rescue IOError, SystemCallError, RuntimeError => error
+    log.error("Loading /etc/hosts failed with exception #{error.inspect}")
+
+    # get clean environment, crashing due to exception is no option here
+    @hosts = CFA::Hosts.new
+    @hosts_init = nil
+
+    # reraise the exception - let the gui takes care of it
+    raise
   end
 
   Host = HostClass.new
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/modules/Lan.rb 
new/yast2-network-4.0.30/src/modules/Lan.rb
--- old/yast2-network-4.0.25/src/modules/Lan.rb 2018-04-06 19:43:36.000000000 
+0200
+++ new/yast2-network-4.0.30/src/modules/Lan.rb 2018-04-25 14:52:17.000000000 
+0200
@@ -31,9 +31,12 @@
 # Input and output routines.
 require "yast"
 require "network/confirm_virt_proposal"
+require "ui/text_helpers"
 
 module Yast
   class LanClass < Module
+    include ::UI::TextHelpers
+
     def main
       Yast.import "UI"
       textdomain "network"
@@ -239,9 +242,7 @@
     end
 
     # Read all network settings from the SCR
-    # @param [Symbol] cache:
-    #  `cache=use cached data,
-    #  `nocache=reread from disk (for reproposal); TODO pass to submodules
+    # @param cache [Symbol] :cache=use cached data, :nocache=reread from disk 
TODO pass to submodules
     # @return true on success
     def Read(cache)
       if cache == :cache && @initialized
@@ -286,9 +287,6 @@
 
       return false if Abort()
 
-      # check the environment
-      #    if(!Confirm::MustBeRoot()) return false;
-
       return false if Abort()
       # Progress step 1/8
       ProgressNextStage(_("Detecting ndiswrapper...")) if @gui
@@ -348,38 +346,47 @@
       return false if Abort()
       # Progress step 4/8
       ProgressNextStage(_("Reading network configuration...")) if @gui
-      NetworkConfig.Read
+      begin
+        NetworkConfig.Read
 
-      @ipv6 = readIPv6
+        @ipv6 = readIPv6
 
-      Builtins.sleep(sl)
+        Builtins.sleep(sl)
 
-      return false if Abort()
-      # Progress step 5/8
-      ProgressNextStage(_("Reading hostname and DNS configuration...")) if @gui
-      DNS.Read
-      Host.Read
-      Builtins.sleep(sl)
+        return false if Abort()
+        # Progress step 5/8
+        ProgressNextStage(_("Reading hostname and DNS configuration...")) if 
@gui
+        DNS.Read
 
-      return false if Abort()
-      # Progress step 6/8
-      ProgressNextStage(_("Reading installation information...")) if @gui
-      #    ReadInstallInf();
-      Builtins.sleep(sl)
+        Host.Read
+        Builtins.sleep(sl)
 
-      return false if Abort()
-      # Progress step 7/8
-      ProgressNextStage(_("Reading routing configuration...")) if @gui
-      Routing.Read
-      Builtins.sleep(sl)
+        return false if Abort()
+        # Progress step 6/8
+        ProgressNextStage(_("Reading installation information...")) if @gui
+        Builtins.sleep(sl)
 
-      return false if Abort()
-      # Progress step 8/8
-      ProgressNextStage(_("Detecting current status...")) if @gui
-      NetworkService.Read
-      Builtins.sleep(sl)
+        return false if Abort()
+        # Progress step 7/8
+        ProgressNextStage(_("Reading routing configuration...")) if @gui
+        Routing.Read
+        Builtins.sleep(sl)
+
+        return false if Abort()
+        # Progress step 8/8
+        ProgressNextStage(_("Detecting current status...")) if @gui
+        NetworkService.Read
+        Builtins.sleep(sl)
+
+        return false if Abort()
+      rescue IOError, SystemCallError, RuntimeError => error
+        msg = format(_("Network configuration is corrupted.\n"\
+                "If you continue resulting configuration can be malformed."\
+                "\n\n%s"), wrap_text(error.message))
+        return false if !@gui
+        return false if !Popup.ContinueCancel(msg)
+      end
 
-      return false if Abort()
       # Final progress step
       ProgressNextStage(_("Finished")) if @gui
       Builtins.sleep(sl)
@@ -395,7 +402,7 @@
     end
 
     # (a specialization used when a parameterless function is needed)
-    # @return Read(`cache)
+    # @return [Boolean] true on success
     def ReadWithCache
       Read(:cache)
     end
@@ -416,16 +423,13 @@
     end
 
     def writeIPv6
-      #  SCR::Write(.target.string, "/etc/modprobe.d/ipv6", sformat("%1install 
ipv6 /bin/true", ipv6?"#":""));
-      # uncomment to write to old place (and comment code bellow)
-      #  SCR::Write(.target.string, "/etc/modprobe.d/50-ipv6.conf", 
sformat("%1install ipv6 /bin/true\n", ipv6?"#":""));
       filename = "/etc/sysctl.conf"
       sysctl = Convert.to_string(SCR.Read(path(".target.string"), filename))
       sysctl_row = Builtins.sformat(
         "%1net.ipv6.conf.all.disable_ipv6 = 1",
         @ipv6 ? "# " : ""
       )
-      found = false # size(regexptokenize(sysctl, 
"(net.ipv6.conf.all.disable_ipv6)"))>0;
+      found = false
       file = []
       Builtins.foreach(Builtins.splitstring(sysctl, "\n")) do |row|
         if Ops.greater_than(
@@ -745,7 +749,7 @@
 
     # Import data.
     # It expects data described networking.rnc
-    # and then passed through {LanAutoClient#FromAY}.
+    # and then passed through {Lan#FromAY}.
     # Most prominently, instead of a flat list called "interfaces"
     # we import a 2-level map of typed "devices"
     # @param [Hash] settings settings to be imported
@@ -881,8 +885,7 @@
       true
     end
 
-    # Delete the given device
-    # @param name device to delete
+    # Delete current device (see LanItems::current)
     # @return true if success
     def Delete
       LanItems.DeleteItem
@@ -975,50 +978,24 @@
       nil
     end
 
+    # Proposes additional packages when needed by current networking setup
+    #
     # @return [Array] of packages needed when writing the config
     def Packages
-      # various device types require some special packages ...
-      type_requires = {
-        # for wlan require iw instead of wireless-tools (bnc#539669)
-        "wlan" => "iw",
-        "vlan" => "vlan",
-        "tun"  => "tunctl",
-        "tap"  => "tunctl"
-      }
-      # ... and some options require special packages as well
-      option_requires = {
-        "WIRELESS_AUTH_MODE" => {
-          "psk" => "wpa_supplicant",
-          "eap" => "wpa_supplicant"
-        }
-      }
-
       pkgs = []
-      type_requires.each do |type, package|
-        ifaces = NetworkInterfaces.List(type)
-        next if ifaces.empty?
-
-        Builtins.y2milestone(
-          "Network interface type #{type} requires package #{package}"
-        )
-        pkgs << package if !PackageSystem.Installed(package)
-      end
-
-      option_requires.each do |option, option_values|
-        option_values.each do |value, package|
-          next if NetworkInterfaces.Locate(option, value) == []
-
-          Builtins.y2milestone(
-            "Network interface with option #{option}=#{value} requires package 
#{package}"
-          )
-          pkgs << package if !PackageSystem.Installed(package)
-        end
-      end
 
       if NetworkService.is_network_manager
         pkgs << "NetworkManager" if !PackageSystem.Installed("NetworkManager")
+      elsif !PackageSystem.Installed("wpa_supplicant")
+        # we have to add wpa_supplicant when wpa is in game, wicked relies on 
it
+        pkgs << "wpa_supplicant" if 
!NetworkInterfaces.Locate("WIRELESS_AUTH_MODE", "psk").empty?
+        pkgs << "wpa_supplicant" if 
!NetworkInterfaces.Locate("WIRELESS_AUTH_MODE", "eap").empty?
       end
 
+      pkgs.uniq!
+
+      log.info("Additional packages requested by yast2-network: 
#{pkgs.inspect}") if !pkgs.empty?
+
       pkgs
     end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/modules/LanItems.rb 
new/yast2-network-4.0.30/src/modules/LanItems.rb
--- old/yast2-network-4.0.25/src/modules/LanItems.rb    2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/modules/LanItems.rb    2018-04-25 
14:52:17.000000000 +0200
@@ -354,7 +354,7 @@
 
     # Inits item's udev rule to a default one if none is present
     #
-    # @param itemId [Integer] a key for {#Items}
+    # @param item_id [Integer] a key for {#Items}
     # @return [String] item's udev rule
     def InitItemUdevRule(item_id)
       udev = GetItemUdevRule(item_id)
@@ -1037,7 +1037,7 @@
     # It goes through currently present devices and tries to mach it to given
     # old fashioned name
     #
-    # @returns [String] new style name in case of success. Given name 
otherwise.
+    # @return [String] new style name in case of success. Given name otherwise.
     def getDeviceName(oldname)
       newname = oldname
 
@@ -1171,7 +1171,7 @@
     # networking section the function requires hash map with whole AY profile 
hash
     # representation as returned by LanAutoClient#FromAY profile.
     #
-    # @param [Hash] AY profile converted into hash
+    # @param settings [Hash] AY profile converted into hash
     # @return [Boolean] on success
     def Import(settings)
       reset_cache
@@ -1345,7 +1345,7 @@
 
     # Returns the interfaces that are enslaved in the given bridge
     #
-    # @param [String] bridge name
+    # @param master [String] bridge name
     # @return [Array<String>] a list of interface names
     def bridge_slaves(master)
       bridge_index.select { |_k, v| v == master }.keys
@@ -1393,7 +1393,7 @@
     # It supports differents types of summaries depending on the options[:type]
     #
     # @see LanItemsSummary
-    # @param options [Hash] summary options
+    # @param type [Hash] summary options
     # @return [String] summary of the configured items
     def summary(type = "default")
       LanItemsSummary.new.send(type)
@@ -1682,7 +1682,6 @@
       NetworkInterfaces.GetFreeDevices(type, 10)
     end
 
-    # must be in sync with {#GetDefaultsForHW}
     def SetDefaultsForHW
       Builtins.y2milestone("SetDefaultsForHW type %1", @type)
       @mtu = "1492" if Arch.s390 && Builtins.contains(["lcs", "eth"], @type)
@@ -2327,7 +2326,7 @@
 
     # Creates eth emulation for s390 devices
     #
-    # @param [Hash] an s390 device description (e.g. as obtained from AY 
profile).
+    # @param dev_attrs [Hash] an s390 device description (e.g. as obtained 
from AY profile).
     # If it contains s390 device attributes definition, then these definitions 
takes
     # precendence over values assigned to corresponding LanItems' global 
variables
     # before the method invocation. Hash keys are strings named after LanItems'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/src/modules/Routing.rb 
new/yast2-network-4.0.30/src/modules/Routing.rb
--- old/yast2-network-4.0.25/src/modules/Routing.rb     2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/modules/Routing.rb     2018-04-25 
14:52:17.000000000 +0200
@@ -58,12 +58,12 @@
     #
     # @return [Array<Hash>] routing table entries
 
-    # @Orig_Routes [Array]        array of hashes. Caches known routes
+    # @attribute Orig_Routes [Array]        array of hashes. Caches known 
routes
     #
-    # @Orig_Forward_v4 [Boolean]  current status of ipv4 forwarding
-    # @Orig_Forward_v6 [Boolean]  current status of ipv6 forwarding
+    # @attribute Orig_Forward_v4 [Boolean]  current status of ipv4 forwarding
+    # @attribute Orig_Forward_v6 [Boolean]  current status of ipv6 forwarding
     #
-    # @modified [Boolean]         modified by AY (bnc#649494)
+    # @attribute modified [Boolean]         modified by AY (bnc#649494)
 
     # "routes" and ifroute-DEV file directory
     ROUTES_DIR  = "/etc/sysconfig/network".freeze
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.0.25/src/modules/SuSEFirewall4Network.rb 
new/yast2-network-4.0.30/src/modules/SuSEFirewall4Network.rb
--- old/yast2-network-4.0.25/src/modules/SuSEFirewall4Network.rb        
2018-04-06 19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/src/modules/SuSEFirewall4Network.rb        
2018-04-25 14:52:17.000000000 +0200
@@ -262,7 +262,7 @@
     # Function sets that a firewall proposal was changed by user
     # by editing firewall zone of network interface
     # (applicable during 2nd stage of installation only)
-    # @param boolean whether proposal was changed by user
+    # @param changed [Boolean] whether proposal was changed by user
     def ChangedByUser(changed)
       SuSEFirewallProposal.SetChangedByUser(changed) if Stage.cont
 
@@ -276,7 +276,7 @@
     end
 
     # Sets whether firewall should be enabled
-    # @param boolean new state
+    # @param enabled [Boolean] new state
     def SetEnabled1stStage(enabled)
       @firewall_enabled_1st_stage = enabled
 
@@ -290,7 +290,7 @@
     end
 
     # Sets whether SSH port should be opened in firewall
-    # @param boolean new state
+    # @param enabled [Boolean] new state
     def SetSshEnabled1stStage(enabled)
       @ssh_enabled_1st_stage = enabled
 
@@ -303,7 +303,7 @@
     end
 
     # Sets whether start sshd
-    # @param boolean new state
+    # @param enabled [Boolean] new state
     def SetSshdEnabled(enabled)
       @sshd_enabled = enabled
 
@@ -324,7 +324,7 @@
     end
 
     # Sets whether VNC ports should be opened in firewall
-    # @param boolean new state
+    # @param enabled [Boolean] new state
     def SetVncEnabled1stStage(enabled)
       @vnc_enabled_1st_stage = enabled
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.0.25/test/lan_test.rb 
new/yast2-network-4.0.30/test/lan_test.rb
--- old/yast2-network-4.0.25/test/lan_test.rb   2018-04-06 19:43:36.000000000 
+0200
+++ new/yast2-network-4.0.30/test/lan_test.rb   2018-04-25 14:52:17.000000000 
+0200
@@ -7,77 +7,60 @@
 Yast.import "Lan"
 
 describe "LanClass#Packages" do
-  packages = {
-    "iw"     => "wlan",
-    "vlan"   => "vlan",
-    "tunctl" => "tun"
-  }
-
-  packages.each do |pkg, type|
-    it "lists '#{pkg}' package for #{type} device" do
-      allow(Yast::NetworkInterfaces)
-        .to receive(:List)
-        .and_return([])
-      allow(Yast::NetworkInterfaces)
-        .to receive(:List)
-        .with(type)
-        .and_return(["place_holder"])
-      allow(Yast::NetworkInterfaces)
-        .to receive(:Locate)
-        .and_return([])
-      allow(Yast::NetworkService)
-        .to receive(:is_network_manager)
-        .and_return(false)
+  before(:each) do
+    allow(Yast::NetworkService)
+      .to receive(:is_network_manager)
+      .and_return(nm_enabled)
+  end
 
-      expect(Yast::PackageSystem)
+  context "When NetworkManager is not going to be installed" do
+    let(:nm_enabled) { false }
+
+    before(:each) do
+      allow(Yast::PackageSystem)
         .to receive(:Installed)
-        .with(pkg)
+        .with("wpa_supplicant")
         .at_least(:once)
         .and_return(false)
-      expect(Yast::Lan.Packages).to include pkg
     end
-  end
 
-  it "lists wpa_supplicant package when WIRELESS_AUTH_MODE is psk or eap" do
-    allow(Yast::NetworkInterfaces)
-      .to receive(:List)
-      .and_return([])
-    allow(Yast::NetworkService)
-      .to receive(:is_network_manager)
-      .and_return(false)
+    it "does not list wpa_supplicant package when WIRELESS_AUTH_MODE is not 
psk or eap" do
+      expect(Yast::NetworkInterfaces)
+        .to receive(:Locate)
+        .with("WIRELESS_AUTH_MODE", /(psk|eap)/)
+        .at_least(:once)
+        .and_return([])
+
+      expect(Yast::Lan.Packages).not_to include "wpa_supplicant"
+    end
+
+    it "lists wpa_supplicant package when WIRELESS_AUTH_MODE is psk or eap" do
+      # when checking options, LanClass#Packages currently cares only if
+      # WIRELESS_AUTH_MODE={psk, eap} is present
+      expect(Yast::NetworkInterfaces)
+        .to receive(:Locate)
+        .with("WIRELESS_AUTH_MODE", /(psk|eap)/)
+        .at_least(:once)
+        .and_return(["place_holder"])
 
-    # when checking options, LanClass#Packages currently cares only if
-    # WIRELESS_AUTH_MODE={psk, eap} is present
-    expect(Yast::NetworkInterfaces)
-      .to receive(:Locate)
-      .with("WIRELESS_AUTH_MODE", /(psk|eap)/)
-      .at_least(:once)
-      .and_return(["place_holder"])
-    expect(Yast::PackageSystem)
-      .to receive(:Installed)
-      .with("wpa_supplicant")
-      .at_least(:once)
-      .and_return(false)
-    expect(Yast::Lan.Packages).to include "wpa_supplicant"
+      expect(Yast::Lan.Packages).to include "wpa_supplicant"
+    end
   end
 
-  it "lists NetworkManager package when NetworkManager service is selected" do
-    allow(Yast::NetworkInterfaces)
-      .to receive(:List)
-      .and_return([])
-    allow(Yast::NetworkInterfaces)
-      .to receive(:Locate)
-      .and_return([])
+  context "When NetworkManager is selected for the target" do
+    let(:nm_enabled) { true }
 
-    expect(Yast::NetworkService)
-      .to receive(:is_network_manager)
-      .and_return(true)
-    expect(Yast::PackageSystem)
-      .to receive(:Installed)
-      .with("NetworkManager")
-      .at_least(:once)
-      .and_return(false)
-    expect(Yast::Lan.Packages).to include "NetworkManager"
+    it "lists NetworkManager package" do
+      expect(Yast::NetworkService)
+        .to receive(:is_network_manager)
+        .and_return(true)
+      expect(Yast::PackageSystem)
+        .to receive(:Installed)
+        .with("NetworkManager")
+        .at_least(:once)
+        .and_return(false)
+      expect(Yast::Lan.Packages).to include "NetworkManager"
+    end
   end
 end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.0.25/test/lib/y2remote/remote_test.rb 
new/yast2-network-4.0.30/test/lib/y2remote/remote_test.rb
--- old/yast2-network-4.0.25/test/lib/y2remote/remote_test.rb   2018-04-06 
19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/test/lib/y2remote/remote_test.rb   2018-04-25 
14:52:17.000000000 +0200
@@ -24,7 +24,9 @@
 
 describe Y2Remote::Remote do
   let(:vnc) { Y2Remote::Modes::Web.instance }
+  let(:manager) { Y2Remote::Modes::Manager.instance }
   let(:web) { Y2Remote::Modes::VNC.instance }
+  let(:display_manager) { Y2Remote::DisplayManager.instance }
   subject { described_class.instance }
 
   before do
@@ -84,10 +86,6 @@
   end
 
   describe ".enable_manager!" do
-    let(:web) { Y2Remote::Modes::Web.instance }
-    let(:manager) { Y2Remote::Modes::Manager.instance }
-    let(:vnc) { Y2Remote::Modes::VNC.instance }
-
     it "returns the current modes if already present" do
       allow(subject).to receive(:modes).and_return([manager, web])
       expect(subject.modes).to_not receive(:delete)
@@ -155,9 +153,6 @@
   end
 
   describe ".read" do
-    let(:vnc) { Y2Remote::Modes::VNC.instance }
-    let(:display_manager) { Y2Remote::DisplayManager.instance }
-
     it "returns true" do
       allow(display_manager).to receive(:enabled?).and_return(false)
 
@@ -297,4 +292,102 @@
       subject.reset!
     end
   end
+
+  describe ".restart_services" do
+    let(:modes) { [vnc, web] }
+
+    before do
+      allow(subject).to receive(:modes).and_return(modes)
+      allow(Yast::SystemdTarget).to receive(:set_default)
+      allow(display_manager).to receive(:restart)
+    end
+
+    context "when vnc is enabled" do
+      it "sets graphical as the default systemd target" do
+        expect(Yast::SystemdTarget).to receive(:set_default)
+          .with(Y2Remote::Remote::GRAPHICAL_TARGET)
+        subject.restart_services
+      end
+
+      it "starts the enabled modes and stops the rest" do
+        expect(Y2Remote::Modes).to receive(:restart_modes).with(modes)
+        subject.restart_services
+      end
+
+      it "restarts the display manager" do
+        expect(display_manager).to receive(:restart)
+        subject.restart_services
+      end
+    end
+
+    context "when vnc is disabled" do
+      let(:modes) { [] }
+
+      it "stops the running modes" do
+        expect(Y2Remote::Modes).to receive(:restart_modes).with(modes)
+        subject.restart_services
+      end
+    end
+  end
+
+  describe ".configure_display_manager" do
+    let(:modes) { [vnc, web] }
+    before do
+      allow(subject).to receive(:modes).and_return(modes)
+      allow(display_manager).to receive(:write_remote_access)
+      allow(Y2Remote::Modes).to receive(:update_status)
+    end
+
+    context "when vnc is disabled" do
+      let(:modes) { [] }
+
+      it "disables all the vnc modes that are still enabled" do
+        expect(Y2Remote::Modes).to receive(:update_status).with([])
+        subject.configure_display_manager
+      end
+
+      it "disables the remote access in the display manager" do
+        expect(display_manager).to receive(:write_remote_access).with(false)
+
+        subject.configure_display_manager
+      end
+    end
+
+    context "when vnc is enabled" do
+      before do
+        allow(Yast::Package).to receive(:InstallAll)
+        allow(subject).to receive(:required_packages).and_return("packages")
+      end
+
+      it "tries to install all the required packages for the enabled modes" do
+        expect(Yast::Package).to receive(:InstallAll).with("packages")
+
+        subject.configure_display_manager
+      end
+
+      context "if all the required packages are installed" do
+        before do
+          allow(Yast::Package).to receive(:InstallAll).and_return(true)
+        end
+
+        it "enables the configured vnc modes" do
+          expect(Y2Remote::Modes).to receive(:update_status).with([vnc, web])
+          subject.configure_display_manager
+        end
+
+        it "enables the remote access in the display manager" do
+          expect(display_manager).to receive(:write_remote_access).with(true)
+
+          subject.configure_display_manager
+        end
+      end
+
+      context "if some required package was not installed or available" do
+        it "returns false" do
+          expect(Yast::Package).to receive(:InstallAll).and_return(false)
+          subject.configure_display_manager
+        end
+      end
+    end
+  end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.0.25/test/lib/y2remote/widgets/remote_test.rb 
new/yast2-network-4.0.30/test/lib/y2remote/widgets/remote_test.rb
--- old/yast2-network-4.0.25/test/lib/y2remote/widgets/remote_test.rb   
2018-04-06 19:43:36.000000000 +0200
+++ new/yast2-network-4.0.30/test/lib/y2remote/widgets/remote_test.rb   
2018-04-25 14:52:17.000000000 +0200
@@ -150,6 +150,41 @@
   end
 
   describe Y2Remote::Widgets::RemoteFirewall do
+    let("firewall_widget") { { "help" => "", "custom_widget" => 
Yast::Term.new(:Empty) } }
     include_examples "CWM::CustomWidget"
+
+    before do
+      allow(Yast::CWMFirewallInterfaces).to receive(:CreateOpenFirewallWidget)
+        .and_return(firewall_widget)
+      allow(Yast::CWMFirewallInterfaces).to receive(:OpenFirewallInit)
+      allow(Yast::CWMFirewallInterfaces).to receive(:OpenFirewallHandle)
+      allow(Yast::CWMFirewallInterfaces).to receive(:StoreAllowedInterfaces)
+    end
+
+    describe ".new" do
+      it "initializes the widget" do
+        expect(Yast::CWMFirewallInterfaces).to 
receive(:CreateOpenFirewallWidget)
+          .with("services" => Y2Remote::Remote::FIREWALL_SERVICES, 
"display_details" => true)
+
+        described_class.new
+      end
+    end
+
+    describe ".handle" do
+      it "handles changes in the widget" do
+        expect(Yast::CWMFirewallInterfaces).to receive(:OpenFirewallHandle)
+          .with(firewall_widget, "", "event")
+        subject.handle("event")
+      end
+    end
+
+    describe ".store" do
+      it "enables vnc firewall services in the allowed interfaces" do
+        expect(Yast::CWMFirewallInterfaces).to receive(:StoreAllowedInterfaces)
+          .with(Y2Remote::Remote::FIREWALL_SERVICES)
+
+        subject.store
+      end
+    end
   end
 end


Reply via email to