Hello community,

here is the log from the commit of package yast2-network for openSUSE:Factory 
checked in at 2019-12-14 12:02:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-network (Old)
 and      /work/SRC/openSUSE:Factory/.yast2-network.new.4691 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "yast2-network"

Sat Dec 14 12:02:37 2019 rev:414 rq:753952 version:4.2.35

Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-network/yast2-network.changes      
2019-11-20 10:27:24.878564404 +0100
+++ /work/SRC/openSUSE:Factory/.yast2-network.new.4691/yast2-network.changes    
2019-12-14 12:02:54.975407783 +0100
@@ -1,0 +2,48 @@
+Wed Dec  4 09:51:38 UTC 2019 - Michal Filka <mfi...@suse.com>
+
+- bnc#1158122
+  - fixed internal error when incorrectly querying for hostname in
+    AY's second stage
+- 4.2.35 
+
+-------------------------------------------------------------------
+Tue Nov 26 15:16:04 UTC 2019 - Knut Anderssen <kanders...@suse.com>
+
+- Drop support for obsolete network device types (jsc#SLE-7753)
+- 4.2.34
+
+-------------------------------------------------------------------
+Mon Nov 25 15:02:38 UTC 2019 - Knut Anderssen <kanders...@suse.com>
+
+- Fix wireless mode and auth_mode initialization (bsc#1157394)
+- 4.2.33
+
+-------------------------------------------------------------------
+Mon Nov 25 09:36:43 UTC 2019 - Knut Anderssen <kanders...@suse.com>
+
+- Added a special type for the "Unknown" interfaces omitting them
+  from the interfaces list (bsc#1156285)
+- 4.2.32
+
+-------------------------------------------------------------------
+Mon Nov 25 08:34:55 UTC 2019 - Knut Anderssen <kanders...@suse.com>
+
+- Ignores invalid udev rules parts (bsc#1157361)
+- 4.2.31
+
+-------------------------------------------------------------------
+Thu Nov 21 10:57:33 UTC 2019 - Knut Alejandro Anderssen González 
<knut.anders...@suse.com>
+
+- Firsboot dhcp: Ensure the network configuration has been read
+  before trying to configure it by dhcp (bsc#1157429)
+- 4.2.30
+
+-------------------------------------------------------------------
+Thu Nov 21 07:13:28 UTC 2019 - Michal Filka <mfi...@suse.com>
+
+- bnc#1153198, fate#319639
+  - implemented proper hostname setup in installation for the new
+    backend
+- 4.2.29
+
+-------------------------------------------------------------------

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

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

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

Other differences:
------------------
++++++ yast2-network.spec ++++++
--- /var/tmp/diff_new_pack.ZgedDM/_old  2019-12-14 12:02:57.475407409 +0100
+++ /var/tmp/diff_new_pack.ZgedDM/_new  2019-12-14 12:02:57.479407409 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-network
-Version:        4.2.28
+Version:        4.2.35
 Release:        0
 Summary:        YaST2 - Network Configuration
 License:        GPL-2.0-only

++++++ yast2-network-4.2.28.tar.bz2 -> yast2-network-4.2.35.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.2.28/package/yast2-network.changes 
new/yast2-network-4.2.35/package/yast2-network.changes
--- old/yast2-network-4.2.28/package/yast2-network.changes      2019-11-19 
13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/package/yast2-network.changes      2019-12-04 
12:08:45.000000000 +0100
@@ -1,4 +1,52 @@
 -------------------------------------------------------------------
+Wed Dec  4 09:51:38 UTC 2019 - Michal Filka <mfi...@suse.com>
+
+- bnc#1158122
+  - fixed internal error when incorrectly querying for hostname in
+    AY's second stage
+- 4.2.35 
+
+-------------------------------------------------------------------
+Tue Nov 26 15:16:04 UTC 2019 - Knut Anderssen <kanders...@suse.com>
+
+- Drop support for obsolete network device types (jsc#SLE-7753)
+- 4.2.34
+
+-------------------------------------------------------------------
+Mon Nov 25 15:02:38 UTC 2019 - Knut Anderssen <kanders...@suse.com>
+
+- Fix wireless mode and auth_mode initialization (bsc#1157394)
+- 4.2.33
+
+-------------------------------------------------------------------
+Mon Nov 25 09:36:43 UTC 2019 - Knut Anderssen <kanders...@suse.com>
+
+- Added a special type for the "Unknown" interfaces omitting them
+  from the interfaces list (bsc#1156285)
+- 4.2.32
+
+-------------------------------------------------------------------
+Mon Nov 25 08:34:55 UTC 2019 - Knut Anderssen <kanders...@suse.com>
+
+- Ignores invalid udev rules parts (bsc#1157361)
+- 4.2.31
+
+-------------------------------------------------------------------
+Thu Nov 21 10:57:33 UTC 2019 - Knut Alejandro Anderssen González 
<knut.anders...@suse.com>
+
+- Firsboot dhcp: Ensure the network configuration has been read
+  before trying to configure it by dhcp (bsc#1157429)
+- 4.2.30
+
+-------------------------------------------------------------------
+Thu Nov 21 07:13:28 UTC 2019 - Michal Filka <mfi...@suse.com>
+
+- bnc#1153198, fate#319639
+  - implemented proper hostname setup in installation for the new
+    backend
+- 4.2.29
+
+-------------------------------------------------------------------
 Tue Nov 19 12:05:21 UTC 2019 - David Diaz <dgonza...@suse.com>
 
 - Do not crash when wrapping text (bsc#1157161)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.2.28/package/yast2-network.spec 
new/yast2-network-4.2.35/package/yast2-network.spec
--- old/yast2-network-4.2.28/package/yast2-network.spec 2019-11-19 
13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/package/yast2-network.spec 2019-12-04 
12:08:45.000000000 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-network
-Version:        4.2.28
+Version:        4.2.35
 Release:        0
 Summary:        YaST2 - Network Configuration
 License:        GPL-2.0-only
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/network/network_autoconfiguration.rb 
new/yast2-network-4.2.35/src/lib/network/network_autoconfiguration.rb
--- old/yast2-network-4.2.28/src/lib/network/network_autoconfiguration.rb       
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/network/network_autoconfiguration.rb       
2019-12-04 12:08:45.000000000 +0100
@@ -51,6 +51,7 @@
     end
 
     def configure_dhcp
+      Yast::Lan.Read(:cache)
       Yast.include self, "network/routines.rb" # TODO: needed only for 
phy_connected
 
       # find out network devices suitable for dhcp autoconfiguration.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.2.28/src/lib/network/wicked.rb 
new/yast2-network-4.2.35/src/lib/network/wicked.rb
--- old/yast2-network-4.2.28/src/lib/network/wicked.rb  2019-11-19 
13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/network/wicked.rb  2019-12-04 
12:08:45.000000000 +0100
@@ -41,15 +41,38 @@
     # @param iface [String] network device
     # @return [Array<String>] list of NTP servers
     def parse_ntp_servers(iface)
+      query_wicked(iface, "%{//ntp/server}")
+    end
+
+    # Parses wicked runtime configuration and returns hostname if set
+    #
+    # @param iface [String] network device
+    # @return [String] hostname
+    def parse_hostname(iface)
+      result = query_wicked(iface, "%{//hostname}")
+
+      raise "Malformed wicked runtime configuration" if result.count > 1
+
+      result.first
+    end
+
+    # Parses wicked runtime dhcp lease file for the given query
+    #
+    # It parses both ipv4 and ipv6 lease files at once.
+    #
+    # @param iface [String] queried interface
+    # @param query [String] xpath query
+    # @return [String] result of the query
+    def query_wicked(iface, query)
       raise ArgumentError, "A network device has to be specified" if 
iface.nil? || iface.empty?
-      if !NetworkService.is_wicked
-        raise "Parsing NTP Servers not supported for network service in use"
-      end
+      raise "Parsing not supported for network service in use" if 
!NetworkService.is_wicked
 
       lease_files = ["ipv4", "ipv6"].map { |ip| 
"/var/lib/wicked/lease-#{iface}-dhcp-#{ip}.xml" }
       lease_files.find_all { |f| File.file?(f) }.reduce([]) do |stack, file|
-        result = SCR.Execute(BASH_OUTPUT_PATH,
-          "/usr/sbin/wicked xpath --file #{file.shellescape} 
\"%{//ntp/server}\"")
+        result = SCR.Execute(
+          BASH_OUTPUT_PATH,
+          "/usr/sbin/wicked xpath --file #{file.shellescape} \"#{query}\""
+        )
 
         stack + result.fetch("stdout", "").split("\n")
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/connection_config/wireless.rb 
new/yast2-network-4.2.35/src/lib/y2network/connection_config/wireless.rb
--- old/yast2-network-4.2.28/src/lib/y2network/connection_config/wireless.rb    
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/connection_config/wireless.rb    
2019-12-04 12:08:45.000000000 +0100
@@ -26,8 +26,8 @@
       # wireless options
       #
       # FIXME: Consider an enum
-      # @return [String] (Ad-hoc, Managed, Master)
-      attr_accessor :mode
+      # @return [String] (ad-hoc, managed, master)
+      attr_reader :mode
       # @return [String]
       attr_accessor :essid
       # @return [String] Network ID
@@ -77,7 +77,7 @@
       def initialize
         super
 
-        self.mode = "Managed"
+        self.mode = "managed"
         self.essid = ""
         self.nwid = ""
         self.auth_mode = :open
@@ -102,6 +102,11 @@
           public_send(method) == other.public_send(method)
         end
       end
+
+      # @param wireless_mode [String]
+      def mode=(wireless_mode)
+        @mode = wireless_mode.to_s.downcase
+      end
     end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.2.28/src/lib/y2network/dns.rb 
new/yast2-network-4.2.35/src/lib/y2network/dns.rb
--- old/yast2-network-4.2.28/src/lib/y2network/dns.rb   2019-11-19 
13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/dns.rb   2019-12-04 
12:08:45.000000000 +0100
@@ -25,6 +25,9 @@
     # @return [String] Hostname (local part)
     attr_accessor :hostname
 
+    # @return [Boolean] Controls if the hostname should be written or not
+    attr_accessor :save_hostname
+
     # @return [Array<IPAddr>] List of nameservers
     attr_accessor :nameservers
 
@@ -49,6 +52,7 @@
     # @option opts [Boolean] :dhcp_hostname
     def initialize(opts = {})
       @hostname = opts[:hostname]
+      @save_hostname = opts.fetch(:save_hostname, true)
       @nameservers = opts[:nameservers] || []
       @searchlist = opts[:searchlist] || []
       @resolv_conf_policy = opts[:resolv_conf_policy]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/hostname_reader.rb 
new/yast2-network-4.2.35/src/lib/y2network/hostname_reader.rb
--- old/yast2-network-4.2.28/src/lib/y2network/hostname_reader.rb       
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/hostname_reader.rb       
2019-12-04 12:08:45.000000000 +0100
@@ -18,11 +18,14 @@
 # find current contact information at www.suse.com.
 
 require "yast"
+require "y2network/config"
+require "y2network/sysconfig/interface_file"
+require "network/wicked"
 
 Yast.import "FileUtils"
 Yast.import "Hostname"
 Yast.import "IP"
-Yast.import "Mode"
+Yast.import "Stage"
 Yast.import "NetHwDetection"
 
 module Y2Network
@@ -34,20 +37,23 @@
   # @example Read hostname
   #   Y2Network::HostnameReader.new.hostname #=> "foo"
   class HostnameReader
+    attr_reader :install_inf_hostname
+
     include Yast::Logger
+    include Yast::Wicked
 
     # Returns the hostname
     #
-    # @note If the hostname cannot be determined, generate a random one.
+    # @note If the hostname cannot be determined, generate a random one
+    # in installed system (do not generate one in the installer).
     #
     # @return [String]
     def hostname
-      if (Yast::Mode.installation || Yast::Mode.autoinst) &&
-          Yast::FileUtils.Exists("/etc/install.inf")
-        fqdn = hostname_from_install_inf
+      if Yast::Stage.initial
+        hostname_for_installer
+      else
+        hostname_for_running_system
       end
-
-      fqdn || hostname_from_system || random_hostname
     end
 
     # Reads the hostname from the /etc/install.inf file
@@ -71,16 +77,38 @@
       host.empty? ? nil : host
     end
 
-    # Reads the hostname from the underlying system
+    # Reads the hostname known to the resolver
     #
     # @return [String] Hostname
-    def hostname_from_system
+    def hostname_from_resolver
       Yast::Execute.on_target!("/usr/bin/hostname", "--fqdn", stdout: 
:capture).strip
+    end
+
+    # Reads the system (local) hostname
+    #
+    # @return [String, nil] Hostname
+    def hostname_from_system
+      Yast::Execute.on_target!("/usr/bin/hostname", stdout: :capture).strip
     rescue Cheetah::ExecutionFailed
       name = Yast::SCR.Read(Yast::Path.new(".target.string"), 
"/etc/hostname").to_s.strip
       name.empty? ? nil : name
     end
 
+    # Queries for hostname obtained as part of dhcp configuration
+    #
+    # @return [String, nil] Hostname
+    def hostname_from_dhcp
+      # We currently cannot use connections for getting only dhcp aware 
configurations here
+      # bcs this can be called during Y2Network::Config initialization and 
this is
+      # acceptable replacement for this case.
+      ifaces = Sysconfig::InterfaceFile.all.map(&:interface)
+      dhcp_hostname = ifaces.map { |i| parse_hostname(i) }.compact.first
+
+      log.info("Hostname obtained from DHCP: #{dhcp_hostname}")
+
+      dhcp_hostname
+    end
+
     # @return [Array<String>] Valid chars to be used in the random part of a 
hostname
     HOSTNAME_CHARS = (("a".."z").to_a + ("0".."9").to_a).freeze
     private_constant :HOSTNAME_CHARS
@@ -94,5 +122,26 @@
       suffix = HOSTNAME_CHARS.sample(4).join
       "linux-#{suffix}"
     end
+
+  private
+
+    # Runs workflow for querying hostname in the installer
+    #
+    # @return [String] Hostname
+    def hostname_for_installer
+      @install_inf_hostname = hostname_from_install_inf
+
+      # the hostname was either explicitly set by the user, obtained from dhcp 
or implicitly
+      # preconfigured by the linuxrc (install). Do not generate random one as 
we did in the past.
+      # See FATE#319639 for details.
+      @install_inf_hostname || hostname_from_dhcp || hostname_from_system
+    end
+
+    # Runs workflow for querying hostname in the installed system
+    #
+    # @return [String] Hostname
+    def hostname_for_running_system
+      hostname_from_system || hostname_from_resolver || random_hostname
+    end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/interface_type.rb 
new/yast2-network-4.2.35/src/lib/y2network/interface_type.rb
--- old/yast2-network-4.2.28/src/lib/y2network/interface_type.rb        
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/interface_type.rb        
2019-12-04 12:08:45.000000000 +0100
@@ -19,6 +19,8 @@
 
 require "yast"
 
+Yast.import "Arch"
+
 module Y2Network
   # This class represents the interface types which are supported.
   # Class have helpers to check if given type is what needed. It check name 
and also short name:
@@ -40,6 +42,13 @@
           .select { |c| c.is_a?(InterfaceType) }
       end
 
+      # Returns all the supported interfaces for the current architecture
+      #
+      # @return [Array<InterfaceType>] Interface types
+      def supported
+        SUPPORTED_COMMON + (Yast::Arch.s390 ? SUPPORTED_S390 : 
UNSUPPORTED_S390)
+      end
+
       # Returns the interface type with a given short name
       #
       # @param short_name [String] Short name
@@ -149,5 +158,11 @@
     IRDA = new(N_("Infrared"), "irda")
     # Loopback
     LO = new(N_("Loopback"), "lo")
+    # Unknown interfaces
+    UNKNOWN = new(N_("Unknown"), "unknown")
+
+    SUPPORTED_COMMON = [ETHERNET, VLAN, BRIDGE, TUN, TAP, BONDING].freeze
+    SUPPORTED_S390 = [HSI, CTC, FICON, QETH, LCS].freeze
+    UNSUPPORTED_S390 = [DUMMY, WIRELESS, INFINIBAND].freeze
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/sysconfig/dns_reader.rb 
new/yast2-network-4.2.35/src/lib/y2network/sysconfig/dns_reader.rb
--- old/yast2-network-4.2.28/src/lib/y2network/sysconfig/dns_reader.rb  
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/sysconfig/dns_reader.rb  
2019-12-04 12:08:45.000000000 +0100
@@ -21,6 +21,8 @@
 require "y2network/sysconfig/interface_file"
 require "y2network/hostname_reader"
 
+Yast.import "Mode"
+
 module Y2Network
   module Sysconfig
     # Reads DNS configuration from sysconfig files
@@ -31,9 +33,11 @@
       #
       # @return [Y2Network::DnsConfig] DNS configuration
       def config
+        installer = Yast::Mode.installation || Yast::Mode.autoinst
         Y2Network::DNS.new(
           nameservers:        nameservers,
           hostname:           hostname,
+          save_hostname:      !installer || hostname_from_install_inf?,
           searchlist:         searchlist,
           resolv_conf_policy: resolv_conf_policy,
           dhcp_hostname:      dhcp_hostname
@@ -75,7 +79,15 @@
       #
       # @return [String]
       def hostname
-        HostnameReader.new.hostname
+        @hostname_reader = HostnameReader.new
+        @hostname_reader.hostname
+      end
+
+      # Checks whether the hostname was read from install.inf
+      #
+      # @return [Boolean]
+      def hostname_from_install_inf?
+        !@hostname_reader.install_inf_hostname.nil?
       end
 
       # Return the list of search domains
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/sysconfig/dns_writer.rb 
new/yast2-network-4.2.35/src/lib/y2network/sysconfig/dns_writer.rb
--- old/yast2-network-4.2.28/src/lib/y2network/sysconfig/dns_writer.rb  
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/sysconfig/dns_writer.rb  
2019-12-04 12:08:45.000000000 +0100
@@ -36,7 +36,7 @@
         return if old_dns && dns == old_dns
 
         update_sysconfig_dhcp(dns, old_dns)
-        update_hostname(dns)
+        update_hostname(dns) if dns.save_hostname
         update_mta_config
         update_sysconfig_config(dns, netconfig_update: netconfig_update)
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/sysconfig/interface_file.rb 
new/yast2-network-4.2.35/src/lib/y2network/sysconfig/interface_file.rb
--- old/yast2-network-4.2.28/src/lib/y2network/sysconfig/interface_file.rb      
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/sysconfig/interface_file.rb      
2019-12-04 12:08:45.000000000 +0100
@@ -228,8 +228,8 @@
       define_variable(:wireless_auth_mode, :symbol)
 
       # @!attribute [r] wireless_mode
-      #  @return [Symbol] Operating mode for the device (:managed, :ad_hoc or 
:master)
-      define_variable(:wireless_mode, :symbol)
+      #  @return [String] Operating mode for the device (managed, ad-hoc or 
master)
+      define_variable(:wireless_mode, :string)
 
       # @!attribute [r] wireless_wpa_password
       #  @return [String] Password as configured on the RADIUS server (for 
WPA-EAP)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/sysconfig/interfaces_reader.rb 
new/yast2-network-4.2.35/src/lib/y2network/sysconfig/interfaces_reader.rb
--- old/yast2-network-4.2.28/src/lib/y2network/sysconfig/interfaces_reader.rb   
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/sysconfig/interfaces_reader.rb   
2019-12-04 12:08:45.000000000 +0100
@@ -81,9 +81,13 @@
       def find_physical_interfaces
         return if @interfaces
 
-        physical_interfaces = Hwinfo.netcards.map do |h|
-          build_physical_interface(h)
+        physical_interfaces = Hwinfo.netcards.each_with_object([]) do |hwinfo, 
interfaces|
+          physical_interface = build_physical_interface(hwinfo)
+          next if physical_interface.type == InterfaceType::UNKNOWN
+
+          interfaces << physical_interface
         end
+
         @interfaces = Y2Network::InterfacesCollection.new(physical_interfaces)
       end
 
@@ -123,7 +127,7 @@
           iface.renaming_mechanism = renaming_mechanism_for(iface)
           iface.custom_driver = custom_driver_for(iface)
           iface.type = InterfaceType.from_short_name(hwinfo.type) ||
-            TypeDetector.type_of(iface.name)
+            TypeDetector.type_of(iface.name) || InterfaceType::UNKNOWN
         end
       end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/sysconfig/type_detector.rb 
new/yast2-network-4.2.35/src/lib/y2network/sysconfig/type_detector.rb
--- old/yast2-network-4.2.28/src/lib/y2network/sysconfig/type_detector.rb       
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/sysconfig/type_detector.rb       
2019-12-04 12:08:45.000000000 +0100
@@ -31,6 +31,8 @@
         # Checks wheter iface type can be recognized by interface configuration
         def type_by_config(iface)
           iface_file = Y2Network::Sysconfig::InterfaceFile.find(iface)
+          return unless iface_file
+
           iface_file.load
           iface_file.type
         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-network-4.2.28/src/lib/y2network/udev_rule.rb 
new/yast2-network-4.2.35/src/lib/y2network/udev_rule.rb
--- old/yast2-network-4.2.28/src/lib/y2network/udev_rule.rb     2019-11-19 
13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/udev_rule.rb     2019-12-04 
12:08:45.000000000 +0100
@@ -192,7 +192,7 @@
 
         rules_map = 
Yast::SCR.Read(Yast::Path.new(".udev_persistent.#{group}")) || {}
         @all[group] = rules_map.values.map do |parts|
-          udev_parts = parts.map { |p| UdevRulePart.from_string(p) }
+          udev_parts = parts.map { |p| UdevRulePart.from_string(p) }.compact
           new(udev_parts)
         end
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/udev_rule_part.rb 
new/yast2-network-4.2.35/src/lib/y2network/udev_rule_part.rb
--- old/yast2-network-4.2.28/src/lib/y2network/udev_rule_part.rb        
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/udev_rule_part.rb        
2019-12-04 12:08:45.000000000 +0100
@@ -17,12 +17,15 @@
 # To contact SUSE LLC about this file by physical or electronic mail, you may
 # find current contact information at www.suse.com.
 
+require "yast"
+
 module Y2Network
   # Simple class to represent a key-value pair in a {UdevRule}.
   #
   # This class does not check whether operators or keys/values are valid or 
not. We can implement
   # that logic later if required.
   class UdevRulePart
+    include Yast::Logger
     # Regular expression to match a udev rule part
     PART_REGEXP = 
Regexp.new("\\A(?<key>[A-Za-z\{\}]+)(?<operator>[^\"]+)\"(?<value>.+)\"\\Z")
 
@@ -45,7 +48,11 @@
       # @return [UdevRulePart] udev rule object
       def from_string(str)
         match = PART_REGEXP.match(str)
-        return if match.nil?
+
+        if match.nil?
+          log.info("Not matching udev rule: #{str}")
+          return
+        end
 
         new(match[:key], match[:operator], match[:value])
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/widgets/interface_type.rb 
new/yast2-network-4.2.35/src/lib/y2network/widgets/interface_type.rb
--- old/yast2-network-4.2.28/src/lib/y2network/widgets/interface_type.rb        
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/widgets/interface_type.rb        
2019-12-04 12:08:45.000000000 +0100
@@ -19,8 +19,7 @@
 
 require "yast"
 require "cwm/common_widgets"
-
-Yast.import "NetworkInterfaces"
+require "y2network/interface_type"
 
 module Y2Network
   module Widgets
@@ -49,8 +48,8 @@
       end
 
       def items
-        Yast::NetworkInterfaces.GetDeviceTypes.map do |type|
-          [type, Yast::NetworkInterfaces.GetDevTypeDescription(type, 
_long_desc = false)]
+        Y2Network::InterfaceType.supported.map do |type|
+          [type.short_name, type.to_human_string]
         end
       end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/widgets/wireless.rb 
new/yast2-network-4.2.35/src/lib/y2network/widgets/wireless.rb
--- old/yast2-network-4.2.28/src/lib/y2network/widgets/wireless.rb      
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/widgets/wireless.rb      
2019-12-04 12:08:45.000000000 +0100
@@ -66,10 +66,10 @@
         encryption_widget.enable
         case auth_mode_widget.value
         when "wpa-eap"
-          mode_widget.value = "Managed"
+          mode_widget.value = "managed"
           encryption_widget.disable
         when "wpa-psk"
-          mode_widget.value = "Managed"
+          mode_widget.value = "managed"
         when "wep"
           encryption_widget.disable
           wep_keys_widget.enable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/widgets/wireless_auth_mode.rb 
new/yast2-network-4.2.35/src/lib/y2network/widgets/wireless_auth_mode.rb
--- old/yast2-network-4.2.28/src/lib/y2network/widgets/wireless_auth_mode.rb    
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/widgets/wireless_auth_mode.rb    
2019-12-04 12:08:45.000000000 +0100
@@ -29,7 +29,7 @@
       end
 
       def init
-        self.value = @settings.auth_mode
+        self.value = @settings.auth_mode.to_s if @settings.auth_mode
       end
 
       def label
@@ -58,7 +58,7 @@
       end
 
       def store
-        @settings.auth_mode = value
+        @settings.auth_mode = value.to_sym
       end
     end
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/src/lib/y2network/widgets/wireless_mode.rb 
new/yast2-network-4.2.35/src/lib/y2network/widgets/wireless_mode.rb
--- old/yast2-network-4.2.28/src/lib/y2network/widgets/wireless_mode.rb 
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/src/lib/y2network/widgets/wireless_mode.rb 
2019-12-04 12:08:45.000000000 +0100
@@ -49,7 +49,7 @@
       def items
         [
           ["ad-hoc", _("Ad-hoc")],
-          ["Managed", _("Managed")],
+          ["managed", _("Managed")],
           ["master", _("Master")]
         ]
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/test/y2network/hostname_reader_test.rb 
new/yast2-network-4.2.35/test/y2network/hostname_reader_test.rb
--- old/yast2-network-4.2.28/test/y2network/hostname_reader_test.rb     
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/test/y2network/hostname_reader_test.rb     
2019-12-04 12:08:45.000000000 +0100
@@ -25,12 +25,16 @@
 
   describe "#hostname" do
     let(:install_inf_hostname) { "linuxrc" }
+    let(:dhcp_hostname) { "dhcp" }
     let(:system_hostname) { "system" }
+    let(:resolver_hostname) { "system.suse.de" }
 
     before do
       allow(reader).to 
receive(:hostname_from_install_inf).and_return(install_inf_hostname)
+      allow(reader).to receive(:hostname_from_dhcp).and_return(dhcp_hostname)
       allow(reader).to 
receive(:hostname_from_system).and_return(system_hostname)
       allow(reader).to receive(:random_hostname).and_return("linux-abcd")
+      allow(reader).to 
receive(:hostname_from_resolver).and_return(resolver_hostname)
     end
 
     it "returns the system's hostname" do
@@ -39,6 +43,7 @@
 
     context "when the hostname cannot be determined" do
       let(:system_hostname) { nil }
+      let(:resolver_hostname) { nil }
 
       it "returns a random one" do
         expect(reader.hostname).to eq("linux-abcd")
@@ -49,9 +54,7 @@
       let(:install_inf_exists?) { true }
 
       before do
-        allow(Yast::Mode).to receive(:installation).and_return(true)
-        allow(Yast::FileUtils).to receive(:Exists).with("/etc/install.inf")
-          .and_return(install_inf_exists?)
+        allow(Yast::Stage).to receive(:initial).and_return(true)
       end
 
       it "reads the hostname from /etc/install.conf" do
@@ -59,19 +62,33 @@
       end
 
       context "when the /etc/install.inf file does not exists" do
-        let(:install_inf_exists?) { false }
+        let(:install_inf_hostname) { nil }
+
+        context "but was set by dhcp" do
+          it "reads the hostname from dhcp" do
+            expect(reader.hostname).to eq("dhcp")
+          end
+        end
+
+        context "and was not set by dhcp" do
+          let(:dhcp_hostname) { nil }
 
-        it "reads the hostname from the system" do
-          expect(reader.hostname).to eq("system")
+          it "reads the hostname from system" do
+            expect(reader.hostname).to eq("system")
+          end
         end
       end
 
       context "when the hostname cannot be determined" do
         let(:install_inf_hostname) { nil }
+        let(:dhcp_hostname) { nil }
         let(:system_hostname) { nil }
 
-        it "returns a random one" do
-          expect(reader.hostname).to eq("linux-abcd")
+        it "do not make any proposal" do
+          # linuxrc currently always set hostname to default "install"
+          # so this should never happen in real life as we should always
+          # read the "install" hostname from system
+          expect(reader.hostname).to be nil
         end
       end
     end
@@ -120,17 +137,17 @@
   describe "#hostname_from_system" do
     it "returns the systems' hostname" do
       expect(Yast::Execute).to receive(:on_target!)
-        .with("/usr/bin/hostname", "--fqdn", stdout: :capture)
+        .with("/usr/bin/hostname", stdout: :capture)
         .and_return("foo\n")
       expect(reader.hostname_from_system).to eq("foo")
     end
 
-    context "when the fqdn cannot be determined" do
+    context "when the hostname cannot be determined" do
       let(:hostname_content) { "bar\n" }
 
       before do
         allow(Yast::Execute).to receive(:on_target!)
-          .with("/usr/bin/hostname", "--fqdn", stdout: :capture)
+          .with("/usr/bin/hostname", stdout: :capture)
           .and_raise(Cheetah::ExecutionFailed.new([], "", nil, nil))
         allow(Yast::SCR).to 
receive(:Read).with(Yast::Path.new(".target.string"), "/etc/hostname")
           .and_return(hostname_content)
@@ -150,6 +167,30 @@
     end
   end
 
+  describe "hostname_from_dhcp" do
+    before(:each) do
+      allow(Yast::NetworkService).to receive(:is_wicked).and_return(true)
+
+      allow(File).to receive(:file?).and_return(false)
+    end
+
+    around { |e| change_scr_root(File.join(DATA_PATH, "scr_read"), &e) }
+
+    it "returns name provided as part of dhcp configuration when available on 
any interface" do
+      allow(File)
+        .to receive(:file?)
+        .with("/var/lib/wicked/lease-eth4-dhcp-ipv4.xml")
+        .and_return(true)
+      allow(Yast::SCR).to receive(:Execute).and_return("stdout" => 
"tumbleweed\n")
+
+      expect(reader.hostname_from_dhcp).to eql "tumbleweed"
+    end
+
+    it "returns nil when no hostname was obtained from dhcp" do
+      expect(reader.hostname_from_dhcp).to be_nil
+    end
+  end
+
   describe "#random_hostname" do
     it "returns a random name" do
       expect(reader.random_hostname).to match(/linux-\w{4}/)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/test/y2network/interface_type_test.rb 
new/yast2-network-4.2.35/test/y2network/interface_type_test.rb
--- old/yast2-network-4.2.28/test/y2network/interface_type_test.rb      
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/test/y2network/interface_type_test.rb      
2019-12-04 12:08:45.000000000 +0100
@@ -18,6 +18,7 @@
 # find current contact information at www.suse.com.
 
 require_relative "../test_helper"
+require "y2network/interface_type"
 
 describe Y2Network::InterfaceType do
   subject(:ethernet) { described_class.from_short_name("eth") }
@@ -36,6 +37,35 @@
     end
   end
 
+  describe ".supported" do
+
+    before do
+      allow(Yast::Arch).to receive(:s390).and_return(on_s390)
+    end
+
+    context "when not running on s390 architecture" do
+      let(:on_s390) { false }
+
+      it "returns all supported interface types except the s390 specific" do
+        supported_interfaces = described_class.supported
+        expect(supported_interfaces).to 
include(Y2Network::InterfaceType::ETHERNET)
+        expect(supported_interfaces).to 
include(Y2Network::InterfaceType::DUMMY)
+        expect(supported_interfaces).to_not 
include(Y2Network::InterfaceType::QETH)
+      end
+    end
+
+    context "when running on s390 architecture" do
+      let(:on_s390) { true }
+
+      it "returns s390 supported interface types" do
+        supported_interfaces = described_class.supported
+        expect(supported_interfaces).to include(Y2Network::InterfaceType::QETH)
+        expect(supported_interfaces).to include(Y2Network::InterfaceType::VLAN)
+        expect(supported_interfaces).to_not 
include(Y2Network::InterfaceType::WIRELESS)
+      end
+    end
+  end
+
   describe "#<name>?" do
     it "returns true if name is same as in method name" do
       expect(ethernet.ethernet?).to eq true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/test/y2network/sysconfig/connection_config_readers/wireless_test.rb
 
new/yast2-network-4.2.35/test/y2network/sysconfig/connection_config_readers/wireless_test.rb
--- 
old/yast2-network-4.2.28/test/y2network/sysconfig/connection_config_readers/wireless_test.rb
        2019-11-19 13:31:29.000000000 +0100
+++ 
new/yast2-network-4.2.35/test/y2network/sysconfig/connection_config_readers/wireless_test.rb
        2019-12-04 12:08:45.000000000 +0100
@@ -48,7 +48,7 @@
       wlan = handler.connection_config
       expect(wlan).to have_attributes(
         interface:    "wlan0",
-        mode:         :managed,
+        mode:         "managed",
         essid:        "example_ssid",
         ap_scanmode:  "1",
         auth_mode:    :eap,
@@ -110,7 +110,7 @@
       wlan = handler.connection_config
       expect(wlan).to have_attributes(
         auth_mode: :open,
-        mode:      :managed
+        mode:      "managed"
       )
     end
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/test/y2network/sysconfig/interfaces_reader_test.rb 
new/yast2-network-4.2.35/test/y2network/sysconfig/interfaces_reader_test.rb
--- old/yast2-network-4.2.28/test/y2network/sysconfig/interfaces_reader_test.rb 
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/test/y2network/sysconfig/interfaces_reader_test.rb 
2019-12-04 12:08:45.000000000 +0100
@@ -24,7 +24,7 @@
 describe Y2Network::Sysconfig::InterfacesReader do
   subject(:reader) { described_class.new }
 
-  let(:netcards) { [eth0] }
+  let(:netcards) { [eth0, iucv] }
 
   let(:eth0) do
     {
@@ -34,6 +34,16 @@
     }
   end
 
+  let(:iucv) do
+    {
+      "name" => "IUCV (netiucv)", "type" => "iucv", "sysfs_id" => 
"/bus/iucv/devices/netiucv",
+      "dev_name" => "", "modalias" => "", "unique" => "jPaU.W3A5djgRqRC", 
"driver" => "",
+      "drivers" => [{ "active" => true, "modprobe" => true, "modules" => 
[["netiucv", ""]] }],
+      "active" => true, "module" => "netiucv", "bus" => "iucv", "busid" => 
"netiucv",
+      "mac" => "", "link" => nil
+    }
+  end
+
   let(:udev_rule) do
     Y2Network::UdevRule.new(
       [
@@ -52,8 +62,6 @@
   before do
     allow(hardware_wrapper).to receive(:ReadHardware).and_return(netcards)
     allow(Y2Network::HardwareWrapper).to 
receive(:new).and_return(hardware_wrapper)
-    allow(Yast::SCR).to receive(:Dir).with(Yast::Path.new(".network.section"))
-      .and_return(configured_interfaces)
     allow(Yast::SCR).to receive(:Dir).and_call_original
     allow(Yast::NetworkInterfaces).to receive(:GetTypeFromSysfs) { |n| 
TYPES[n] }
     allow(Y2Network::UdevRule).to receive(:find_for).and_return(udev_rule)
@@ -63,6 +71,7 @@
   around { |e| change_scr_root(File.join(DATA_PATH, "scr_read"), &e) }
 
   describe "#interfaces" do
+
     it "reads physical interfaces" do
       interfaces = reader.interfaces
       expect(interfaces.by_name("eth0")).to_not be_nil
@@ -78,6 +87,18 @@
     it "reads bonding interfaces"
     it "reads interfaces configuration"
 
+    context "when a physical interface type is unknown" do
+      before do
+        allow(Yast::SCR).to 
receive(:Dir).with(Yast::Path.new(".network.section"))
+          .and_return(configured_interfaces)
+      end
+
+      it "ignores that interface" do
+        interfaces = reader.interfaces
+        expect(interfaces.size).to eq(1)
+      end
+    end
+
     context "when a connection for a not existing device is found" do
       let(:configured_interfaces) { ["lo", "eth0", "eth1"] }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-network-4.2.28/test/y2network/udev_rule_part_test.rb 
new/yast2-network-4.2.35/test/y2network/udev_rule_part_test.rb
--- old/yast2-network-4.2.28/test/y2network/udev_rule_part_test.rb      
2019-11-19 13:31:29.000000000 +0100
+++ new/yast2-network-4.2.35/test/y2network/udev_rule_part_test.rb      
2019-12-04 12:08:45.000000000 +0100
@@ -34,6 +34,11 @@
       expect(part.operator).to eq("==")
       expect(part.value).to eq("add")
     end
+
+    it "returns nil in case of an invalid udev rule" do
+      part = described_class.from_string("ENV{MODALIAS}==\"\"")
+      expect(part).to be_nil
+    end
   end
 
   describe "#to_s" do


Reply via email to