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